IyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQojICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiMgdW5kZXIgdGhlIExpY2Vuc2UuCgojZmllbGRzCmZpZWxkLnRpdGxlLmVtcGxveWVlcy5pZD1NaXRhcmJlaXRlciBOci4KZmllbGQudGl0bGUuZW1wbG95ZWVzLnNhbHV0YXRpb249QW5yZWRlCmZpZWxkLnRpdGxlLmVtcGxveWVlcy5maXJzdG5hbWU9Vm9ybmFtZQpmaWVsZC50aXRsZS5lbXBsb3llZXMubGFzdG5hbWU9TmFjaG5hbWUKZmllbGQudGl0bGUuZW1wbG95ZWVzLmZ1bGxuYW1lPU5hbWUgKHZvbGwpCmZpZWxkLnRpdGxlLmVtcGxveWVlcy5kYXRlT2ZCaXJ0aD1HZWJ1cnRzZGF0dW0KZmllbGQudGl0bGUuZW1wbG95ZWVzLmRlcGFydG1lbnRJZD1BYnRlaWx1bmcKZmllbGQudGl0bGUuZW1wbG95ZWVzLmdlbmRlcj1HZXNjaGxlY2h0CmZpZWxkLnRpdGxlLmVtcGxveWVlcy5waG9uZU51bWJlcj1UZWxlZm9ubnVtbWVyCmZpZWxkLnRpdGxlLmVtcGxveWVlcy5lbWFpbD1FLU1haWwKZmllbGQudGl0bGUuZW1wbG95ZWVzLnNhbGFyeT1KYWhyZXNnZWhhbHQKZmllbGQudGl0bGUuZW1wbG95ZWVzLnJldGlyZWQ9QXVzZ2VzY2hpZWRlbgpmaWVsZC50aXRsZS5lbXBsb3llZXMudXBkYXRlVGltZXN0YW1wPVp1bGV0enQgZ2XkbmRlcnQgYW0KCmZpZWxkLnRpdGxlLmRlcGFydG1lbnRzLmlkPUFidGVpbHVuZ3NucgpmaWVsZC50aXRsZS5kZXBhcnRtZW50cy5uYW1lPUFidGVpbHVuZ3NuYW1lCmZpZWxkLnRpdGxlLmRlcGFydG1lbnRzLmhlYWQ9QWJ0ZWlsdWduc2xlaXRlcgoKI29wdGlvbnMKb3B0aW9uLmVtcGxveWVlLmdlbmRlci5tYWxlPU3kbm5saWNoCm9wdGlvbi5lbXBsb3llZS5nZW5kZXIuZmVtYWxlPVdlaWJsaWNoCgojb3B0aW9ucwpvcHRpb24uZW1wbG95ZWUuYWN0aXZlPS0Kb3B0aW9uLmVtcGxveWVlLnJldGlyZWQ9SmEKCiNhcHBsaWNhdGlvbgphcHBsaWNhdGlvbl90aXRsZT1NaXRhcmJlaXRlcnZlcndhbHR1bmdzYW53ZW5kdW5nCmFwcGxpY2F0aW9uX3RvZG89Tm9jaCB6dSBpbXBsZW1lbnRpZXJlbgphcHBsaWNhdGlvbl9sb2dvdXQ9QWJtZWxkZW4KCgojCmdsb2JhbF9saXN0X3Jlc3VsdF9lbXB0eT1FcyB3dXJkZW4ga2VpbmUgRWxlbWVudGUgbWl0IGRlbiBhbmdlZ2ViZW5lbiBGaWx0ZXJrcml0ZXJpZW4gZ2VmdW5kZW4uCgojcGFnZXMKbG9naW5fdGl0bGUgPSBBbm1lbGR1bmcKbG9naW5fbG9naW4gPSBhbm1lbGRlbgpsb2dpbl9maWVsZF9uYW1lID0gQmVudXR6ZXJuYW1lCmxvZ2luX2ZpZWxkX3Bhc3N3b3JkID0gUGFzc3dvcnQKbG9naW5faGludD1IaW53ZWlzOiBHZWJlbiBTaWUgZWluZW4gYmVsaWViaWdlbiBCZW51dHplcm5hbWVuIHVuZCBLZW5ud29ydCBhbi4KCmVtcGxveWVlU2VhcmNoX3RpdGxlID0gTWl0YXJiZWl0ZXJzdWNoZQplbXBsb3llZVNlYXJjaF9maWVsZF9lbXBsb3llZUlkID0gTWl0YXJiZWl0ZXIgSUQKZW1wbG95ZWVTZWFyY2hfZmllbGRfZmlyc3ROYW1lID0gVm9ybmFtZQplbXBsb3llZVNlYXJjaF9maWVsZF9sYXN0TmFtZSA9IE5hY2huYW1lCmVtcGxveWVlU2VhcmNoX2ZpZWxkX2RlcGFydG1lbnRJZCA9IEFidGVpbHVuZwplbXBsb3llZVNlYXJjaF9zZWFyY2ggPSBTdWNoZW4KCmVtcGxveWVlTGlzdF90aXRsZT1NaXRhcmJlaXRlcvxiZXJzaWNodAplbXBsb3llZUxpc3RfY3JlYXRlPU5ldWVuIE1pdGFyYmVpdGVyIGVyc3RlbGxlbgplbXBsb3llZUxpc3RfZmllbGRfZW1wbG95ZWVJZD1JRAplbXBsb3llZUxpc3RfZmllbGRfbmFtZT0gTmFtZQplbXBsb3llZUxpc3RfZmllbGRfZ2VuZGVyPUdlc2NobGVjaHQKZW1wbG95ZWVMaXN0X2ZpZWxkX2RhdGVPZkJpcnRoPUdlYnVydHNkYXR1bQplbXBsb3llZUxpc3RfZmllbGRfZGVwYXJ0bWVudD1BYnRlaWx1bmcKZW1wbG95ZWVMaXN0X3NlYXJjaD1TdWNoZW4KZW1wbG95ZWVMaXN0X3Jlc2V0U2VhcmNoPVN1Y2hlIHp1cvxja3NldHplbgoKZW1wbG95ZWVEZXRhaWxfdGl0bGUgPSBNaXRhcmJlaXRlcmRldGFpbHMKZW1wbG95ZWVEZXRhaWxfdGFiX2Jhc2ljID0gR3J1bmRkYXRlbgplbXBsb3llZURldGFpbF90YWJfZXh0ZW5kZWQgPSBXZWl0ZXJlIERhdGVuCmVtcGxveWVlRGV0YWlsX21zZ19leHRlbmRlZCA9IEhpZXIga/ZubmVuIHdlaXRlcmUgRGF0ZW4gYW5nZXplaWd0IHdlcmRlbgplbXBsb3llZURldGFpbF9zYXZlID0gU3BlaWNoZXJuCmVtcGxveWVlRGV0YWlsX2JhY2sgPSBadXL8Y2sKZW1wbG95ZWVEZXRhaWxfZGVsZXRlID0gTPZzY2hlbgoKIyMgT2xkIHN0dWZmCgojbGFiZWxzCmFwcGxpY2F0aW9uLnRpdGxlPU1pdGFyYmVpdGVydmVyd2FsdHVuZyAoRW1waXJlLWRiKQpsYWJlbC5lbXBsb3llZXM9TWl0YXJiZWl0ZXJsaXN0ZQpsYWJlbC5lbXBsb3llZXMuYmVhbkxpc3Q9TWl0YXJiZWl0ZXJsaXN0ZSAoQmVhbi1MaXN0ZSkKbGFiZWwuZW1wbG95ZWVzLnJlYWRlcj1NaXRhcmJlaXRlcmxpc3RlIChEQlJlYWRlcikKbGFiZWwuZGVsZXRlPUz2c2NoZW4KbGFiZWwuZWRpdD1CZWFyYmVpdGVuCmxhYmVsLmVtcGxveWVlLmVkaXQ9RWludHJhZyBiZWFyYmVpdGVuCmxhYmVsLmVtcGxveWVlLmFkZD1FaW50cmFnIGhpbnp1ZvxnZW4KbGFiZWwubmFtZT1OYW1lCmxhYmVsLmdlbmRlcj1HZXNjaGxlY2h0CmxhYmVsLmFnZT1BbHRlcgpsYWJlbC5kZXBhcnRtZW50PUFidGVpbHVuZwpsYWJlbC51c2VyLk5hbWU9TmFtZQpsYWJlbC51c2VyLlB3ZD1QYXNzd29ydAoKcGFnZS5sYWJlbC5sb2dpbj1Bbm1lbGRlbgpwYWdlLmxhYmVsLmxvZ2luaW5mbz1TaWUgc2luZCBhbmdlbWVsZGV0IGFsczoKcGFnZS5sYWJlbC5zZWFyY2g9TWl0YXJiZWl0ZXIgc3VjaGVuCnBhZ2UubGFiZWwubGlzdD1NaXRhcmJlaXRlciBhdXN35GhsZW4KcGFnZS5sYWJlbC51cGRhdGU9TWl0YXJiZWl0ZXIgYmVhcmJlaXRlbgpwYWdlLmxhYmVsLmFkZD1NaXRhcmJlaXRlciBoaW56dWb8Z2VuCgojYnV0dG9uIGxhYmVscwpidXR0b24ubGFiZWwubG9naW49QW5tZWxkZW4KYnV0dG9uLmxhYmVsLnNlYXJjaD1TdWNoZW4uLi4KYnV0dG9uLmxhYmVsLnNhdmU9U3BlaWNoZXJuCmJ1dHRvbi5sYWJlbC5jYW5jZWw9QWJicmVjaGVuCmJ1dHRvbi5sYWJlbC5kZWxldGU9TPZzY2hlbgoKI2xpbmsgbGFiZWxzCmxpbmsubGFiZWwuYWRkZW1wbG95ZWU9TmV1ZW4gRWludHJhZyBhbmxlZ2VuCmxpbmsubGFiZWwuZWRpdD1CZWFyYmVpdGVuCmxpbmsubGFiZWwuZGVsZXRlPUz2c2NoZW4KbGluay5sYWJlbC5sb2dvdXQ9TG9nb3V0CmxpbmsubGFiZWwuc2VhcmNoPVN1Y2hlbgoKIyMtLSBlcnJvcnMKZXJyb3JzLnByZWZpeD08c3BhbiBzdHlsZT0iY29sb3I6cmVkO2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4KZXJyb3JzLnN1ZmZpeD08L3NwYW4+CgplcnJvci5pbnZhbGlkcGFzc3dvcmQ9RGVyIGVpbmdlZ2ViZW5lIEJlbnV0emVybmFtZSBpc3QgdW5n/Gx0aWcgKEVzIGlzdCBtaW5kZXN0ZW5zIGVpbiBaZWljaGVuIGVyZm9yZGVybGljaCEpCmVycm9yLndlYi5yZWNvcmRzRG9udE1hdGNoPVRoZSBmb3JtIHN1Ym1pdHRlZCBpcyBpbnZhbGlkIGZvciB0aGUgY3VycmVudCBjb250ZXh0LgplcnJvci53ZWIuY29sdW1uTm90Rm91bmQ9RGllIFNwYWx0ZSB7MH0gd3VyZGUgbmljaHQgZ2VmdW5kZW4hCmVycm9yLndlYi5maWVsZEVycm9yPUZlbGQgezB9OiB7MX0KZXJyb3Iud2ViLmlucHV0LmludGVnZXJGb3JtYXQ9VW5n/Gx0aWdlcyBaYWhsZW5mb3JtYXQKZXJyb3Iud2ViLmlucHV0Lm51bWJlckZvcm1hdD1Vbmf8bHRpZ2VzIFphaGxlbmZvcm1hdAplcnJvci53ZWIuaW5wdXQuZGF0ZUZvcm1hdD1Vbmf8bHRpZ2VzIERhdHVtc2Zvcm1hdAplcnJvci53ZWIuaW5wdXQuZGF0ZS5ub3RpbWU9RXMgd3VyZGUga2VpbmUgWmVpdCBhbmdlZ2ViZW4KZXJyb3Iud2ViLmlucHV0LnJlcXVpcmVkPURhcyBGZWxkIGlzdCBlaW5nYWJlcGZsaWNodGlnIAplcnJvci53ZWIuaW5wdXQub3V0T2ZSYW5nZT1EZXIgV2VydCBtdXNzIHp3aXNjaGVuIHswfSB1bmQgezF9IGxpZWdlbi4KZXJyb3Iud2ViLmlucHV0LnRleHRUb29TaG9ydD1EZXIgV2VydCBtdXNzIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuLiAK