IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMQolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX2lyZHAJMAolZGVmaW5lCQl3aXRoX2lzaXNkCTAKJWRlZmluZQkJd2l0aF9zaGFyZWQJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIG9zcGZkIGJncGQKJWlmICV7d2l0aF9pcHY2fQolZGVmaW5lCQlkYWVtb252Nl9saXN0CSV7ZGFlbW9uX2xpc3R9IHJpcG5nZCBvc3BmNmQKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CiVkZWZpbmUJCWRhZW1vbl9vdGhlcglpc2lzZAolZWxzZQolZGVmaW5lCQlkYWVtb25fb3RoZXIJIiIKJWVuZGlmCgojIGFsbG93IGJ1aWxkIGRpciB0byBiZSBrZXB0CiVkZWZpbmUJCWtlZXBfYnVpbGQJMAoKU3VtbWFyeTogUm91dGluZyBkYWVtb24KTmFtZToJCXF1YWdnYQpWZXJzaW9uOglAVkVSU0lPTkAKUmVsZWFzZToJQENPTkZEQVRFQDAxCkxpY2Vuc2U6CUdQTApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKU291cmNlMDoJaHR0cDovL3d3dy5xdWFnZ2EubmV0L3NuYXBzaG90cy9jdnMvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negpVUkw6CQlodHRwOi8vd3d3LnF1YWdnYS5uZXQKJWlmICV7d2l0aF9zbm1wfQpCdWlsZFJlcXVpcmVzOgluZXQtc25tcC1kZXZlbApQcmVyZXE6CQluZXQtc25tcAolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KQnVpbGRSZXF1aXJlczoJcmVhZGxpbmUgcmVhZGxpbmUtZGV2ZWwgbmN1cnNlcyBuY3Vyc2VzLWRldmVsClByZXJlcToJCXJlYWRsaW5lIG5jdXJzZXMKJWVuZGlmCkJ1aWxkUmVxdWlyZXM6CXRleGluZm8gdGV0ZXggYXV0b2NvbmYgcGFtLWRldmVsIHBhdGNoIGxpYmNhcC1kZXZlbAojIEluaXRzY3JpcHRzID4gNS42MCBpcyByZXF1aXJlZCBmb3IgSVB2NiBzdXBwb3J0ClByZXJlcToJCWluaXRzY3JpcHRzID49IDUuNjAKUHJlcmVxOgkJbmN1cnNlcyByZWFkbGluZSBwYW0KUHJlcmVxOgkJL3NiaW4vaW5zdGFsbC1pbmZvClByb3ZpZGVzOglyb3V0aW5nZGFlbW9uCkJ1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LXJvb3QKT2Jzb2xldGVzOgliaXJkIGdhdGVkIG1ydCB6ZWJyYQoKJWRlc2NyaXB0aW9uClF1YWdnYSBpcyBhIGZyZWUgc29mdHdhcmUgdGhhdCBtYW5hZ2VzIFRDUC9JUCBiYXNlZCByb3V0aW5nCnByb3RvY29sLiBJdCB0YWtlcyBtdWx0aS1zZXJ2ZXIgYW5kIG11bHRpLXRocmVhZCBhcHByb2FjaCB0byByZXNvbHZlCnRoZSBjdXJyZW50IGNvbXBsZXhpdHkgb2YgdGhlIEludGVybmV0LgoKUXVhZ2dhIHN1cHBvcnRzIEJHUDQsIEJHUDQrLCBPU1BGdjIsIE9TUEZ2MywgUklQdjEsIFJJUHYyLCBhbmQgUklQbmcuCgpRdWFnZ2EgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIFJvdXRlIFNlcnZlciBhbmQgYSBSb3V0ZSBSZWZsZWN0b3IuIEl0IGlzCm5vdCBhIHRvb2xraXQsIGl0IHByb3ZpZGVzIGZ1bGwgcm91dGluZyBwb3dlciB1bmRlciBhIG5ldyBhcmNoaXRlY3R1cmUuClF1YWdnYSBieSBkZXNpZ24gaGFzIGEgcHJvY2VzcyBmb3IgZWFjaCBwcm90b2NvbC4KClF1YWdnYSBpcyBhIGZvcmsgb2YgR05VIFplYnJhLgoKJXBhY2thZ2UgY29udHJpYgpTdW1tYXJ5OiBjb250cmliIHRvb2xzIGZvciBxdWFnZ2EKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gY29udHJpYgpDb250cmlidXRlZC8zcmQgcGFydHkgdG9vbHMgd2hpY2ggbWF5IGJlIG9mIHVzZSB3aXRoIHF1YWdnYS4KCiVwYWNrYWdlIGRldmVsClN1bW1hcnk6IEhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIGZvciBxdWFnZ2EgZGV2ZWxvcG1lbnQKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gZGV2ZWwKVGhlIHF1YWdnYS1kZXZlbCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBuZWNjZXNzYXJ5IGZvcgpkZXZlbG9waW5nIE9TUEYtQVBJIGFuZCBxdWFnZ2EgYXBwbGljYXRpb25zLgoKJXByZXAKJXNldHVwICAtcQoKJWJ1aWxkCiVjb25maWd1cmUgXAolaWYgISV7d2l0aF9zaGFyZWR9CgktLWRpc2FibGUtc2hhcmVkIFwKJWVuZGlmCiVpZiAle3dpdGhfaXB2Nn0KCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV7d2l0aF9zbm1wfQoJLS1lbmFibGUtc25tcCBcCiVlbmRpZgolaWYgJXt3aXRoX211bHRpcGF0aH0KCS0tZW5hYmxlLW11bHRpcGF0aD0le3dpdGhfbXVsdGlwYXRofSBcCiVlbmRpZgolaWYgJXt3aXRoX3RjcF96ZWJyYX0KCS0tZW5hYmxlLXRjcC16ZWJyYSBcCiVlbmRpZgolaWYgJXt3aXRoX25zc2F9CgktLWVuYWJsZS1uc3NhIFwKJWVuZGlmCiVpZiAle3dpdGhfb3BhcXVlX2xzYX0KCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmX3RlfQoJLS1lbmFibGUtb3NwZi10ZSBcCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQoJLS1lbmFibGUtdnR5c2ggXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmY2xpZW50fQoJLS1lbmFibGUtb3NwZmNsaWVudD15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmNsaWVudD1ub1wKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmFwaX0KCS0tZW5hYmxlLW9zcGZhcGk9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZhcGk9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9pcmRwfQoJLS1lbmFibGUtaXJkcD15ZXMgXAolZWxzZQoJLS1lbmFibGUtaXJkcD1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQoJLS1lbmFibGUtaXNpc2QgXAolZWxzZQoJLS1kaXNhYmxlLWlzaXNkIFwKJWVuZGlmCiVpZiAle3dpdGhfcGFtfQoJLS13aXRoLWxpYnBhbSBcCiVlbmRpZgolaWYgJXF1YWdnYV91c2VyCgktLWVuYWJsZS11c2VyPSVxdWFnZ2FfdXNlciBcCgktLWVuYWJsZS1ncm91cD0lcXVhZ2dhX3VzZXIgXAolZW5kaWYKJWlmICV2dHlfZ3JvdXAKCS0tZW5hYmxlLXZ0eS1ncm91cD0ldnR5X2dyb3VwIFwKJWVuZGlmCi0tZW5hYmxlLW5ldGxpbmsKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCBxdWFnZ2EudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvcXVhZ2dhICRSUE1fQlVJTERfUk9PVCV7X2luZm9kaXJ9CgptYWtlIGluc3RhbGwgXAoJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKCiMgUmVtb3ZlIHRoaXMgZmlsZSwgYXMgaXQgaXMgdW5pbnN0YWxsZWQgYW5kIGNhdXNlcyBlcnJvcnMgd2hlbiBidWlsZGluZyBvbiBSSDkKcm0gLXJmICRSUE1fQlVJTERfUk9PVC91c3Ivc2hhcmUvaW5mby9kaXIKCiMgaW5zdGFsbCBldGMgc291cmNlcwpmb3IgZGFlbW9uIGluICV7ZGFlbW9uX2xpc3R9ICV7ZGFlbW9udjZfbGlzdH0gJXtkYWVtb25fb3RoZXJ9IDsgZG8KCWlmIFsgeCIke2RhZW1vbn0iICE9IHgiIiBdIDsgdGhlbgoJCWluc3RhbGwgJXt6ZWJfcmhfc3JjfS8ke2RhZW1vbn0uaW5pdCBcCgkJCSRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259CglmaQpkb25lCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2EucGFtIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvcGFtLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2EubG9ncm90YXRlIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvbG9ncm90YXRlLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2Euc3lzY29uZmlnIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvc3lzY29uZmlnL3F1YWdnYQppbnN0YWxsIC1kIC1tNzUwICAkUlBNX0JVSUxEX1JPT1QvdmFyL3J1bi9xdWFnZ2EKCiVwcmUKIyBhZGQgdnR5X2dyb3VwCiVpZiAldnR5X2dyb3VwCmdyb3VwYWRkIC1yICV2dHlfZ3JvdXAgMj4gL2Rldi9udWxsIHx8IDoKJWVuZGlmCiMgYWRkIHF1YWdnYSB1c2VyIGFuZCBncm91cAolaWYgJXF1YWdnYV91c2VyCi91c3Ivc2Jpbi9ncm91cGFkZCAtZyAlcXVhZ2dhX2dpZCBxdWFnZ2EgMj4gL2Rldi9udWxsIHx8IDoKL3Vzci9zYmluL3VzZXJhZGQgIC11ICVxdWFnZ2FfdWlkIC1nICVxdWFnZ2FfZ2lkIFwKIC1NIC1yIC1zIC9zYmluL25vbG9naW4gLWMgIlF1YWdnYSByb3V0aW5nIHN1aXRlIiBcCiAtZCAlX2xvY2Fsc3RhdGVkaXIgJXF1YWdnYV91c2VyIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgoKJXBvc3QKIyB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIDxzZXJ2aWNlIG5hbWU+IDxwb3J0L3Byb3RvPiA8Y29tbWVudD4KIyBlLmcuIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlICgpCnsKICAjIEFkZCBwb3J0IC9ldGMvc2VydmljZXMgZW50cnkgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZSAKICBpZiBbIC1mIC9ldGMvc2VydmljZXMgXSAmJiAhIGdyZXAgLXEgIl4kMVteYS16QS1aMC05XSIgL2V0Yy9zZXJ2aWNlcyA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcG5nZCAgIDI2MDMvdGNwICJSSVBuZ2QgdnR5IgolZW5kaWYKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmZCAgICAyNjA0L3RjcCAiT1NQRmQgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGJncGQgICAgIDI2MDUvdGNwICJCR1BkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgaXNpc2QgICAgMjYwOC90Y3AgIklTSVNkIHZ0eSIKJWVuZGlmCgpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkvc2Jpbi9jaGtjb25maWcgLS1hZGQgJHtkYWVtb259CmRvbmUKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiMgQ3JlYXRlIGR1bW15IGZpbGVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgc28gYmFzaWMgZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZiBdOyB0aGVuCgllY2hvICJob3N0bmFtZSBgaG9zdG5hbWVgIiA+ICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCmZpCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mIF07IHRoZW4KCXRvdWNoICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCmZpCgolcG9zdHVuCmlmIFsgIiQxIiAtZ2UgICIxIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCglkb25lCmZpCgolcHJldW4KaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBzdG9wICA+L2Rldi9udWxsIDI+JjEKCQkvc2Jpbi9jaGtjb25maWcgLS1kZWwgJHtkYWVtb259Cglkb25lCgkvc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCmZpCgolY2xlYW4KJWlmICEle2tlZXBfYnVpbGR9CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKJWVuZGlmCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3F1YWdnYS5odG1sCiVkb2MgZG9jL21wbHMKJWRvYyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBSRVBPUlRJTkctQlVHUyBTRVJWSUNFUyBUT0RPCiVpZiAle3F1YWdnYV91c2VyfQolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL2xvZy9xdWFnZ2EgCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvcnVuL3F1YWdnYQolZWxzZQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9sb2cvcXVhZ2dhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9ydW4vcXVhZ2dhCiVlbmRpZgolaWYgJXt2dHlfZ3JvdXB9CiVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS96ZWJyYQole19zYmluZGlyfS9vc3BmZAole19zYmluZGlyfS9yaXBkCiV7X3NiaW5kaXJ9L2JncGQKJWlmICV7d2l0aF9pcHY2fQole19zYmluZGlyfS9yaXBuZ2QKJXtfc2JpbmRpcn0vb3NwZjZkCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQole19zYmluZGlyfS9pc2lzZAolZW5kaWYKJWlmICV7d2l0aF9zaGFyZWR9CiV7X2xpYmRpcn0vbGliKi5zbwole19saWJkaXJ9L2xpYiouc28uKgolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KJXtfYmluZGlyfS8qCiVlbmRpZgolY29uZmlnIC9ldGMvcXVhZ2dhL1shdl0qCiVjb25maWcgL2V0Yy9yYy5kL2luaXQuZC8qCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvcGFtLmQvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAlYXR0cig2NDAscm9vdCxyb290KSAvZXRjL2xvZ3JvdGF0ZS5kLyoKCiVmaWxlcyBjb250cmliCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jIHRvb2xzCgolZmlsZXMgZGV2ZWwKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVpZiAle3dpdGhfb3NwZmNsaWVudH0KJXtfc2JpbmRpcn0vb3NwZmNsaWVudAolZW5kaWYKJWRpciAle19saWJkaXJ9LyouYQolZGlyICV7X2xpYmRpcn0vKi5sYQolZGlyICV7X2luY2x1ZGVkaXJ9LyVuYW1lLyouaAolZGlyICV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZkLyouaAolaWYgJXt3aXRoX29zcGZhcGl9CiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvb3NwZmFwaS8qLmgKJWVuZGlmCgolY2hhbmdlbG9nCiVjaGFuZ2Vsb2cKKiBGcmkgT2N0IDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVwZGF0ZSB0byAwLjk3LjAKCiogV2VkIFNlcCAxNSAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBidWlsZCBzbm1wIHN1cHBvcnQgYnkgZGVmYXVsdAotIGJ1aWxkIGlyZHAgc3VwcG9ydAotIGJ1aWxkIHdpdGggc2hhcmVkIGxpYnMKLSBkZXZlbCBzdWJwYWNrYWdlIGZvciBhcmNoaXZlcyBhbmQgaGVhZGVycwoKKiBUaHUgSmFuIDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZWQgc3lzY29uZmlnIGZpbGVzIHRvIHNwZWNpZnkgbG9jYWwgZGlyCi0gYWRkZWQgb3NwZl9kdW1wLmMgY3Jhc2ggcXVpY2sgZml4IHBhdGNoCi0gYWRkZWQgb3NwZmQgcGVyc2lzdGVudCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwYXRjaAoKKiBUdWUgRGVjIDMwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHN5bmMgdG8gQ1ZTCi0gaW50ZWdyYXRlIFJIIHN5c2NvbmZpZyBwYXRjaCB0byBzcGVjaWZ5IGRhZW1vbiBvcHRpb25zIChSSCkKLSBkZWZhdWx0IHRvIGhhdmUgdnR5IGxpc3RlbiBvbmx5IHRvIDEyNy4xIChSSCkKLSBhZGQgdXNlciB3aXRoIGZpeGVkIFVJRC9HSUQgKFJIKQotIGNyZWF0ZSB1c2VyIHdpdGggc2hlbGwgL3NiaW4vbm9sb2dpbiByYXRoZXIgdGhhbiAvYmluL2ZhbHNlIChSSCkKLSBzdG9wIGRhZW1vbnMgb24gdW5pbnN0YWxsIChSSCkKLSBkZWxldGUgaW5mbyBmaWxlIG9uICVwcmV1biwgbm90ICVwb3N0dW4gdG8gYXZvaWQgZGVsZXRpb24gb24gdXBncmFkZS4gKFJIKQotIGlzaXNkIGFkZGVkCi0gY2xlYW51cCB0YXNrcyBjYXJyaWVkIG91dCBmb3IgZXZlcnkgZGFlbW9uCgoqIFN1biBOb3YgMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggLWRldmVsIHBhY2thZ2UgdG8gaW5jbHVkZSBhbGwgZmlsZXMKLSBTeW5jIHRvIDAuOTYuNAoKKiBUdWUgQXVnIDEyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFJlbmFtZWQgdG8gUXVhZ2dhCi0gU3luYyB0byBRdWFnZ2EgcmVsZWFzZSAwLjk2CgoqIFR1ZSBNYXIgMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gemVicmEgcHJpdmlsZWdlcyBzdXBwb3J0CgoqIE1vbiBNYXIgMTggMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IG1lbSBsZWFrIGluICdzaG93IHRocmVhZCBjcHUnCi0gUmFscGggS2VsbGVyJ3MgT1NQRi1BUEkKLSBBbWlyOiBGaXggY29uZmlndXJlLmFjIGZvciBuZXQtc25tcAoKKiBTYXQgTWFyIDEgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gb3NwZmQgSU9TIHByZWZpeCB0byBpbnRlcmZhY2UgbWF0Y2hpbmcgZm9yICduZXR3b3JrJyBzdGF0ZW1lbnQKLSB0ZW1wb3JhcnkgZml4IGZvciBQdFAgYW5kIElQdjYKLSBzeW5jIHRvIHplYnJhLm9yZyBDVlMKCiogTW9uIEphbiAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGUgdG8gbGF0ZXN0IGN2cwotIFlvbidzICJzaG93IHRocmVhZCBjcHUiIHBhdGNoIC0gMTcyMTcKLSB3YWxrIHVwIHRyZWUgLSAxNzIxOAotIG9zcGZkIE5TU0EgZml4ZXMgLSAxNjY4MQotIG9zcGZkIG5zbSBmaXhlcyAtIDE2ODI0Ci0gb3NwZmQgT0xTQSBmaXhlcyBhbmQgbmV3IGZlYXR1cmUgLSAxNjgyMyAKLSBLQU1FIGFuZCBpZmluZGV4IGZpeGVzIC0gMTY1MjUKLSBzcGVjIGZpbGUgY2hhbmdlcyB0byBhbGxvdyByZWRoYXQgZmlsZXMgdG8gYmUgaW4gdHJlZQoKKiBTYXQgRGVjIDI4IDIwMDIgQWxleGFuZGVyIEhvb2dlcmh1aXMgPGFsZXhoQGloYXRlbnQuY29tPgotIEFkZGVkIGNvbmRpdGlvbmFscyBmb3IgYnVpbGRpbmcgd2l0aChvdXQpIElQdjYsIHZ0eXNoLCBSSVAsIEJHUAotIEZpeGVkIHVwIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIChwYXRjaCkKLSBBZGRlZCBjb25kaXRpb25hbCBidWlsZCByZXF1aXJlbWVudHMgZm9yIHZ0eXNoIC8gc25tcAotIEFkZGVkIGNvbmRpdGlvbmFsIHRvICVmaWxlcyBmb3IgJV9iaW5kaXIgZGVwZW5kaW5nIG9uIHZ0eXNoCgoqIE1vbiBOb3YgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIEdyZWcgVHJveGVsJ3MgbWQ1IGJ1ZmZlciBjb3B5L2R1cCBmaXgKLSBhZGQgUklQdjEgZml4Ci0gYWRkIEZyYW5rJ3MgbXVsdGljYXN0IGZsYWcgZml4CgoqIFdlZCBPY3QgMDkgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gdGltZXN0YW1wZWQgY3J5cHRfc2VxbnVtIHBhdGNoCi0gb2ktPm9uX3dyaXRlX3EgZml4CgoqIE1vbiBTZXAgMzAgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIHZ0eXNoICd3cml0ZS1jb25maWcgKGludGVncmF0ZWR8ZGFlbW9uKScgcGF0Y2gKLSBhbHdheXMgJ21ha2UgcmVidWlsZCcgaW4gdnR5c2gvIHRvIGNhdGNoIG5ldyBjb21tYW5kcwoKKiBGcmkgU2VwIDEzIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45M2IKCiogV2VkIFNlcCAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgIi9zYmluL2lwIHJvdXRlIGZsdXNoIHByb3RvIHplYnJhIiB0byB6ZWJyYSBSSCBpbml0IG9uIHN0YXJ0dXAKCiogU2F0IEF1ZyAyNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGN1cnJlbnQgQ1ZTCi0gYWRkIE9TUEYgcG9pbnQgdG8gbXVsdGlwb2ludCBwYXRjaAotIGFkZCBPU1BGIGJ1Z2ZpeGVzCi0gYWRkIEJHUCBoYXNoIG9wdGltaXNhdGlvbiBwYXRjaAoKKiBGcmkgSnVuIDE0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45My1wcmUxIC8gQ1ZTCi0gYWRkIGxpbmsgc3RhdGUgZGV0ZWN0aW9uIHN1cHBvcnQKLSBhZGQgZ2VuZXJpYyBQdFAgYW5kIFJGQzMwMjEgc3VwcG9ydAotIHZhcmlvdXMgYnVnIGZpeGVzCgoqIFRodSBBdWcgMDkgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTYKLSBGaXggYnVnICM1MTMzNgoKKiBXZWQgQXVnICAxIDIwMDEgVHJvbmQgRWl2aW5kIEdsb21zcvhkIDx0ZWdAcmVkaGF0LmNvbT4gMC45MWEtNQotIFVzZSBnZW5lcmljIGluaXRzY3JpcHQgc3RyaW5ncyBpbnN0ZWFkIG9mIGluaXRzY3JpcHQgc3BlY2lmaWMKICAoICJTdGFydGluZyBmb286ICIgLT4gIlN0YXJ0aW5nICRwcm9nOiIgKQoKKiBGcmkgSnVsIDI3IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS00Ci0gQnVtcCB0aGUgcmVsZWFzZSB3aGVuIHJlYnVpbGRpbmcgaW50byB0aGUgZGlzdC4KCiogVHVlIEZlYiAgNiAyMDAxIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KLSBidWlsdCBmb3IgUG93ZXJ0b29scwoKKiBTdW4gRmViICA0IDIwMDEgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4gCi0gSGFja2VkIHVwIGZyb20gUExEIExpbnV4IDAuOTAtMSwgTWFuZHJha2UgMC45MC0xbWRrIGFuZCBvbmUgZnJvbSB6ZWJyYS5vcmcuCi0gVXBkYXRlIHRvIDAuOTFhCi0gVmVyeSBoZWF2eSBtb2RpZmljYXRpb25zIHRvIGluaXQuZC8qLCAuc3BlYywgcGFtLCBpMThuLCBsb2dyb3RhdGUsIGV0Yy4KLSBTaG91bGQgYmUgcXVpdGUgUmVkIEhhdCdpc3F1ZSBub3cuCg==