VGhlIGZvbGxvd2luZyBoYXZlIG1hZGUgbWlub3IgY29udHJpYnV0aW9ucyB0byB0aGUgQ2xhc3NwYXRoCnByb2plY3QsIHN1Y2ggYXMgdGVzdGluZywgYnVnIHN1Ym1pc3Npb24sIG9yIG1pbm9yIHBhdGNoZXMuIFNlZSBhbHNvCnRoZSBBVVRIT1JTIGZpbGUsIHdoaWNoIGxpc3RzIHBlb3BsZSB3aG8gaGF2ZSBzdWJtaXR0ZWQgbWFqb3IKcGF0Y2hlcy4gSWYgeW91ciBuYW1lIGRvZXMgbm90IGFwcGVhciBvbiBlaXRoZXIgbGlzdCwgYnV0IHNob3VsZCwgbGV0CnVzIGtub3cuIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbiBhbHBoYWJldGljIG9yZGVyLgoKQy4gU2NvdHQgQW5hbmlhbiAoY2FuYW5pYW5AbGVzc2VyLW1hZ29vLmxjcy5taXQuZWR1KQpYdWFuIEJhbGRhdWYgKGVudHdpY2tsdW5nLS1jbGFzc3BhdGgtLWdudS5vcmdAbWVkaXVtLm5ldCkKQXJ0dXIgQmllc2lhZG93c2tpIChhYmllc0BwZy5nZGEucGwpClBlciBCb3RobmVyIChwZXJAYm90aG5lci5jb20pCkNhcmxvcyBDYXZhbm5hIChjZGNhdmFubmFAeWFob28uY29tKQpBcmNoaWUgQ29iYnMgKGFyY2hpZUBwcmVjaXNpb25pby5jb20pClN0ZXBoZW4gQ3Jhd2xleSAoY3Jhd2xleUBkc3RjLmVkdS5hdSkKTW9zZXMgRGVKb25nIChkZWpvbmdAY3MudW1uLmVkdSkKUGF0cmljayBEb3lsZSAoZG95bGVwQGVlY2cudG9yb250by5lZHUpCkp1bGlhbiBEb2xieSAoZG9sYnlAdXMuaWJtLmNvbSkKUmFpbWFyIEZhbGtlIChoYXdrQGhhd2suc2hlZi5hYy51aykKUGF1bCBGZXJuaG91dCAocGRmZXJuaG91dEBrdXJ0ei1mZXJuaG91dC5jb20pClBoaWxpcCBGb25nIChwd2xmb25nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkKSmVyb2VuIEZyaWp0ZXJzIChqZXJvZW5Ac3VtYXRyYS5ubCkKRXRpZW5uZSBNLiBHYWdub24gKGV0aWVubmUuZ2Fnbm9uQHVxYW0uY2EpCkJyaWFuIEdvdWdoIChiamdAbmV0d29yay10aGVvcnkuY29tKQpGcmVkIEdyYXkgKGZlZ3JheUBucGwudWl1Yy5lZHUpCkNocmlzdGlhbiBHcm90aG9mZiA8Z3JvdGhvZmZAY3MucHVyZHVlLmVkdT4KRGF2aWQgUC4gR3JvdmUgKGdyb3ZlZEB1cy5pYm0uY29tKQpBbmRyZXcgSGFsZXkgKGFwaEByZWRoYXQuY29tKQpTdGV2ZW4gSHVnZyAoaHVnZ0Bwb2JveC5jb20pCmpvY2tleUBhcm9tYXNvZnQuY29tCklzYWFjIEpvbmVzIChpam9uZXNAY2lzLm9oaW8tc3RhdGUuZWR1KQpCeWVvZ25jaGVvbCBMZWUgKGxpbmVvbmtpbmdAZ21haWwuY29tKQpPc2thciBMaWxqZWJsYWQgKG9za0BoZW0ucGFzc2FnZW4uc2UpClRyZXZvciBMaW50b24gKHRsaW50b25AeG1pc3Npb24uY29tKQpDYXNleSBNYXJzaGFsbCAocnNkaW9AbWV0YXN0YXRpYy5vcmcpClN0ZXZlIE1heWVyIChTTWF5ZXJAZHluYW1pY3NvZnQuY29tKQpNYXR0IE11Y2tsbyAobW11Y2tsb0BqdW1wc21hcnQuY29tKQpKb3NlcGggUy4gTXllcnMgKGpzbTI4QGNhbS5hYy51aykKUmFpZiBTLiBOYWZmYWggKHJhaWZAZmwubmV0LmF1KQpTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pClRha2FzaGkgT2thbW90byAodG9yYUBkZWJpYW4ub3JnKQpBbGV4YW5kcmUgT2xpdmEgKG9saXZhQGRjYy51bmljYW1wLmJyKQpEYW5pZWwgUmFsbChkbHJAd2VzdC5uZXQpClBhdHJpayBSZWFsaSAocmVhbGlAaW5mLmV0aHouY2gpClBldHRlciBSZWluaG9sZHRzZW4gKHBlcmVAaHVuZ3J5LmNvbSkKSnVsaWFuIFNjaGVpZCAoanVsaWFuLnNjaGVpZEBzZWt0b3IzNy5kZSkKTWFydGluIFNjaHL2ZGVyIChtc0BhcnRjb20tZ21iaC5kZSkKUm9iZXJ0IFNjaHVzdGVyIChyb2JlcnRzY2h1c3RlckBmc2ZlLm9yZykKQW5kcmVhcyBTZXdlIChzZXdlQHN0LmluZm9ybWF0aWsudHUtZGFybXN0YWR0LmRlKQpKZXJlbXkgU2luZ2VyIChKZXJlbXkuU2luZ2VyQGdsYXNnb3cuYWMudWspCkdhdXRlIFNtYWFsYW5kIChnc0BzZXZlbm1vdW50YWlucy5ubykKTWljaGFlbCBTbWl0aCAobXNtaXRoQHNwaW5uYWtlcm5ldC5jb20pCkouIFJ1c3NlbGwgU215dGggKGRyZmlzaEB1c3dlc3QubmV0KQpJYW4gRC4gU3Rld2FydCAoaWRzdGV3YXJ0QHNvZnRob21lLm5ldCkKSmVmZiBTdHVybSAoanN0dXJtQG9uZS1wb2ludC5jb20pClNyZWVuaXZhcyBTdWJyYW1vbmV5IChzcmVlbml2YXMuc3VicmFtb25leUBpbnRlbC5jb20pCkNocmlzIFRvc2hvayAodG9zaG9rQGh1bmdyeS5jb20pClBhdWwgVmluZXkgKHBhdWxAZGlhc29mdC5ubCkKV2VsZG9uIFdhc2hidXJuICh3ZWxkb24ud2FzaGJ1cm5AaW50ZWwuY29tKQpBZGFtIFdlbGMgKHdlbGNAY3MucHVyZHVlLmVkdSkKR2Fuc2hhIFd1IChnYW5zaGEud3VAaW50ZWwuY29tKQpTaHVodWEgWmhhbmcgKFNodWh1YS5aaGFuZ0BlY2hvc3Rhci5jb20pCg==