CioqIGx1YS5zdHggLyBsbGV4LmMKVHVlIERlYyAgMiAxMDo0NTo0OCBFRFQgMTk5Nwo+PiBCVUc6ICJsYXN0bGluZSIgd2FzIG5vdCByZXNldCBvbiBmdW5jdGlvbiBlbnRyeSwgc28gZGVidWcgaW5mb3JtYXRpb24KPj4gc3RhcnRlZCBvbmx5IGluIHRoZSAybmQgbGluZSBvZiBhIGZ1bmN0aW9uLgoKCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVmVyc2lvbiAzLjEgYWxwaGEKCioqIGx1YS5jClRodSBKYW4gMTUgMTQ6MzQ6NTggRURUIDE5OTgKPj4gbXVzdCBpbmNsdWRlICJzdGRsaWIuaCIgKGZvciAiZXhpdCgpIikuCgoqKiBsYnVpbHRpbi5jIC8gbG9iamVjdC5oClRodSBKYW4gMTUgMTQ6MzQ6NTggRURUIDE5OTgKPj4gTUFYX1dPUkQgbWF5IGJlIGJpZ2dlciB0aGFuIE1BWF9JTlQKKGJ5IGxoZikKCioqIGxsZXguYwpNb24gSmFuIDE5IDE4OjE3OjE4IEVEVCAxOTk4Cj4+IHdyb25nIGxpbmUgbnVtYmVyICgrMSkgaW4gZXJyb3IgcmVwb3J0IHdoZW4gZmlsZSBzdGFydHMgd2l0aCAiIy4uLiIKCioqIGxzdHJsaWIuYwpUdWUgSmFuIDI3IDE1OjI3OjQ5IEVEVCAxOTk4Cj4+IGZvcm1hdHMgbGlrZSAiJTAyMGQiIHdlcmUgY29uc2lkZXJlZCB0b28gYmlnICgzIGRpZ2l0cyk7IG1vcmVvdmVyLAo+PiBzb21lIHNpc3RlbXMgbGltaXQgcHJpbnRmIHRvIGF0IG1vc3QgNTAwIGNoYXJzLCBzbyB3ZSBjYW4gbGltaXQgc2l6ZXMKPj4gdG8gMiBkaWdpdHMgKDk5KS4KCioqIGxhcGkuYwpUdWUgSmFuIDI3IDE3OjEyOjM2IEVEVCAxOTk4Cj4+ICJsdWFfZ2V0c3RyaW5nIiBtYXkgY3JlYXRlIGEgbmV3IHN0cmluZywgc28gc2hvdWxkIGNoZWNrIEdDCgoqKiBsc3RyaW5nLmMgLyBsdGFibGUuYwpXZWQgSmFuIDI4IDE0OjQ4OjEyIEVEVCAxOTk4Cj4+IHRhYmxlcyBjYW4gYmVjb21lIGZ1bGwgb2YgImVtcHR5IiBzbG90cywgYW5kIGtlZXAgZ3Jvd2luZyB3aXRob3V0IGxpbWl0cy4KCioqIGxzdHJsaWIuYwpNb24gTWFyICA5IDE1OjI2OjA5IEVTVCAxOTk4Cj4+IGdzdWIoJ2EnLCAnKGI/KSUxKicgLi4uKSBsb29wcyAoYmVjYXVzZSB0aGUgY2FwdHVyZSBpcyBlbXB0eSkuCgoqKiBsc3RybGliLmMKTW9uIE1heSAxOCAxOToyMDowMCBFU1QgMTk5OAo+PiBhcmd1bWVudHMgZm9yICJmb3JtYXQiICd4JywgJ1gnLCAnbycgYW5kICd1JyBtdXN0IGJlIHVuc2lnbmVkIGludC4KCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZlcnNpb24gMy4xCgoqKiBsaW9saWIuYyAvIGxhdXhsaWIuYwpNb24gU2VwICA3IDE1OjU3OjAyIEVTVCAxOTk4Cj4+IGZ1bmN0aW9uICJsdWFMX2FyZ2Vycm9yIiBwcmludHMgd3JvbmcgYXJndW1lbnQgbnVtYmVyIChmcm9tIGEgdXNlcidzIHBvaW50Cm9mIHZpZXcpIHdoZW4gZnVuY3Rpb25zIGhhdmUgdXB2YWx1ZXMuCgoqKiBsc3RybGliLmMKVHVlIE5vdiAxMCAxNzoyOTozNiBFRFQgMTk5OAo+PiBnc3ViL3N0cmZpbmQgZG8gbm90IGNoZWNrIHdoZXRoZXIgY2FwdHVyZXMgYXJlIHByb3Blcmx5IGZpbmlzaGVkLgooYnkgcm9iZXJ0by90b21hcykKCioqIGxidWlsdGluLmMKRnJpIERlYyAxOCAxMToyMjo1NSBFRFQgMTk5OAo+PiAidG9udW1iZXIiIGdvZXMgY3Jhenkgd2l0aCBuZWdhdGl2ZSBudW1iZXJzIGluIG90aGVyIGJhc2VzIChub3QgMTApLApiZWNhdXNlICJzdHJ0b2wiIHJldHVybnMgbG9uZywgbm90IHVuc2lnbmVkIGxvbmcuCihieSBWaXN1YWwgQysrKQoKKiogbHN0cmxpYi5jCk1vbiBKYW4gIDQgMTA6NDE6NDAgRURUIDE5OTkKPj4gImZvcm1hdCIgZG9lcyBub3QgY2hlY2sgc2l6ZSBvZiBmb3JtYXQgaXRlbSAoc3VjaCBhcyAiJTAwMDAwLi4uMDAwMDBkIikuCgoqKiBsYXBpLmMKV2VkIEZlYiAgMyAxNDo0MDoyMSBFRFQgMTk5OQo+PiBnZXRsb2NhbCBjYW5ub3QgcmV0dXJuIHRoZSBsb2NhbCBpdHNlbGYsIHNpbmNlIGx1YV9pc3N0cmluZyBhbmQKbHVhX2lzbnVtYmVyIGNhbiBtb2RpZnkgaXQuCgoqKiBsc3RybGliLmMKVGh1IEZlYiAgNCAxNzowODo1MCBFRFQgMTk5OQo+PiBmb3JtYXQgIiVzIiBtYXkgYnJlYWsgbGltaXQgb2YgInNwcmludGYiIG9uIHNvbWUgbWFjaGluZXMuCihieSBNYXJjZWxvIFNhbGVzKQoKKiogbHppby5jClRodSBNYXIgIDQgMTE6NDk6MzcgRVNUIDE5OTkKPj4gZmlsZSBzdHJlYW0gY2Fubm90IGNhbGwgZnJlYWQgYWZ0ZXIgRU9GLgooYnkgbGhmKQoKCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVmVyc2lvbiAzLjIgKGJldGEpCgoqKiBsc3RybGliLmMKRnJpIEFwciAzMCAxMToxMDoyMCBFU1QgMTk5OQo+PiAnJCcgYXQgZW5kIG9mIHBhdHRlcm4gd2FzIG1hdGNoaW5nIHJlZ3VsYXIgJyQnLCB0b28uCihieSBhbm5hOyBzaW5jZSAyLjUpCgoqKiBsYnVpbHRpbi5jCkZyaSBNYXkgMjEgMTc6MTU6MTEgRVNUIDE5OTkKPj4gZm9yZWFjaCwgZm9yZWFjaGksIGZvcmVhY2h2YXIgcG9pbnRzIHRvIGZ1bmN0aW9uIGluIHN0YWNrIHdoZW4gc3RhY2sKY2FuIGJlIHJlYWxsb2NhdGVkLgooYnkgdG9tYXM7IHNpbmNlIDMuMiBiZXRhKQoKKiogbHBhcnNlci5jCldlZCBKdW4gMTYgMTA6MzI6NDYgRVNUIDE5OTkKPj4gY2Fubm90IGFzc2lnbiB0byB1bmxpbWl0ZWQgdmFyaWFibGVzLCBiZWNhdXNlIGl0IGNhdXNlcyBvdmVyZmxvdyBpbgp0aGUgbnVtYmVyIG9mIHJldHVybnMgb2YgYSBmdW5jdGlvbi4KKHNpbmNlIDMuMSkKCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZlcnNpb24gMy4yCgoqKiBsbWF0aGxpYi5jCldlZCBBdWcgMTggMTE6Mjg6MzggRVNUIDE5OTkKPj4gcmFuZG9tKDApIGFuZCByYW5kb20oeCwwKSBhcmUgd3JvbmcgKDAgaXMgcmVhZCBhcyBubyBhcmd1bWVudCEpLgooYnkgRGF2ZSBCb2xsaW5nZXI7IHNpbmNlIDMuMSkKCioqIGxwYXJzZXIuYwpUaHUgU2VwICAyIDEwOjA3OjIwIEVTVCAxOTk5Cj4+IGluIHRoZSAob2xkKSBleHByZXNzaW9uIDw8IGxzLT5mcy0+Zi0+Y29uc3RzW2NoZWNrbmFtZShscyldID4+LCBjaGVja25hbWUKY291bGQgcmVhbGxvYyBmLT5jb25zdHMuCihieSBTdXByYXRpayBDaGFtcGF0aTsgc2luY2UgMy4yIGJldGEpCgoqKiBsb2JqZWN0LmMgLyBsYnVpbHRpbi5jCldlZCBTZXAgIDggMTc6NDE6NTQgRVNUIDE5OTkKPj4gdG9udW1iZXInZTEnIGFuZCB0b251bWJlcignICAnLCB4KSwgZm9yIHghPTEwLCBnYXZlIDAgaW5zdGVhZCBvZiBuaWwuCihzaW5jZSAzLjEpCgoqKiBsc3RybGliLmMKVGh1IE5vdiAxMSAxNDozNjozMCBFRFQgMTk5OQo+PiBgc3RyZmluZCcgZG9lcyBub3QgaGFuZGxlIFwwIGluIHBsYWluIHNlYXJjaC4KKGJ5IEpvbiBLbGVpc2VyOyBzaW5jZSAzLjEpCgoqKiBscGFyc2VyLmMKV2VkIERlYyAyOSAxNjowNTo0MyBFRFQgMTk5OQo+PiByZXR1cm4gZ2l2ZXMgd3JvbmcgbGluZSBpbiBkZWJ1ZyBpbmZvcm1hdGlvbgooYnkgbGhmOyBzaW5jZSAzLjIgW2F0IGxlYXN0XSkKCioqIGxkby5jClRodSBEZWMgMzAgMTY6Mzk6MzMgRURUIDE5OTkKPj4gY2Fubm90IHJlb3BlbiBzdGRpbiAoZm9yIGJpbmFyeSBtb2RlKQooYnkgbGhmICYgcm9iZXJ0bzsgc2luY2UgMy4xKQoKKiogbGFwaS5jClRodSBNYXIgIDIgMDk6NDE6NTMgRVNUIDIwMDAKPj4gbHVhX3NldHRhYmxlIHNob3VsZCBjaGVjayBzdGFjayBzcGFjZSAoaXQgY291bGQgY2FsbCBhIFQuTS4pCihieSBsaGYgJiBjZWxlczsgc2luY2UgMy4yOyBpdCB3YXMgYWxyZWFkeSBmaXhlZCBieSBmaXhlZCBzdGFjaykKCioqIGxwYXJzZXIuYwpNb24gQXByICAzIDA5OjU5OjA2IEVTVCAyMDAwCj4+ICclJyBzaG91bGQgYmUgaW4gZXhwZm9sbG93CihieSBFZGdhciBUb2VybmlnOyBzaW5jZSAzLjE7IGl0IHdhcyBhbHJlYWR5IGZpeGVkKQoKKiogbGJ1aWx0aW4uYwpNb24gQXByICAzIDEwOjA1OjA1IEVTVCAyMDAwCj4+IHRvc3RyaW5nKCkgd2l0aG91dCBhcmd1bWVudHMgZ2l2ZXMgc2VnLiBmYXVsdC4KKGJ5IEVkZ2FyIFRvZXJuaWc7IHNpbmNlIDMuMCkKCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZlcnNpb24gNC4wIGFscGhhCgpUZXN0ZWQgd2l0aCBmdWxsIHRlc3Qgc3VpdGVzIChhcyBsb2NrZWQgaW4gTW9uIEFwciAyNCAxNDoyMzoxMSBFU1QgMjAwMCkKaW4gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6CiogTGludXggICAtIGdjYywgZysrCiogQUlYICAgICAtIGdjYwoqIFNvbGFyaXMgLSBnY2MsIGNjCiogSVJJWAkgIC0gY2MsIGNjLXB1cmlmeQoqIFdpbmRvd3MgLSBWaXN1YWwgQysrICguYyBlIC5jcHAsIHdhcm5pbmcgbGV2ZWw9NCkKCgoqKiBsc3RybGliLmMKVHVlIE1heSAgMiAxNToyNzo1OCBFU1QgMjAwMAo+PiBgc3RyZmluZCcgZ2V0cyB3cm9uZyBzdWJqZWN0IGxlbmd0aCB3aGVuIHRoZXJlIGlzIGFuIG9mZnNldAooYnkgSm9uIEtsZWlzZXI7IHNpbmNlIDQuMGEpCgoqKiBscGFyc2VyLmMKRnJpIE1heSAxMiAxNToxMToxMiBFU1QgMjAwMAo+PiBmaXJzdCBlbGVtZW50IGluIGEgbGlzdCBjb25zdHJ1Y3RvciBpcyBub3QgYWRqdXN0ZWQgdG8gb25lIHZhbHVlCj4+IChlLmcuIKthID0ge2dzdWIoJ2EnLCdhJywnJyl9uykKKGJ5IFRvbWFzOyBzaW5jZSA0LjBhKQoKKiogbHBhcnNlci5jCldlZCBNYXkgMjQgMTQ6NTA6MTYgRVNUIDIwMDAKPj4gcmVjb3JkLWNvbnN0cnVjdG9yIHN0YXJ0aW5nIHdpdGggYW4gdXB2YWx1ZSBuYW1lIGdldHMgYW4gZXJyb3IKPj4gKGUuZy4gq2xvY2FsIGE7IGZ1bmN0aW9uIGYoKSB4ID0ge2E9MX0gZW5kuykKKGJ5IEVkZ2FyIFRvZXJuaWc7IHNpbmNlIDMuMSkKCioqIGxwYXJzZXIuYwpUdWUgQXVnIDI5IDE1OjU2OjA1IEVTVCAyMDAwCj4+IGVycm9yIG1lc3NhZ2UgZm9yIGBmb3InIHVzZXMgYHdoaWxlJwooc2luY2UgNC4wYTsgYWxyZWFkeSBjb3JyZWN0ZWQpCgoqKiBsZ2MuYwpUdWUgQXVnIDI5IDE1OjU3OjQxIEVTVCAyMDAwCj4+IGdjIHRhZyBtZXRob2QgZm9yIG5pbCBjb3VsZCBjYWxsIGxpbmUgaG9vawooYnkgcnk7IHNpbmNlID8pCgoKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWZXJzaW9uIDQuMCBCZXRhCgoqKiBsaW9saWIuYwpGcmkgU2VwIDIyIDE1OjEyOjM3IEVTVCAyMDAwCj4+IGByZWFkKCIqdyIpJyBzaG91bGQgcmV0dXJuIG5pbCBhdCBFT0YKKGJ5IHJvYmVydG87IHNpbmNlIDQuMGIpCgoqKiBsdm0uYwpNb24gU2VwIDI1IDExOjQ3OjQ4IEVTVCAyMDAwCj4+IGx1YV9nZXR0YWJsZSBkb2VzIG5vdCBnZXQga2V5IGZyb20gc3RhY2sgdG9wCihieSBQaGlsaXAgWWk7IHNpbmNlIDQuMGIpCgoqKiBsZ2MuYwpNb24gU2VwIDI1IDExOjUwOjQ4IEVTVCAyMDAwCj4+IEdDIG1heSBjcmFzaCB3aGVuIGNoZWNraW5nIGxvY2tlZCBDIGNsb3N1cmVzCihieSBQaGlsaXAgWWk7IHNpbmNlIDQuMGIpCgoqKiBsYXBpLmMKV2VkIFNlcCAyNyAwOTo1MDoxOSBFU1QgMjAwMAo+PiBsdWFfdGFnIHNob3VsZCByZXR1cm4gTFVBX05PVEFHIGZvciBub24tdmFsaWQgaW5kaWNlcwooYnkgUGF1bCBIYW5raW47IHNpbmNlIDQuMGIpCgoqKiBsbGV4LmggLyBsbGV4LmMgLyBscGFyc2VyLmMKV2VkIFNlcCAyNyAxMzozOTo0NSBFU1QgMjAwMAo+PiBwYXJzZXIgb3ZlcndyaXRlcyBzZW1hbnRpYyBpbmZvcm1hdGlvbiB3aGVuIGxvb2tpbmcgYWhlYWQKPj4gKGUuZy4gq2EgPSB7cHJpbnQnZm9vJ327KQooYnkgRWRnYXIgVG9lcm5pZzsgc2luY2UgNC4wYiwgZGVyaXZpbmcgZnJvbSBwcmV2aW91cyBidWcpCgoqKiBsaW9saWIuYwpUaHUgT2N0IDI2IDEwOjUwOjQ2IEVEVCAyMDAwCj4+IGluIGZ1bmN0aW9uIGByZWFkX2ZpbGUnLCByZWFsbG9jKCkgZG9lc24ndCBmcmVlIHRoZSBidWZmZXIgaWYgaXQgY2FuJ3QKPj4gYWxsb2NhdGUgbmV3IG1lbW9yeQooYnkgTWF1cm8gVmV6em9zaTsgc2luY2UgNC4wYikKCg==