IyBjb25kaXRpb25hbHMKJWRlZmluZSAJd2l0aF9zbm1wCTAKJWRlZmluZQkJd2l0aF92dHlzaAkxCiVkZWZpbmUJCXdpdGhfb3NwZl90ZQkxCiVkZWZpbmUJCXdpdGhfbnNzYQkxCiVkZWZpbmUJCXdpdGhfb3BhcXVlX2xzYSAxCiVkZWZpbmUJCXdpdGhfdGNwX3plYnJhCTAKJWRlZmluZQkJd2l0aF92dHlzaAkxCiVkZWZpbmUJCXdpdGhfcGFtCTEKJWRlZmluZQkJd2l0aF9pcHY2CTEKJWRlZmluZQkJd2l0aF9tdWx0aXBhdGgJNjQKCiMgcGF0aCBkZWZpbmVzCiVkZWZpbmUJCV9zeXNjb25mZGlyCS9ldGMvemVicmEKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJemVicmEKVmVyc2lvbjoJMC45NApSZWxlYXNlOgkyMDAzMDIxMzAxCkxpY2Vuc2U6CUdQTApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKU291cmNlMDoJZnRwOi8vZnRwLnplYnJhLm9yZy9wdWIvemVicmEvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negpVUkw6CQlodHRwOi8vd3d3LnplYnJhLm9yZy8KJWlmICV3aXRoX3NubXAKQnVpbGRSZXF1aXJlczoJdWNkLXNubXAtZGV2ZWwKUHJlcmVxOgkJdWNkLXNubXAKJWVuZGlmCiVpZiAld2l0aF92dHlzaApCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBvcGVuc3NsLWRldmVsIHBhbS1kZXZlbCBwYXRjaAojIEluaXRzY3JpcHRzID4gNS42MCBpcyByZXF1aXJlZCBmb3IgSVB2NiBzdXBwb3J0ClByZXJlcToJCWluaXRzY3JpcHRzID49IDUuNjAKUHJlcmVxOgkJb3BlbnNzbCBuY3Vyc2VzIHJlYWRsaW5lIHBhbQpQcmVyZXE6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0CgolZGVzY3JpcHRpb24KR05VIFplYnJhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpHTlUgWmVicmEgc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KCkdOVSBaZWJyYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlClJlZmxlY3Rvci4gSXQgaXMgbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyCmEgbmV3IGFyY2hpdGVjdHVyZS4gR05VIFplYnJhIGlzIHVuaXF1ZSBpbiBkZXNpZ24gaW4gdGhhdCBpdCBoYXMgYQpwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKJXByZXAKJXNldHVwICAtcQoKJWJ1aWxkCiVjb25maWd1cmUgXAoJLS13aXRoLWNmbGFncz0iLU8yIiBcCgktLWVuYWJsZS1uZXRsaW5rIFwKJWlmICV3aXRoX2lwdjYKCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV3aXRoX3NubXAKCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV3aXRoX211bHRpcGF0aAoJLS1lbmFibGUtbXVsdGlwYXRoPSV3aXRoX211bHRpcGF0aCBcCiVlbmRpZgolaWYgJXdpdGhfdGNwX3plYnJhCgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV3aXRoX25zc2EKCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV3aXRoX29wYXF1ZV9sc2EKCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV3aXRoX29zcGZfdGUKCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV3aXRoX3Z0eXNoCgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXdpdGhfcGFtCgktLXdpdGgtbGlicGFtCiVlbmRpZgoKcHVzaGQgdnR5c2gKbWFrZSAlez9fc21wX21mbGFnc30gcmVidWlsZApwb3BkCgptYWtlICV7P19zbXBfbWZsYWdzfSBNQUtFSU5GTz0ibWFrZWluZm8gLS1uby1zcGxpdCIKCnB1c2hkIGRvYwp0ZXhpMmh0bWwgemVicmEudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvemVicmEgJFJQTV9CVUlMRF9ST09UJXtfaW5mb2Rpcn0KCm1ha2UgaW5zdGFsbCBcCglERVNURElSPSRSUE1fQlVJTERfUk9PVAoKaW5zdGFsbCAle3plYl9yaF9zcmN9L3plYnJhLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC96ZWJyYQppbnN0YWxsICV7emViX3JoX3NyY30vYmdwZC5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvYmdwZAolaWYgJXdpdGhfaXB2NgppbnN0YWxsICV7emViX3JoX3NyY30vb3NwZjZkLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC9vc3BmNmQKaW5zdGFsbCAle3plYl9yaF9zcmN9L3JpcG5nZC5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvcmlwbmdkCiVlbmRpZgppbnN0YWxsICV7emViX3JoX3NyY30vb3NwZmQuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL29zcGZkCmluc3RhbGwgJXt6ZWJfcmhfc3JjfS9yaXBkLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC9yaXBkCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS96ZWJyYS5wYW0gJFJQTV9CVUlMRF9ST09UL2V0Yy9wYW0uZC96ZWJyYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vemVicmEubG9ncm90YXRlICRSUE1fQlVJTERfUk9PVC9ldGMvbG9ncm90YXRlLmQvemVicmEKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgISBncmVwIC1xICJeJDFbXmEtekEtWjAtOV0iIC9ldGMvc2VydmljZXMgOyB0aGVuCiAgICBlY2hvICIkMQkJJDIJCQkjICQzIiAgPj4gL2V0Yy9zZXJ2aWNlcwogIGZpCn0KCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmEgICAgMjYwMS90Y3AgInplYnJhIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBkICAgICAyNjAyL3RjcCAiUklQZCB2dHkiCiVpZiAld2l0aF9pcHY2CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwbmdkICAgMjYwMy90Y3AgIlJJUG5nZCB2dHkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZkICAgIDI2MDQvdGNwICJPU1BGZCB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgYmdwZCAgICAgMjYwNS90Y3AgIkJHUGQgdnR5IgolaWYgJXdpdGhfaXB2Ngp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKCi9zYmluL2Noa2NvbmZpZyAtLWFkZCB6ZWJyYSAKL3NiaW4vY2hrY29uZmlnIC0tYWRkIHJpcGQKJWlmICV3aXRoX2lwdjYKL3NiaW4vY2hrY29uZmlnIC0tYWRkIHJpcG5nZAovc2Jpbi9jaGtjb25maWcgLS1hZGQgb3NwZjZkCiVlbmRpZgovc2Jpbi9jaGtjb25maWcgLS1hZGQgb3NwZmQKL3NiaW4vY2hrY29uZmlnIC0tYWRkIGJncGQKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS96ZWJyYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKIyBDcmVhdGUgZHVtbXkgZmlsZXMgaWYgdGhleSBkb24ndCBleGlzdCBzbyBiYXNpYyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQuCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mIF07IHRoZW4KCWVjaG8gImhvc3RuYW1lIGBob3N0bmFtZWAiID4gJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKZmkKaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYgXTsgdGhlbgoJdG91Y2ggJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKZmkKCiVwb3N0dW4KaWYgWyAiJDEiIC1nZSAgIjEiIF07IHRoZW4KCS9ldGMvcmMuZC9pbml0LmQvemVicmEgIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQoJL2V0Yy9yYy5kL2luaXQuZC9yaXBkICAgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCiVpZiAld2l0aF9pcHY2CgkvZXRjL3JjLmQvaW5pdC5kL3JpcG5nZCBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKJWVuZGlmCgkvZXRjL3JjLmQvaW5pdC5kL29zcGZkICBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKJWlmICV3aXRoX2lwdjYKCS9ldGMvcmMuZC9pbml0LmQvb3NwZjZkIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQolZW5kaWYKCS9ldGMvcmMuZC9pbml0LmQvYmdwZCAgIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQpmaQovc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vemVicmEuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiVwcmV1bgppZiBbICIkMSIgPSAiMCIgXTsgdGhlbgogICAgICAgIC9zYmluL2Noa2NvbmZpZyAtLWRlbCB6ZWJyYQoJL3NiaW4vY2hrY29uZmlnIC0tZGVsIHJpcGQKJWlmICV3aXRoX2lwdjYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCByaXBuZ2QKJWVuZGlmCgkvc2Jpbi9jaGtjb25maWcgLS1kZWwgb3NwZmQKJWlmICV3aXRoX2lwdjYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCBvc3BmNmQKJWVuZGlmCgkvc2Jpbi9jaGtjb25maWcgLS1kZWwgYmdwZApmaQoKJWNsZWFuCiNybSAtcmYgJFJQTV9CVUlMRF9ST09UCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogdG9vbHMgQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3plYnJhLmh0bWwKJWRvYyBkb2MvbXBscwolZG9jIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FIFJFUE9SVElORy1CVUdTIFNFUlZJQ0VTIFRPRE8KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvbG9nL3plYnJhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS8qCiVpZiAld2l0aF92dHlzaAole19iaW5kaXJ9LyoKJWVuZGlmCiVjb25maWcgL2V0Yy96ZWJyYS8qCiVjb25maWcgL2V0Yy9yYy5kL2luaXQuZC8qCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3BhbS5kL3plYnJhCiVjb25maWcobm9yZXBsYWNlKSAlYXR0cig2NDAscm9vdCxyb290KSAvZXRjL2xvZ3JvdGF0ZS5kLyoKCiVjaGFuZ2Vsb2cKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K