IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolaWYgJXdpdGhfaXB2NgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIGlzaXNkIG9zcGZkIHJpcG5nZCBvc3BmNmQgYmdwZAolZWxzZQolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIGlzaXNkIG9zcGZkIGJncGQKJWVuZGlmCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClBhdGNoMDoJCXF1YWdnYS1vc3BmZC1kdW1wLW5zbS1pZ25vcmUuZGlmZgpQYXRjaDE6CQlxdWFnZ2Etb3NwZmQtaWZhY2UtY29uZmlnLXBlcnNpc3QuZGlmZgpVUkw6CQlodHRwOi8vd3d3LnF1YWdnYS5uZXQKJWlmICV3aXRoX3NubXAKQnVpbGRSZXF1aXJlczoJdWNkLXNubXAtZGV2ZWwKUHJlcmVxOgkJdWNkLXNubXAKJWVuZGlmCiVpZiAld2l0aF92dHlzaApCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBwYW0tZGV2ZWwgcGF0Y2ggbGliY2FwLWRldmVsCiMgSW5pdHNjcmlwdHMgPiA1LjYwIGlzIHJlcXVpcmVkIGZvciBJUHY2IHN1cHBvcnQKUHJlcmVxOgkJaW5pdHNjcmlwdHMgPj0gNS42MApQcmVyZXE6CQluY3Vyc2VzIHJlYWRsaW5lIHBhbQpQcmVyZXE6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0IHplYnJhCgolZGVzY3JpcHRpb24KUXVhZ2dhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpRdWFnZ2Egc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KClF1YWdnYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlIFJlZmxlY3Rvci4gSXQgaXMKbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyIGEgbmV3IGFyY2hpdGVjdHVyZS4KUXVhZ2dhIGJ5IGRlc2lnbiBoYXMgYSBwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKUXVhZ2dhIGlzIGEgZm9yayBvZiBHTlUgWmVicmEuCgolcGFja2FnZSBjb250cmliClN1bW1hcnk6IGNvbnRyaWIgdG9vbHMgZm9yIHF1YWdnYQpHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBjb250cmliCkNvbnRyaWJ1dGVkLzNyZCBwYXJ0eSB0b29scyB3aGljaCBtYXkgYmUgb2YgdXNlIHdpdGggcXVhZ2dhLgoKJXBhY2thZ2UgZGV2ZWwKU3VtbWFyeTogSGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgZm9yIHF1YWdnYSBkZXZlbG9wbWVudApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBkZXZlbApUaGUgcXVhZ2dhLWRldmVsIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIG5lY2Nlc3NhcnkgZm9yCmRldmVsb3BpbmcgT1NQRi1BUEkgYW5kIHF1YWdnYSBhcHBsaWNhdGlvbnMuCgolcHJlcAolc2V0dXAgIC1xCiVwYXRjaDAgLXAwIC1iIC5kdW1wX25zbQolcGF0Y2gwIC1wMSAtYiAuaWZhY2VfcGVyc2lzdAoKJWJ1aWxkCiVjb25maWd1cmUgXAolaWYgJXdpdGhfaXB2NgoJLS1lbmFibGUtaXB2NiBcCiVlbmRpZgolaWYgJXdpdGhfc25tcAoJLS1lbmFibGUtc25tcCBcCiVlbmRpZgolaWYgJXdpdGhfbXVsdGlwYXRoCgktLWVuYWJsZS1tdWx0aXBhdGg9JXdpdGhfbXVsdGlwYXRoIFwKJWVuZGlmCiVpZiAld2l0aF90Y3BfemVicmEKCS0tZW5hYmxlLXRjcC16ZWJyYSBcCiVlbmRpZgolaWYgJXdpdGhfbnNzYQoJLS1lbmFibGUtbnNzYSBcCiVlbmRpZgolaWYgJXdpdGhfb3BhcXVlX2xzYQoJLS1lbmFibGUtb3BhcXVlLWxzYSBcCiVlbmRpZgolaWYgJXdpdGhfb3NwZl90ZQoJLS1lbmFibGUtb3NwZi10ZSBcCiVlbmRpZgolaWYgJXdpdGhfdnR5c2gKCS0tZW5hYmxlLXZ0eXNoIFwKJWVuZGlmCiVpZiAld2l0aF9vc3BmY2xpZW50IAoJLS1lbmFibGUtb3NwZmNsaWVudD15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmNsaWVudD1ub1wKJWVuZGlmCiVpZiAld2l0aF9vc3BmYXBpCgktLWVuYWJsZS1vc3BmYXBpPXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmYXBpPW5vIFwKJWVuZGlmCiVpZiAld2l0aF9wYW0KCS0td2l0aC1saWJwYW0gXAolZW5kaWYKJWlmICVxdWFnZ2FfdXNlcgoJLS1lbmFibGUtdXNlcj0lcXVhZ2dhX3VzZXIgXAoJLS1lbmFibGUtZ3JvdXA9JXF1YWdnYV91c2VyIFwKJWVuZGlmCiVpZiAldnR5X2dyb3VwCgktLWVuYWJsZS12dHktZ3JvdXA9JXZ0eV9ncm91cCBcCiVlbmRpZgotLWVuYWJsZS1uZXRsaW5rCgptYWtlICV7P19zbXBfbWZsYWdzfSBNQUtFSU5GTz0ibWFrZWluZm8gLS1uby1zcGxpdCIKCnB1c2hkIGRvYwp0ZXhpMmh0bWwgcXVhZ2dhLnRleGkKcG9wZAoKJWluc3RhbGwKcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKaW5zdGFsbCAtZCAkUlBNX0JVSUxEX1JPT1QvZXRjL3tyYy5kL2luaXQuZCxzeXNjb25maWcsbG9ncm90YXRlLmQscGFtLmR9IFwKCSRSUE1fQlVJTERfUk9PVC92YXIvbG9nL3F1YWdnYSAkUlBNX0JVSUxEX1JPT1Qle19pbmZvZGlyfQoKbWFrZSBpbnN0YWxsIFwKCURFU1RESVI9JFJQTV9CVUlMRF9ST09UCgojIFJlbW92ZSB0aGlzIGZpbGUsIGFzIGl0IGlzIHVuaW5zdGFsbGVkIGFuZCBjYXVzZXMgZXJyb3JzIHdoZW4gYnVpbGRpbmcgb24gUkg5CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvdXNyL3NoYXJlL2luZm8vZGlyCgojIGluc3RhbGwgZXRjIHNvdXJjZXMKZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJaW5zdGFsbCAle3plYl9yaF9zcmN9LyR7ZGFlbW9ufS5pbml0IFwKCQkkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufQpkb25lCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2EucGFtIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvcGFtLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2EubG9ncm90YXRlIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvbG9ncm90YXRlLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2Euc3lzY29uZmlnIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvc3lzY29uZmlnL3F1YWdnYQppbnN0YWxsIC1kIC1tNzUwICAkUlBNX0JVSUxEX1JPT1QvdmFyL3J1bi9xdWFnZ2EKCiVwcmUKIyBhZGQgdnR5X2dyb3VwCiVpZiAldnR5X2dyb3VwCmdyb3VwYWRkIC1yICV2dHlfZ3JvdXAgMj4gL2Rldi9udWxsIHx8IDoKJWVuZGlmCiMgYWRkIHF1YWdnYSB1c2VyIGFuZCBncm91cAolaWYgJXF1YWdnYV91c2VyCi91c3Ivc2Jpbi9ncm91cGFkZCAtZyAlcXVhZ2dhX2dpZCBxdWFnZ2EgMj4gL2Rldi9udWxsIHx8IDoKL3Vzci9zYmluL3VzZXJhZGQgIC11ICVxdWFnZ2FfdWlkIC1nICVxdWFnZ2FfZ2lkIFwKIC1NIC1yIC1zIC9zYmluL25vbG9naW4gLWMgIlF1YWdnYSByb3V0aW5nIHN1aXRlIiBcCiAtZCAlX2xvY2Fsc3RhdGVkaXIgJXF1YWdnYV91c2VyIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgoKJXBvc3QKIyB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIDxzZXJ2aWNlIG5hbWU+IDxwb3J0L3Byb3RvPiA8Y29tbWVudD4KIyBlLmcuIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlICgpCnsKICAjIEFkZCBwb3J0IC9ldGMvc2VydmljZXMgZW50cnkgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZSAKICBpZiBbIC1mIC9ldGMvc2VydmljZXMgXSAmJiAhIGdyZXAgLXEgIl4kMVteYS16QS1aMC05XSIgL2V0Yy9zZXJ2aWNlcyA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV3aXRoX2lwdjYKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBuZ2QgICAyNjAzL3RjcCAiUklQbmdkIHZ0eSIKJWVuZGlmCnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmQgICAgMjYwNC90Y3AgIk9TUEZkIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSBiZ3BkICAgICAyNjA1L3RjcCAiQkdQZCB2dHkiCiVpZiAld2l0aF9pcHY2CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZjZkICAgMjYwNi90Y3AgIk9TUEY2ZCB2dHkiCiVlbmRpZgolaWYgJXdpdGhfb3NwZmFwaQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgaXNpc2QgICAgMjYwOC90Y3AgIklTSVNkIHZ0eSIKCmZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCS9zYmluL2Noa2NvbmZpZyAtLWFkZCAke2RhZW1vbn0KZG9uZQoKL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKIyBDcmVhdGUgZHVtbXkgZmlsZXMgaWYgdGhleSBkb24ndCBleGlzdCBzbyBiYXNpYyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQuCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mIF07IHRoZW4KCWVjaG8gImhvc3RuYW1lIGBob3N0bmFtZWAiID4gJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKZmkKaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYgXTsgdGhlbgoJdG91Y2ggJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKZmkKCiVwb3N0dW4KaWYgWyAiJDEiIC1nZSAgIjEiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKCWRvbmUKZmkKCiVwcmV1bgppZiBbICIkMSIgPSAiMCIgXTsgdGhlbgoJZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJCS9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259IHN0b3AgID4vZGV2L251bGwgMj4mMQoJCS9zYmluL2Noa2NvbmZpZyAtLWRlbCAke2RhZW1vbn0KCWRvbmUKCS9zYmluL2luc3RhbGwtaW5mbyAtLWRlbGV0ZSAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKZmkKCiVjbGVhbgojcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jICovKi5zYW1wbGUqIEFVVEhPUlMgQ09QWUlORwolZG9jIGRvYy9xdWFnZ2EuaHRtbAolZG9jIGRvYy9tcGxzCiVkb2MgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgUkVQT1JUSU5HLUJVR1MgU0VSVklDRVMgVE9ETwolaWYgJXF1YWdnYV91c2VyCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvbG9nL3F1YWdnYSAKJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9ydW4vcXVhZ2dhCiVlbHNlCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAvdmFyL2xvZy9xdWFnZ2EKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAvdXNyL3NoYXJlL2luZm8KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAvdmFyL3J1bi9xdWFnZ2EKJWVuZGlmCiVpZiAldnR5X2dyb3VwCiVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS8qCiVpZiAld2l0aF92dHlzaAole19iaW5kaXJ9LyoKJWVuZGlmCiVjb25maWcgL2V0Yy9xdWFnZ2EvWyF2XSoKJWNvbmZpZyAvZXRjL3JjLmQvaW5pdC5kLyoKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvc3lzY29uZmlnL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9wYW0uZC9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpICVhdHRyKDY0MCxyb290LHJvb3QpIC9ldGMvbG9ncm90YXRlLmQvKgoKJWZpbGVzIGNvbnRyaWIKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgdG9vbHMKCiVmaWxlcyBkZXZlbAolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRpciAle19saWJkaXJ9LyoKJWRpciAle19pbmNsdWRlZGlyfS8lbmFtZS8qLmgKJWRpciAle19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmZC8qLmgKJWlmICV3aXRoX29zcGZhcGkKJWRpciAle19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmYXBpLyouaAolZW5kaWYKCiVjaGFuZ2Vsb2cKJWNoYW5nZWxvZwoqIFRodSBKYW4gMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gdXBkYXRlZCBzeXNjb25maWcgZmlsZXMgdG8gc3BlY2lmeSBsb2NhbCBkaXIKLSBhZGRlZCBvc3BmX2R1bXAuYyBjcmFzaCBxdWljayBmaXggcGF0Y2gKLSBhZGRlZCBvc3BmZCBwZXJzaXN0ZW50IGludGVyZmFjZSBjb25maWd1cmF0aW9uIHBhdGNoCgoqIFR1ZSBEZWMgMzAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gc3luYyB0byBDVlMKLSBpbnRlZ3JhdGUgUkggc3lzY29uZmlnIHBhdGNoIHRvIHNwZWNpZnkgZGFlbW9uIG9wdGlvbnMgKFJIKQotIGRlZmF1bHQgdG8gaGF2ZSB2dHkgbGlzdGVuIG9ubHkgdG8gMTI3LjEgKFJIKQotIGFkZCB1c2VyIHdpdGggZml4ZWQgVUlEL0dJRCAoUkgpCi0gY3JlYXRlIHVzZXIgd2l0aCBzaGVsbCAvc2Jpbi9ub2xvZ2luIHJhdGhlciB0aGFuIC9iaW4vZmFsc2UgKFJIKQotIHN0b3AgZGFlbW9ucyBvbiB1bmluc3RhbGwgKFJIKQotIGRlbGV0ZSBpbmZvIGZpbGUgb24gJXByZXVuLCBub3QgJXBvc3R1biB0byBhdm9pZCBkZWxldGlvbiBvbiB1cGdyYWRlLiAoUkgpCi0gaXNpc2QgYWRkZWQKLSBjbGVhbnVwIHRhc2tzIGNhcnJpZWQgb3V0IGZvciBldmVyeSBkYWVtb24KCiogU3VuIE5vdiAyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCAtZGV2ZWwgcGFja2FnZSB0byBpbmNsdWRlIGFsbCBmaWxlcwotIFN5bmMgdG8gMC45Ni40CgoqIFR1ZSBBdWcgMTIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gUmVuYW1lZCB0byBRdWFnZ2EKLSBTeW5jIHRvIFF1YWdnYSByZWxlYXNlIDAuOTYKCiogVHVlIE1hciAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB6ZWJyYSBwcml2aWxlZ2VzIHN1cHBvcnQKCiogTW9uIE1hciAxOCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggbWVtIGxlYWsgaW4gJ3Nob3cgdGhyZWFkIGNwdScKLSBSYWxwaCBLZWxsZXIncyBPU1BGLUFQSQotIEFtaXI6IEZpeCBjb25maWd1cmUuYWMgZm9yIG5ldC1zbm1wCgoqIFNhdCBNYXIgMSAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBvc3BmZCBJT1MgcHJlZml4IHRvIGludGVyZmFjZSBtYXRjaGluZyBmb3IgJ25ldHdvcmsnIHN0YXRlbWVudAotIHRlbXBvcmFyeSBmaXggZm9yIFB0UCBhbmQgSVB2NgotIHN5bmMgdG8gemVicmEub3JnIENWUwoKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K