VGhpcyBTbG92ZW5pYW4gZGljdGlvbmFyeSB3YXMgY3JlYXRlZCBieSAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKToKICAgQW1lYmlzLCBkLm8uby4KICAgVG9tYSJ6IEVyamF2ZWMKICAgQWxlInMgS28ic2lyCiAgIFByaW1vInogUGV0ZXJsaW4KClRoZSBTbG92ZW5pYW4gZGljdGlvbmFyeSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR1BMIExpY2Vuc2UgYW5kICAKc3VwcG9ydHMgU2xvdmVuaWFuIGxhbmd1YWdlIChzbF9TSSkKClRoZSBhZmZpeCBmaWxlIHdhcyBhZGFwdGVkIGJ5OgpSb2JlcnQgTHVkdmlrLCA8ckBhdWZiaXgub3JnPgoKUHJvamVjdCB3YXMgc3VwcG9ydGVkIGluIHBhcnQgYnkgTWluaXN0cnkgb2YgSW5mb3JtYXRpb24gU29jaWV0eSAoTUlELCBSZXB1YmxpYyBvZiBTbG92ZW5pYSkKYW5kIExpbnV4IFVzZXIgR3JvdXAgb2YgU2xvdmVuaWEgKEx1Z29zKS4KCkJ1ZyByZXBvcnQ6IDxhbGVzLmtvc2lyQHBpbmdvLm9yZz4KCgo9PT09PT09PT09PT09PQpJTlNUQUxMQVRJT04KPT09PT09PT09PT09PT0KCkkuIMhSS09WQUxOSUsgKHNwZWxsY2hlY2spIElOIERFTEpFTkpFIEJFU0VEIChoeXBoZW5hdGlvbikKCgoxLiBQcmVkcG9nb2ppOgpOYSBMaW51eCBuYW1lc3RpdHZpIG1vcmEgYml0aSBsb2NhbGUgbmFzdGF2bGplbiBuYSBzbF9TSSBvei4gdnNhaiAKTENfTEFORz1zbF9TSQoKCjIuIFYgT3Blbk9mZmljZS5vcmcgaXpiZXJpIFRvb2xzL09wdGlvbnMvT3Blbk9mZmljZS5vcmcvUGF0aHMKaW4gcHJldmVyaSBuYXN0YXZpdGV2IHphICJVc2VyIERpY3Rpb25hcmllcyIKCgozLiBEb2JsamVubyBkYXRvdGVrbyAodGFyLmd6IGFsaSB6aXApIG9kcGFraXJhuSBuYSBpbWVuaWsKcyBwcmVquW5qZSB0b+hrZQoKCjQuIFBvcHJhdmm5IChhbGkgdXN0dmFyabkpIGRhdG90ZWtvIGRpY3Rpb25hcnkubHN0IHRha28sIGRhIGRvZGG5IHZyc3RpY2k6CgpESUNUIHNsIFNJIHNsX1NJCkhZUEggc2wgU0kgaHlwaF9zbAoKCjUuIFBvvmVuZbkgT3Blbk9mZmljZS5vcmcgaW4gbmFzdGF2abkgZHZlIHN0dmFyaToKCjUuMS4gIlRvb2xzL09wdGlvbnMvTGFuZ3VhZ2UgU2V0dGluZ3MvTGFuZ3VhZ2VzIjoKViAiRGVmYXVsdCBsYW5ndWFnZXMgZm9yIGRvY3VtZW50cyIgaXpiZXJluSAiU2xvdmVuaWFuIgoKNS4yLiAiVG9vbHMvT3B0aW9ucy9MYW5ndWFnZSBTZXR0aW5ncy9Xcml0aW5nIEFpZHMiCktsaWtuZbkgbmEgemdvcm5qaSAiRWRpdC4uLiIgZ3VtYiBpbiBpemJlcmW5CiJMYW5ndWFnZTogU2xvdmVuaWFuIgpEYbkgIGtsanVraWNvIHYgIk9wZW5PZmZpY2UgTXlTcGVsbCBTcGVsbENoZWNrZXIiIGluCnYgIkFMVExpbnV4IExpYkhuaiBIeXBoZW5hdG9yIgoKS2xpayBuYSAiQ2xvc2UiIGluICJPSyIKCgo2LiBQb25vdm5vIHphvmVuZbkgT3Blbk9mZmljZS5vcmcuIChuYSBXaW5kb3dzIG5hbWVzdGl0dmkgbW9yYbkKemFwcmV0aSB0dWRpICJRdWlja3N0YXJ0ZXIiIHYgb3ByYXZpbG5pIHZyc3RpY2kuKQoKCgpQb2Ryb2JuZWplIG9waXNhbiBwb3N0b3BlayBuYW1lc3RpdHZlIG5hamRluSBuYSBzcGxldG5pIHN0cmFuaToKaHR0cDovL3doaXRlYm9hcmQub3Blbm9mZmljZS5vcmcvbGluZ3Vjb21wb25lbnQvZG93bmxvYWRfZGljdGlvbmFyeS5odG1sCgoKQnVnIHJlcG9ydCBpbiB2cHJhuWFuamE6CnJAYXVmYml4Lm9yZwoK