ZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVJIRUw3LjEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZiNDA1NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoCkBAIC0wLDAgKzEsNTI4IEBACisjIS9iaW4vYmFzaCAKKworIyMKKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbDs25pY2EgSW52ZXN0aWdhY2nDs24geSBEZXNhcnJvbGxvLCBTLkEuVS4KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygb3Blbm1hbm8KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyMgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4KKyMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIEZvciB0aG9zZSB1c2FnZXMgbm90IGNvdmVyZWQgYnkgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCBwbGVhc2UKKyMgY29udGFjdCB3aXRoOiBuZnZsYWJzQHRpZC5lcworIyMKKworIyBBdXRob3JzOiBBbnRvbmlvIExvcGV6LCBQYWJsbyBNb250ZXMsIEFsZm9uc28gVGllcm5vCisjIEp1bHkgMjAxNQorCisjIFBlcnNvbmFsaXplIFJIRUw3LjEgb24gY29tcHV0ZSBub2RlcworIyBQcmVwYXJlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBuZXR3b3JrIGNhcmQgZHJpdmVyczoKKyMgCXRnMywgaWdiIGRyaXZlcnMgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlcworIyAJaXhnYmUgKEludGVsIE5pYW50aWMpIGFuZCBpNDBlIChJbnRlbCBGb3J0dmlsbGUpIGRyaXZlcnMgZm9yIGRhdGEgcGxhbmUgaW50ZXJmYWNlcworCisjIFRvIGRvd25sb2FkOgorIyB3Z2V0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uZnZsYWJzL29wZW5tYW5vL21hc3Rlci9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtUkhFTDcuMS5zaAorIyBUbyBleGVjdXRlOgorIyBjaG1vZCAreCAuL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtUkhFTDcuMS5zaAorIyBzdWRvIC4vY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoIDx1c2VyPiA8aWZhY2U+CisKKyMgQXNzdW1wdGlvbnM6CisjIEFsbCB2aXJ0dWFsaXphdGlvbiBvcHRpb25zIGFjdGl2YXRlZCBvbiBCSU9TICh2dC1kLCB2dC14LCBTUi1JT1YsIG5vIHBvd2VyIHNhdmluZ3MuLi4pCisjIFJIRUw3LjEgaW5zdGFsbGVkIHdpdGhvdXQgL2hvbWUgcGFydGl0aW9uIGFuZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgc2VsZWN0aW9uOgorIyBAYmFzZSwgQGNvcmUsIEBkZXZlbG9wbWVudCwgQG5ldHdvcmstZmlsZS1zeXN0ZW0tY2xpZW50LCBAdmlydHVhbGl6YXRpb24taHlwZXJ2aXNvciwgQHZpcnR1YWxpemF0aW9uLXBsYXRmb3JtLCBAdmlydHVhbGl6YXRpb24tdG9vbHMKKworCitmdW5jdGlvbiB1c2FnZSgpeworICAgIGVjaG8gLWUgIlVzYWdlOiBzdWRvICQwIFsteV0gPHVzZXItbmFtZT4gIFsgPGlmYWNlLW5hbWU+ICBbPGlwLWFkZHJlc3M+fGRoY3BdIF0iCisgICAgZWNobyAtZSAiICBDb25maWd1cmUgY29tcHV0ZSBob3N0IGZvciBWSU0gdXNhZ2UuICh2ZXJzaW9uIDAuNCkuIFBhcmFtczoiCisgICAgZWNobyAtZSAiICAgICAteSAgZG8gbm90IHByb21wdCBmb3IgY29uZmlybWF0aW9uLiBJZiBhIG5ldyB1c2VyIGlzIGNyZWF0ZWQsIHRoZSB1c2VyIG5hbWUgaXMgc2V0IGFzIHBhc3N3b3JkIgorICAgIGVjaG8gLWUgIiAgICAgPHVzZXItbmFtZT4gQ3JlYXRlIGlmIG5vdCBleGlzdCBhbmQgY29uZmlndXJlIHRoaXMgdXNlciBmb3Igb3BlbnZpbSB0byBjb25uZWN0IgorICAgIGVjaG8gLWUgIiAgICAgPGlmYWNlLW5hbWU+IGlmIHN1cGxpZWQgY3JlYXRlcyBicmlkZ2UgaW50ZXJmYWNlcyBvbiB0aGlzIGludGVyZmFjZSwgbmVlZGVkIGZvciBvcGVudmltIgorICAgIGVjaG8gLWUgIiAgICAgaXAgb3IgZGhjcCBpZiBzdXBsaWVkLCBjb25maWd1cmUgdGhlIGludGVyZmFjZSB3aXRoIHRoaXMgaXAgYWRkcmVzcyAoLzI0KSBvciAnZGhjcCcgIgorfQorCisKKyMxIENIRUNLIGlucHV0IHBhcmFtZXRlcnMKKyMxLjEgcm9vdCBwcml2aWxlZ2VzCitbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgZWNobyAiTmVlZGVkIHJvb3QgcHJpdmlsZWdlcyIgJiYgdXNhZ2UgJiYgZXhpdCAtMQorCisjMS4yIGlucHV0IHBhcmFtZXRlcnMKK0ZPUkNFPSIiCit3aGlsZSBnZXRvcHRzICJ5IiBvOyBkbworICAgIGNhc2UgIiR7b30iIGluCisgICAgICAgIHkpCisgICAgICAgICAgICBGT1JDRT0ieWVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIHVzYWdlCisgICAgICAgICAgICBleGl0IC0xCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKE9QVElORC0xKSkKKworCitpZiBbICQjIC1sdCAxIF0gIAordGhlbgorICB1c2FnZQorICBleGl0CitmaQorCit1c2VyX25hbWU9JDEKK2ludGVyZmFjZT0kMgoraXBfaWZhY2U9JDMKKworaWYgWyAtbiAiJGludGVyZmFjZSIgXSAmJiAhIGlmY29uZmlnICRpbnRlcmZhY2UgJj4gL2Rldi9udWxsCit0aGVuCisgIGVjaG8gIkVycm9yOiBpbnRlcmZhY2UgJyRpbnRlcmZhY2UnIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0iCisgIHVzYWdlCisgIGV4aXQgMQorZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBORUVERUQgUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIFJlcXVpcmVkIHBhY2thZ2VzCit5dW0gcmVwb2xpc3QKK3l1bSBjaGVjay11cGRhdGUKK3l1bSB1cGRhdGUgLXkKK3l1bSBpbnN0YWxsIC15IHNjcmVlbiB2aXJ0LW1hbmFnZXIgZXRodG9vbCBnY2MgZ2NjLWMrKyB4b3JnLXgxMS14YXV0aCB4b3JnLXgxMS14aW5pdCB4b3JnLXgxMS1kZXByZWNhdGVkLWxpYnMgbGliWHRzdCBndWVzdGZpc2ggaHdsb2MgbGliaHVnZXRsYmZzLXV0aWxzIGxpYmd1ZXN0ZnMtdG9vbHMgbnVtYWN0bAorIyBTZWxpbnV4IG1hbmFnZW1lbnQKK3l1bSBpbnN0YWxsIC15IHBvbGljeWNvcmV1dGlscy1weXRob24KKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBVU0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIEFkZCByZXF1aXJlZCBncm91cHMKK2dyb3VwYWRkIC1mIG5mdmdyb3VwCitncm91cGFkZCAtZiBsaWJ2aXJ0ICAgI2ZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBtYXkgYmUgbGlidmlydGQKKworIyBBZGRzIHVzZXIsIGRlZmF1bHQgcGFzc3dvcmQgc2FtZSBhcyBuYW1lCitpZiBncmVwIC1xICJeJHt1c2VyX25hbWV9OiIgL2V0Yy9wYXNzd2QKK3RoZW4gCisgICN1c2VyIGV4aXN0LCBhZGQgdG8gZ3JvdXAKKyAgZWNobyAiYWRkaW5nIHVzZXIgJHt1c2VyX25hbWV9IHRvIGdyb3VwcyBsaWJ2aXJ0LG5mdmdyb3VwIgorICB1c2VybW9kIC1hIC1HIGxpYnZpcnQsbmZ2Z3JvdXAgLWcgbmZ2Z3JvdXAgJHVzZXJfbmFtZQorZWxzZSAKKyAgI2NyZWF0ZSB1c2VyIGlmIGl0IGRvZXMgbm90IGV4aXN0CisgIFsgLXogIiRGT1JDRSIgXSAmJiByZWFkIC1wICJ1c2VyICcke3VzZXJfbmFtZX0nIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgKFkvbikiIGtrCisgIGlmICEgWyAteiAiJGtrIiAtbyAiJGtrIj0ieSIgLW8gIiRrayI9IlkiIF0KKyAgdGhlbgorICAgIGV4aXQKKyAgZmkKKyAgZWNobyAiY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nIHVzZXIgJHt1c2VyX25hbWV9IgorICB1c2VyYWRkIC1tIC1HIGxpYnZpcnQsbmZ2Z3JvdXAgLWcgbmZ2Z3JvdXAgJHVzZXJfbmFtZSAgICAgICAKKyAgI1Bhc3N3b3JkCisgIGlmIFsgLXogIiRGT1JDRSIgXSAKKyAgdGhlbiAKKyAgICAgZWNobyAiUHJvdmlkZSBhIHBhc3N3b3JkIGZvciAkdXNlcl9uYW1lIgorICAgICBwYXNzd2QgJHVzZXJfbmFtZQorICBlbHNlCisgICAgIGVjaG8gLWUgIiR1c2VyX25hbWVcbiR1c2VyX25hbWUiIHwgcGFzc3dkIC0tc3RkaW4gJHVzZXJfbmFtZQorICBmaQorZmkKKworI1NldHRpbmcgZGVmYXVsdCBsaWJ2aXJ0IFVSSSBmb3IgdGhlIHVzZXIKK2VjaG8gIlNldHRpbmcgZGVmYXVsdCBsaWJ2aXJ0IFVSSSBmb3IgdGhlIHVzZXIiCitlY2hvICJpZiB0ZXN0IC14IGB3aGljaCB2aXJzaGA7IHRoZW4iID4+IC9ob21lLyR7dXNlcl9uYW1lfS8uYmFzaF9wcm9maWxlCitlY2hvICIgIGV4cG9ydCBMSUJWSVJUX0RFRkFVTFRfVVJJPXFlbXU6Ly8vc3lzdGVtIiA+PiAvaG9tZS8ke3VzZXJfbmFtZX0vLmJhc2hfcHJvZmlsZQorZWNobyAiZmkiID4+IC9ob21lLyR7dXNlcl9uYW1lfS8uYmFzaF9wcm9maWxlCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIElOU1RBTEwgSFVHRVBBR0VTIElTT0xDUFVTIEdSVUIgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBIdWdlIHBhZ2VzIDFHIGF1dG8gbW91bnQKK21rZGlyIC1wIC9tbnQvaHVnZQoraWYgISBncmVwIC1xICJIdWdlIHBhZ2VzIiAvZXRjL2ZzdGFiCit0aGVuCisgIGVjaG8gIiIgPj4gL2V0Yy9mc3RhYgorICBlY2hvICIjIEh1Z2UgcGFnZXMiID4+IC9ldGMvZnN0YWIKKyAgZWNobyAibm9kZXYgL21udC9odWdlIGh1Z2V0bGJmcyBwYWdlc2l6ZT0xR0IgMCAwIiA+PiAvZXRjL2ZzdGFiCisgIGVjaG8gIiIgPj4gL2V0Yy9mc3RhYgorZmkKKworIyBIdWdlIHBhZ2VzIHJlc2VydmF0aW9uIHNlcnZpY2UKK2lmICEgWyAtZiAvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS9odWdldGxiLWdpZ2FudGljLXBhZ2VzLnNlcnZpY2UgXQordGhlbgorICBlY2hvICJjb25maWd1cmluZyBodWdlIHBhZ2VzIHNlcnZpY2UiCisgIGNhdCA+IC91c3IvbGliL3N5c3RlbWQvc3lzdGVtL2h1Z2V0bGItZ2lnYW50aWMtcGFnZXMuc2VydmljZSA8PCBFT0wKK1tVbml0XQorRGVzY3JpcHRpb249SHVnZVRMQiBHaWdhbnRpYyBQYWdlcyBSZXNlcnZhdGlvbgorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQmVmb3JlPWRldi1odWdlcGFnZXMubW91bnQKK0NvbmRpdGlvblBhdGhFeGlzdHM9L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlCitDb25kaXRpb25LZXJuZWxDb21tYW5kTGluZT1odWdlcGFnZXN6PTFHCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitFeGVjU3RhcnQ9L3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorRU9MCitmaQorIyBHcnViIHZpcnR1YWxpemF0aW9uIG9wdGlvbnM6CisKKyMgR2V0IGlzb2xjcHVzCitpc29sY3B1cz1gZ2F3ayAnQkVHSU57cHJlPS0yO30KKyAgKCQxPT0icHJvY2Vzc29yIil7cHJvPSQzO30KKyAgKCQxPT0iY29yZSIgJiYgJDQhPTApeworICAgICBpZiAocHJlKzE9PXBybyl7ZW5kcmFuZ2U9Ii0iIHByb30KKyAgICAgZWxzZXtjcHVzPWNwdXMgZW5kcmFuZ2Ugc2VwIHBybzsgc2VwPSIsIjsgZW5kcmFuZ2U9IiI7fTsKKyAgICAgcHJlPXBybzt9CisgIEVORHtwcmludGYoIiVzIixjcHVzIGVuZHJhbmdlKTt9JyAvcHJvYy9jcHVpbmZvYAorCisKKyMgSHVnZSBwYWdlcyByZXNlcnZhdGlvbiBmaWxlOiByZXNlcnZpbmcgYWxsIG1lbW9yeSBhcGFydCBmcm9tIDRHQiBwZXIgTlVNQSBub2RlCisjIEdldCB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlczogYWxsIG1lbW9yeSBidXQgOEdCIHJlc2VydmVkIGZvciB0aGUgT1MKKyN0b3RhbG1lbT1gZG1pZGVjb2RlIC0tdHlwZSAxN3xncmVwIFNpemUgfGdyZXAgTUIgfGdhd2sgJ3tzdW1hKz0kMn0gRU5EIHtwcmludCBzdW1hLzEwMjR9J2AKKyNodWdlcGFnZXM9JCgoJHRvdGFsbWVtLTgpKQorCitpZiAhIFsgLWYgL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMgXQordGhlbgorICBjYXQgPiAvdXNyL2xpYi9zeXN0ZW1kL2h1Z2V0bGItcmVzZXJ2ZS1wYWdlcyA8PCBFT0wKKyMhL2Jpbi9iYXNoCitub2Rlc19wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS8KK2lmIFsgISAtZCBcJG5vZGVzX3BhdGggXTsgdGhlbgorICAgICAgICBlY2hvICJFUlJPUjogXCRub2Rlc19wYXRoIGRvZXMgbm90IGV4aXN0IgorICAgICAgICBleGl0IDEKK2ZpCisKK3Jlc2VydmVfcGFnZXMoKQoreworICAgICAgICBlY2hvIFwkMSA+IFwkbm9kZXNfcGF0aC9cJDIvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0xMDQ4NTc2a0IvbnJfaHVnZXBhZ2VzCit9CisKKyMgVGhpcyBleGFtcGxlIHJlc2VydmVzIGFsbCBhdmFpbGFibGUgbWVtb3J5IGFwYXJ0IGZyb20gNCBHQiBmb3IgbGludXgKKyMgdXNpbmcgMUdCIHNpemUuIFlvdSBjYW4gbW9kaWZ5IGl0IHRvIHlvdXIgbmVlZHMgb3IgY29tbWVudCB0aGUgbGluZXMKKyMgdG8gYXZvaWQgcmVzZXJ2ZSBtZW1vcnkgaW4gYSBudW1hIG5vZGUKK0VPTAorICBmb3IgZiBpbiAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZT8vbWVtaW5mbworICBkbworICAgIG5vZGU9YGhlYWQgLW4xICRmIHwgZ2F3ayAnKCQ1PT0ia0IiKXtwcmludCAkMn0nYAorICAgIG1lbW9yeT1gaGVhZCAtbjEgJGYgfCBnYXdrICcoJDU9PSJrQiIpe3ByaW50ICQ0fSdgCisgICAgbWVtb3J5PSQoKG1lbW9yeSsxMDQ4NTc2LTEpKSAgICNtZW1vcnkgbXVzdCBiZSBjZWlsZWQgIAorICAgIG1lbW9yeT0kKChtZW1vcnkvMTA0ODU3NikpICAgI2Zyb20gYGtCIHRvIEdCIAorICAgICNpZiBtZW1vcnkgCisgICAgWyAkbWVtb3J5IC1ndCA0IF0gJiYgZWNobyAicmVzZXJ2ZV9wYWdlcyAkKChtZW1vcnktNCkpIG5vZGUkbm9kZSIgPj4gL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgZG9uZQorCisgICMgUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gZW5hYmxlIGh1Z2UgcGFnZXMgZWFybHkgYm9vdCByZXNlcnZhdGlvbjoKKyAgY2htb2QgK3ggL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgc3lzdGVtY3RsIGVuYWJsZSBodWdldGxiLWdpZ2FudGljLXBhZ2VzCitmaQorCisjIFByZXBhcmVzIHRoZSB0ZXh0IHRvIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBncnViIGxpbmUsIGluY2x1ZGluZyBibGFja2xpc3RpbmcgaXhnYmV2ZiBkcml2ZXIgaW4gdGhlIGhvc3QKK3RleHRva2VybmVsPSJpbnRlbF9pb21tdT1vbiBkZWZhdWx0X2h1Z2VwYWdlc3o9MUcgaHVnZXBhZ2Vzej0xRyBpc29sY3B1cz0kaXNvbGNwdXMgbW9kcHJvYmUuYmxhY2tsaXN0PWl4Z2JldmYgbW9kcHJvYmUuYmxhY2tsaXN0PWk0MGV2ZiIgIAorCisjIEFkZCB0ZXh0IHRvIHRoZSBrZXJuZWwgbGluZQoraWYgISBncmVwIC1xICJpbnRlbF9pb21tdT1vbiBkZWZhdWx0X2h1Z2VwYWdlc3o9MUcgaHVnZXBhZ2Vzej0xRyIgL2V0Yy9kZWZhdWx0L2dydWIKK3RoZW4KKyAgZWNobyAiYWRkaW5nIGNtZGxpbmUgJHt0ZXh0b2tlcm5lbH0iCisgIHNlZCAtaSAiL15HUlVCX0NNRExJTkVfTElOVVg9L3MvXCJcJC8gJHt0ZXh0b2tlcm5lbH1cIi8iIC9ldGMvZGVmYXVsdC9ncnViCisgICMgZ3J1YjIgdXBncmFkZQorICBncnViMi1ta2NvbmZpZyAtbyAvYm9vdC9ncnViMi9ncnViLmNmZworZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgT1RIRVIgQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIERpc2FibGUgcmVxdWlyZXR0eQoraWYgISBncmVwIC1xICIjb3Blbm1hbm8iIC9ldGMvc3Vkb2VycwordGhlbgorICAgIGNhdCA+PiAvaG9tZS8ke3VzZXJfbmFtZX0vc2NyaXB0X3Zpc3Vkby5zaCA8PCBFT0wKKyMhL2Jpbi9iYXNoCitjYXQgXCQxIHwgYXdrICcoXCQwfiJyZXF1aXJldHR5Iil7cHJpbnQgIiMiXCQwfShcJDAhfiJyZXF1aXJldHR5Iil7cHJpbnQgXCQwfScgPiB0bXAKK2NhdCB0bXAgPiBcJDEKK3JtIHRtcAorRU9MCisgICAgY2htb2QgK3ggL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2gKKyAgICBlY2hvICJEaXNhYmxpbmcgcmVxdWl0ZXR0eSIKKyAgICBleHBvcnQgRURJVE9SPS9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoICYmIHN1ZG8gLUUgdmlzdWRvCisgICAgcm0gLWYgL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2gKK2ZpCisKKyNDb25maWd1cmUgcG9sa2ludCB0byBydW4gdmlyc2ggYXMgYSBub3JtYWwgdXNlcgorZWNobyAiQ29uZmlndXJpbmcgcG9sa2ludCB0byBydW4gdmlyc2ggYXMgYSBub3JtYWwgdXNlciIKK2NhdCA+PiAvZXRjL3BvbGtpdC0xL2xvY2FsYXV0aG9yaXR5LzUwLWxvY2FsLmQvNTAtb3JnLmxpYnZpcnQtYWNjZXNzLnBrbGEgIDw8IEVPTAorW2xpYnZpcnQgQWRtaW4gQWNjZXNzXQorSWRlbnRpdHk9dW5peC1ncm91cDpsaWJ2aXJ0CitBY3Rpb249b3JnLmxpYnZpcnQudW5peC5tYW5hZ2UKK1Jlc3VsdEFueT15ZXMKK1Jlc3VsdEluYWN0aXZlPXllcworUmVzdWx0QWN0aXZlPXllcworRU9MCisKKyMgTGlua3MgdGhlIE9wZW5NQU5PIHJlcXVpcmVkIGZvbGRlciAvb3B0L1ZORi9pbWFnZXMgdG8gL3Zhci9saWIvbGlidmlydC9pbWFnZXMuIFRoZSBPUyBpbnN0YWxsYXRpb24KKyMgc2hvdWxkIGhhdmUgb25seSBhIC8gcGFydGl0aW9uIHdpdGggYWxsIHBvc3NpYmxlIHNwYWNlIGF2YWlsYWJsZQorCitlY2hvICIgbGluayAvb3B0L1ZORi9pbWFnZXMgdG8gL3Zhci9saWIvbGlidmlydC9pbWFnZXMiCitpZiBbICIkdXNlcl9uYW1lIiAhPSAiIiBdCit0aGVuCisgICNta2RpciAtcCAvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcworICAjY2hvd24gLVIgJHt1c2VyX25hbWV9Om5mdmdyb3VwIC9ob21lLyR7dXNlcl9uYW1lfS9WTkZfaW1hZ2VzCisgICNjaG1vZCBnbyt4ICRIT01FCisKKyAgIyBUaGUgb3JjaGVzdGF0b3IgbmVlZHMgdG8gbGluayB0aGUgaW1hZ2VzIGZvbGRlciAKKyAgcm0gLWYgL29wdC9WTkYvaW1hZ2VzCisgIG1rZGlyIC1wIC9vcHQvVk5GLworICBsbiAtcyAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcyAvb3B0L1ZORi9pbWFnZXMKKyAgY2hvd24gLVIgJHt1c2VyX25hbWV9Om5mdmdyb3VwIC9vcHQvVk5GCisgIGNob3duIC1SIHJvb3Q6bmZ2Z3JvdXAgL3Zhci9saWIvbGlidmlydC9pbWFnZXMKKyAgY2htb2QgZytyd3ggL3Zhci9saWIvbGlidmlydC9pbWFnZXMKKworICAjIFNlbGludXggbWFuYWdlbWVudAorICAjZWNobyAiY29uZmlndXJlICBTZWxpbnV4IG1hbmFnZW1lbnQiCisgICNzZW1hbmFnZSBmY29udGV4dCAtYSAtdCB2aXJ0X2ltYWdlX3QgIi9ob21lLyR7dXNlcl9uYW1lfS9WTkZfaW1hZ2VzKC8uKik/IgorICAjY2F0IC9ldGMvc2VsaW51eC90YXJnZXRlZC9jb250ZXh0cy9maWxlcy9maWxlX2NvbnRleHRzLmxvY2FsIHxncmVwIHZpcnRfaW1hZ2UKKyAgI3Jlc3RvcmVjb24gLVIgLXYgL2hvbWUvJHt1c2VyX25hbWV9L1ZORl9pbWFnZXMKK2Vsc2UKKyAgbWtkaXIgLXAgL29wdC9WTkYvaW1hZ2VzCisgIGNobW9kIG8rcnggL29wdC9WTkYvaW1hZ2VzCitmaQorCitlY2hvICJjcmVhdGluZyBsb2NhbCBpbmZvcm1hdGlvbiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbCIKK2VjaG8gIiNCeSBkZWZhdWx0IG9wZW52aW0gYXNzdW1lcyBjb250cm9sIHBsYW5lIGludGVyZmFjZSBuYW1pbmcgYXMgZW0xLGVtMixlbTMsZW00ICIgPiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZWNobyAiI2FuZCBicmlkZ2UgaWZhY2VzIGFzIHZpcmJyTWFuMSwgdmlyYnJNYW4yLCAuLi4iID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitlY2hvICIjaWYgY29tcHV0ZSBub2RlIGNvbnRhaW4gYSBkaWZmZXJlbnQgbmFtZSBpdCBtdXN0IGJlIGluZGljYXRlZCBpbiB0aGlzIGZpbGUiID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitlY2hvICIjd2l0aCB0aGUgZm9ybWF0IGV4dGFuZGFyZC1uYW1lOiBjb21wdXRlLW5hbWUiID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitpZiBbICIkaW50ZXJmYWNlIiAhPSAiIiAtYSAiJGludGVyZmFjZSIgIT0gImVtMSIgXQordGhlbgorICBlY2hvICJpZmFjZV9uYW1lczoiICA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorICBlY2hvICIgIGVtMTogJHtpbnRlcmZhY2V9IiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZmkKK2NobW9kIG8rciAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorCisjIGRlYWN0aXZhdGUgbWVtb3J5IG92ZXJjb21taXQKK2VjaG8gImRlYWN0aXZhdGUgbWVtb3J5IG92ZXJjb21taXQiCitzZXJ2aWNlIGtzbXR1bmVkIHN0b3AKK3NlcnZpY2Uga3NtIHN0b3AKK2Noa2NvbmZpZyBrc210dW5lZCBvZmYKK2Noa2NvbmZpZyBrc20gb2ZmCisKKworIyBMaWJ2aXJ0IG9wdGlvbnMgKHVuY29tbWVudCB0aGUgZm9sbG93aW5nKQorZWNobyAiY29uZmlndXJlIExpYnZpcnQgb3B0aW9ucyIKK3NlZCAtaSAncy8jdW5peF9zb2NrX2dyb3VwID0gImxpYnZpcnQiL3VuaXhfc29ja19ncm91cCA9ICJsaWJ2aXJ0Ii8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCitzZWQgLWkgJ3MvI3VuaXhfc29ja19yd19wZXJtcyA9ICIwNzcwIi91bml4X3NvY2tfcndfcGVybXMgPSAiMDc3MCIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorc2VkIC1pICdzLyN1bml4X3NvY2tfZGlyID0gIlwvdmFyXC9ydW5cL2xpYnZpcnQiL3VuaXhfc29ja19kaXIgPSAiXC92YXJcL3J1blwvbGlidmlydCIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorc2VkIC1pICdzLyNhdXRoX3VuaXhfcncgPSAibm9uZSIvYXV0aF91bml4X3J3ID0gIm5vbmUiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKKworI2NyZWF0aW5nIHRoZSBwb2xraXQgZ3JhbnQgYWNjZXNzIGZvciBsaWJ2aXJ0IHVzZXIuIAorI1RoaXMgZG9lcyBub3Qgd29yayAhISEhIHNvIGNvbW1lbnRlZC4gTm8gd2F5IHRvIGdldCBydW5uaW5nIHdpdGhvdXQgdW5jb21lbnRlZCB0aGUgYXV0aF91bml4X3J3ID0gIm5vbmUiIGxpbmUKKyMKKyNjYXQgPiAvZXRjL3BvbGtpdC0xL2xvY2FsYXV0aG9yaXR5LzUwLWxvY2FsLmQvNTAtb3JnLmV4YW1wbGUtbGlidmlydC1yZW1vdGUtYWNjZXNzLnBrbGEgPDwgRU9MCisjW2xpYnZpcnQgTWFuYWdlbWVudCBBY2Nlc3NdCisjIElkZW50aXR5PXVuaXgtdXNlcjpuMjt1bml4LXVzZXI6a2sKKyMgQWN0aW9uPW9yZy5saWJ2aXJ0LnVuaXgubWFuYWdlCisjIFJlc3VsdEFueT15ZXMKKyMgUmVzdWx0SW5hY3RpdmU9eWVzCisjIFJlc3VsdEFjdGl2ZT15ZXMKKyNFT0wKKworIyBDb25maWd1cmF0aW9uIGNoYW5nZSBvZiBxZW11IGZvciB0aGUgbnVtYXR1bmUgYnVnIGlzc3VlCisjIFJIRUw3LjE6IGZvciB0aGlzIHZlcnNpb24gc2hvdWxkIG5vdCBiZSBuZWNlc2FyeSAtIHRvIHJldmlzZQorI2lmICEgZ3JlcCAtcSAiY2dyb3VwX2NvbnRyb2xsZXJzID0gWyBcImNwdVwiLCBcImRldmljZXNcIiwgXCJtZW1vcnlcIiwgXCJibGtpb1wiLCBcImNwdWFjY3RcIiBdIiAvZXRjL2xpYnZpcnQvcWVtdS5jb25mCisjdGhlbgorI2NhdCAvZXRjL2xpYnZpcnQvcWVtdS5jb25mIHwgYXdrICd7cHJpbnQgJDB9KCQwfiIjY2dyb3VwX2NvbnRyb2xsZXJzIil7cHJpbnQgImNncm91cF9jb250cm9sbGVycyA9IFsgXCJjcHVcIiwgXCJkZXZpY2VzXCIsIFwibWVtb3J5XCIsIFwiYmxraW9cIiwgXCJjcHVhY2N0XCIgXSJ9JyA+IHRtcAorI212IHRtcCAvZXRjL2xpYnZpcnQvcWVtdS5jb25mCisjZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgTkVUV09SSyBDT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworIyBOZXR3b3JrIGNvbmZpZyAoaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbmV0KQoraWYgWyAtbiAiJGludGVyZmFjZSIgXQordGhlbgorCisgICMgRGVhY3RpdmF0ZSBuZXR3b3JrIG1hbmFnZXIKKyAgc3lzdGVtY3RsIHN0b3AgTmV0d29ya01hbmFnZXIKKyAgc3lzdGVtY3RsIGRpc2FibGUgTmV0d29ya01hbmFnZXIKKworICAjIEZvciBtYW5hZ2VtZW50IGFuZCBkYXRhIGludGVyZmFjZXMKKyAgcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvcGNpX2NvbmZpZy5ydWxlcyAjIGl0IHdpbGwgYmUgY3JlYXRlZCB0byBkZWZpbmUgVkZzCisKKyAgcHVzaGQgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzLworCisgICMgU2V0IE9OQk9PVD1vbiBhbmQgTVRVPTkwMDAgb24gdGhlIGludGVyZmFjZSB1c2VkIGZvciB0aGUgYnJpZGdlcworICBlY2hvICJjb25maWd1cmluZyBpZmFjZSAkaW50ZXJmYWNlIgorICBjYXQgaWZjZmctJGludGVyZmFjZSB8IGdyZXAgLWUgSFdBRERSIC1lIFVVSUQgPiAkaW50ZXJmYWNlLnRtcAorICBlY2hvICJUWVBFPUV0aGVybmV0CitOQU1FPSRpbnRlcmZhY2UKK0RFVklDRT0kaW50ZXJmYWNlCitUWVBFPUV0aGVybmV0CitPTkJPT1Q9eWVzCitOTV9DT05UUk9MTEVEPW5vCitNVFU9OTAwMAorQk9PVFBST1RPPW5vbmUKK0lQVjZJTklUPW5vIiA+PiAkaW50ZXJmYWNlLnRtcAorICAgIG12ICRpbnRlcmZhY2UudG1wICBpZmNmZy0kaW50ZXJmYWNlCisKKyAgIyBNYW5hZ2VtZW50IGludGVyZmFjZXMKKyMgIGludGVncmF0ZWRfaW50ZXJmYWNlcz0iIgorIyAgbmJfaWZhY2VzPTAKKyMgIGZvciBpZmFjZSBpbiBgaWZjb25maWcgLWEgfCBncmVwICI6XCAiIHwgY3V0IC1mIDEgLWQiOiJ8IGdyZXAgLXYgIl8iIHwgZ3JlcCAtdiAiXC4iIHwgZ3JlcCAtdiAibG8iIHwgc29ydGAKKyMgIGRvIAorIyAgICBkcml2ZXI9YGV0aHRvb2wgLWkgJGlmYWNlfCBhd2sgJygkMH4iZHJpdmVyIil7cHJpbnQgJDJ9J2AKKyMgICAgaWYgWyAkZHJpdmVyICE9ICJpeGdiZSIgXSAmJiBbICRkcml2ZXIgIT0gImJyaWRnZSIgXQorIyAgICB0aGVuCisjICAgICAgaW50ZWdyYXRlZF9pbnRlcmZhY2VzPSIkaW50ZWdyYXRlZF9pbnRlcmZhY2VzICRpZmFjZSIKKyMgICAgICBuYl9pZmFjZXM9JCgobmJfaWZhY2VzKzEpKQorIyAgICAgIGV2YWwgaWZhY2Uke25iX2lmYWNlc309JGlmYWNlCisjICAgIGZpCisjICBkb25lCisKKyAgI0NyZWF0ZSBpbmZyYXN0cnVjdHVyZSBicmlkZ2UsIG5vcm1hbGx5IHVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gY29tcHV0ZSBub2Rlcywgb3BlbmZsb3cgY29udHJvbGxlciwgLi4uICAKKyAgZWNobyAiREVWSUNFPXZpcmJySW5mCitUWVBFPUJyaWRnZQorT05CT09UPXllcworREVMQVk9MAorTk1fQ09OVFJPTExFRD1ubworVVNFUkNUTD1ubyIgPiBpZmNmZy12aXJickluZgorCisgICAgI0NyZWF0ZSBWTEFOIGZvciBpbmZyYXN0cnVjdHVyZSBicmlkZ2UKKyAgICBlY2hvICJERVZJQ0U9JHtpbnRlcmZhY2V9LjEwMDEKK09OQk9PVD15ZXMKK05NX0NPTlRST0xMRUQ9bm8KK1VTRVJDVEw9bm8KK1ZMQU49eWVzCitCT09UUFJPVE89bm9uZQorQlJJREdFPXZpcmJySW5mIiA+IGlmY2ZnLSR7aW50ZXJmYWNlfS4xMDAxCisKKworICAjQ3JlYXRlIGJyaWRnZSBpbnRlcmZhY2VzCisgIGVjaG8gIkNyZWF0aW5nIGJyaWRnZSBpZmFjZXM6ICIKKyAgZm9yICgoaT0xO2k8PTIwO2krKykpCisgIGRvCisgICAgaTJkaWdpdHM9JGkKKyAgICBbICRpIC1sdCAxMCBdICYmIGkyZGlnaXRzPSIwJGkiCisgICAgZWNobyAiICAgIHZpcmJyTWFuJGkgIHZsYW4gMjAkaTJkaWdpdHMiCisgICAgZWNobyAiREVWSUNFPXZpcmJyTWFuJGkKK1RZUEU9QnJpZGdlCitPTkJPT1Q9eWVzCitERUxBWT0wCitOTV9DT05UUk9MTEVEPW5vCitVU0VSQ1RMPW5vIiA+IGlmY2ZnLXZpcmJyTWFuJGkKKworI1dpdGhvdXQgSVA6CisjQk9PVFBST1RPPXN0YXRpYworI0lQQUREUj0xMC4xMC4xMC4kKChpKzIwOSkpCisjTkVUTUFTSz0yNTUuMjU1LjI1NS4wIiA+IGlmY2ZnLXZpcmJyTWFuJGkKKworICAgICMgY3JlYXRlIHRoZSByZXF1aXJlZCBpbnRlcmZhY2VzIHRvIGNvbm5lY3QgdGhlIGJyaWRnZXMKKyAgICBlY2hvICJERVZJQ0U9JHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzCitPTkJPT1Q9eWVzCitOTV9DT05UUk9MTEVEPW5vCitVU0VSQ1RMPW5vCitWTEFOPXllcworQk9PVFBST1RPPW5vbmUKK0JSSURHRT12aXJick1hbiRpIiA+IGlmY2ZnLSR7aW50ZXJmYWNlfS4yMCRpMmRpZ2l0cworICBkb25lCisKKyAgaWYgWyAtbiAiJGlwX2lmYWNlIiBdCisgIHRoZW4KKyAgICBlY2hvICJjb25maWd1cmluZyBpZmFjZSAkaWZhY2UgaW50ZXJmYWNlIHdpdGggaXAgJGlwX2lmYWNlIgorICAgICMgTmV0d29yayBpbnRlcmZhY2VzCisgICAgIyAxR2JwcyBpbnRlcmZhY2VzIGFyZSBjb25maWd1cmVkIHdpdGggT05CT09UPXllcyBhbmQgc3RhdGljIElQIGFkZHJlc3MKKyAgICBjYXQgaWZjZmctJGlmYWNlIHwgZ3JlcCAtZSBIV0FERFIgLWUgVVVJRCA+ICRpZmFjZS50bXAKKyAgICBlY2hvICJUWVBFPUV0aGVybmV0CitOQU1FPSRpZmFjZQorREVWSUNFPSRpZmFjZQorVFlQRT1FdGhlcm5ldAorT05CT09UPXllcworTk1fQ09OVFJPTExFRD1ubworSVBWNklOSVQ9bm8iID4+ICRpZmFjZS50bXAKKyAgICBbICRpcF9pZmFjZSA9ICJkaGNwIiBdICYmIGVjaG8gLWUgIkJPT1RQUk9UTz1kaGNwXG5ESENQX0hPU1ROQU1FPSRIT1NUTkFNRSIgPj4gJGlmYWNlLnRtcAorICAgIFsgJGlwX2lmYWNlICE9ICJkaGNwIiBdICYmIGVjaG8gLWUgIkJPT1RQUk9UTz1zdGF0aWNcbklQQUREUj0ke2lwX2lmYWNlfVxuTkVUTUFTSz0yNTUuMjU1LjI1NS4wIiA+PiAkaWZhY2UudG1wCisgICAgbXYgJGlmYWNlLnRtcCAgaWZjZmctJGlmYWNlCisgIGZpCisKKyAgZm9yIGlmYWNlIGluIGBpZmNvbmZpZyAtYSB8IGdyZXAgIjogIiB8IGN1dCAtZiAxIC1kIjoiIHwgZ3JlcCAtdiAtZSAiXyIgLWUgIlwuIiAtZSAibG8iIC1lICJ2aXJiciIgLWUgInRhcCJgCisgIGRvCisgICAgIyAxMC80MCBHYnBzIGludGVyZmFjZXMKKyAgICAjIEludGVsIFg1MjAgY2FyZHM6IGRyaXZlciBpeGdiZQorICAgICMgSW50ZWwgWEw3MTAgRm9ydHZpbGxlIGNhcmRzOiBkcml2ZXIgaTQwZQorICAgIGRyaXZlcj1gZXRodG9vbCAtaSAkaWZhY2V8IGF3ayAnKCQwfiJkcml2ZXIiKXtwcmludCAkMn0nYAorICAgIGlmIFsgIiRkcml2ZXIiID0gImk0MGUiIC1vICIkZHJpdmVyIiA9ICJpeGdiZSIgXQorICAgIHRoZW4KKyAgICAgIGVjaG8gImNvbmZpZ3VyaW5nIGRhdGFwbGFuZSBpZmFjZSAkaWZhY2UiCisgICAgICAKKyAgICAgICMgQ3JlYXRlIDggU1ItSU9WIHBlciBQRiBieSB1ZGV2IHJ1bGVzIG9ubHkgZm9yIEZvcnR2aWxsZSBjYXJkcyAoaTQwZSBkcml2ZXIpCisgICAgICBpZiBbICIkZHJpdmVyIiA9ICJpNDBlIiBdCisgICAgICB0aGVuCisgICAgICAJcGNpPWBldGh0b29sIC1pICRpZmFjZSB8IGF3ayAnKCQwfiJidXMtaW5mbyIpe3ByaW50ICQyfSdgCisgICAgICAJZWNobyAiQUNUSU9OPT1cImFkZFwiLCBLRVJORUw9PVwiJHBjaVwiLCBTVUJTWVNURU09PVwicGNpXCIsIFJVTis9XCIvdXNyL2Jpbi9iYXNoIC1jICdlY2hvIDggPiAvc3lzL2J1cy9wY2kvZGV2aWNlcy8kcGNpL3NyaW92X251bXZmcydcIiIgPj4gL2V0Yy91ZGV2L3J1bGVzLmQvcGNpX2NvbmZpZy5ydWxlcworICAgICAgZmkKKworICAgICAgIyBDb25maWd1cmUgUEYgdG8gYm9vdCBhdXRvbWF0aWNhbGx5IGFuZCB0byBoYXZlIGEgYmlnIE1UVQorICAgICAgIyAxMEdicHMgaW50ZXJmYWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIE9OQk9PVD15ZXMgYW5kICBNVFU9MjAwMAorICAgICAgY2F0IGlmY2ZnLSRpZmFjZSB8IGdyZXAgLWUgSFdBRERSIC1lIFVVSUQgPiAkaWZhY2UudG1wCisgICAgICBlY2hvICJUWVBFPUV0aGVybmV0CitOQU1FPSRpZmFjZQorREVWSUNFPSRpZmFjZQorT05CT09UPXllcworTVRVPTkwMDAKK05NX0NPTlRST0xMRUQ9bm8KK0lQVjZJTklUPW5vCitCT09UUFJPVE89bm9uZSIgPj4gJGlmYWNlLnRtcAorICAgICAgbXYgJGlmYWNlLnRtcCBpZmNmZy0kaWZhY2UKKyAgICBmaQorICBkb25lCisgIHBvcGQKK2ZpCisKKworIyBBY3RpdmF0ZSA4IFZpcnR1YWwgRnVuY3Rpb25zIHBlciBQRiBvbiBOaWFudGljIGNhcmRzIChpeGdiZSBkcml2ZXIpCitpZiBbWyBgbHNtb2QgfCBjdXQgLWQiICIgLWYxIHwgZ3JlcCAiaXhnYmUiIHwgZ3JlcCAtdiB2ZmAgXV0KK3RoZW4KKwlpZiAhIGdyZXAgLXEgIml4Z2JlIiAvZXRjL21vZHByb2JlLmQvaXhnYmUuY29uZgorCXRoZW4KKwllY2hvICJvcHRpb25zIGl4Z2JlIG1heF92ZnM9OCIgPj4gL2V0Yy9tb2Rwcm9iZS5kL2l4Z2JlLmNvbmYKKwlmaQorCitmaQorCisjIEV4ZWN1dGVzIGRyYWN1dCB0byBsb2FkIGRyaXZlcnMgb24gYm9vdAorZWNobyAiUmVnZW5lcmF0aW5nIGluaXRyYW1mcyIKK2RyYWN1dCAtLWZvcmNlCisKKyMgVG8gZGVmaW5lIDggVkZzIHBlciBQRiB3ZSBkbyBpdCBvbiByYy5sb2NhbCwgYmVjYXVzZSB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIHVubG9hZGVkIGFuZCBsb2FkZWQgYWdhaW4KKyNpZiAhIGdyZXAgLXEgIk5GViIgL2V0Yy9yYy5sb2NhbAorI3RoZW4KKyMgIGVjaG8gIiIgPj4gL2V0Yy9yYy5sb2NhbAorIyAgZWNobyAiIyBORlYiID4+IC9ldGMvcmMubG9jYWwKKyMgIGVjaG8gIm1vZHByb2JlIC1yIGl4Z2JlIiA+PiAvZXRjL3JjLmxvY2FsCisjICBlY2hvICJtb2Rwcm9iZSBpeGdiZSBtYXhfdmZzPTgiID4+IC9ldGMvcmMubG9jYWwKKyMgIGVjaG8gIiIgPj4gL2V0Yy9yYy5sb2NhbAorCisjICBjaG1vZCAreCAvZXRjL3JjLmQvcmMubG9jYWwKKworI2ZpCisKK2VjaG8gCitlY2hvICJEbyBub3QgZm9yZ2V0IHRvIGNyZWF0ZSBhIHNoYXJlZCAoTkZTLCBTYW1iYSwgLi4uKSB3aGVyZSBvcmlnaW5hbCB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIGFyZSBhbGxvY2F0ZWQiCitlY2hvCitlY2hvICJEbyBub3QgZm9yZ2V0IHRvIGNvcHkgdGhlIHB1YmxpYyBzc2gga2V5IGludG8gL2hvbWUvJHt1c2VyX25hbWV9Ly5zc2gvYXV0aG9yaXplZF9rZXlzIGZvciBhdXRob21hdGljIGxvZ2luIGZyb20gb3BlbnZpbSBjb250cm9sbGVyIgorZWNobworCitlY2hvICJSZWJvb3QgdGhlIHN5c3RlbSB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVJIRUw3LjIuc2ggYi9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtUkhFTDcuMi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhhZWJiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVJIRUw3LjIuc2gKQEAgLTAsMCArMSw1NjAgQEAKKyMhL2Jpbi9iYXNoIAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjIEF1dGhvcnM6IEFudG9uaW8gTG9wZXosIFBhYmxvIE1vbnRlcywgQWxmb25zbyBUaWVybm8KKyMgMjAxNiBNYXJjaCAxOAorIyBNb2RpZmllZCB0byBydW4gb24gZ3J1YjIgYW5kIGVmaSBib290CisKKyMgUGVyc29uYWxpemUgUkhFTDcuMiBvbiBjb21wdXRlIG5vZGVzCisjIFByZXBhcmVkIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIG5ldHdvcmsgY2FyZCBkcml2ZXJzOgorIyAJdGczLCBpZ2IgZHJpdmVycyBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2VzCisjIAlpeGdiZSAoSW50ZWwgTmlhbnRpYykgYW5kIGk0MGUgKEludGVsIEZvcnR2aWxsZSkgZHJpdmVycyBmb3IgZGF0YSBwbGFuZSBpbnRlcmZhY2VzCisKKyMgVG8gZG93bmxvYWQ6CisjIHdnZXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25mdmxhYnMvb3Blbm1hbm8vbWFzdGVyL3NjcmlwdHMvY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoCisjIFRvIGV4ZWN1dGU6CisjIGNobW9kICt4IC4vY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoCisjIHN1ZG8gLi9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVJIRUw3LjEuc2ggPHVzZXI+IDxpZmFjZT4KKworIyBBc3N1bXB0aW9uczoKKyMgQWxsIHZpcnR1YWxpemF0aW9uIG9wdGlvbnMgYWN0aXZhdGVkIG9uIEJJT1MgKHZ0LWQsIHZ0LXgsIFNSLUlPViwgbm8gcG93ZXIgc2F2aW5ncy4uLikKKyMgUkhFTDcuMiBpbnN0YWxsZWQgd2l0aG91dCAvaG9tZSBwYXJ0aXRpb24gYW5kIHdpdGggdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBzZWxlY3Rpb246CisjIEBiYXNlLCBAY29yZSwgQGRldmVsb3BtZW50LCBAbmV0d29yay1maWxlLXN5c3RlbS1jbGllbnQsIEB2aXJ0dWFsaXphdGlvbi1oeXBlcnZpc29yLCBAdmlydHVhbGl6YXRpb24tcGxhdGZvcm0sIEB2aXJ0dWFsaXphdGlvbi10b29scworCisjIDIwMTYgQXVnIDE3IEFudG9uaW8gTMOzcGV6CisjIENoYW5nZWQgdmlyYnJJbmYgdG8gdmlyYnJWSU0sIHRvIHJlZmxlY3QgdGhhdCB0aGlzIGJyaWRnZSBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIFZJTSAoT3BlblZJTSkKKyMgQ2hhbmdlZCB0aGUgdmxhbiB0YWcgdXNlZCBieSB2aXJiclZJTSBmcm9tIDIwMDAgdG8gMTEwMAorCitmdW5jdGlvbiB1c2FnZSgpeworICAgIGVjaG8gLWUgIlVzYWdlOiBzdWRvICQwIFsteV0gPHVzZXItbmFtZT4gIFsgPGlmYWNlLW5hbWU+ICBbPGlwLWFkZHJlc3M+fGRoY3BdIF0iCisgICAgZWNobyAtZSAiICBDb25maWd1cmUgY29tcHV0ZSBob3N0IGZvciBWSU0gdXNhZ2UuICh2ZXJzaW9uIDAuNCkuIFBhcmFtczoiCisgICAgZWNobyAtZSAiICAgICAteSAgZG8gbm90IHByb21wdCBmb3IgY29uZmlybWF0aW9uLiBJZiBhIG5ldyB1c2VyIGlzIGNyZWF0ZWQsIHRoZSB1c2VyIG5hbWUgaXMgc2V0IGFzIHBhc3N3b3JkIgorICAgIGVjaG8gLWUgIiAgICAgPHVzZXItbmFtZT4gQ3JlYXRlIGlmIG5vdCBleGlzdCBhbmQgY29uZmlndXJlIHRoaXMgdXNlciBmb3Igb3BlbnZpbSB0byBjb25uZWN0IgorICAgIGVjaG8gLWUgIiAgICAgPGlmYWNlLW5hbWU+IGlmIHN1cGxpZWQgY3JlYXRlcyBicmlkZ2UgaW50ZXJmYWNlcyBvbiB0aGlzIGludGVyZmFjZSwgbmVlZGVkIGZvciBvcGVudmltIgorICAgIGVjaG8gLWUgIiAgICAgaXAgb3IgZGhjcCBpZiBzdXBsaWVkLCBjb25maWd1cmUgdGhlIGludGVyZmFjZSB3aXRoIHRoaXMgaXAgYWRkcmVzcyAoLzI0KSBvciAnZGhjcCcgIgorfQorCisKKyMxIENIRUNLIGlucHV0IHBhcmFtZXRlcnMKKyMxLjEgcm9vdCBwcml2aWxlZ2VzCitbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgZWNobyAiTmVlZGVkIHJvb3QgcHJpdmlsZWdlcyIgJiYgdXNhZ2UgJiYgZXhpdCAtMQorCisjMS4yIGlucHV0IHBhcmFtZXRlcnMKK0ZPUkNFPSIiCit3aGlsZSBnZXRvcHRzICJ5IiBvOyBkbworICAgIGNhc2UgIiR7b30iIGluCisgICAgICAgIHkpCisgICAgICAgICAgICBGT1JDRT0ieWVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIHVzYWdlCisgICAgICAgICAgICBleGl0IC0xCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKE9QVElORC0xKSkKKworCitpZiBbICQjIC1sdCAxIF0gIAordGhlbgorICB1c2FnZQorICBleGl0CitmaQorCit1c2VyX25hbWU9JDEKK2ludGVyZmFjZT0kMgoraXBfaWZhY2U9JDMKKworaWYgWyAtbiAiJGludGVyZmFjZSIgXSAmJiAhIGlmY29uZmlnICRpbnRlcmZhY2UgJj4gL2Rldi9udWxsCit0aGVuCisgIGVjaG8gIkVycm9yOiBpbnRlcmZhY2UgJyRpbnRlcmZhY2UnIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0iCisgIHVzYWdlCisgIGV4aXQgMQorZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBORUVERUQgUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIFJlcXVpcmVkIHBhY2thZ2VzCit5dW0gcmVwb2xpc3QKK3l1bSBjaGVjay11cGRhdGUKK3l1bSB1cGRhdGUgLXkKK3l1bSBpbnN0YWxsIC15IHNjcmVlbiB2aXJ0LW1hbmFnZXIgZXRodG9vbCBnY2MgZ2NjLWMrKyB4b3JnLXgxMS14YXV0aCB4b3JnLXgxMS14aW5pdCB4b3JnLXgxMS1kZXByZWNhdGVkLWxpYnMgbGliWHRzdCBndWVzdGZpc2ggaHdsb2MgbGliaHVnZXRsYmZzLXV0aWxzIGxpYmd1ZXN0ZnMtdG9vbHMgbnVtYWN0bAorIyBTZWxpbnV4IG1hbmFnZW1lbnQKK3l1bSBpbnN0YWxsIC15IHBvbGljeWNvcmV1dGlscy1weXRob24KKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBVU0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIEFkZCByZXF1aXJlZCBncm91cHMKK2dyb3VwYWRkIC1mIG5mdmdyb3VwCitncm91cGFkZCAtZiBsaWJ2aXJ0ICAgI2ZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBtYXkgYmUgbGlidmlydGQKKworIyBBZGRzIHVzZXIsIGRlZmF1bHQgcGFzc3dvcmQgc2FtZSBhcyBuYW1lCitpZiBncmVwIC1xICJeJHt1c2VyX25hbWV9OiIgL2V0Yy9wYXNzd2QKK3RoZW4gCisgICN1c2VyIGV4aXN0LCBhZGQgdG8gZ3JvdXAKKyAgZWNobyAiYWRkaW5nIHVzZXIgJHt1c2VyX25hbWV9IHRvIGdyb3VwcyBsaWJ2aXJ0LG5mdmdyb3VwIgorICB1c2VybW9kIC1hIC1HIGxpYnZpcnQsbmZ2Z3JvdXAgLWcgbmZ2Z3JvdXAgJHVzZXJfbmFtZQorZWxzZSAKKyAgI2NyZWF0ZSB1c2VyIGlmIGl0IGRvZXMgbm90IGV4aXN0CisgIFsgLXogIiRGT1JDRSIgXSAmJiByZWFkIC1wICJ1c2VyICcke3VzZXJfbmFtZX0nIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgKFkvbikiIGtrCisgIGlmICEgWyAteiAiJGtrIiAtbyAiJGtrIj0ieSIgLW8gIiRrayI9IlkiIF0KKyAgdGhlbgorICAgIGV4aXQKKyAgZmkKKyAgZWNobyAiY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nIHVzZXIgJHt1c2VyX25hbWV9IgorICB1c2VyYWRkIC1tIC1HIGxpYnZpcnQsbmZ2Z3JvdXAgLWcgbmZ2Z3JvdXAgJHVzZXJfbmFtZSAgICAgICAKKyAgI1Bhc3N3b3JkCisgIGlmIFsgLXogIiRGT1JDRSIgXSAKKyAgdGhlbiAKKyAgICAgZWNobyAiUHJvdmlkZSBhIHBhc3N3b3JkIGZvciAkdXNlcl9uYW1lIgorICAgICBwYXNzd2QgJHVzZXJfbmFtZQorICBlbHNlCisgICAgIGVjaG8gLWUgIiR1c2VyX25hbWVcbiR1c2VyX25hbWUiIHwgcGFzc3dkIC0tc3RkaW4gJHVzZXJfbmFtZQorICBmaQorZmkKKworI1NldHRpbmcgZGVmYXVsdCBsaWJ2aXJ0IFVSSSBmb3IgdGhlIHVzZXIKK2VjaG8gIlNldHRpbmcgZGVmYXVsdCBsaWJ2aXJ0IFVSSSBmb3IgdGhlIHVzZXIiCitlY2hvICJpZiB0ZXN0IC14IGB3aGljaCB2aXJzaGA7IHRoZW4iID4+IC9ob21lLyR7dXNlcl9uYW1lfS8uYmFzaF9wcm9maWxlCitlY2hvICIgIGV4cG9ydCBMSUJWSVJUX0RFRkFVTFRfVVJJPXFlbXU6Ly8vc3lzdGVtIiA+PiAvaG9tZS8ke3VzZXJfbmFtZX0vLmJhc2hfcHJvZmlsZQorZWNobyAiZmkiID4+IC9ob21lLyR7dXNlcl9uYW1lfS8uYmFzaF9wcm9maWxlCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIElOU1RBTEwgSFVHRVBBR0VTIElTT0xDUFVTIEdSVUIgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBIdWdlIHBhZ2VzIDFHIGF1dG8gbW91bnQKK21rZGlyIC1wIC9tbnQvaHVnZQoraWYgISBncmVwIC1xICJIdWdlIHBhZ2VzIiAvZXRjL2ZzdGFiCit0aGVuCisgIGVjaG8gIiIgPj4gL2V0Yy9mc3RhYgorICBlY2hvICIjIEh1Z2UgcGFnZXMiID4+IC9ldGMvZnN0YWIKKyAgZWNobyAibm9kZXYgL21udC9odWdlIGh1Z2V0bGJmcyBwYWdlc2l6ZT0xR0IgMCAwIiA+PiAvZXRjL2ZzdGFiCisgIGVjaG8gIiIgPj4gL2V0Yy9mc3RhYgorZmkKKworIyBIdWdlIHBhZ2VzIHJlc2VydmF0aW9uIHNlcnZpY2UKK2lmICEgWyAtZiAvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS9odWdldGxiLWdpZ2FudGljLXBhZ2VzLnNlcnZpY2UgXQordGhlbgorICBlY2hvICJjb25maWd1cmluZyBodWdlIHBhZ2VzIHNlcnZpY2UiCisgIGNhdCA+IC91c3IvbGliL3N5c3RlbWQvc3lzdGVtL2h1Z2V0bGItZ2lnYW50aWMtcGFnZXMuc2VydmljZSA8PCBFT0wKK1tVbml0XQorRGVzY3JpcHRpb249SHVnZVRMQiBHaWdhbnRpYyBQYWdlcyBSZXNlcnZhdGlvbgorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQmVmb3JlPWRldi1odWdlcGFnZXMubW91bnQKK0NvbmRpdGlvblBhdGhFeGlzdHM9L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlCitDb25kaXRpb25LZXJuZWxDb21tYW5kTGluZT1odWdlcGFnZXN6PTFHCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitFeGVjU3RhcnQ9L3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorRU9MCitmaQorIyBHcnViIHZpcnR1YWxpemF0aW9uIG9wdGlvbnM6CisKKyMgR2V0IGlzb2xjcHVzCitpc29sY3B1cz1gZ2F3ayAnQkVHSU57cHJlPS0yO30KKyAgKCQxPT0icHJvY2Vzc29yIil7cHJvPSQzO30KKyAgKCQxPT0iY29yZSIgJiYgJDQhPTApeworICAgICBpZiAocHJlKzE9PXBybyl7ZW5kcmFuZ2U9Ii0iIHByb30KKyAgICAgZWxzZXtjcHVzPWNwdXMgZW5kcmFuZ2Ugc2VwIHBybzsgc2VwPSIsIjsgZW5kcmFuZ2U9IiI7fTsKKyAgICAgcHJlPXBybzt9CisgIEVORHtwcmludGYoIiVzIixjcHVzIGVuZHJhbmdlKTt9JyAvcHJvYy9jcHVpbmZvYAorCisKKyMgSHVnZSBwYWdlcyByZXNlcnZhdGlvbiBmaWxlOiByZXNlcnZpbmcgYWxsIG1lbW9yeSBhcGFydCBmcm9tIDRHQiBwZXIgTlVNQSBub2RlCisjIEdldCB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlczogYWxsIG1lbW9yeSBidXQgOEdCIHJlc2VydmVkIGZvciB0aGUgT1MKKyN0b3RhbG1lbT1gZG1pZGVjb2RlIC0tdHlwZSAxN3xncmVwIFNpemUgfGdyZXAgTUIgfGdhd2sgJ3tzdW1hKz0kMn0gRU5EIHtwcmludCBzdW1hLzEwMjR9J2AKKyNodWdlcGFnZXM9JCgoJHRvdGFsbWVtLTgpKQorCitpZiAhIFsgLWYgL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMgXQordGhlbgorICBjYXQgPiAvdXNyL2xpYi9zeXN0ZW1kL2h1Z2V0bGItcmVzZXJ2ZS1wYWdlcyA8PCBFT0wKKyMhL2Jpbi9iYXNoCitub2Rlc19wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS8KK2lmIFsgISAtZCBcJG5vZGVzX3BhdGggXTsgdGhlbgorICAgICAgICBlY2hvICJFUlJPUjogXCRub2Rlc19wYXRoIGRvZXMgbm90IGV4aXN0IgorICAgICAgICBleGl0IDEKK2ZpCisKK3Jlc2VydmVfcGFnZXMoKQoreworICAgICAgICBlY2hvIFwkMSA+IFwkbm9kZXNfcGF0aC9cJDIvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0xMDQ4NTc2a0IvbnJfaHVnZXBhZ2VzCit9CisKKyMgVGhpcyBleGFtcGxlIHJlc2VydmVzIGFsbCBhdmFpbGFibGUgbWVtb3J5IGFwYXJ0IGZyb20gNCBHQiBmb3IgbGludXgKKyMgdXNpbmcgMUdCIHNpemUuIFlvdSBjYW4gbW9kaWZ5IGl0IHRvIHlvdXIgbmVlZHMgb3IgY29tbWVudCB0aGUgbGluZXMKKyMgdG8gYXZvaWQgcmVzZXJ2ZSBtZW1vcnkgaW4gYSBudW1hIG5vZGUKK0VPTAorICBmb3IgZiBpbiAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZT8vbWVtaW5mbworICBkbworICAgIG5vZGU9YGhlYWQgLW4xICRmIHwgZ2F3ayAnKCQ1PT0ia0IiKXtwcmludCAkMn0nYAorICAgIG1lbW9yeT1gaGVhZCAtbjEgJGYgfCBnYXdrICcoJDU9PSJrQiIpe3ByaW50ICQ0fSdgCisgICAgbWVtb3J5PSQoKG1lbW9yeSsxMDQ4NTc2LTEpKSAgICNtZW1vcnkgbXVzdCBiZSBjZWlsZWQgIAorICAgIG1lbW9yeT0kKChtZW1vcnkvMTA0ODU3NikpICAgI2Zyb20gYGtCIHRvIEdCIAorICAgICNpZiBtZW1vcnkgCisgICAgWyAkbWVtb3J5IC1ndCA0IF0gJiYgZWNobyAicmVzZXJ2ZV9wYWdlcyAkKChtZW1vcnktNCkpIG5vZGUkbm9kZSIgPj4gL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgZG9uZQorCisgICMgUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gZW5hYmxlIGh1Z2UgcGFnZXMgZWFybHkgYm9vdCByZXNlcnZhdGlvbjoKKyAgY2htb2QgK3ggL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgc3lzdGVtY3RsIGVuYWJsZSBodWdldGxiLWdpZ2FudGljLXBhZ2VzCitmaQorCisjIFByZXBhcmVzIHRoZSB0ZXh0IHRvIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBncnViIGxpbmUsIGluY2x1ZGluZyBibGFja2xpc3RpbmcgaXhnYmV2ZiBkcml2ZXIgaW4gdGhlIGhvc3QKKwordGV4dG9rZXJuZWw9ImludGVsX2lvbW11PW9uIGRlZmF1bHRfaHVnZXBhZ2Vzej0xRyBodWdlcGFnZXN6PTFHIGlzb2xjcHVzPSRpc29sY3B1cyBtb2Rwcm9iZS5ibGFja2xpc3Q9aXhnYmV2ZiBtb2Rwcm9iZS5ibGFja2xpc3Q9aTQwZXZmIiAgCisKKyMgQWRkIHRleHQgdG8gdGhlIGtlcm5lbCBsaW5lCitpZiAhIGdyZXAgLXEgImludGVsX2lvbW11PW9uIGRlZmF1bHRfaHVnZXBhZ2Vzej0xRyBodWdlcGFnZXN6PTFHIiAvZXRjL2RlZmF1bHQvZ3J1YgordGhlbgorICBlY2hvICJhZGRpbmcgY21kbGluZSAke3RleHRva2VybmVsfSIKKyAgc2VkIC1pICIvXkdSVUJfQ01ETElORV9MSU5VWD0vcy9cIlwkLyAke3RleHRva2VybmVsfVwiLyIgL2V0Yy9kZWZhdWx0L2dydWIKKyAgCisgICMgZ3J1YjIgdXBncmFkZQorCisgICMgQklPUyBiYXNlZCBzeXN0ZW1zCisgIGdydWIyLW1rY29uZmlnIC1vIC9ib290L2dydWIyL2dydWIuY2ZnCisKKyAgIyBVRUZJIGJhc2VkIHN5c3RlbXMKKyAgZ3J1YjItbWtjb25maWcgLW8gL2Jvb3QvZWZpL0VGSS9yZWRoYXQvZ3J1Yi5jZmcgCisKK2ZpCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIE9USEVSIENPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBEaXNhYmxlIHJlcXVpcmV0dHkKK2lmICEgZ3JlcCAtcSAiI29wZW5tYW5vIiAvZXRjL3N1ZG9lcnMKK3RoZW4KKyAgICBjYXQgPj4gL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2ggPDwgRU9MCisjIS9iaW4vYmFzaAorY2F0IFwkMSB8IGF3ayAnKFwkMH4icmVxdWlyZXR0eSIpe3ByaW50ICIjIlwkMH0oXCQwIX4icmVxdWlyZXR0eSIpe3ByaW50IFwkMH0nID4gdG1wCitjYXQgdG1wID4gXCQxCitybSB0bXAKK0VPTAorICAgIGNobW9kICt4IC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoCisgICAgZWNobyAiRGlzYWJsaW5nIHJlcXVpdGV0dHkiCisgICAgZXhwb3J0IEVESVRPUj0vaG9tZS8ke3VzZXJfbmFtZX0vc2NyaXB0X3Zpc3Vkby5zaCAmJiBzdWRvIC1FIHZpc3VkbworICAgIHJtIC1mIC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoCitmaQorCisjQ29uZmlndXJlIHBvbGtpbnQgdG8gcnVuIHZpcnNoIGFzIGEgbm9ybWFsIHVzZXIKK2VjaG8gIkNvbmZpZ3VyaW5nIHBvbGtpbnQgdG8gcnVuIHZpcnNoIGFzIGEgbm9ybWFsIHVzZXIiCitjYXQgPj4gL2V0Yy9wb2xraXQtMS9sb2NhbGF1dGhvcml0eS81MC1sb2NhbC5kLzUwLW9yZy5saWJ2aXJ0LWFjY2Vzcy5wa2xhICA8PCBFT0wKK1tsaWJ2aXJ0IEFkbWluIEFjY2Vzc10KK0lkZW50aXR5PXVuaXgtZ3JvdXA6bGlidmlydAorQWN0aW9uPW9yZy5saWJ2aXJ0LnVuaXgubWFuYWdlCitSZXN1bHRBbnk9eWVzCitSZXN1bHRJbmFjdGl2ZT15ZXMKK1Jlc3VsdEFjdGl2ZT15ZXMKK0VPTAorCisjIExpbmtzIHRoZSBPcGVuTUFOTyByZXF1aXJlZCBmb2xkZXIgL29wdC9WTkYvaW1hZ2VzIHRvIC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzLiBUaGUgT1MgaW5zdGFsbGF0aW9uCisjIHNob3VsZCBoYXZlIG9ubHkgYSAvIHBhcnRpdGlvbiB3aXRoIGFsbCBwb3NzaWJsZSBzcGFjZSBhdmFpbGFibGUKKworZWNobyAiIGxpbmsgL29wdC9WTkYvaW1hZ2VzIHRvIC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzIgoraWYgWyAiJHVzZXJfbmFtZSIgIT0gIiIgXQordGhlbgorICAjbWtkaXIgLXAgL2hvbWUvJHt1c2VyX25hbWV9L1ZORl9pbWFnZXMKKyAgI2Nob3duIC1SICR7dXNlcl9uYW1lfTpuZnZncm91cCAvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcworICAjY2htb2QgZ28reCAkSE9NRQorCisgICMgVGhlIG9yY2hlc3RhdG9yIG5lZWRzIHRvIGxpbmsgdGhlIGltYWdlcyBmb2xkZXIgCisgIHJtIC1mIC9vcHQvVk5GL2ltYWdlcworICBta2RpciAtcCAvb3B0L1ZORi8KKyAgbG4gLXMgL3Zhci9saWIvbGlidmlydC9pbWFnZXMgL29wdC9WTkYvaW1hZ2VzCisgIGNob3duIC1SICR7dXNlcl9uYW1lfTpuZnZncm91cCAvb3B0L1ZORgorICBjaG93biAtUiByb290Om5mdmdyb3VwIC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzCisgIGNobW9kIGcrcnd4IC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzCisKKyAgIyBTZWxpbnV4IG1hbmFnZW1lbnQKKyAgI2VjaG8gImNvbmZpZ3VyZSAgU2VsaW51eCBtYW5hZ2VtZW50IgorICAjc2VtYW5hZ2UgZmNvbnRleHQgLWEgLXQgdmlydF9pbWFnZV90ICIvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcygvLiopPyIKKyAgI2NhdCAvZXRjL3NlbGludXgvdGFyZ2V0ZWQvY29udGV4dHMvZmlsZXMvZmlsZV9jb250ZXh0cy5sb2NhbCB8Z3JlcCB2aXJ0X2ltYWdlCisgICNyZXN0b3JlY29uIC1SIC12IC9ob21lLyR7dXNlcl9uYW1lfS9WTkZfaW1hZ2VzCitlbHNlCisgIG1rZGlyIC1wIC9vcHQvVk5GL2ltYWdlcworICBjaG1vZCBvK3J4IC9vcHQvVk5GL2ltYWdlcworZmkKKworZWNobyAiY3JlYXRpbmcgbG9jYWwgaW5mb3JtYXRpb24gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwiCitlY2hvICIjQnkgZGVmYXVsdCBvcGVudmltIGFzc3VtZXMgY29udHJvbCBwbGFuZSBpbnRlcmZhY2UgbmFtaW5nIGFzIGVtMSxlbTIsZW0zLGVtNCAiID4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiNhbmQgYnJpZGdlIGlmYWNlcyBhcyB2aXJick1hbjEsIHZpcmJyTWFuMiwgLi4uIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZWNobyAiI2lmIGNvbXB1dGUgbm9kZSBjb250YWluIGEgZGlmZmVyZW50IG5hbWUgaXQgbXVzdCBiZSBpbmRpY2F0ZWQgaW4gdGhpcyBmaWxlIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZWNobyAiI3dpdGggdGhlIGZvcm1hdCBleHRhbmRhcmQtbmFtZTogY29tcHV0ZS1uYW1lIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAoraWYgWyAiJGludGVyZmFjZSIgIT0gIiIgLWEgIiRpbnRlcmZhY2UiICE9ICJlbTEiIF0KK3RoZW4KKyAgZWNobyAiaWZhY2VfbmFtZXM6IiAgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKKyAgZWNobyAiICBlbTE6ICR7aW50ZXJmYWNlfSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2ZpCitjaG1vZCBvK3IgL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKKworIyBkZWFjdGl2YXRlIG1lbW9yeSBvdmVyY29tbWl0CitlY2hvICJkZWFjdGl2YXRlIG1lbW9yeSBvdmVyY29tbWl0Igorc2VydmljZSBrc210dW5lZCBzdG9wCitzZXJ2aWNlIGtzbSBzdG9wCitjaGtjb25maWcga3NtdHVuZWQgb2ZmCitjaGtjb25maWcga3NtIG9mZgorCisKKyMgTGlidmlydCBvcHRpb25zICh1bmNvbW1lbnQgdGhlIGZvbGxvd2luZykKK2VjaG8gImNvbmZpZ3VyZSBMaWJ2aXJ0IG9wdGlvbnMiCitzZWQgLWkgJ3MvI3VuaXhfc29ja19ncm91cCA9ICJsaWJ2aXJ0Ii91bml4X3NvY2tfZ3JvdXAgPSAibGlidmlydCIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorc2VkIC1pICdzLyN1bml4X3NvY2tfcndfcGVybXMgPSAiMDc3MCIvdW5peF9zb2NrX3J3X3Blcm1zID0gIjA3NzAiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jdW5peF9zb2NrX2RpciA9ICJcL3ZhclwvcnVuXC9saWJ2aXJ0Ii91bml4X3NvY2tfZGlyID0gIlwvdmFyXC9ydW5cL2xpYnZpcnQiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jYXV0aF91bml4X3J3ID0gIm5vbmUiL2F1dGhfdW5peF9ydyA9ICJub25lIi8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCisKKyNjcmVhdGluZyB0aGUgcG9sa2l0IGdyYW50IGFjY2VzcyBmb3IgbGlidmlydCB1c2VyLiAKKyNUaGlzIGRvZXMgbm90IHdvcmsgISEhISBzbyBjb21tZW50ZWQuIE5vIHdheSB0byBnZXQgcnVubmluZyB3aXRob3V0IHVuY29tZW50ZWQgdGhlIGF1dGhfdW5peF9ydyA9ICJub25lIiBsaW5lCisjCisjY2F0ID4gL2V0Yy9wb2xraXQtMS9sb2NhbGF1dGhvcml0eS81MC1sb2NhbC5kLzUwLW9yZy5leGFtcGxlLWxpYnZpcnQtcmVtb3RlLWFjY2Vzcy5wa2xhIDw8IEVPTAorI1tsaWJ2aXJ0IE1hbmFnZW1lbnQgQWNjZXNzXQorIyBJZGVudGl0eT11bml4LXVzZXI6bjI7dW5peC11c2VyOmtrCisjIEFjdGlvbj1vcmcubGlidmlydC51bml4Lm1hbmFnZQorIyBSZXN1bHRBbnk9eWVzCisjIFJlc3VsdEluYWN0aXZlPXllcworIyBSZXN1bHRBY3RpdmU9eWVzCisjRU9MCisKKyMgQ29uZmlndXJhdGlvbiBjaGFuZ2Ugb2YgcWVtdSBmb3IgdGhlIG51bWF0dW5lIGJ1ZyBpc3N1ZQorIyBSSEVMNy4xOiBmb3IgdGhpcyB2ZXJzaW9uIHNob3VsZCBub3QgYmUgbmVjZXNhcnkgLSB0byByZXZpc2UKKyNpZiAhIGdyZXAgLXEgImNncm91cF9jb250cm9sbGVycyA9IFsgXCJjcHVcIiwgXCJkZXZpY2VzXCIsIFwibWVtb3J5XCIsIFwiYmxraW9cIiwgXCJjcHVhY2N0XCIgXSIgL2V0Yy9saWJ2aXJ0L3FlbXUuY29uZgorI3RoZW4KKyNjYXQgL2V0Yy9saWJ2aXJ0L3FlbXUuY29uZiB8IGF3ayAne3ByaW50ICQwfSgkMH4iI2Nncm91cF9jb250cm9sbGVycyIpe3ByaW50ICJjZ3JvdXBfY29udHJvbGxlcnMgPSBbIFwiY3B1XCIsIFwiZGV2aWNlc1wiLCBcIm1lbW9yeVwiLCBcImJsa2lvXCIsIFwiY3B1YWNjdFwiIF0ifScgPiB0bXAKKyNtdiB0bXAgL2V0Yy9saWJ2aXJ0L3FlbXUuY29uZgorI2ZpCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIE5FVFdPUksgQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKyMgTmV0d29yayBjb25maWcgKGlmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5ldCkKK2lmIFsgLW4gIiRpbnRlcmZhY2UiIF0KK3RoZW4KKworICAjIERlYWN0aXZhdGUgbmV0d29yayBtYW5hZ2VyCisgIHN5c3RlbWN0bCBzdG9wIE5ldHdvcmtNYW5hZ2VyCisgIHN5c3RlbWN0bCBkaXNhYmxlIE5ldHdvcmtNYW5hZ2VyCisKKyAgIyBGb3IgbWFuYWdlbWVudCBhbmQgZGF0YSBpbnRlcmZhY2VzCisgICNybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9wY2lfY29uZmlnLnJ1bGVzICMgaXQgd2lsbCBiZSBjcmVhdGVkIHRvIGRlZmluZSBWRnMKKworICBwdXNoZCAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvCisKKyAgIyBTZXQgT05CT09UPW9uIGFuZCBNVFU9OTAwMCBvbiB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIHRoZSBicmlkZ2VzCisgIGVjaG8gImNvbmZpZ3VyaW5nIGlmYWNlICRpbnRlcmZhY2UiCisgIGNhdCBpZmNmZy0kaW50ZXJmYWNlIHwgZ3JlcCAtZSBIV0FERFIgLWUgVVVJRCA+ICRpbnRlcmZhY2UudG1wCisgIGVjaG8gIlRZUEU9RXRoZXJuZXQKK05BTUU9JGludGVyZmFjZQorREVWSUNFPSRpbnRlcmZhY2UKK1RZUEU9RXRoZXJuZXQKK09OQk9PVD15ZXMKK05NX0NPTlRST0xMRUQ9bm8KK01UVT05MDAwCitCT09UUFJPVE89bm9uZQorSVBWNklOSVQ9bm8iID4+ICRpbnRlcmZhY2UudG1wCisgICAgbXYgJGludGVyZmFjZS50bXAgIGlmY2ZnLSRpbnRlcmZhY2UKKworICAjIE1hbmFnZW1lbnQgaW50ZXJmYWNlcworIyAgaW50ZWdyYXRlZF9pbnRlcmZhY2VzPSIiCisjICBuYl9pZmFjZXM9MAorIyAgZm9yIGlmYWNlIGluIGBpZmNvbmZpZyAtYSB8IGdyZXAgIjpcICIgfCBjdXQgLWYgMSAtZCI6InwgZ3JlcCAtdiAiXyIgfCBncmVwIC12ICJcLiIgfCBncmVwIC12ICJsbyIgfCBzb3J0YAorIyAgZG8gCisjICAgIGRyaXZlcj1gZXRodG9vbCAtaSAkaWZhY2V8IGF3ayAnKCQwfiJkcml2ZXIiKXtwcmludCAkMn0nYAorIyAgICBpZiBbICRkcml2ZXIgIT0gIml4Z2JlIiBdICYmIFsgJGRyaXZlciAhPSAiYnJpZGdlIiBdCisjICAgIHRoZW4KKyMgICAgICBpbnRlZ3JhdGVkX2ludGVyZmFjZXM9IiRpbnRlZ3JhdGVkX2ludGVyZmFjZXMgJGlmYWNlIgorIyAgICAgIG5iX2lmYWNlcz0kKChuYl9pZmFjZXMrMSkpCisjICAgICAgZXZhbCBpZmFjZSR7bmJfaWZhY2VzfT0kaWZhY2UKKyMgICAgZmkKKyMgIGRvbmUKKworICAjQ3JlYXRlIGluZnJhc3RydWN0dXJlIGJyaWRnZSwgbm9ybWFsbHkgdXNlZCBmb3IgY29ubmVjdGluZyB0byBjb21wdXRlIG5vZGVzLCBvcGVuZmxvdyBjb250cm9sbGVyLCAuLi4gIAorICBlY2hvICJERVZJQ0U9dmlyYnJWSU0KK05BTUU9dmlyYnJWSU0KK1RZUEU9QnJpZGdlCitPTkJPT1Q9eWVzCitERUxBWT0wCitOTV9DT05UUk9MTEVEPW5vCitNVFU9OTAwMAorVVNFUkNUTD1ubyIgPiBpZmNmZy12aXJiclZJTQorW1sgJGlwX2lmYWNlICE9ICJkaGNwIiBdXSAmJiBbWyAkaXBfaWZhY2UgIT0gIiIgXV0gJiYgZWNobyAtZSAiQk9PVFBST1RPPXN0YXRpY1xuSVBBRERSPSR7aXBfaWZhY2V9XG5ORVRNQVNLPTI1NS4yNTUuMjU1LjAiID4+IGlmY2ZnLXZpcmJyVklNCisKKyAgICAjQ3JlYXRlIFZMQU4gZm9yIGluZnJhc3RydWN0dXJlIGJyaWRnZQorICAgIGVjaG8gIkRFVklDRT0ke2ludGVyZmFjZX0uMTEwMAorTkFNRT0ke2ludGVyZmFjZX0uMTEwMAorT05CT09UPXllcworTk1fQ09OVFJPTExFRD1ubworVVNFUkNUTD1ubworVkxBTj15ZXMKK01UVT05MDAwCitCT09UUFJPVE89bm9uZQorQlJJREdFPXZpcmJyVklNIiA+IGlmY2ZnLSR7aW50ZXJmYWNlfS4xMTAwCisKKworICAjQ3JlYXRlIGJyaWRnZSBpbnRlcmZhY2VzCisgIGVjaG8gIkNyZWF0aW5nIGJyaWRnZSBpZmFjZXM6ICIKKyAgZm9yICgoaT0xO2k8PTIwO2krKykpCisgIGRvCisgICAgaTJkaWdpdHM9JGkKKyAgICBbICRpIC1sdCAxMCBdICYmIGkyZGlnaXRzPSIwJGkiCisgICAgZWNobyAiICAgIHZpcmJyTWFuJGkgIHZsYW4gMjAkaTJkaWdpdHMiCisgICAgZWNobyAiREVWSUNFPXZpcmJyTWFuJGkKK05BTUU9dmlyYnJNYW4kaQorVFlQRT1CcmlkZ2UKK09OQk9PVD15ZXMKK0RFTEFZPTAKK05NX0NPTlRST0xMRUQ9bm8KK01UVT05MDAwCitVU0VSQ1RMPW5vIiA+IGlmY2ZnLXZpcmJyTWFuJGkKKworI1dpdGhvdXQgSVA6CisjQk9PVFBST1RPPXN0YXRpYworI0lQQUREUj0xMC4xMC4xMC4kKChpKzIwOSkpCisjTkVUTUFTSz0yNTUuMjU1LjI1NS4wIiA+IGlmY2ZnLXZpcmJyTWFuJGkKKworICAgICMgY3JlYXRlIHRoZSByZXF1aXJlZCBpbnRlcmZhY2VzIHRvIGNvbm5lY3QgdGhlIGJyaWRnZXMKKyAgICBlY2hvICJERVZJQ0U9JHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzCitOQU1FPSR7aW50ZXJmYWNlfS4yMCRpMmRpZ2l0cworT05CT09UPXllcworTk1fQ09OVFJPTExFRD1ubworVVNFUkNUTD1ubworVkxBTj15ZXMKK0JPT1RQUk9UTz1ub25lCitNVFU9OTAwMAorQlJJREdFPXZpcmJyTWFuJGkiID4gaWZjZmctJHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzCisgIGRvbmUKKworICBpZmFjZT0kaW50ZXJmYWNlCisgIGlmIFsgLW4gIiRpcF9pZmFjZSIgXQorICB0aGVuCisgICAgZWNobyAiY29uZmlndXJpbmcgaWZhY2UgJGlmYWNlIGludGVyZmFjZSB3aXRoIGlwICRpcF9pZmFjZSIKKyAgICAjIE5ldHdvcmsgaW50ZXJmYWNlcworICAgICMgMUdicHMgaW50ZXJmYWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIE9OQk9PVD15ZXMgYW5kIHN0YXRpYyBJUCBhZGRyZXNzCisgICAgY2F0IGlmY2ZnLSRpZmFjZSB8IGdyZXAgLWUgSFdBRERSIC1lIFVVSUQgPiAkaWZhY2UudG1wCisgICAgZWNobyAiVFlQRT1FdGhlcm5ldAorTkFNRT0kaWZhY2UKK0RFVklDRT0kaWZhY2UKK1RZUEU9RXRoZXJuZXQKK09OQk9PVD15ZXMKK05NX0NPTlRST0xMRUQ9bm8KK01UVT05MDAwCitJUFY2SU5JVD1ubyIgPj4gJGlmYWNlLnRtcAorICAgIFsgJGlwX2lmYWNlID0gImRoY3AiIF0gJiYgZWNobyAtZSAiQk9PVFBST1RPPWRoY3BcbkRIQ1BfSE9TVE5BTUU9JEhPU1ROQU1FIiA+PiAkaWZhY2UudG1wCisgICAgWyAkaXBfaWZhY2UgIT0gImRoY3AiIF0gJiYgZWNobyAtZSAiQk9PVFBST1RPPXN0YXRpY1xuSVBBRERSPSR7aXBfaWZhY2V9XG5ORVRNQVNLPTI1NS4yNTUuMjU1LjAiID4+ICRpZmFjZS50bXAKKyAgICBtdiAkaWZhY2UudG1wICBpZmNmZy0kaWZhY2UKKyAgZmkKKyAgIyBTY3JpcHQgdG8gY3JlYXRlIHZmcworICBlY2hvICIjIS9iaW4vYmFzaCIgPiAvcm9vdC9hY3RpdmF0ZS12ZnMuc2gKKyAgY2htb2QgK3ggL3Jvb3QvYWN0aXZhdGUtdmZzLnNoCisgIGZvciBpZmFjZSBpbiBgaWZjb25maWcgLWEgfCBncmVwICI6ICIgfCBjdXQgLWYgMSAtZCI6IiB8IGdyZXAgLXYgLWUgIl8iIC1lICJcLiIgLWUgImxvIiAtZSAidmlyYnIiIC1lICJ0YXAiYAorICBkbworICAgICMgMTAvNDAgR2JwcyBpbnRlcmZhY2VzCisgICAgIyBJbnRlbCBYNTIwIGNhcmRzOiBkcml2ZXIgaXhnYmUKKyAgICAjIEludGVsIFhMNzEwIEZvcnR2aWxsZSBjYXJkczogZHJpdmVyIGk0MGUKKyAgICBkcml2ZXI9YGV0aHRvb2wgLWkgJGlmYWNlfCBhd2sgJygkMH4iZHJpdmVyIil7cHJpbnQgJDJ9J2AKKyAgICBpZiBbICIkZHJpdmVyIiA9ICJpNDBlIiAtbyAiJGRyaXZlciIgPSAiaXhnYmUiIF0KKyAgICB0aGVuCisgICAgICBlY2hvICJjb25maWd1cmluZyBkYXRhcGxhbmUgaWZhY2UgJGlmYWNlIgorICAgICAgCisgICAgICAjIENyZWF0ZSA4IFNSLUlPViBwZXIgUEYgYnkgdWRldiBydWxlcyBvbmx5IGZvciBGb3J0dmlsbGUgY2FyZHMgKGk0MGUgZHJpdmVyKQorICAgICAgaWYgWyAiJGRyaXZlciIgPSAiaTQwZSIgXQorICAgICAgdGhlbgorICAgICAgcGNpPWBldGh0b29sIC1pICRpZmFjZSB8IGF3ayAnKCQwfiJidXMtaW5mbyIpe3ByaW50ICQyfSdgCisgICAgICAgZWNobyAiZWNobyA4ID4gL3N5cy9idXMvcGNpL2RldmljZXMvJHBjaS9zcmlvdl9udW12ZnMiID4+IC9yb290L2FjdGl2YXRlLXZmcy5zaAorICAgICAgZmkKKworICAgICAgIyBDb25maWd1cmUgUEYgdG8gYm9vdCBhdXRvbWF0aWNhbGx5IGFuZCB0byBoYXZlIGEgYmlnIE1UVQorICAgICAgIyAxMEdicHMgaW50ZXJmYWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIE9OQk9PVD15ZXMgYW5kICBNVFU9MjAwMAorICAgICAgY2F0IGlmY2ZnLSRpZmFjZSB8IGdyZXAgLWUgSFdBRERSIC1lIFVVSUQgPiAkaWZhY2UudG1wCisgICAgICBlY2hvICJUWVBFPUV0aGVybmV0CitOQU1FPSRpZmFjZQorREVWSUNFPSRpZmFjZQorT05CT09UPXllcworTVRVPTkwMDAKK05NX0NPTlRST0xMRUQ9bm8KK0lQVjZJTklUPW5vCitCT09UUFJPVE89bm9uZSIgPj4gJGlmYWNlLnRtcAorICAgICAgbXYgJGlmYWNlLnRtcCBpZmNmZy0kaWZhY2UKKyAgICBmaQorICBkb25lCisgIHBvcGQKK2ZpCisjIGFkZCBlbnRyeSBpbiByYy5sb2NhbCBmb3IgYWN0aXZhdGUtdmZzCitncmVwIC1xICd0b3VjaCAvdmFyL2xvY2svc3Vic3lzL2xvY2FsJyAnL2V0Yy9yYy5kL3JjLmxvY2FsJworaWYgW1sgJD8gPT0gMCBdXQordGhlbgorICBlY2hvICIvcm9vdC9hY3RpdmF0ZS12ZnMuc2giID4+IC9ldGMvcmMubG9jYWwKK2ZpCisKKworCisjIEFjdGl2YXRlIDggVmlydHVhbCBGdW5jdGlvbnMgcGVyIFBGIG9uIE5pYW50aWMgY2FyZHMgKGl4Z2JlIGRyaXZlcikKK2lmIFtbIGBsc21vZCB8IGN1dCAtZCIgIiAtZjEgfCBncmVwICJpeGdiZSIgfCBncmVwIC12IHZmYCBdXQordGhlbgorCWlmICEgZ3JlcCAtcSAiaXhnYmUiIC9ldGMvbW9kcHJvYmUuZC9peGdiZS5jb25mCisJdGhlbgorCWVjaG8gIm9wdGlvbnMgaXhnYmUgbWF4X3Zmcz04IiA+PiAvZXRjL21vZHByb2JlLmQvaXhnYmUuY29uZgorCWZpCisKK2ZpCisKKyMgRXhlY3V0ZXMgZHJhY3V0IHRvIGxvYWQgZHJpdmVycyBvbiBib290CitlY2hvICJSZWdlbmVyYXRpbmcgaW5pdHJhbWZzIgorZHJhY3V0IC0tZm9yY2UKKworIyBUbyBkZWZpbmUgOCBWRnMgcGVyIFBGIHdlIGRvIGl0IG9uIHJjLmxvY2FsLCBiZWNhdXNlIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgdW5sb2FkZWQgYW5kIGxvYWRlZCBhZ2FpbgorI2lmICEgZ3JlcCAtcSAiTkZWIiAvZXRjL3JjLmxvY2FsCisjdGhlbgorIyAgZWNobyAiIiA+PiAvZXRjL3JjLmxvY2FsCisjICBlY2hvICIjIE5GViIgPj4gL2V0Yy9yYy5sb2NhbAorIyAgZWNobyAibW9kcHJvYmUgLXIgaXhnYmUiID4+IC9ldGMvcmMubG9jYWwKKyMgIGVjaG8gIm1vZHByb2JlIGl4Z2JlIG1heF92ZnM9OCIgPj4gL2V0Yy9yYy5sb2NhbAorIyAgZWNobyAiIiA+PiAvZXRjL3JjLmxvY2FsCisKKyMgIGNobW9kICt4IC9ldGMvcmMuZC9yYy5sb2NhbAorCisjZmkKKworZWNobyAKK2VjaG8gIkRvIG5vdCBmb3JnZXQgdG8gY3JlYXRlIGEgc2hhcmVkIChORlMsIFNhbWJhLCAuLi4pIHdoZXJlIG9yaWdpbmFsIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgYXJlIGFsbG9jYXRlZCIKK2VjaG8KK2VjaG8gIkRvIG5vdCBmb3JnZXQgdG8gY29weSB0aGUgcHVibGljIHNzaCBrZXkgb2Ygb3BlbnZpbSB1c2VyIGludG8gL2hvbWUvJHt1c2VyX25hbWV9Ly5zc2gvYXV0aG9yaXplZF9rZXlzIGZvciBhdXRob21hdGljIGxvZ2luIGZyb20gb3BlbnZpbSBjb250cm9sbGVyIgorZWNobworCitlY2hvICJSZWJvb3QgdGhlIHN5c3RlbSB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVVCVU5UVTE0LjA0LnNoIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVVCVU5UVTE0LjA0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkN2RhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtVUJVTlRVMTQuMDQuc2gKQEAgLTAsMCArMSw0NzggQEAKKyMhL2Jpbi9iYXNoIAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjIEF1dGhvcnM6IEFudG9uaW8gTG9wZXosIFBhYmxvIE1vbnRlcywgQWxmb25zbyBUaWVybm8KKyMgSnVuZSAyMDE1CisKKyMgUGVyc29uYWxpemUgUkhFTDcuMSBvbiBjb21wdXRlIG5vZGVzCisjIFByZXBhcmVkIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIG5ldHdvcmsgY2FyZCBkcml2ZXJzOgorIyAJdGczLCBpZ2IgZHJpdmVycyBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2VzCisjIAlpeGdiZSAoSW50ZWwgTmlhbnRpYykgYW5kIGk0MGUgKEludGVsIEZvcnR2aWxsZSkgZHJpdmVycyBmb3IgZGF0YSBwbGFuZSBpbnRlcmZhY2VzCisKKyMgVG8gZG93bmxvYWQ6CisjIHdnZXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25mdmxhYnMvb3Blbm1hbm8vbWFzdGVyL3NjcmlwdHMvY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoCisjIFRvIGV4ZWN1dGU6CisjIGNobW9kICt4IC4vY29uZmlndXJlLWNvbXB1dGUtbm9kZS1SSEVMNy4xLnNoCisjIHN1ZG8gLi9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVJIRUw3LjEuc2ggPHVzZXI+IDxpZmFjZT4KKworIyBBc3N1bXB0aW9uczoKKyMgQWxsIHZpcnR1YWxpemF0aW9uIG9wdGlvbnMgYWN0aXZhdGVkIG9uIEJJT1MgKHZ0LWQsIHZ0LXgsIFNSLUlPViwgbm8gcG93ZXIgc2F2aW5ncy4uLikKKyMgUkhFTDcuMSBpbnN0YWxsZWQgd2l0aG91dCAvaG9tZSBwYXJ0aXRpb24gYW5kIHdpdGggdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBzZWxlY3Rpb246CisjIEBiYXNlLCBAY29yZSwgQGRldmVsb3BtZW50LCBAbmV0d29yay1maWxlLXN5c3RlbS1jbGllbnQsIEB2aXJ0dWFsaXphdGlvbi1oeXBlcnZpc29yLCBAdmlydHVhbGl6YXRpb24tcGxhdGZvcm0sIEB2aXJ0dWFsaXphdGlvbi10b29scworCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAtZSAiVXNhZ2U6IHN1ZG8gJDAgWy15XSA8dXNlci1uYW1lPiAgWyA8aWZhY2UtbmFtZT4gIFs8aXAtYWRkcmVzcz58ZGhjcF0gXSIKKyAgICBlY2hvIC1lICIgIENvbmZpZ3VyZSBjb21wdXRlIGhvc3QgZm9yIFZJTSB1c2FnZS4gKHZlcnNpb24gMC40KS4gUGFyYW1zOiIKKyAgICBlY2hvIC1lICIgICAgIC15ICBkbyBub3QgcHJvbXB0IGZvciBjb25maXJtYXRpb24uIElmIGEgbmV3IHVzZXIgaXMgY3JlYXRlZCwgdGhlIHVzZXIgbmFtZSBpcyBzZXQgYXMgcGFzc3dvcmQiCisgICAgZWNobyAtZSAiICAgICA8dXNlci1uYW1lPiBDcmVhdGUgaWYgbm90IGV4aXN0IGFuZCBjb25maWd1cmUgdGhpcyB1c2VyIGZvciBvcGVudmltIHRvIGNvbm5lY3QiCisgICAgZWNobyAtZSAiICAgICA8aWZhY2UtbmFtZT4gaWYgc3VwbGllZCBjcmVhdGVzIGJyaWRnZSBpbnRlcmZhY2VzIG9uIHRoaXMgaW50ZXJmYWNlLCBuZWVkZWQgZm9yIG9wZW52aW0iCisgICAgZWNobyAtZSAiICAgICBpcCBvciBkaGNwIGlmIHN1cGxpZWQsIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlIHdpdGggdGhpcyBpcCBhZGRyZXNzICgvMjQpIG9yICdkaGNwJyAiCit9CisKKworIzEgQ0hFQ0sgaW5wdXQgcGFyYW1ldGVycworIzEuMSByb290IHByaXZpbGVnZXMKK1sgIiRVU0VSIiAhPSAicm9vdCIgXSAmJiBlY2hvICJOZWVkZWQgcm9vdCBwcml2aWxlZ2VzIiAmJiB1c2FnZSAmJiBleGl0IC0xCisKKyMxLjIgaW5wdXQgcGFyYW1ldGVycworRk9SQ0U9IiIKK3doaWxlIGdldG9wdHMgInkiIG87IGRvCisgICAgY2FzZSAiJHtvfSIgaW4KKyAgICAgICAgeSkKKyAgICAgICAgICAgIEZPUkNFPSJ5ZXMiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgdXNhZ2UKKyAgICAgICAgICAgIGV4aXQgLTEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorc2hpZnQgJCgoT1BUSU5ELTEpKQorCisKKworaWYgWyAkIyAtbHQgMSBdICAKK3RoZW4KKyAgdXNhZ2UKKyAgZXhpdAorZmkKKworCit1c2VyX25hbWU9JDEKK2ludGVyZmFjZT0kMgoraXBfaWZhY2U9JDMKKworaWYgWyAtbiAiJGludGVyZmFjZSIgXSAmJiAhIGlmY29uZmlnICRpbnRlcmZhY2UgJj4gL2Rldi9udWxsCit0aGVuCisgIGVjaG8gIkVycm9yOiBpbnRlcmZhY2UgJyRpbnRlcmZhY2UnIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0iCisgIHVzYWdlCisgIGV4aXQgMQorZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBORUVERUQgUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIFJlcXVpcmVkIHBhY2thZ2VzCithcHQtZ2V0IC15IHVwZGF0ZQorI2FwdC1nZXQgLXkgaW5zdGFsbCBncnViLWNvbW1vbiBzY3JlZW4gdmlydC1tYW5hZ2VyIGV0aHRvb2wgYnVpbGQtZXNzZW50aWFsIHgxMS1jb21tb24geDExLXV0aWxzIHgxMS1hcHBzIGxpYmd1ZXN0ZnMtdG9vbHMgaHdsb2MgbGliZ3Vlc3Rmcy10b29scyBudW1hY3RsIHZsYW4gbmZzLWNvbW1vbiBuZnMta2VybmVsLXNlcnZlcgorYXB0LWdldCAteSBpbnN0YWxsIGdydWItY29tbW9uIHNjcmVlbiB2aXJ0LW1hbmFnZXIgZXRodG9vbCBidWlsZC1lc3NlbnRpYWwgeDExLWNvbW1vbiB4MTEtdXRpbHMgbGliZ3Vlc3Rmcy10b29scyBod2xvYyBsaWJndWVzdGZzLXRvb2xzIG51bWFjdGwgdmxhbiBuZnMtY29tbW9uIG5mcy1rZXJuZWwtc2VydmVyCisKK2VjaG8gIlJlbW92ZSB1bm5lZWRlZCBwYWNrYWdlcy4uLi4uIgorYXB0LWdldCAteSBhdXRvcmVtb3ZlCisjIFNlbGludXggbWFuYWdlbWVudAorI3l1bSBpbnN0YWxsIC15IHBvbGljeWNvcmV1dGlscy1weXRob24KKworCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIElOU1RBTEwgVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBBZGQgcmVxdWlyZWQgZ3JvdXBzCitncm91cGFkZCAtZiBhZG1pbgorZ3JvdXBhZGQgLWYgbGlidmlydCAgICNmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IGJlIGxpYnZpcnRkCisKKyMgQWRkcyB1c2VyLCBkZWZhdWx0IHBhc3N3b3JkIHNhbWUgYXMgbmFtZQoraWYgZ3JlcCAtcSAiXiR7dXNlcl9uYW1lfToiIC9ldGMvcGFzc3dkCit0aGVuIAorICAjdXNlciBleGlzdCwgYWRkIHRvIGdyb3VwCisgIGVjaG8gImFkZGluZyB1c2VyICR7dXNlcl9uYW1lfSB0byBncm91cHMgbGlidmlydCxhZG1pbiIKKyAgdXNlcm1vZCAtYSAtRyBsaWJ2aXJ0LGFkbWluIC1nIGFkbWluICR1c2VyX25hbWUKK2Vsc2UgCisgICNjcmVhdGUgdXNlciBpZiBpdCBkb2VzIG5vdCBleGlzdAorICBbIC16ICIkRk9SQ0UiIF0gJiYgcmVhZCAtcCAidXNlciAnJHt1c2VyX25hbWV9JyBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIChZL24pIiBraworICBpZiAhIFsgLXogIiRrayIgLW8gIiRrayI9InkiIC1vICIka2siPSJZIiBdCisgIHRoZW4KKyAgICBleGl0CisgIGZpCisgIGVjaG8gImNyZWF0aW5nIGFuZCBjb25maWd1cmluZyB1c2VyICR7dXNlcl9uYW1lfSIKKyAgdXNlcmFkZCAtbSAtRyBsaWJ2aXJ0LGFkbWluIC1nIGFkbWluICR1c2VyX25hbWUgICAgICAgCisgICNQYXNzd29yZAorICBpZiBbIC16ICIkRk9SQ0UiIF0gCisgIHRoZW4gCisgICAgIGVjaG8gIlByb3ZpZGUgYSBwYXNzd29yZCBmb3IgJHVzZXJfbmFtZSIKKyAgICAgcGFzc3dkICR1c2VyX25hbWUKKyAgZWxzZQorICAgICBlY2hvIC1lICIkdXNlcl9uYW1lXG4kdXNlcl9uYW1lIiB8IHBhc3N3ZCAtLXN0ZGluICR1c2VyX25hbWUKKyAgZmkKK2ZpCisKKyMgQWxsb3cgYWRtaW4gdXNlcnMgdG8gYWNjZXNzIHdpdGhvdXQgcGFzc3dvcmQKK2lmICEgZ3JlcCAtcSAiI29wZW5tYW5vIiAvZXRjL3N1ZG9lcnMKK3RoZW4KKyAgICBjYXQgPj4gL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2ggPDwgRU9MCisjIS9iaW4vYmFzaAorY2F0IFwkMSB8IGF3ayAnKFwkMH4icmVxdWlyZXR0eSIpe3ByaW50ICIjIlwkMH0oXCQwIX4icmVxdWlyZXR0eSIpe3ByaW50IFwkMH0nID4gdG1wCitjYXQgdG1wID4gXCQxCitybSB0bXAKK2VjaG8gIiIgPj4gXCQxCitlY2hvICIjb3Blbm1hbm8gYWxsb3cgdG8gZ3JvdXAgYWRtaW4gdG8gZ3JhbnQgcm9vdCBwcml2aWxlZ2VzIHdpdGhvdXQgcGFzc3dvcmQiID4+IFwkMQorZWNobyAiJWFkbWluIEFMTD0oQUxMKSBOT1BBU1NXRDogQUxMIiA+PiBcJDEKK0VPTAorICAgIGNobW9kICt4IC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoCisgICAgZWNobyAiYWxsb3dpbmcgYWRtaW4gdXNlciB0byBnZXQgcm9vdCBwcml2aWxlZ2VzIHdpdGh1dCBwYXNzd29yZCIKKyAgICBleHBvcnQgRURJVE9SPS9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoICYmIHN1ZG8gLUUgdmlzdWRvCisgICAgcm0gLWYgL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2gKK2ZpCisKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBIVUdFUEFHRVMgSVNPTENQVVMgR1JVQiAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIEh1Z2UgcGFnZXMgMUcgYXV0byBtb3VudAorbWtkaXIgLXAgL21udC9odWdlCitpZiAhIGdyZXAgLXEgIkh1Z2UgcGFnZXMiIC9ldGMvZnN0YWIKK3RoZW4KKyAgZWNobyAiIiA+PiAvZXRjL2ZzdGFiCisgIGVjaG8gIiMgSHVnZSBwYWdlcyIgPj4gL2V0Yy9mc3RhYgorICBlY2hvICJub2RldiAvbW50L2h1Z2UgaHVnZXRsYmZzIHBhZ2VzaXplPTFHQiAwIDAiID4+IC9ldGMvZnN0YWIKKyAgZWNobyAiIiA+PiAvZXRjL2ZzdGFiCitmaQorCisjIEdydWIgdmlydHVhbGl6YXRpb24gb3B0aW9uczoKKworIyBHZXQgaXNvbGNwdXMKK2lzb2xjcHVzPWBnYXdrICdCRUdJTntwcmU9LTI7fQorICAoJDE9PSJwcm9jZXNzb3IiKXtwcm89JDM7fQorICAoJDE9PSJjb3JlIiAmJiAkNCE9MCl7CisgICAgIGlmIChwcmUrMT09cHJvKXtlbmRyYW5nZT0iLSIgcHJvfQorICAgICBlbHNle2NwdXM9Y3B1cyBlbmRyYW5nZSBzZXAgcHJvOyBzZXA9IiwiOyBlbmRyYW5nZT0iIjt9OworICAgICBwcmU9cHJvO30KKyAgRU5Ee3ByaW50ZigiJXMiLGNwdXMgZW5kcmFuZ2UpO30nIC9wcm9jL2NwdWluZm9gCisKKworZWNobyAiQ1BVUzogJGlzb2xjcHVzIgorCisjIEh1Z2UgcGFnZXMgcmVzZXJ2YXRpb24gZmlsZTogcmVzZXJ2aW5nIGFsbCBtZW1vcnkgYXBhcnQgZnJvbSA0R0IgcGVyIE5VTUEgbm9kZQorIyBHZXQgdGhlIG51bWJlciBvZiBodWdlcGFnZXM6IGFsbCBtZW1vcnkgYnV0IDhHQiByZXNlcnZlZCBmb3IgdGhlIE9TCisjdG90YWxtZW09YGRtaWRlY29kZSAtLXR5cGUgMTd8Z3JlcCBTaXplIHxncmVwIE1CIHxnYXdrICd7c3VtYSs9JDJ9IEVORCB7cHJpbnQgc3VtYS8xMDI0fSdgCisjaHVnZXBhZ2VzPSQoKCR0b3RhbG1lbS04KSkKKworaWYgISBbIC1mIC91c3IvbGliL3N5c3RlbWQvaHVnZXRsYi1yZXNlcnZlLXBhZ2VzIF0KK3RoZW4KKyAgY2F0ID4gL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMgPDwgRU9MCisjIS9iaW4vYmFzaAorbm9kZXNfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL25vZGUvCitpZiBbICEgLWQgXCRub2Rlc19wYXRoIF07IHRoZW4KKyAgICAgICAgZWNobyAiRVJST1I6IFwkbm9kZXNfcGF0aCBkb2VzIG5vdCBleGlzdCIKKyAgICAgICAgZXhpdCAxCitmaQorCityZXNlcnZlX3BhZ2VzKCkKK3sKKyAgICAgICAgZWNobyBcJDEgPiBcJG5vZGVzX3BhdGgvXCQyL2h1Z2VwYWdlcy9odWdlcGFnZXMtMTA0ODU3NmtCL25yX2h1Z2VwYWdlcworfQorCisjIFRoaXMgZXhhbXBsZSByZXNlcnZlcyBhbGwgYXZhaWxhYmxlIG1lbW9yeSBhcGFydCBmcm9tIDQgR0IgZm9yIGxpbnV4CisjIHVzaW5nIDFHQiBzaXplLiBZb3UgY2FuIG1vZGlmeSBpdCB0byB5b3VyIG5lZWRzIG9yIGNvbW1lbnQgdGhlIGxpbmVzCisjIHRvIGF2b2lkIHJlc2VydmUgbWVtb3J5IGluIGEgbnVtYSBub2RlCitFT0wKKyAgZm9yIGYgaW4gL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGU/L21lbWluZm8KKyAgZG8KKyAgICBub2RlPWBoZWFkIC1uMSAkZiB8IGdhd2sgJygkNT09ImtCIil7cHJpbnQgJDJ9J2AKKyAgICBtZW1vcnk9YGhlYWQgLW4xICRmIHwgZ2F3ayAnKCQ1PT0ia0IiKXtwcmludCAkNH0nYAorICAgIG1lbW9yeT0kKChtZW1vcnkrMTA0ODU3Ni0xKSkgICAjbWVtb3J5IG11c3QgYmUgY2VpbGVkICAKKyAgICBtZW1vcnk9JCgobWVtb3J5LzEwNDg1NzYpKSAgICNmcm9tIGBrQiB0byBHQiAKKyAgICAjaWYgbWVtb3J5IAorICAgIFsgJG1lbW9yeSAtZ3QgNCBdICYmIGVjaG8gInJlc2VydmVfcGFnZXMgJCgobWVtb3J5LTQpKSBub2RlJG5vZGUiID4+IC91c3IvbGliL3N5c3RlbWQvaHVnZXRsYi1yZXNlcnZlLXBhZ2VzCisgIGRvbmUKKworICAjIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGVuYWJsZSBodWdlIHBhZ2VzIGVhcmx5IGJvb3QgcmVzZXJ2YXRpb246CisgIGNobW9kICt4IC91c3IvbGliL3N5c3RlbWQvaHVnZXRsYi1yZXNlcnZlLXBhZ2VzCisgIHN5c3RlbWN0bCBlbmFibGUgaHVnZXRsYi1naWdhbnRpYy1wYWdlcworZmkKKworIyBQcmVwYXJlcyB0aGUgdGV4dCB0byBhZGQgYXQgdGhlIGVuZCBvZiB0aGUgZ3J1YiBsaW5lLCBpbmNsdWRpbmcgYmxhY2tsaXN0aW5nIGl4Z2JldmYgZHJpdmVyIGluIHRoZSBob3N0CittZW10b3RhbD1gZ3JlcCBNZW1Ub3RhbCAvcHJvYy9tZW1pbmZvIHwgYXdrICd7IHByaW50ICQyIH0nIGAKK2hwYWdlcz0kKCggKCRtZW10b3RhbC8oMTAyNCoxMDI0KSktOCApKQorCittZW10b3RhbD0kKChtZW10b3RhbCsxMDQ4NTc2LTEpKSAgICNtZW1vcnkgbXVzdCBiZSBjZWlsZWQKK21lbXRvdGFsPSQoKG1lbXRvdGFsLzEwNDg1NzYpKSAgICNmcm9tIGBrQiB0byBHQmEKK2hwYWdlcz0kKChtZW10b3RhbC04KSkKK1tbICRocGFnZXMgLWx0IDAgXV0gJCQgaHBhZ2VzPTAKKworCitlY2hvICItLS0tLS0+IG1lbXRvdGFsOiAkbWVtdG90YWwiCisKK3RleHRva2VybmVsPSJpbnRlbF9pb21tdT1vbiBkZWZhdWx0X2h1Z2VwYWdlc3o9MUcgaHVnZXBhZ2Vzej0xRyBodWdlcGFnZXM9JGhwYWdlcyBpc29sY3B1cz0kaXNvbGNwdXMgbW9kcHJvYmUuYmxhY2tsaXN0PWl4Z2JldmYgbW9kcHJvYmUuYmxhY2tsaXN0PWk0MGV2ZiIgIAorCitlY2hvICJUZXh0IHRvIGtlcm5lbDogJHRleHRva2VybmVsIgorCisKKyMgQWRkIHRleHQgdG8gdGhlIGtlcm5lbCBsaW5lCitpZiAhIGdyZXAgLXEgImludGVsX2lvbW11PW9uIGRlZmF1bHRfaHVnZXBhZ2Vzej0xRyBodWdlcGFnZXN6PTFHIiAvZXRjL2RlZmF1bHQvZ3J1YgordGhlbgorICBlY2hvICI+Pj4+Pj4+ICBhZGRpbmcgY21kbGluZSAke3RleHRva2VybmVsfSIKKyAgc2VkIC1pICIvXkdSVUJfQ01ETElORV9MSU5VWF9ERUZBVUxUPS9zL1wiXCQvJHt0ZXh0b2tlcm5lbH1cIi8iIC9ldGMvZGVmYXVsdC9ncnViCisgICMgZ3J1YjIgdXBncmFkZQorICAjZ3J1YjItbWtjb25maWcgLW8gL2Jvb3QvZ3J1YjIvZ3J1Yi5jZmcKKyAgdXBkYXRlLWdydWIKK2ZpCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIE9USEVSIENPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBMaW5rcyB0aGUgT3Blbk1BTk8gcmVxdWlyZWQgZm9sZGVyIC9vcHQvVk5GL2ltYWdlcyB0byAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcy4gVGhlIE9TIGluc3RhbGxhdGlvbgorIyBzaG91bGQgaGF2ZSBvbmx5IGEgLyBwYXJ0aXRpb24gd2l0aCBhbGwgcG9zc2libGUgc3BhY2UgYXZhaWxhYmxlCisKK2VjaG8gIiBsaW5rIC9vcHQvVk5GL2ltYWdlcyB0byAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcyIKK2lmIFsgIiR1c2VyX25hbWUiICE9ICIiIF0KK3RoZW4KKyAgI21rZGlyIC1wIC9ob21lLyR7dXNlcl9uYW1lfS9WTkZfaW1hZ2VzCisgICNjaG93biAtUiAke3VzZXJfbmFtZX06YWRtaW4gL2hvbWUvJHt1c2VyX25hbWV9L1ZORl9pbWFnZXMKKyAgI2NobW9kIGdvK3ggJEhPTUUKKworICAjIFRoZSBvcmNoZXN0YXRvciBuZWVkcyB0byBsaW5rIHRoZSBpbWFnZXMgZm9sZGVyIAorICBybSAtZiAvb3B0L1ZORi9pbWFnZXMKKyAgbWtkaXIgLXAgL29wdC9WTkYvCisgIGxuIC1zIC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzIC9vcHQvVk5GL2ltYWdlcworICBjaG93biAtUiAke3VzZXJfbmFtZX06YWRtaW4gL29wdC9WTkYKKyAgY2hvd24gLVIgcm9vdDphZG1pbiAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcworICBjaG1vZCBnK3J3eCAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcworCisgICMgU2VsaW51eCBtYW5hZ2VtZW50CisgICNlY2hvICJjb25maWd1cmUgIFNlbGludXggbWFuYWdlbWVudCIKKyAgI3NlbWFuYWdlIGZjb250ZXh0IC1hIC10IHZpcnRfaW1hZ2VfdCAiL2hvbWUvJHt1c2VyX25hbWV9L1ZORl9pbWFnZXMoLy4qKT8iCisgICNjYXQgL2V0Yy9zZWxpbnV4L3RhcmdldGVkL2NvbnRleHRzL2ZpbGVzL2ZpbGVfY29udGV4dHMubG9jYWwgfGdyZXAgdmlydF9pbWFnZQorICAjcmVzdG9yZWNvbiAtUiAtdiAvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcworZWxzZQorICBta2RpciAtcCAvb3B0L1ZORi9pbWFnZXMKKyAgY2htb2QgbytyeCAvb3B0L1ZORi9pbWFnZXMKK2ZpCisKK2VjaG8gImNyZWF0aW5nIGxvY2FsIGluZm9ybWF0aW9uIC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sIgorZWNobyAiI0J5IGRlZmF1bHQgb3BlbnZpbSBhc3N1bWVzIGNvbnRyb2wgcGxhbmUgaW50ZXJmYWNlIG5hbWluZyBhcyBlbTEsZW0yLGVtMyxlbTQgIiA+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitlY2hvICIjYW5kIGJyaWRnZSBpZmFjZXMgYXMgdmlyYnJNYW4xLCB2aXJick1hbjIsIC4uLiIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiNpZiBjb21wdXRlIG5vZGUgY29udGFpbiBhIGRpZmZlcmVudCBuYW1lIGl0IG11c3QgYmUgaW5kaWNhdGVkIGluIHRoaXMgZmlsZSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiN3aXRoIHRoZSBmb3JtYXQgZXh0YW5kYXJkLW5hbWU6IGNvbXB1dGUtbmFtZSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2lmIFsgIiRpbnRlcmZhY2UiICE9ICIiIC1hICIkaW50ZXJmYWNlIiAhPSAiZW0xIiBdCit0aGVuCisgIGVjaG8gImlmYWNlX25hbWVzOiIgID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCisgIGVjaG8gIiAgZW0xOiAke2ludGVyZmFjZX0iID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitmaQorY2htb2QgbytyIC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCisKKyMgZGVhY3RpdmF0ZSBtZW1vcnkgb3ZlcmNvbW1pdAorI2VjaG8gImRlYWN0aXZhdGUgbWVtb3J5IG92ZXJjb21taXQiCisjc2VydmljZSBrc210dW5lZCBzdG9wCisjc2VydmljZSBrc20gc3RvcAorI2Noa2NvbmZpZyBrc210dW5lZCBvZmYKKyNjaGtjb25maWcga3NtIG9mZgorCisKKyMgTGlidmlydCBvcHRpb25zICh1bmNvbW1lbnQgdGhlIGZvbGxvd2luZykKK2VjaG8gImNvbmZpZ3VyZSBMaWJ2aXJ0IG9wdGlvbnMiCitzZWQgLWkgJ3MvI3VuaXhfc29ja19ncm91cCA9ICJsaWJ2aXJ0Ii91bml4X3NvY2tfZ3JvdXAgPSAibGlidmlydCIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorc2VkIC1pICdzLyN1bml4X3NvY2tfcndfcGVybXMgPSAiMDc3MCIvdW5peF9zb2NrX3J3X3Blcm1zID0gIjA3NzAiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jdW5peF9zb2NrX2RpciA9ICJcL3ZhclwvcnVuXC9saWJ2aXJ0Ii91bml4X3NvY2tfZGlyID0gIlwvdmFyXC9ydW5cL2xpYnZpcnQiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jYXV0aF91bml4X3J3ID0gIm5vbmUiL2F1dGhfdW5peF9ydyA9ICJub25lIi8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCisKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgTkVUV09SSyBDT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworIyBOZXR3b3JrIGNvbmZpZyAoaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbmV0KQorZWNobyAiSW50ZXJmYWNlID09PiAkaW50ZXJmYWNlIgoraWYgWyAtbiAiJGludGVyZmFjZSIgXQordGhlbgorCisKKyAgIyBGb3IgbWFuYWdlbWVudCBhbmQgZGF0YSBpbnRlcmZhY2VzCisgIHJtIC1mIC9ldGMvdWRldi9ydWxlcy5kL3BjaV9jb25maWcucnVsZXMgIyBpdCB3aWxsIGJlIGNyZWF0ZWQgdG8gZGVmaW5lIFZGcworCisKKyAgIyBTZXQgT05CT09UPW9uIGFuZCBNVFU9OTAwMCBvbiB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIHRoZSBicmlkZ2VzCisgIGVjaG8gImNvbmZpZ3VyaW5nIGlmYWNlICRpbnRlcmZhY2UiCisKKyNNVFUgZm9yIGludGVyZmFjZXMgYW5kIGJyaWRnZXMKK01UVT05MDAwCisKK2NwIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGludGVyZmFjZXMudG1wCisKKworICAjQ3JlYXRlIGluZnJhc3RydWN0dXJlIGJyaWRnZSwgbm9ybWFsbHkgdXNlZCBmb3IgY29ubmVjdGluZyB0byBjb21wdXRlIG5vZGVzLCBvcGVuZmxvdyBjb250cm9sbGVyLCAuLi4gIAorCisKKyAgICAjQ3JlYXRlIFZMQU4gZm9yIGluZnJhc3RydWN0dXJlIGJyaWRnZQorCisgZWNobyAiCisjIyMjIyMjIyMgQ1VUTElORSAjIyMjIyMjIyMKKworYXV0byAke2ludGVyZmFjZX0KK2lmYWNlICR7aW50ZXJmYWNlfSBpbmV0IHN0YXRpYworCW10dSAkTVRVCisKK2F1dG8gJHtpbnRlcmZhY2V9LjEwMDEKK2lmYWNlICR7aW50ZXJmYWNlfS4xMDAxIGluZXQgc3RhdGljCisJbXR1ICRNVFUKKyIgPj4gaW50ZXJmYWNlcy50bXAKKworIGVjaG8gImlmY29uZmlnICR7aW50ZXJmYWNlfSBtdHUgJE1UVQorIGlmY29uZmlnICR7aW50ZXJmYWNlfSB1cAorIiA+IG10dS50bXAKKworCisgICNDcmVhdGUgYnJpZGdlIGludGVyZmFjZXMKKyAgZWNobyAiQ3JlYXRpbmcgYnJpZGdlIGlmYWNlczogIgorICBmb3IgKChpPTE7aTw9MjA7aSsrKSkKKyAgZG8KKyAgICBpMmRpZ2l0cz0kaQorICAgIFsgJGkgLWx0IDEwIF0gJiYgaTJkaWdpdHM9IjAkaSIKKyAgICBlY2hvICIgICAgdmlyYnJNYW4kaSAgdmxhbiAyMCRpMmRpZ2l0cyIKKworICAgIGo9JGkKKworIGVjaG8gIgorYXV0byAke2ludGVyZmFjZX0uMjAkaTJkaWdpdHMKK2lmYWNlICR7aW50ZXJmYWNlfS4yMCRpMmRpZ2l0cyBpbmV0IHN0YXRpYworCW10dSAkTVRVCisKK2F1dG8gdmlyYnJNYW4kagoraWZhY2UgdmlyYnJNYW4kaiBpbmV0IHN0YXRpYworCWJyaWRnZV9wb3J0cyAke2ludGVyZmFjZX0uMjAkaTJkaWdpdHMKKwltdHUgJE1UVQorIiA+PiBpbnRlcmZhY2VzLnRtcAorCisgZWNobyAiaWZjb25maWcgJHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzIG10dSAkTVRVCitpZmNvbmZpZyB2aXJick1hbiRqIG10dSAkTVRVCitpZmNvbmZpZyB2aXJick1hbiRqIHVwCisiID4+IG10dS50bXAKKworICBkb25lCisKKyBlY2hvICIKK2F1dG8gZW0yLjEwMDEKK2lmYWNlIGVtMi4xMDAxIGluZXQgc3RhdGljCisKK2F1dG8gdmlyYnJJbmYKK2lmYWNlIHZpcmJySW5mIGluZXQgc3RhdGljCisJYnJpZGdlX3BvcnRzIGVtMi4xMDAxCisiID4+IGludGVyZmFjZXMudG1wCisKKyBlY2hvICJpZmNvbmZpZyBlbTIuMTAwMSBtdHUgJE1UVQoraWZjb25maWcgdmlyYnJJbmYgbXR1ICRNVFUKK2lmY29uZmlnIHZpcmJySW5mIHVwCisiID4+IG10dS50bXAKKworaWYgISBncmVwIC1xICIjIyMjIENVVExJTkUgIyMjIyIgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMKK3RoZW4KKwllY2hvICI9PT09PT0gQ29weWluZyBpbnRlcmZhY2VzLnRtcCB0byAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyIKKwljcCBpbnRlcmZhY2VzLnRtcCAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcworZmkKKworCisgICNwb3BkCitmaQorCisKKyMgQWN0aXZhdGUgOCBWaXJ0dWFsIEZ1bmN0aW9ucyBwZXIgUEYgb24gTmlhbnRpYyBjYXJkcyAoaXhnYmUgZHJpdmVyKQoraWYgW1sgYGxzbW9kIHwgY3V0IC1kIiAiIC1mMSB8IGdyZXAgIml4Z2JlIiB8IGdyZXAgLXYgdmZgIF1dCit0aGVuCisJaWYgISBncmVwIC1xICJpeGdiZSIgL2V0Yy9tb2Rwcm9iZS5kL2l4Z2JlLmNvbmYKKwl0aGVuCisJZWNobyAib3B0aW9ucyBpeGdiZSBtYXhfdmZzPTgiID4+IC9ldGMvbW9kcHJvYmUuZC9peGdiZS5jb25mCisJZmkKKworZmkKKworIyBTZXQgZGF0YXBsYW5lIE1UVQorCitlY2hvICJzbGVlcCAxMCIgPj4gbXR1LnRtcAorCitpbnRlcmZhY2VzPWBpZmNvbmZpZyAtYSB8IGdyZXAgXnAgfCBjdXQgLWQgIiAiIC1mIDFgCitmb3IgcGggaW4gJGludGVyZmFjZXMKK2RvCisgICAgICAgIGVjaG8gImlmY29uZmlnICRwaCBtdHUgJE1UVSIgPj4gbXR1LnRtcAorICAgICAgICBlY2hvICJpZmNvbmZpZyAkcGggdXAiID4+IG10dS50bXAKK2RvbmUKKworCisKK2NwIG10dS50bXAgL2V0Yy9zZXRtdHUuc2gKK2NobW9kICt4IC9ldGMvc2V0bXR1LnNoCisKKyMgVG8gZGVmaW5lIDggVkZzIHBlciBQRiB3ZSBkbyBpdCBvbiByYy5sb2NhbCwgYmVjYXVzZSB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIHVubG9hZGVkIGFuZCBsb2FkZWQgYWdhaW4KKyNpZiAhIGdyZXAgLXEgIk5GViIgL2V0Yy9yYy5sb2NhbAorI3RoZW4KKyAgZWNobyAiIyEvYmluL3NoIC1lCisiID4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICIjIE5GViIgPj4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICJtb2Rwcm9iZSAtciBpeGdiZSIgPj4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICJtb2Rwcm9iZSBpeGdiZSBtYXhfdmZzPTgiID4+IC9ldGMvcmMubG9jYWwKKyAgZWNobyAiL2V0Yy9zZXRtdHUuc2giID4+IC9ldGMvcmMubG9jYWwKKyAgZWNobyAiCitleGl0IDAiID4+IC9ldGMvcmMubG9jYWwKKyAgZWNobyAiIiA+PiAvZXRjL3JjLmxvY2FsCisKKyAgY2htb2QgK3ggL2V0Yy9yYy5kL3JjLmxvY2FsCisKKyNmaQorCitjaG1vZCBhK3J3eCAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcworbWtkaXIgL3Vzci9saWJleGVjLworcHVzaGQgL3Vzci9saWJleGVjLworbG4gLXMgL3Vzci9iaW4vcWVtdS1zeXN0ZW0teDg2XzY0IHFlbXUta3ZtCitwb3BkCisKKyNEZWFjdGl2YXRpbmcgYXBwYXJtb3Igd2hpbGUgbG9va2luZyBmb3IgYSBiZXR0ZXIgc29sdXRpb24KKy9ldGMvaW5pdC5kL2FwcGFybW9yIHN0b3AKK3VwZGF0ZS1yYy5kIC1mIGFwcGFybW9yIHJlbW92ZQorCitlY2hvIAorZWNobyAiRG8gbm90IGZvcmdldCB0byBjcmVhdGUgYSBzaGFyZWQgKE5GUywgU2FtYmEsIC4uLikgd2hlcmUgb3JpZ2luYWwgdmlydHVhbCBtYWNoaW5lIGltYWdlcyBhcmUgYWxsb2NhdGVkIgorZWNobworZWNobyAiRG8gbm90IGZvcmdldCB0byBjb3B5IHRoZSBwdWJsaWMgc3NoIGtleSBpbnRvIC9ob21lLyR7dXNlcl9uYW1lfS8uc3NoL2F1dGhvcml6ZWRfa2V5cyBmb3IgYXV0aG9tYXRpYyBsb2dpbiBmcm9tIG9wZW52aW0gY29udHJvbGxlciIKK2VjaG8KKworZWNobyAiUmVib290IHRoZSBzeXN0ZW0gdG8gbWFrZSB0aGUgY2hhbmdlcyBlZmZlY3RpdmUiCisKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLWRldmVsb3Auc2ggYi9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtZGV2ZWxvcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzc4NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLWRldmVsb3Auc2gKQEAgLTAsMCArMSwyNTIgQEAKKyMhL2Jpbi9iYXNoIAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjIHYxLjA6IDIwMTUgSnVuZSAKKyMgQXV0aG9yczogQW50b25pbyBMb3BleiwgUGFibG8gTW9udGVzLCBBbGZvbnNvIFRpZXJubworCisjIFBlcnNvbmFsaXplIFJIRUw3L0NFTlRPUyBjb21wdXRlIG5vZGVzIGZvciB1c2luZyBvcGVudmltIGluICdkZXZlbG9wbWVudCcgbW9kZTogCisjICAgbm90IHVzaW5nIGh1Z2UgcGFnZXMgbmVpdGhlciBpc29sY3B1cworCisjIFRvIGRvd25sb2FkOgorIyB3Z2V0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uZnZsYWJzL29wZW5tYW5vL21hc3Rlci9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtZGV2ZWxvcC5zaAorIyBUbyBleGVjdXRlOgorIyBjaG1vZCAreCAuL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtZGV2ZWxvcC5zaAorIyBzdWRvIC4vY29uZmlndXJlLWNvbXB1dGUtbm9kZS1kZXZlbG9wLnNoIDx1c2VyPiA8aWZhY2U+CisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAtZSAiVXNhZ2U6IHN1ZG8gJDAgWy15XSA8dXNlci1uYW1lPiAgWyA8aWZhY2UtbmFtZT4gIFs8aXAtYWRkcmVzcz58ZGhjcF0gXSIKKyAgICBlY2hvIC1lICIgIENvbmZpZ3VyZSBjb21wdXRlIGhvc3QgZm9yIFZJTSB1c2FnZSBpbiBtb2RlICdkZXZlbG9wbWVudCcuIFBhcmFtczoiCisgICAgZWNobyAtZSAiICAgICAteSAgZG8gbm90IHByb21wdCBmb3IgY29uZmlybWF0aW9uLiBJZiBhIG5ldyB1c2VyIGlzIGNyZWF0ZWQsIHRoZSB1c2VyIG5hbWUgaXMgc2V0IGFzIHBhc3N3b3JkIgorICAgIGVjaG8gLWUgIiAgICAgPHVzZXItbmFtZT4gQ3JlYXRlIGlmIG5vdCBleGlzdCBhbmQgY29uZmlndXJlIHRoaXMgdXNlciBmb3Igb3BlbnZpbSB0byBjb25uZWN0IgorICAgIGVjaG8gLWUgIiAgICAgPGlmYWNlLW5hbWU+IGlmIHN1cHBsaWVkIGNyZWF0ZXMgYnJpZGdlIGludGVyZmFjZXMgb24gdGhpcyBpbnRlcmZhY2UsIG5lZWRlZCBmb3Igb3BlbnZpbSIKKyAgICBlY2hvIC1lICIgICAgIGlwIG9yIGRoY3AgaWYgc3VwcGxpZWQsIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlIHdpdGggdGhpcyBpcCBhZGRyZXNzICgvMjQpIG9yICdkaGNwJyAiCit9CisKKyMxIENIRUNLIGlucHV0IHBhcmFtZXRlcnMKKyMxLjEgcm9vdCBwcml2aWxlZ2VzCitbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgZWNobyAiTmVlZGVkIHJvb3QgcHJpdmlsZWdlcyIgJiYgdXNhZ2UgJiYgZXhpdCAtMQorCisjMS4yIGlucHV0IHBhcmFtZXRlcnMKK0ZPUkNFPSIiCit3aGlsZSBnZXRvcHRzICJ5IiBvOyBkbworICAgIGNhc2UgIiR7b30iIGluCisgICAgICAgIHkpCisgICAgICAgICAgICBGT1JDRT0ieWVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIHVzYWdlCisgICAgICAgICAgICBleGl0IC0xCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKE9QVElORC0xKSkKKworCitpZiBbICQjIC1sdCAxIF0gIAordGhlbgorICB1c2FnZQorICBleGl0CitmaQorCit1c2VyX25hbWU9JDEKK2ludGVyZmFjZT0kMgoraXBfaWZhY2U9JDMKKworaWYgWyAtbiAiJGludGVyZmFjZSIgXSAmJiAhIGlmY29uZmlnICRpbnRlcmZhY2UgJj4gL2Rldi9udWxsCit0aGVuCisgIGVjaG8gIkVycm9yOiBpbnRlcmZhY2UgJyRpbnRlcmZhY2UnIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0iCisgIHVzYWdlCisgIGV4aXQgMQorZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBORUVERUQgUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIFJlcXVpcmVkIHBhY2thZ2VzCit5dW0gcmVwb2xpc3QKK3l1bSBjaGVjay11cGRhdGUKK3l1bSB1cGRhdGUgLXkKK3l1bSBpbnN0YWxsIC15IHNjcmVlbiB2aXJ0LW1hbmFnZXIgZXRodG9vbCBnY2MgZ2NjLWMrKyB4b3JnLXgxMS14YXV0aCB4b3JnLXgxMS14aW5pdCB4b3JnLXgxMS1kZXByZWNhdGVkLWxpYnMgbGliWHRzdCBndWVzdGZpc2ggaHdsb2MgbGliaHVnZXRsYmZzLXV0aWxzIGxpYmd1ZXN0ZnMtdG9vbHMKKyMgU2VsaW51eCBtYW5hZ2VtZW50Cit5dW0gaW5zdGFsbCAteSBwb2xpY3ljb3JldXRpbHMtcHl0aG9uCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIElOU1RBTEwgVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBBZGQgcmVxdWlyZWQgZ3JvdXBzCitncm91cGFkZCAtZiBhZG1pbgorZ3JvdXBhZGQgLWYgbGlidmlydCAgICNmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IGJlIGxpYnZpcnRkCisKKyMgQWRkcyB1c2VyLCBkZWZhdWx0IHBhc3N3b3JkIHNhbWUgYXMgbmFtZQoraWYgZ3JlcCAtcSAiXiR7dXNlcl9uYW1lfToiIC9ldGMvcGFzc3dkCit0aGVuIAorICAjdXNlciBleGlzdCwgYWRkIHRvIGdyb3VwCisgIGVjaG8gImFkZGluZyB1c2VyICR7dXNlcl9uYW1lfSB0byBncm91cHMgbGlidmlydCxhZG1pbiIKKyAgdXNlcm1vZCAtYSAtRyBsaWJ2aXJ0LGFkbWluIC1nIGFkbWluICR1c2VyX25hbWUKK2Vsc2UgCisgICNjcmVhdGUgdXNlciBpZiBpdCBkb2VzIG5vdCBleGlzdAorICBbIC16ICIkRk9SQ0UiIF0gJiYgcmVhZCAtcCAidXNlciAnJHt1c2VyX25hbWV9JyBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIChZL24pIiBraworICBpZiAhIFsgLXogIiRrayIgLW8gIiRrayI9InkiIC1vICIka2siPSJZIiBdCisgIHRoZW4KKyAgICBleGl0CisgIGZpCisgIGVjaG8gImNyZWF0aW5nIGFuZCBjb25maWd1cmluZyB1c2VyICR7dXNlcl9uYW1lfSIKKyAgdXNlcmFkZCAtbSAtRyBsaWJ2aXJ0LGFkbWluIC1nIGFkbWluICR1c2VyX25hbWUgICAgICAgCisgICNQYXNzd29yZAorICBpZiBbIC16ICIkRk9SQ0UiIF0gCisgIHRoZW4gCisgICAgIGVjaG8gIlByb3ZpZGUgYSBwYXNzd29yZCBmb3IgJHVzZXJfbmFtZSIKKyAgICAgcGFzc3dkICR1c2VyX25hbWUKKyAgZWxzZQorICAgICBlY2hvIC1lICIkdXNlcl9uYW1lXG4kdXNlcl9uYW1lIiB8IHBhc3N3ZCAtLXN0ZGluICR1c2VyX25hbWUKKyAgZmkKK2ZpCisKKyMgQWxsb3cgYWRtaW4gdXNlcnMgdG8gYWNjZXNzIHdpdGhvdXQgcGFzc3dvcmQKK2lmICEgZ3JlcCAtcSAiI29wZW5tYW5vIiAvZXRjL3N1ZG9lcnMKK3RoZW4KKyAgICBjYXQgPj4gL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2ggPDwgRU9MCisjIS9iaW4vYmFzaAorY2F0IFwkMSB8IGF3ayAnKFwkMH4icmVxdWlyZXR0eSIpe3ByaW50ICIjIlwkMH0oXCQwIX4icmVxdWlyZXR0eSIpe3ByaW50IFwkMH0nID4gdG1wCitjYXQgdG1wID4gXCQxCitybSB0bXAKK2VjaG8gIiIgPj4gXCQxCitlY2hvICIjb3Blbm1hbm8gYWxsb3cgdG8gZ3JvdXAgYWRtaW4gdG8gZ3JhbnQgcm9vdCBwcml2aWxlZ2VzIHdpdGhvdXQgcGFzc3dvcmQiID4+IFwkMQorZWNobyAiJWFkbWluIEFMTD0oQUxMKSBOT1BBU1NXRDogQUxMIiA+PiBcJDEKK0VPTAorICAgIGNobW9kICt4IC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoCisgICAgZWNobyAiYWxsb3dpbmcgYWRtaW4gdXNlciB0byBnZXQgcm9vdCBwcml2aWxlZ2VzIHdpdGh1dCBwYXNzd29yZCIKKyAgICBleHBvcnQgRURJVE9SPS9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoICYmIHN1ZG8gLUUgdmlzdWRvCisgICAgcm0gLWYgL2hvbWUvJHt1c2VyX25hbWV9L3NjcmlwdF92aXN1ZG8uc2gKK2ZpCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIE9USEVSIENPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKyMgQ3JlYXRlcyBhIGZvbGRlciB0byBzdG9yZSBpbWFnZXMgaW4gdGhlIHVzZXIgaG9tZQorI0NyZWF0ZXMgYSBsaW5rIHRvIHRoZSAvaG9tZSBmb2xkZXIgYmVjYXVzZSBpbiBSSEVMIHRoaXMgZm9sZGVyIGlzIGxhcmdlcgorZWNobyAiY3JlYXRpbmcgY29tcHV0ZSBub2RlIGZvbGRlciBmb3IgbG9jYWwgaW1hZ2VzIC9vcHQvVk5GL2ltYWdlcyIKK2lmIFsgIiR1c2VyX25hbWUiICE9ICIiIF0KK3RoZW4KKyAgbWtkaXIgLXAgL2hvbWUvVk5GX2ltYWdlcworICBjaG93biAtUiAke3VzZXJfbmFtZX06YWRtaW4gL2hvbWUvVk5GX2ltYWdlcworICBjaG1vZCBnbyt4IC9ob21lL1ZORl9pbWFnZXMKKworICAjIFRoZSBvcmNoZXN0YXRvciBuZWVkcyB0byBsaW5rIHRoZSBpbWFnZXMgZm9sZGVyIAorICBybSAtZiAvb3B0L1ZORi9pbWFnZXMKKyAgbWtkaXIgLXAgL29wdC9WTkYvCisgIGxuIC1zIC9ob21lL1ZORl9pbWFnZXMgL29wdC9WTkYvaW1hZ2VzCisgIGNob3duIC1SICR7dXNlcl9uYW1lfTphZG1pbiAvb3B0L1ZORgorCitlbHNlCisgIG1rZGlyIC1wIC9vcHQvVk5GL2ltYWdlcworICBjaG1vZCBvK3J4IC9vcHQvVk5GL2ltYWdlcworZmkKKworZWNobyAiY3JlYXRpbmcgbG9jYWwgaW5mb3JtYXRpb24gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwiCitlY2hvICIjQnkgZGVmYXVsdCBvcGVudmltIGFzc3VtZXMgY29udHJvbCBwbGFuZSBpbnRlcmZhY2UgbmFtaW5nIGFzIGVtMSxlbTIsZW0zLGVtNCAiID4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiNhbmQgYnJpZGdlIGlmYWNlcyBhcyB2aXJick1hbjEsIHZpcmJyTWFuMiwgLi4uIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZWNobyAiI2lmIGNvbXB1dGUgbm9kZSBjb250YWluIGEgZGlmZmVyZW50IG5hbWUgaXQgbXVzdCBiZSBpbmRpY2F0ZWQgaW4gdGhpcyBmaWxlIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAorZWNobyAiI3dpdGggdGhlIGZvcm1hdCBleHRhbmRhcmQtbmFtZTogY29tcHV0ZS1uYW1lIiA+PiAvb3B0L1ZORi9pbWFnZXMvaG9zdGluZm8ueWFtbAoraWYgWyAiJGludGVyZmFjZSIgIT0gIiIgLWEgIiRpbnRlcmZhY2UiICE9ICJlbTEiIF0KK3RoZW4KKyAgZWNobyAiaWZhY2VfbmFtZXM6IiAgICAgICAgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKKyAgZWNobyAiICBlbTE6ICR7aW50ZXJmYWNlfSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2ZpCitjaG1vZCBvK3IgL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKKworIyBkZWFjdGl2YXRlIG1lbW9yeSBvdmVyY29tbWl0CitlY2hvICJkZWFjdGl2YXRlIG1lbW9yeSBvdmVyY29tbWl0Igorc2VydmljZSBrc210dW5lZCBzdG9wCitzZXJ2aWNlIGtzbSBzdG9wCitjaGtjb25maWcga3NtdHVuZWQgb2ZmCitjaGtjb25maWcga3NtIG9mZgorCisjIExpYnZpcnQgb3B0aW9ucyAodW5jb21tZW50IHRoZSBmb2xsb3dpbmcpCitlY2hvICJjb25maWd1cmUgTGlidmlydCBvcHRpb25zIgorc2VkIC1pICdzLyN1bml4X3NvY2tfZ3JvdXAgPSAibGlidmlydCIvdW5peF9zb2NrX2dyb3VwID0gImxpYnZpcnQiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jdW5peF9zb2NrX3J3X3Blcm1zID0gIjA3NzAiL3VuaXhfc29ja19yd19wZXJtcyA9ICIwNzcwIi8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCitzZWQgLWkgJ3MvI3VuaXhfc29ja19kaXIgPSAiXC92YXJcL3J1blwvbGlidmlydCIvdW5peF9zb2NrX2RpciA9ICJcL3ZhclwvcnVuXC9saWJ2aXJ0Ii8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCitzZWQgLWkgJ3MvI2F1dGhfdW5peF9ydyA9ICJub25lIi9hdXRoX3VuaXhfcncgPSAibm9uZSIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICBORVRXT1JLIENPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCisjIE5ldHdvcmsgY29uZmlnIChpZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBuZXQpCitpZiBbIC1uICIkaW50ZXJmYWNlIiBdCit0aGVuCisKKyAgIyBEZWFjdGl2YXRlIG5ldHdvcmsgbWFuYWdlcgorICAjc3lzdGVtY3RsIHN0b3AgTmV0d29ya01hbmFnZXIKKyAgI3N5c3RlbWN0bCBkaXNhYmxlIE5ldHdvcmtNYW5hZ2VyCisKKyAgcHVzaGQgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzLworCisgICNDcmVhdGUgaW5mcmFzdHJ1Y3R1cmUgYnJpZGdlCisgIGVjaG8gIkRFVklDRT12aXJickluZgorVFlQRT1CcmlkZ2UKK09OQk9PVD15ZXMKK0RFTEFZPTAKK05NX0NPTlRST0xMRUQ9bm8KK0lQQUREUj0xMC4xMC4wLjEKK05FVE1BU0s9MjU1LjI1NS4yNTUuMAorVVNFUkNUTD1ubyIgPiBpZmNmZy12aXJickluZgorCisgICNDcmVhdGUgYnJpZGdlIGludGVyZmFjZXMKKyAgZWNobyAiQ3JlYXRpbmcgYnJpZGdlIGlmYWNlczogIgorICBmb3IgKChpPTE7aTw9MjA7aSsrKSkKKyAgZG8KKyAgICBpMmRpZ2l0cz0kaQorICAgIFsgJGkgLWx0IDEwIF0gJiYgaTJkaWdpdHM9IjAkaSIKKyAgICBlY2hvICIgICAgdmlyYnJNYW4kaSIKKyAgICBlY2hvICJERVZJQ0U9dmlyYnJNYW4kaQorVFlQRT1CcmlkZ2UKK09OQk9PVD15ZXMKK0RFTEFZPTAKK05NX0NPTlRST0xMRUQ9bm8KK1VTRVJDVEw9bm8iID4gaWZjZmctdmlyYnJNYW4kaQorCisgIGRvbmUKKworICBwb3BkCitmaQorCitlY2hvIAorZWNobyAiRG8gbm90IGZvcmdldCB0byBjcmVhdGUgYSBmb2xkZXIgd2hlcmUgb3JpZ2luYWwgdmlydHVhbCBtYWNoaW5lIGltYWdlcyBhcmUgYWxsb2NhdGVkIChleC4gJEhPTUUvc3RhdGljX3N0b3JhZ2UpIgorZWNobworZWNobyAiRG8gbm90IGZvcmdldCB0byBhbGxvdyBvcGVudmltIG1hY2hpbmUgYWNjZXNzaW5nIGRpcmVjdGx5IHRvIHRoZSBob3N0IHdpdGggc3NoLiBDYW4gYmUgZG9uZSBieToiCitlY2hvICIgICBDb3B5IHRoZSBwdWJsaWMgc3NoIGtleSBvZiB0aGUgb3BlbnZpbSB1c2VyIGZyb20gJEhPTUUvLnNzaC9pZF9kc2EucHViIChpbiBvcGVudmltKSBpbnRvIC9ob21lLyR7dXNlcl9uYW1lfS8uc3NoL2F1dGhvcml6ZWRfa2V5cyAoaW4gdGhlIGhvc3QpIGZvciBhdXRvbWF0aWMgbG9naW4gZnJvbSBvcGVudmltIGNvbnRyb2xsZXIiCitlY2hvICIgICBPciBydW5uaW5nIG9uIG9wZW52aW0gbWFjaGluZSAnc3NoLWtleWdlbicgKGdlbmVyYXRlIHNzaCBrZXlzKSBhbmQgJ3NzaC1jb3B5LWlkIDx1c2VyPkA8Y29tcHV0ZSBob3N0PiciCitlY2hvCitlY2hvICJEbyBub3QgZm9yZ2V0IHRvIHBlcmZvcm0gYW4gaW5pdGlhbCBzc2ggbG9naW4gZnJvbSBvcGVubWFubyBWTSBpbnRvIHRoZSBob3N0IHNvIHRoZSBvcGVubWFubyBzc2ggaG9zdCBrZXkgaXMgYWRkZWQgdG8gL2hvbWUvJHt1c2VyX25hbWV9Ly5zc2gva25vd25faG9zdHMiCitlY2hvCisKK2VjaG8gIlJlYm9vdCB0aGUgc3lzdGVtIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlIgorCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZmxvdy1sb2diYWNrLnhtbCBiL3NjcmlwdHMvZmxvdy1sb2diYWNrLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWYwMDBkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9mbG93LWxvZ2JhY2sueG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhLS0KKyMjCisjIENvcHlyaWdodCAyMDE1IFRlbGVmw7NuaWNhIEludmVzdGlnYWNpw7NuIHkgRGVzYXJyb2xsbywgUy5BLlUuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG9wZW5tYW5vCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisjIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCisjIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBGb3IgdGhvc2UgdXNhZ2VzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgcGxlYXNlCisjIGNvbnRhY3Qgd2l0aDogbmZ2bGFic0B0aWQuZXMKKyMjCistLT4KKworPGNvbmZpZ3VyYXRpb24gc2Nhbj0idHJ1ZSI+CisgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+CisgICAgPGVuY29kZXI+CisgICAgICA8cGF0dGVybj4lbGV2ZWwgWyVsb2dnZXI6JXRocmVhZF0gJW1zZyVuPC9wYXR0ZXJuPgorICAgIDwvZW5jb2Rlcj4KKyAgPC9hcHBlbmRlcj4KKyAgPHJvb3QgbGV2ZWw9IkVSUk9SIj4KKyAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPgorICA8L3Jvb3Q+CisgIDxsb2dnZXIgbmFtZT0ib3JnIiBsZXZlbD0iRVJST1IiLz4KKyAgPGxvZ2dlciBuYW1lPSJMb2dTZXJ2aWNlIiBsZXZlbD0iRVJST1IiLz4gPCEtLSBSZXN0bGV0IGFjY2VzcyBsb2dnaW5nIC0tPgorICA8bG9nZ2VyIG5hbWU9Im5ldC5mbG9vZGxpZ2h0Y29udHJvbGxlciIgbGV2ZWw9IlRSQUNFIi8+CisgIDxsb2dnZXIgbmFtZT0ibmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmxvZ2dpbmciIGxldmVsPSJFUlJPUiIvPgorPC9jb25maWd1cmF0aW9uPgorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Zsb3cucHJvcGVydGllcyBiL3NjcmlwdHMvZmxvdy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjBiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2Zsb3cucHJvcGVydGllcwpAQCAtMCwwICsxLDQyIEBACisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCitmbG9vZGxpZ2h0Lm1vZHVsZXMgPSBuZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuc3RvcmFnZS5tZW1vcnkuTWVtb3J5U3RvcmFnZVNvdXJjZSxcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuY29yZS5GbG9vZGxpZ2h0UHJvdmlkZXIsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnRocmVhZHBvb2wuVGhyZWFkUG9vbCxcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuc3RhdGljZmxvd2VudHJ5LlN0YXRpY0Zsb3dFbnRyeVB1c2hlcixcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuZmlyZXdhbGwuRmlyZXdhbGwsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmp5dGhvbi5KeXRob25EZWJ1Z0ludGVyZmFjZSxcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuY291bnRlci5Db3VudGVyU3RvcmUsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnBlcmZtb24uUGt0SW5Qcm9jZXNzaW5nVGltZSxcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIudWkud2ViLlN0YXRpY1dlYlJvdXRhYmxlCisKKyNQT1JUIEFQSSBmbG9vZGxpZ2h0IHdpbGwgbGlzdGVuIHRvLiBNdXN0IG1hdGNoIHRoZSAnb2ZfY29udHJvbGxlcl9wb3J0JyBvZiBvcGVudmltZC5jZmcKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5yZXN0c2VydmVyLlJlc3RBcGlTZXJ2ZXIucG9ydCA9ICAgICAgICA3MDcwCisKKyNQT1JUIHVzZWQgYnkgdGhlIHN3aXRjaCB0byBjb25uZWN0IHRvIGZsb29kbGlnaHQKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5jb3JlLkZsb29kbGlnaHRQcm92aWRlci5vcGVuZmxvd3BvcnQgPSA2NjMzCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuanl0aG9uLkp5dGhvbkRlYnVnSW50ZXJmYWNlLnBvcnQgPSAgICAgNjY1NQorCisjdGltZW91dCBwYXJhbWV0ZXJzCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuZm9yd2FyZGluZy5Gb3J3YXJkaW5nLmlkbGV0aW1lb3V0ID0gICAgNQorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmZvcndhcmRpbmcuRm9yd2FyZGluZy5oYXJkdGltZW91dCA9ICAgIDAKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9mbG93LnByb3BlcnRpZXNfdjEuMSBiL3NjcmlwdHMvZmxvdy5wcm9wZXJ0aWVzX3YxLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkZTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvZmxvdy5wcm9wZXJ0aWVzX3YxLjEKQEAgLTAsMCArMSwzNiBAQAorZmxvb2RsaWdodC5tb2R1bGVzPVwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5qeXRob24uSnl0aG9uRGVidWdJbnRlcmZhY2UsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnN0b3JhZ2UubWVtb3J5Lk1lbW9yeVN0b3JhZ2VTb3VyY2UsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmNvcmUuaW50ZXJuYWwuRmxvb2RsaWdodFByb3ZpZGVyLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci50aHJlYWRwb29sLlRocmVhZFBvb2wsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmRlYnVnY291bnRlci5EZWJ1Z0NvdW50ZXJTZXJ2aWNlSW1wbCxcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIucGVyZm1vbi5Qa3RJblByb2Nlc3NpbmdUaW1lLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5kZWJ1Z2V2ZW50LkRlYnVnRXZlbnRTZXJ2aWNlLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5zdGF0aWNmbG93ZW50cnkuU3RhdGljRmxvd0VudHJ5UHVzaGVyLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5yZXN0c2VydmVyLlJlc3RBcGlTZXJ2ZXIsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnRvcG9sb2d5LlRvcG9sb2d5TWFuYWdlcixcCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuZm9yd2FyZGluZy5Gb3J3YXJkaW5nLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5saW5rZGlzY292ZXJ5LmludGVybmFsLkxpbmtEaXNjb3ZlcnlNYW5hZ2VyLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci51aS53ZWIuU3RhdGljV2ViUm91dGFibGUsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmxvYWRiYWxhbmNlci5Mb2FkQmFsYW5jZXIsXAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmZpcmV3YWxsLkZpcmV3YWxsLFwKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5kZXZpY2VtYW5hZ2VyLmludGVybmFsLkRldmljZU1hbmFnZXJJbXBsCitvcmcuc2RucGxhdGZvcm0uc3luYy5pbnRlcm5hbC5TeW5jTWFuYWdlci5hdXRoU2NoZW1lPUNIQUxMRU5HRV9SRVNQT05TRQorb3JnLnNkbnBsYXRmb3JtLnN5bmMuaW50ZXJuYWwuU3luY01hbmFnZXIua2V5U3RvcmVQYXRoPS9ldGMvZmxvb2RsaWdodC9hdXRoX2NyZWRlbnRpYWxzLmpjZWtzCitvcmcuc2RucGxhdGZvcm0uc3luYy5pbnRlcm5hbC5TeW5jTWFuYWdlci5kYlBhdGg9L3Zhci9saWIvZmxvb2RsaWdodC8KK29yZy5zZG5wbGF0Zm9ybS5zeW5jLmludGVybmFsLlN5bmNNYW5hZ2VyLnBvcnQ9NjY0MgorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmNvcmUuaW50ZXJuYWwuRmxvb2RsaWdodFByb3ZpZGVyLm9wZW5mbG93UG9ydD02NjUzCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuY29yZS5pbnRlcm5hbC5GbG9vZGxpZ2h0UHJvdmlkZXIucm9sZT1BQ1RJVkUKK25ldC5mbG9vZGxpZ2h0Y29udHJvbGxlci5jb3JlLmludGVybmFsLk9GU3dpdGNoTWFuYWdlci5jbGVhclRhYmxlc09uSW5pdGlhbEhhbmRzaGFrZUFzTWFzdGVyPVlFUworbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmNvcmUuaW50ZXJuYWwuT0ZTd2l0Y2hNYW5hZ2VyLmNsZWFyVGFibGVzT25FYWNoVHJhbnNpdGlvblRvTWFzdGVyPVlFUworbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLmNvcmUuaW50ZXJuYWwuT0ZTd2l0Y2hNYW5hZ2VyLmtleVN0b3JlUGF0aD0vcGF0aC90by95b3VyL2tleXN0b3JlLWZpbGUuamtzCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuY29yZS5pbnRlcm5hbC5PRlN3aXRjaE1hbmFnZXIua2V5U3RvcmVQYXNzd29yZD15b3VyLWtleXN0b3JlLXBhc3N3b3JkCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIuY29yZS5pbnRlcm5hbC5PRlN3aXRjaE1hbmFnZXIudXNlU3NsPU5PCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIucmVzdHNlcnZlci5SZXN0QXBpU2VydmVyLmtleVN0b3JlUGF0aD0vcGF0aC90by95b3VyL2tleXN0b3JlLWZpbGUuamtzCituZXQuZmxvb2RsaWdodGNvbnRyb2xsZXIucmVzdHNlcnZlci5SZXN0QXBpU2VydmVyLmtleVN0b3JlUGFzc3dvcmQ9eW91ci1rZXlzdG9yZS1wYXNzd29yZAorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnJlc3RzZXJ2ZXIuUmVzdEFwaVNlcnZlci5odHRwc05lZWRDbGllbnRBdXRoZW50aWNhdGlvbj1OTworbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnJlc3RzZXJ2ZXIuUmVzdEFwaVNlcnZlci51c2VIdHRwcz1OTworbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnJlc3RzZXJ2ZXIuUmVzdEFwaVNlcnZlci51c2VIdHRwPVlFUworbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnJlc3RzZXJ2ZXIuUmVzdEFwaVNlcnZlci5odHRwc1BvcnQ9ODA4MQorbmV0LmZsb29kbGlnaHRjb250cm9sbGVyLnJlc3RzZXJ2ZXIuUmVzdEFwaVNlcnZlci5odHRwUG9ydD04MDgwCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2V0X2RoY3BfbGVhc2Uuc2ggYi9zY3JpcHRzL2dldF9kaGNwX2xlYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyZjA0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2dldF9kaGNwX2xlYXNlLnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9iYXNoCithd2sgJworKCQxPT0ibGVhc2UiICYmICQzPT0ieyIpeyBsZWFzZT0kMjsgYWN0aXZlPSJubyI7IGZvdW5kPSJubyIgfQorKCQxPT0iYmluZGluZyIgJiYgJDI9PSJzdGF0ZSIgJiYgJDM9PSJhY3RpdmU7Iil7IGFjdGl2ZT0ieWVzIiB9CisoJDE9PSJoYXJkd2FyZSIgJiYgJDI9PSJldGhlcm5ldCIgJiYgJDM9PXRvbG93ZXIoIickMSc7IikpeyBmb3VuZD0ieWVzIiB9CisoJDE9PSJjbGllbnQtaG9zdG5hbWUiKXsgbmFtZT0kMiB9CisoJDE9PSJ9Iil7IGlmIChhY3RpdmU9PSJ5ZXMiICYmIGZvdW5kPT0ieWVzIil7IHRhcmdldF9sZWFzZT1sZWFzZTsgdGFyZ2V0X25hbWU9bmFtZX19CitFTkR7cHJpbnRmKCIlcyIsIHRhcmdldF9sZWFzZSl9ICNwcmludCB0YXJnZXRfbmFtZQorJyAvdmFyL2xpYi9kaGNwL2RoY3BkLmxlYXNlcworCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hvc3QtYWRkLWRldmVsb3Auc2ggYi9zY3JpcHRzL2hvc3QtYWRkLWRldmVsb3Auc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGNlNGJkZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvaG9zdC1hZGQtZGV2ZWxvcC5zaApAQCAtMCwwICsxLDE1MSBAQAorIyEvYmluL2Jhc2gKKworIyMKKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbDs25pY2EgSW52ZXN0aWdhY2nDs24geSBEZXNhcnJvbGxvLCBTLkEuVS4KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygb3Blbm1hbm8KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyMgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4KKyMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIEZvciB0aG9zZSB1c2FnZXMgbm90IGNvdmVyZWQgYnkgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCBwbGVhc2UKKyMgY29udGFjdCB3aXRoOiBuZnZsYWJzQHRpZC5lcworIyMKKworI0dldCBjb25maWd1cmF0aW9uIG9mIGEgaG9zdCBmb3IgdXNpbmcgaXQgYXMgYSBjb21wdXRlIG5vZGUKKworZnVuY3Rpb24gdXNhZ2UoKXsKKyAgICBlY2hvICAtZSAidXNhZ2U6ICQwIHVzZXIgaXBfbmFtZSBuYl9jb3JlcyBHaUJfbWVtb3J5IG5iXzEwR0JfaW50ZXJmYWNlcyBbaG9zdG5hbWVdIFs+PiBob3N0LnlhbWxdXG4gIEdldCBob3N0IHBhcmFtZXRlcnMgYW5kIGdlbmVyYXRlZCBhIHlhbWwgZmlsZSB0byBiZSB1c2VkIGZvciBvcGVudmltIGhvc3QtYWRkIgorICAgIGVjaG8gLWUgIiAgLSBJbiBjYXNlIGhvc3RuYW1lIGlzIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCBiZSB1c2VkIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzY3JpcHQgaXMgcnVuIgorICAgIGVjaG8gLWUgIiAgLSBuYl9jb3JlcyBtdXN0IGJlIGFuIG9kZCBudW1iZXIgYW5kIGJpZ2dlciBvciBlcXVhbCB0byA0LiIKKyAgICBlY2hvIC1lICIgIC0gR2lCX21lbW9yeSBtdXN0IGJlIGFuIG9kZCBudW1iZXIgYW5kIGJpZ2dlciBvciBlcXVhbCB0byAxNi4gNEdpQiBvZiBtZW1vcnkgd2lsbCBiZSByZXNlcnZlZCBmb3IgdGhlIGhvc3QgT1MsIHRoZSByZXN0IHdpbGwgYmUgdXNlZCBieSBWTS4iCisgICAgZWNobyAtZSAiICAtIG5iXzEwR0JfaW50ZXJmYWNlcyBtdXN0IGJlIGFuIG9kZCBudW1iZXIgYW5kIGJpZ2dlciBvciBlcXVhbCB0byA0LiIKKyAgICBlY2hvIC1lICIgIC0gVGhlIG91dHB1dCB3aWxsIGJlIGEgc2VydmVyIGRlc2NyaXB0b3Igd2l0aCB0d28gbnVtYXMgYW5kIHJlc291cmNlcyAobWVtb3J5LCBjb3JlcyBhbmQgaW50ZXJmYWNlcykgZXF1YWxseSBkaXN0cmlidXRlZCBiZXR3ZWVuIHRoZW0uIgorICAgIGVjaG8gLWUgIiAgLSBFYWNoIGludGVyZmFjZSAocGh5c2ljYWwgZnVudGlvbikgd2lsbCBoYXZlIGRlZmluZWQgOCBTUi1JT1YgKHZpcnR1YWwgZnVuY3Rpb25zKS4iCisgICAgZXhpdCAxCit9CisKK2Z1bmN0aW9uIGdldF9oYXNoX3ZhbHVlKCkgeyAgIGVjaG8gYGV2YWwgIGVjaG8gJFx7XGBlY2hvICQxWyQyXVxgXH1gOyB9CisKK2Z1bmN0aW9uIGdldF9tYWMoKXsKKyAgc2VlZD0kMQorICBiMT0kKChzZWVkJTE2KSk7IHNlZWQ9JCgoc2VlZC8xNikpCisgIGIyPSQoKHNlZWQlMTYpKTsgc2VlZD0kKChzZWVkLzE2KSkKKyAgYjM9JCgoc2VlZCUxNikpOyBzZWVkPSQoKHNlZWQvMTYpKQorICBiND0kKChzZWVkJTE2KSk7IHNlZWQ9JCgoc2VlZC8xNikpCisgIGI1PSQoKHNlZWQlMTYpKTsgc2VlZD0kKChzZWVkLzE2KSkKKyAgbWFjPWBwcmludGYgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiAyICRiNSAkYjQgJGIzICRiMiAkYjFgCisgIGVjaG8gJG1hYworfQorCisKKyNjaGVjayByb290IHByaXZpbGVnZXMgYW5kIG5vbiBhIHJvb3QgdXNlciBiZWhpbmQKKworWyAiJCMiIC1sdCAiNSIgXSAmJiBlY2hvICJNaXNzaW5nIHBhcmFtZXRlcnMiICYmIHVzYWdlCitbICIkIyIgLWd0ICI2IiBdICYmIGVjaG8gIlRvbyBtYW55IHBhcmFtZXRlcnMiICYmIHVzYWdlCitIT1NUX05BTUU9YGNhdCAvZXRjL2hvc3RuYW1lYAorWyAiJCMiIC1lcSAiNiIgXSAmJiBIT1NUX05BTUU9JDYKK0ZFQVRVUkVTX0xJU1Q9ImxwcyxkaW9jLGh3c3YsdGxicHMsaHQsbHBzLDY0Yixpb21tdSIKK05VTUFTPTIKK0NPUkVTPSQzCitNRU1PUlk9JDQKK0lOVEVSRkFDRVM9JDUKKworI0Vuc3VyZSB0aGUgdXNlciBpbnB1dCBpcyBiaWcgZW5vdWdoCisoWyAkKChDT1JFUyUyKSkgLW5lIDAgXSB8fCBbICRDT1JFUyAtbHQgNCBdICkgJiYgZWNobyAtZSAiRVJST1I6IFdyb25nIG51bWJlciBvZiBjb3Jlc1xuIiAmJiB1c2FnZQorKFsgJCgoTUVNT1JZJTIpKSAtbmUgMCBdIHx8IFsgJE1FTU9SWSAtbHQgMTYgXSApICYmIGVjaG8gLWUgIkVSUk9SOiBXcm9uZyBudW1iZXIgb2YgbWVtb3J5XG4iICYmIHVzYWdlCisoWyAkKChJTlRFUkZBQ0VTJTIpKSAtbmUgMCBdIHx8IFsgJElOVEVSRkFDRVMgLWx0IDQgXSApICYmIGVjaG8gLWUgIkVSUk9SOiBXcm9uZyBudW1iZXIgb2YgaW50ZXJmYWNlc1xuIiAmJiB1c2FnZQorCisjR2VuZXJhdGUgYSBjcHUgdG9wb2xvZ3kgZm9yIDQgbnVtYXMgd2l0aCBoeXBlcnRocmVhZGluZworQ1BVUz1gcGFpcnNfZ2FwPSQoKENPUkVTL05VTUFTKSk7bnVtYT0wO2luYz0wO3NpYmxpbmc9MDtmb3IoKHRocmVhZD0wO3RocmVhZDw9JCgocGFpcnNfZ2FwLTEpKTt0aHJlYWQrKykpOyBkbyBwcmludGYgIiAke251bWF9LSR7c2libGluZ30tJHt0aHJlYWR9ICR7bnVtYX0tJHtzaWJsaW5nfS0kKCh0aHJlYWQrcGFpcnNfZ2FwKSkiO251bWE9JCgoKG51bWErMSklJE5VTUFTKSk7IHNpYmxpbmc9JCgoc2libGluZytpbmMpKTsgaW5jPSQoKChpbmMrMSklMikpOyAgZG9uZWAgICAgIAorCisjaW4gdGhpcyBkZXZlbG9waW5nL2Zha2Ugc2VydmVyIGFsbCBjb3JlcyBjYW4gYmUgdXNlZAorCitlY2hvICIjVGhpcyBmaWxlIHdhcyBjcmVhdGVkIGJ5ICQwIgorZWNobyAiI2ZvciBhZGRpbmcgdGhpcyBjb21wdXRlIG5vZGUgdG8gb3BlbnZpbSIKK2VjaG8gIiNjb3B5IHRoaXMgZmlsZSB0byBvcGVudmltIGNvbnRyb2xsZXIgYW5kIHJ1biIKK2VjaG8gIiNvcGVudmltIGhvc3QtYWRkIDx0aGlzPiIKK2VjaG8KK2VjaG8gImhvc3Q6IgorZWNobyAiICBuYW1lOiAgICAkSE9TVF9OQU1FIgorZWNobyAiICB1c2VyOiAgICAkMSIKK2VjaG8gIiAgaXBfbmFtZTogJDIiCitlY2hvICJob3N0LWRhdGE6IgorZWNobyAiICBuYW1lOiAgICAgICAgJEhPU1RfTkFNRSIKK2VjaG8gIiAgdXNlcjogICAgICAgICQxIgorZWNobyAiICBpcF9uYW1lOiAgICAgJDIiCitlY2hvICIgIHJhbmtpbmc6ICAgICAxMDAiCitlY2hvICIgIGRlc2NyaXB0aW9uOiAkSE9TVF9OQU1FIgorZWNobyAiICBmZWF0dXJlczogICAgJEZFQVRVUkVTX0xJU1QiCitlY2hvICIgIG51bWFzOiIKKworbnVtYT0wCitsYXN0X2lmYWNlPTAKK2lmYWNlX2NvdW50ZXI9MAord2hpbGUgWyAkbnVtYSAtbHQgJE5VTUFTIF0KK2RvCisgIGVjaG8gIiAgLSBudW1hX3NvY2tldDogICRudW1hIgorI01FTU9SWQorICBlY2hvICIgICAgaHVnZXBhZ2VzOiAkKChNRU1PUlkvMi0yKSkiCisgIGVjaG8gIiAgICBtZW1vcnk6ICAgICQoKE1FTU9SWS8yKSkiCisKKyNDT1JFUworICBlY2hvICIgICAgY29yZXM6IgorICBmb3IgY3B1IGluICRDUFVTCisgIGRvCisgICAgUEhZU0lDQUw9YGVjaG8gJGNwdSB8IGN1dCAtZiAxIC1kIi0iYAorICAgIENPUkU9YGVjaG8gJGNwdSB8IGN1dCAtZiAyIC1kIi0iYAorICAgIFRIUkVBRD1gZWNobyAkY3B1IHwgY3V0IC1mIDMgLWQiLSJgCisgICAgWyAkUEhZU0lDQUwgIT0gJG51bWEgXSAmJiBjb250aW51ZSAgICNza2lwIG5vbiBwaHlzaWNhbAorICAgIGVjaG8gIiAgICAtIGNvcmVfaWQ6ICAgJENPUkUiCisgICAgZWNobyAiICAgICAgdGhyZWFkX2lkOiAkVEhSRUFEIgorICAgIFsgJENPUkUgLWVxIDAgXSAmJiBlY2hvICIgICAgICBzdGF0dXM6ICAgIG5vdGVsaWdpYmxlIgorICBkb25lCisgCisKKyAgI0dFTkVSQVRFIElOVEVSRkFDRVMgSU5GT1JNQVRJT04gQU5EIFBSSU5UIElUCisgIHNlZWQ9JFJBTkRPTQorICBlY2hvICIgICAgaW50ZXJmYWNlczoiCisgIGZvciAoKGlmYWNlPTA7aWZhY2U8JElOVEVSRkFDRVM7aWZhY2UrPTIpKQorICBkbworICAgIG5hbWU9ImlmYWNlJGlmYWNlX2NvdW50ZXIiCisgICAgYnVzPSQoKGlmYWNlK2xhc3RfaWZhY2UpKQorICAgIHBjaT1gcHJpbnRmICIwMDAwOiUwMlg6MDAuMCIgJGJ1c2AKKyAgICBtYWM9YGdldF9tYWMgJHNlZWRgCisgICAgc2VlZD0kKChzZWVkKzEpKQorICAKKyAgICBlY2hvICIgICAgLSBzb3VyY2VfbmFtZTogJG5hbWUiCisgICAgZWNobyAiICAgICAgTWJwczogMTAwMDAiCisgICAgZWNobyAiICAgICAgcGNpOiBcIiRwY2lcIiIKKyAgICBlY2hvICIgICAgICBtYWM6IFwiJG1hY1wiIgorICAgIGVjaG8gIiAgICAgIHN3aXRjaF9kcGlkOiBcIjAxOjAyOjAzOjA0OjA1OjA2XCIiCisgICAgZWNobyAiICAgICAgc3dpdGNoX3BvcnQ6IGZha2UwLyRpZmFjZV9jb3VudGVyIgorICAgIGVjaG8gIiAgICAgIHNyaW92czoiCisKKyAgICBmb3IoKG5iX3NyaW92PTA7bmJfc3Jpb3Y8ODtuYl9zcmlvdisrKSkKKyAgICBkbworICAgICAgcGNpPWBwcmludGYgIjAwMDA6JTAyWDoxMC4laSIgJGJ1cyAkbmJfc3Jpb3ZgCisgICAgICBtYWM9YGdldF9tYWMgJHNlZWRgCisgICAgICBzZWVkPSQoKHNlZWQrMSkpCisgICAgICBlY2hvICIgICAgICAtIG1hYzogXCIkbWFjXCIiCisgICAgICBlY2hvICIgICAgICAgIHBjaTogXCIkcGNpXCIiCisgICAgICBlY2hvICIgICAgICAgIHNvdXJjZV9uYW1lOiAkbmJfc3Jpb3YiCisgICAgZG9uZQorICAKKyAgaWZhY2VfY291bnRlcj0kKChpZmFjZV9jb3VudGVyKzEpKQorICBkb25lCisgIGxhc3RfaWZhY2U9JCgoKG51bWErMSkqMTI3L05VTUFTKzUpKSAjbWFkZS11cCBmb3JtdWxhIGZvciBtb3JlIHJlYWxpc3RpYyBwY2kgbnVtYmVycyAKKyAgCisKKyAgbnVtYT0kKChudW1hKzEpKQorZG9uZQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hvc3QtYWRkLnNoIGIvc2NyaXB0cy9ob3N0LWFkZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZjIxMzhkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9ob3N0LWFkZC5zaApAQCAtMCwwICsxLDQwNiBAQAorIyEvYmluL2Jhc2gKKworIyMKKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbzbmljYSBJbnZlc3RpZ2FjafNuIHkgRGVzYXJyb2xsbywgUy5BLlUuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG9wZW5tYW5vCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisjIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCisjIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBGb3IgdGhvc2UgdXNhZ2VzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgcGxlYXNlCisjIGNvbnRhY3Qgd2l0aDogbmZ2bGFic0B0aWQuZXMKKyMjCisKKyNHZXQgY29uZmlndXJhdGlvbiBvZiBhIGhvc3QgZm9yIHVzaW5nIGl0IGFzIGEgY29tcHV0ZSBub2RlCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAgLWUgInVzYWdlOiAkMCB1c2VyIGlwX25hbWUgWz4+IGhvc3QueWFtbF1cbiAgR2V0IGhvc3QgcGFyYW1ldGVycyBhbmQgZ2VuZXJhdGVkIGEgeWFtbCBmaWxlIHRvIGJlIHVzZWQgZm9yIG9wZW52aW0gaG9zdC1hZGQiCisgICAgZXhpdCAxCit9CisKK2Z1bmN0aW9uIGxvYWRfdmZfZHJpdmVyKCl7CisgIGxvY2FsIHBmX2RyaXZlcj0kMQorICBpZiBbWyBgbHNtb2QgfCBjdXQgLWQiICIgLWYxIHwgZ3JlcCAkcGZfZHJpdmVyIHwgZ3JlcCAtdiB2ZmAgXV0gJiYgW1sgISBgbHNtb2QgfCBjdXQgLWQiICIgLWYxIHwgZ3JlcCAke3BmX2RyaXZlcn12ZmAgXV0KKyAgdGhlbgorICAgID4mMiBlY2hvICIkcGZfZHJpdmVyIGlzIGxvYWRlZCBidXQgbm90ICR7cGZfZHJpdmVyfXZmLiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHByb3Blcmx5IGFkZCBTUi1JT1YuIgorICAgIHJlYWQgLXAgIkRvIHlvdSB3YW50IHRvIGxvYWQgJHtwZl9kcml2ZXJ9dmYgW1kvbl0gIiBsb2FkX2RyaXZlcgorICAgIGNhc2UgJGxvYWRfZHJpdmVyIGluCisgICAgICBbbk5dKiApIGV4aXQgMTs7CisgICAgICAqICkgPiYyIGVjaG8gIkxvYWRpbmcgJHtwZl9kcml2ZXJ9dmYuLi4iCisgICAgICAgICAgbW9kcHJvYmUgJHtwZl9kcml2ZXJ9dmY7CisgICAgICAgICAgPiYyIGVjaG8gIlJlbG9hZGluZyAke3BmX2RyaXZlcn0uLi4iCisgICAgICAgICAgbW9kcHJvYmUgLXIgJHBmX2RyaXZlcjsKKyAgICAgICAgICBtb2Rwcm9iZSAkcGZfZHJpdmVyOzsKKyAgICBlc2FjCisgIGZpCit9CisKK2Z1bmN0aW9uIHJlbW92ZV92Zl9kcml2ZXIoKXsKKyAgbG9jYWwgcGZfZHJpdmVyPSQxCisgIGlmIFtbIGBsc21vZCB8IGN1dCAtZCIgIiAtZjEgfCBncmVwICRwZl9kcml2ZXIgfCBncmVwIC12IHZmYCBdXSAmJiBbWyBgbHNtb2QgfCBjdXQgLWQiICIgLWYxIHwgZ3JlcCAke3BmX2RyaXZlcn12ZmAgXV0KKyAgdGhlbgorICAgID4mMiBlY2hvICIke3BmX2RyaXZlcn12ZiBpcyBsb2FkZWQuIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9wZXIgU1ItSU9WIGJlaGF2aW9yIHRoZSBkcml2ZXIgbXVzdCBiZSByZW1vdmVkLiIKKyAgICByZWFkIC1wICJEbyB5b3Ugd2FudCB0byByZW1vdmUgJHtwZl9kcml2ZXJ9dmYgbm93PyBbWS9uXSAiIHJlbW92ZV9kcml2ZXIKKyAgICBjYXNlICRyZW1vdmVfZHJpdmVyIGluCisgICAgICBbbk5dKiApID4mMiBlY2hvICJPSy4gUmVtZW1iZXIgdG8gcmVtb3ZlIHRoZSBkcml2ZXIgcHJpb3Igc3RhcnQgdXNpbmcgdGhlIGNvbXB1dGUgbm9kZSBleGVjdXRpbmc6IjsKKyAgICAgICAgICAgICAgPiYyIGVjaG8gIm1vZHByb2JlIC1yICR7cGZfZHJpdmVyfXZmIjsKKyAgICAgICAgICAgICAgPiYyIGVjaG8gIm1vZHByb2JlIC1yICR7cGZfZHJpdmVyfSI7CisgICAgICAgICAgICAgID4mMiBlY2hvICJtb2Rwcm9iZSAke3BmX2RyaXZlcn0iOzsKKyAgICAgICogKSA+JjIgZWNobyAiUmVtb3ZpbmcgJHtwZl9kcml2ZXJ9dmYuLi4iCisgICAgICAgICAgbW9kcHJvYmUgLXIgJHtwZl9kcml2ZXJ9dmY7CisgICAgICAgICAgPiYyIGVjaG8gIlJlbG9hZGluZyAke3BmX2RyaXZlcn0uLi4iCisgICAgICAgICAgbW9kcHJvYmUgLXIgJHBmX2RyaXZlcjsKKyAgICAgICAgICBtb2Rwcm9iZSAkcGZfZHJpdmVyOzsKKyAgICBlc2FjCisgIGZpCit9CisKK2Z1bmN0aW9uIGdldF9oYXNoX3ZhbHVlKCkgeyAgIGVjaG8gYGV2YWwgIGVjaG8gJFx7XGBlY2hvICQxWyQyXVxgXH1gOyB9CisKK2Z1bmN0aW9uIHhtbHBhdGhfYXJncygpCit7CisgIGxvY2FsIGV4cHI9IiR7MS8vXC8vIH0iCisgIGxvY2FsIHBhdGg9KCkKKyAgbG9jYWwgY2h1bmsgdGFnIGRhdGEKKyAgbG9jYWwgZXhpdF9jb2RlPTEKKyAgbG9jYWwgcHJpbnRfbGluZT0wCisgIGxvY2FsIGNsb3NpbmdfdGFnPTAKKworICB3aGlsZSBJRlM9JycgcmVhZCAtciAtZCAnPCcgY2h1bms7IGRvCisgICAgZGF0YT1hcmd1bWVudHM9IiIKKyAgICBJRlM9Jz4nIHJlYWQgLXIgdGFnX2FyZyBkYXRhIDw8PCAiJGNodW5rIgorICAgIElGUz0nICcgcmVhZCAtciB0YWcgYXJndW1lbnRzIDw8PCAiJHRhZ19hcmciCisgICAgI0lmIGxhc3QgdGFnIHdhcyBzaW5nbGUgbGV2ZWwgcmVtb3ZlIGl0IGZyb20gcGF0aAorICAgIGlmIFtbICRjbG9zaW5nX3RhZyAtZXEgMSBdXSAKKyAgICB0aGVuIAorICAgICAgdW5zZXQgcGF0aFskeyNwYXRoW0BdfS0xXQorICAgICAgY2xvc2luZ190YWc9MAorICAgIGZpCisgICAgI0luIGNhc2UgdGhlIHRhZyBpcyBjbG9zZWQgaW4gdGhlIHNhbWUgbGluZSBtYXJrIGl0CisgICAgW1sgJGFyZ3VtZW50cyA9ID8qJy8nIF1dICYmIGNsb3NpbmdfdGFnPTEKKyAgICBhcmd1bWVudHM9IiR7YXJndW1lbnRzLy9cLy99IgorICAgIGNhc2UgIiR0YWciIGluCisgICAgICAnPycqKSA7OworICAgICAgJyEtLScqKSA7OworICAgICAgPyonLycpIDs7CisgICAgICAnLyc/KikgdW5zZXQgcGF0aFskeyNwYXRoW0BdfS0xXSA7OworICAgICAgPyopIHBhdGgrPSgiJHRhZyIpOzsgICAgICAgIAorICAgIGVzYWMKKyAgICAKKyAgICAjZWNobyAiXCIke3BhdGhbQF19XCIgXCIkZXhwclwiIFwiJGRhdGFcIiBcIiRhcmd1bWVudHNcIiAkZXhpdF9jb2RlICRwcmludF9saW5lIgorICAgIAorICAgIGlmIFtbICIke3BhdGhbQF19IiA9PSAiJGV4cHIiIF1dCisgICAgdGhlbgorICAgICAgI0lmIHRoZXJlIGlzIGRhdGEgcHJpbnQgaXQgYW5kIGFwcGVuZCBhcmd1bWVudHMgaWYgYW55CisgICAgICBpZiBbICIkZGF0YSIgIT0gIiIgXSAKKyAgICAgIHRoZW4KKyAgICAgICAgZWNobyAiJGRhdGEgJGFyZ3VtZW50cyIKKyAgICAgICAgI3JldHVybiBjb2RlIDAgbWVhbnMgZGF0YSB3YXMgZm91bmQKKyAgICAgICAgZXhpdF9jb2RlPTAKKyAgICAgICAgY29udGludWUKKyAgICAgICNpZiB0aGVyZSBpcyBubyBkYXRhIGJ1dCB0aGVyZSBhcmUgYXJndW1lbnRzIHByaW50IGFyZ3VtZW50cworICAgICAgZWxpZiBbICIkYXJndW1lbnRzIiAhPSAiIiBdCisgICAgICB0aGVuCisgICAgICAgIGVjaG8gIiRhcmd1bWVudHMiCisgICAgICAgICNyZXR1cm4gY29kZSAyIG1lYW5zIG5vIGRhdGEgYnV0IGFyZ3VtZW50cyB3ZXJlIGZvdW5kCisgICAgICAgIGV4aXRfY29kZT0yCisgICAgICAgIGNvbnRpbnVlCisgICAgICAjb3RoZXJ3aXNlIHN3aXRjaCBmbGFnIHRvIHN0YXJ0L3N0b3AgZWNob2luZyBlYWNoIGxpbmUgdW50aWwgdGhlIHRhZyBpcyBjbG9zZWQKKyAgICAgIGVsaWYgW1sgJGV4aXRfY29kZSAtZXEgMSBdXQorICAgICAgdGhlbgorICAgICAgICBwcmludF9saW5lPSQoKChwcmludF9saW5lKzEpJTIpKQorICAgICAgICAjcmV0dXJuIGNvZGUgMyBtZWFucyB0aGF0IHRoZSB3aG9sZSB4bWwgc2VnbWVudCBpcyByZXR1cm5lZAorICAgICAgICBleGl0X2NvZGU9MworICAgICAgZmkKKyAgICBmaQorICAgIFtbICRwcmludF9saW5lID09ICIxIiBdXSAmJiBlY2hvICI8IiRjaHVuaworICBkb25lCisgIHJldHVybiAkZXhpdF9jb2RlCit9CisKKworI2NoZWNrIHJvb3QgcHJpdmlsZWdlcyBhbmQgbm9uIGEgcm9vdCB1c2VyIGJlaGluZAorCitbWyAiJCMiIC1sdCAiMiIgXV0gJiYgZWNobyAiTWlzc2luZyBwYXJhbWV0ZXJzIiAmJiB1c2FnZQorbG9hZF92Zl9kcml2ZXIgaXhnYmUKK2xvYWRfdmZfZHJpdmVyIGk0MGUKKworSE9TVF9OQU1FPWBjYXQgL2V0Yy9ob3N0bmFtZWAKK0ZFQVRVUkVTPWBncmVwICJeZmxhZ3MiICAvcHJvYy9jcHVpbmZvYAorRkVBVFVSRVNfTElTVD0iIgoraWYgZWNobyAkRkVBVFVSRVMgfCBncmVwIC1xIHBkcGUxZ2IgOyB0aGVuIEZFQVRVUkVTX0xJU1Q9IiR7RkVBVFVSRVNfTElTVH0sbHBzIjsgIGZpCitpZiBlY2hvICRGRUFUVVJFUyB8IGdyZXAgLXEgZGNhICAgICA7IHRoZW4gRkVBVFVSRVNfTElTVD0iJHtGRUFUVVJFU19MSVNUfSxkaW9jIjsgZmkKK2lmIGVjaG8gJEZFQVRVUkVTIHwgZWdyZXAgLXEgIih2bXh8c3ZtKSIgOyB0aGVuIEZFQVRVUkVTX0xJU1Q9IiR7RkVBVFVSRVNfTElTVH0saHdzdiI7IGZpCitpZiBlY2hvICRGRUFUVVJFUyB8IGVncmVwIC1xICIoZXB0fG5wdCkiIDsgdGhlbiBGRUFUVVJFU19MSVNUPSIke0ZFQVRVUkVTX0xJU1R9LHRsYnBzIjsgZmkKK2lmIGVjaG8gJEZFQVRVUkVTIHwgZ3JlcCAtcSBodCAgICAgIDsgdGhlbiBGRUFUVVJFU19MSVNUPSIke0ZFQVRVUkVTX0xJU1R9LGh0IjsgICBmaQoraWYgdW5hbWUgLW0gfCBncmVwIC1xIHg4Nl82NCAgICAgICAgOyB0aGVuIEZFQVRVUkVTX0xJU1Q9IiR7RkVBVFVSRVNfTElTVH0sNjRiIjsgIGZpCitpZiBjYXQgL3Zhci9sb2cvZG1lc2cgfCBncmVwIC1xIC1lIEludGVsLUlPTU1VICAgOyB0aGVuIEZFQVRVUkVTX0xJU1Q9IiR7RkVBVFVSRVNfTElTVH0saW9tbXUiOyAgZmkKK0ZFQVRVUkVTX0xJU1Q9JHtGRUFUVVJFU19MSVNUIyx9CisKK05VTUFTPWBnYXdrICdCRUdJTntudW1hcz0wO30KKyAgKCQxPT0icGh5c2ljYWwiICYmICQyPT0iaWQiICl7IGlmICgkNCsxPm51bWFzKXtudW1hcz0kNCsxfSB9OworICBFTkR7cHJpbnRmKCIlZCIsbnVtYXMpO30nIC9wcm9jL2NwdWluZm9gCisKK0NQVVM9YGdhd2sgJygkMT09InByb2Nlc3NvciIpe3Bybz0kMzt9CisgICgkMT09InBoeXNpY2FsIiAmJiAkMj09ImlkIil7IHBoeT0kNDt9CisgICgkMT09ImNvcmUiICYmICQyPT0iaWQiKXtwcmludGYgIiAlZC0lZC0lZCIsIHBoeSwkNCxwcm87fScgL3Byb2MvY3B1aW5mb2AKKworaWYgZ3JlcCAtcSBpc29sY3B1cyAvcHJvYy9jbWRsaW5lCit0aGVuCisgIGlzb2xjcHVzPWBjYXQgL3Byb2MvY21kbGluZWAKKyAgaXNvbGNwdXM9JHtpc29sY3B1cyMjKmlzb2xjcHVzPX0KKyAgaXNvbGNwdXM9JHtpc29sY3B1cyUlICp9CisgIGlzb2xjcHVzPSR7aXNvbGNwdXMvLywvIH0KK2Vsc2UKKyAgaXNvbGNwdXM9IiIKK2ZpCisKKworI29idGFpbiBpbnRlcmZhY2VzIGluZm9ybWF0aW9uCit1bnNldCBkcGlkCityZWFkIC1wICJEbyB5b3Ugd2FudCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIGNvbm5lY3Rpdml0eSBpbmZvcm1hdGlvbiAoZGF0YXBhdGhpZC9kcGlkIG9mIHRoZSBzd2l0Y2ggYW5kIHN3aXRjaCBwb3J0IGlkKT8gW1kvbl0gIiBjb25uX2luZm8KK2Nhc2UgJGNvbm5faW5mbyBpbgorICAgIFtObl0qICkgcHJvdl9jb25uPWZhbHNlOzsKKyAgICAqICkgcHJvdl9jb25uPXRydWU7CisgICAgICAgIHJlYWQgLXAgIldoYXQgaXMgdGhlIHN3aXRjaCBkYXBhcGF0aGlkL2RwZGk/ICgwMTowMjowMzowNDowNTowNjowNzowOCkgIiBkcGlkOworICAgICAgICBbWyAteiAkZHBpZCBdXSAmJiBkcGlkPSIwMTowMjowMzowNDowNTowNjowNzowOCI7CisgICAgICAgIFBPUlRfUkFORE9NPSRSQU5ET00KKyAgICAgICAgaWZhY2VfY291bnRlcj0wOzsKK2VzYWMgICAgICAgCitPTERJRlM9JElGUworSUZTPSQnXG4nCit1bnNldCBQRl9saXN0Cit1bnNldCBWRl9saXN0Citmb3IgZGV2aWNlIGluIGB2aXJzaCBub2RlZGV2LWxpc3QgLS1jYXAgbmV0IHwgZ3JlcCAtdiBuZXRfbG9fMDBfMDBfMDBfMDBfMDBfMDBgCitkbwordmlyc2ggbm9kZWRldi1kdW1weG1sICRkZXZpY2UgPiBkZXZpY2VfeG1sCituYW1lPWB4bWxwYXRoX2FyZ3MgImRldmljZS9jYXBhYmlsaXR5L2ludGVyZmFjZSIgPCBkZXZpY2VfeG1sYAorbmFtZT0iJHtuYW1lLy8gL30iCithZGRyZXNzPWB4bWxwYXRoX2FyZ3MgImRldmljZS9jYXBhYmlsaXR5L2FkZHJlc3MiIDwgZGV2aWNlX3htbGAKK2FkZHJlc3M9IiR7YWRkcmVzcy8vIC99IgorcGFyZW50PWB4bWxwYXRoX2FyZ3MgImRldmljZS9wYXJlbnQiIDwgZGV2aWNlX3htbGAKK3BhcmVudD0iJHtwYXJlbnQvLyAvfSIKKyN0aGUgZm9sbG93aW5nIGxpbmUgY3JlYXRlZCB2YXJpYWJsZXMgJ3NwZWVkJyBhbmQgJ3N0YXRlJworZXZhbCBgeG1scGF0aF9hcmdzICJkZXZpY2UvY2FwYWJpbGl0eS9saW5rIiA8IGRldmljZV94bWxgCit2aXJzaCBub2RlZGV2LWR1bXB4bWwgJHBhcmVudCA+IHBhcmVudF94bWwKK2RyaXZlcj1geG1scGF0aF9hcmdzICJkZXZpY2UvZHJpdmVyL25hbWUiIDwgcGFyZW50X3htbGAKK1sgJD8gLWVxIDEgXSAmJiBkcml2ZXI9Ik4vQSIKK2RyaXZlcj0iJHtkcml2ZXIvLyAvfSIKKworI0lmIHRoZSBkZXZpY2UgaXMgbm90IHVwIHRyeSB0byBicmluZyBpdCB1cCBhbmQgcmVsb2FkIHN0YXRlCitpZiBbWyAkc3RhdGUgPT0gJ2Rvd24nIF1dICYmICggW1sgJGRyaXZlciA9PSAiaXhnYmUiIF1dIHx8IFtbICRkcml2ZXIgPT0gImk0MGUiIF1dICkKK3RoZW4KKyAgPiYyIGVjaG8gIiRuYW1lIGlzIGRvd24uIFRyeWluZyB0byBicmluZyBpdCB1cCIKKyAgaWZjb25maWcgJG5hbWUgdXAKKyAgc2xlZXAgMgorICB2aXJzaCBub2RlZGV2LWR1bXB4bWwgJGRldmljZSA+IGRldmljZV94bWwKKyAgZXZhbCBgeG1scGF0aF9hcmdzICJkZXZpY2UvY2FwYWJpbGl0eS9saW5rIiA8IGRldmljZV94bWxgCitmaQorCitpZiBbWyAkc3RhdGUgPT0gJ2Rvd24nIF1dICAmJiAoIFtbICRkcml2ZXIgPT0gIml4Z2JlIiBdXSB8fCBbWyAkZHJpdmVyID09ICJpNDBlIiBdXSApCit0aGVuCisgICAgPiYyIGVjaG8gIkludGVyZmFjZXMgbXVzdCBiZSBjb25uZWN0ZWQgYW5kIHVwIGluIG9yZGVyIHRvIHByb3Blcmx5IGRldGVjdCB0aGUgc3BlZWQuIFlvdSBjYW4gcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIG1hbnVhbGx5IG9yIHNraXAgdGhlIGludGVyZmFjZSIKKyAgICBrZWVwX2Fza2luZz10cnVlCisgICAgc2tpcF9pbnRlcmZhY2U9dHJ1ZQorICAgIHVuc2V0IHNwZWVkCisgICAgd2hpbGUgJGtlZXBfYXNraW5nOyBkbworICAgICAgICByZWFkIC1wICJEbyB5b3Ugd2FudCB0byBza2lwIGludGVyZmFjZSAkbmFtZSAoJGFkZHJlc3MpIFt5L05dICIgLWkgIm4iIHNraXAKKyAgICAgICAgY2FzZSAkc2tpcCBpbgorICAgICAgICAgICAgW1l5XSogKSBrZWVwX2Fza2luZz1mYWxzZTs7CisgICAgICAgICAgICAqICkgc2tpcF9pbnRlcmZhY2U9ZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmYXVsdF9zcGVlZD0iMTAwMDAiCisgICAgICAgICAgICAgICAgd2hpbGUgJGtlZXBfYXNraW5nOyBkbworICAgICAgICAgICAgICAgICAgIHJlYWQgLXAgIldoYXQgaXMgdGhlIHNwZWVkIG9mIHRoZSBpbnRlcmZhY2UgZXhwcmVzc2VkIGluIE1icHM/ICgkZGVmYXVsdF9zcGVlZCkgIiBzcGVlZDsKKyAgICAgICAgICAgICAgICAgICBbWyAteiAkc3BlZWQgXV0gJiYgc3BlZWQ9JGRlZmF1bHRfc3BlZWQKKyAgICAgICAgICAgICAgICAgICBbWyAkc3BlZWQgPX4gJyd8KlshMC05XSBdXSAmJiBlY2hvICJUaGUgaW5wdXQgbXVzdCBiZSBhbiBpbnRlZ2VyIiAmJiBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICBrZWVwX2Fza2luZz1mYWxzZSA7CisgICAgICAgICAgICAgICAgZG9uZTs7CisgICAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICRza2lwX2ludGVyZmFjZSAmJiBjb250aW51ZQorZmkKKyN0aGUgZm9sbG93aW5nIGxpbmUgY3JlYXRlcyBhICdub2RlJyB2YXJpYWJsZQorZXZhbCBgeG1scGF0aF9hcmdzICJkZXZpY2UvY2FwYWJpbGl0eS9udW1hIiA8IHBhcmVudF94bWxgCisjdGhlIGZvbGxvd2luZyBsaW5lIGNyZWF0ZXMgdGhlIHZhcmlhYmxlICd0eXBlJworI2luIGNhc2UgdGhlIGludGVyZmFjZSBpcyBhIFBGIHRoZSB2YWx1ZSBpcyAndmlydF9mdW5jdGlvbnMnCisjaW4gY2FzZSB0aGUgaW50ZXJmYWNlIGlzIGEgVkYgdGhlIHZhbHVlIGlzICdwaHlzX2Z1bmN0aW9uJwordHlwZT0iTi9BIgorZXZhbCBgeG1scGF0aF9hcmdzICJkZXZpY2UvY2FwYWJpbGl0eS9jYXBhYmlsaXR5IiA8IHBhcmVudF94bWxgCisjb2J0YWluIHBjaQorI3RoZSBmb2xsb3dpbmcgbGluZSBjcmVhdGVzIHRoZSB2YXJpYWJsZXMgJ2RvbWFpbicgJ2J1cycgJ3Nsb3QnIGFuZCAnZnVuY3Rpb24nCitldmFsIGB4bWxwYXRoX2FyZ3MgImRldmljZS9jYXBhYmlsaXR5L2lvbW11R3JvdXAvYWRkcmVzcyIgPCBwYXJlbnRfeG1sYAorcGNpPSIke2RvbWFpbiMqeH06JHtidXMjKnh9OiR7c2xvdCMqeH0uJHtmdW5jdGlvbiMqeH0iCit1bmRlcnNjb3JlZF9wY2k9IiR7cGNpLy9cOi9ffSIKK3VuZGVyc2NvcmVkX3BjaT0icGNpXyR7dW5kZXJzY29yZWRfcGNpLy9cLi9ffSIKKworaWYgKCBbWyAkZHJpdmVyID09ICJpeGdiZSIgXV0gfHwgW1sgJGRyaXZlciA9PSAiaTQwZSIgXV0gKSAKK3RoZW4KKyAgdW5kZXJzY29yZWRfcGNpPSJwZiIkdW5kZXJzY29yZWRfcGNpCisgIFBGX2xpc3RbJHsjUEZfbGlzdFtAXX1dPSR1bmRlcnNjb3JlZF9wY2kKKyAgZXZhbCBkZWNsYXJlIC1BICR1bmRlcnNjb3JlZF9wY2kKKyAgZXZhbCAkdW5kZXJzY29yZWRfcGNpWyJuYW1lIl09JG5hbWUKKyAgZXZhbCAkdW5kZXJzY29yZWRfcGNpWyJudW1hIl09JG5vZGUKKyAgZXZhbCAkdW5kZXJzY29yZWRfcGNpWyJtYWMiXT0kYWRkcmVzcworICBldmFsICR1bmRlcnNjb3JlZF9wY2lbInNwZWVkIl09JHNwZWVkCisgIGV2YWwgJHVuZGVyc2NvcmVkX3BjaVsicGNpIl09JHBjaQorICAjcmVxdWVzdCBzd2l0Y2ggcG9ydCB0byB0aGUgdXNlciBpZiB0aGlzIGluZm9ybWF0aW9uIGlzIGJlaW5nIHByb3ZpZGVkIGFuZCBpbmNsdWRlIGl0CisgIGlmICAkcHJvdl9jb25uIAorICB0aGVuCisgICAgdW5zZXQgc3dpdGNoX3BvcnQKKyAgICByZWFkIC1wICJXaGF0IGlzIHRoZSBwb3J0IG5hbWUgaW4gdGhlIHN3aXRjaCAkZHBpZCB3aGVyZSBwb3J0ICRuYW1lICgkcGNpKSBpcyBjb25uZWN0ZWQ/ICgke25hbWV9LSR7UE9SVF9SQU5ET019LyRpZmFjZV9jb3VudGVyKSAiIHN3aXRjaF9wb3J0CisgICAgW1sgLXogJHN3aXRjaF9wb3J0IF1dICYmIHN3aXRjaF9wb3J0PSIke25hbWV9LSR7UE9SVF9SQU5ET019LyRpZmFjZV9jb3VudGVyIgorICAgIGlmYWNlX2NvdW50ZXI9JCgoaWZhY2VfY291bnRlcisxKSkKKyAgICBldmFsICR1bmRlcnNjb3JlZF9wY2lbImRwaWQiXT0kZHBpZAorICAgIGV2YWwgJHVuZGVyc2NvcmVkX3BjaVsic3dpdGNoX3BvcnQiXT0kc3dpdGNoX3BvcnQKKyAgZmkKKworICAjQfFhZG8gZWwgcGNpIGRlIGNhZGEgdW5vIGRlIGxvcyBoaWpvcworICBTUklPVl9jb3VudGVyPTAKKyAgZm9yIGNoaWxkIGluIGB4bWxwYXRoX2FyZ3MgImRldmljZS9jYXBhYmlsaXR5L2NhcGFiaWxpdHkvYWRkcmVzcyIgPCBwYXJlbnRfeG1sYAorICBkbyAKKyAgICBTUklPVl9jb3VudGVyPSQoKFNSSU9WX2NvdW50ZXIrMSkpCisgICAgI3RoZSBmb2xsb3dpbmcgbGluZSBjcmVhdGVzIHRoZSB2YXJpYWJsZXMgJ2RvbWFpbicgJ2J1cycgJ3Nsb3QnIGFuZCAnZnVuY3Rpb24nCisgICAgZXZhbCAkY2hpbGQKKyAgICBldmFsICR1bmRlcnNjb3JlZF9wY2lbIlNSSU9WIiRTUklPVl9jb3VudGVyXT0iJHtkb21haW4jKnh9XyR7YnVzIyp4fV8ke3Nsb3QjKnh9XyR7ZnVuY3Rpb24jKnh9IgorICBkb25lCisgIGV2YWwgJHVuZGVyc2NvcmVkX3BjaVsiU1JJT1YiXT0kU1JJT1ZfY291bnRlcgorICAKKyNTaSBzZSB0cmF0YSBkZSB1biBTUklPViAodGllbmUgdW5hIGNhcGFiaWxpdHkgY29uIHR5cGUgJ3BoeXNfZnVuY3Rpb24nKQorZWxpZiBbWyAkdHlwZSA9PSAncGh5c19mdW5jdGlvbicgXV0KK3RoZW4KKyAgdW5kZXJzY29yZWRfcGNpPSJ2ZiIkdW5kZXJzY29yZWRfcGNpCisgIFZGX2xpc3RbJHsjVkZfbGlzdFtAXX1dPSR1bmRlcnNjb3JlZF9wY2kKKyAgZXZhbCBkZWNsYXJlIC1BICR1bmRlcnNjb3JlZF9wY2kKKyAgZXZhbCAkdW5kZXJzY29yZWRfcGNpWyJzb3VyY2VfbmFtZSJdPSRuYW1lCisgIGV2YWwgJHVuZGVyc2NvcmVkX3BjaVsibWFjIl09JGFkZHJlc3MKKyAgZXZhbCAkdW5kZXJzY29yZWRfcGNpWyJwY2kiXT0kcGNpCitmaQorcm0gLWYgZGV2aWNlX3htbCBwYXJlbnRfeG1sCitkb25lCitJRlM9JE9MRElGUworCitlY2hvICIjVGhpcyBmaWxlIHdhcyBjcmVhdGVkIGJ5ICQwIgorZWNobyAiI2ZvciBhZGRpbmcgdGhpcyBjb21wdXRlIG5vZGUgdG8gb3BlbnZpbSIKK2VjaG8gIiNjb3B5IHRoaXMgZmlsZSB0byBvcGVudmltIGNvbnRyb2xsZXIgYW5kIHJ1biIKK2VjaG8gIiNvcGVudmltIGhvc3QtYWRkIDx0aGlzPiIKK2VjaG8KK2VjaG8gImhvc3Q6IgorZWNobyAiICBuYW1lOiAgICAkSE9TVF9OQU1FIgorZWNobyAiICB1c2VyOiAgICAkMSIKK2VjaG8gIiAgaXBfbmFtZTogJDIiCitlY2hvICJob3N0LWRhdGE6IgorZWNobyAiICBuYW1lOiAgICAgICAgJEhPU1RfTkFNRSIKK2VjaG8gIiAgdXNlcjogICAgICAgICQxIgorZWNobyAiICBpcF9uYW1lOiAgICAgJDIiCitlY2hvICIgIHJhbmtpbmc6ICAgICAxMDAiCitlY2hvICIgIGRlc2NyaXB0aW9uOiAkSE9TVF9OQU1FIgorZWNobyAiICBmZWF0dXJlczogICAgJEZFQVRVUkVTX0xJU1QiCitlY2hvICIgIG51bWFzOiIKKworbnVtYT0wCit3aGlsZSBbWyAkbnVtYSAtbHQgJE5VTUFTIF1dCitkbworICBlY2hvICIgIC0gbnVtYV9zb2NrZXQ6ICAkbnVtYSIKKyNNRU1PUlkKKyAgaWYgWyAtZiAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSR7bnVtYX0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0xMDQ4NTc2a0IvbnJfaHVnZXBhZ2VzIF0KKyAgdGhlbgorICAgIGVjaG8gIiAgICBodWdlcGFnZXM6ICIgYGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSR7bnVtYX0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0xMDQ4NTc2a0IvbnJfaHVnZXBhZ2VzYAorICBlbHNlCisgICAgI1RPRE8gaHVnZXBhZ2VzIG9mIDIwNDhrQiBzaXplCisgICAgZWNobyAiICAgIGh1Z2VwYWdlczogIDAiCisgIGZpCisgIG1lbW9yeT1gaGVhZCAtbjEgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUke251bWF9L21lbWluZm8gIHwgZ2F3ayAnKCQ1PT0ia0IiKXtwcmludCAkNH0nYAorICBtZW1vcnk9JCgobWVtb3J5KzEwNDg1NzYtMSkpICAgI21lbW9yeSBtdXN0IGJlIGNlaWxlZAorICBtZW1vcnk9JCgobWVtb3J5LzEwNDg1NzYpKSAgICNmcm9tIGBrQiB0byBHQgorICBlY2hvICIgICAgbWVtb3J5OiAgICAkbWVtb3J5IgorCisjQ09SRVMKKyAgZWNobyAiICAgIGNvcmVzOiIKKyAgRklSU1Q9Ii0iICNmaXJzdCBpdGVtIGluIGEgbGlzdCBzdGFydCB3aXRoICItIiBpbiB5YW1sIGZpbGVzLCB0aGVuIGl0IHdpbGwgc2V0IHRvICIgIgorICBmb3IgY3B1IGluICRDUFVTCisgIGRvCisgICAgUEhZU0lDQUw9YGVjaG8gJGNwdSB8IGN1dCAtZiAxIC1kIi0iYAorICAgIENPUkU9YGVjaG8gJGNwdSB8IGN1dCAtZiAyIC1kIi0iYAorICAgIFRIUkVBRD1gZWNobyAkY3B1IHwgY3V0IC1mIDMgLWQiLSJgCisgICAgW1sgJFBIWVNJQ0FMICE9ICRudW1hIF1dICYmIGNvbnRpbnVlICAgI3NraXAgbm9uIHBoeXNpY2FsCisgICAgZWNobyAiICAgIC0gY29yZV9pZDogICAkQ09SRSIKKyAgICBlY2hvICIgICAgICB0aHJlYWRfaWQ6ICRUSFJFQUQiCisgICAgI2NoZWNrIGlmIGVsaWdpYmxlCisgICAgY3B1X2lzb2xhdGVkPSJubyIKKyAgICBmb3IgaXNvbGNwdSBpbiAkaXNvbGNwdXMKKyAgICBkbworICAgICAgaXNvbGNwdV9zdGFydD1gZWNobyAkaXNvbGNwdSB8IGN1dCAtZiAxIC1kIi0iYAorICAgICAgaXNvbGNwdV9lbmQ9YGVjaG8gJGlzb2xjcHUgfCBjdXQgLWYgMiAtZCItImAKKyAgICAgIGlmIFsgIiRUSFJFQUQiIC1nZSAiJGlzb2xjcHVfc3RhcnQiIC1hICIkVEhSRUFEIiAtbGUgIiRpc29sY3B1X2VuZCIgXQorICAgICAgdGhlbgorICAgICAgICBjcHVfaXNvbGF0ZWQ9InllcyIKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIFtbICRjcHVfaXNvbGF0ZWQgPT0gIm5vIiBdXSAmJiAgIGVjaG8gIiAgICAgIHN0YXR1czogICAgbm90ZWxpZ2libGUiCisgICAgRklSU1Q9IiAiCisgIGRvbmUKKyAKKyAgI05JQyBJTlRFUkZBQ0VTCisgIGludGVyZmFjZXNfbmI9MAorICBmb3IgKChpPTA7IGk8JHsjUEZfbGlzdFtAXX07aSsrKSkKKyAgZG8KKyAgICB1bmRlcnNjb3JlZF9wY2k9JHtQRl9saXN0WyRpXX0KKyAgICBwbmFtZT0kKGdldF9oYXNoX3ZhbHVlICR1bmRlcnNjb3JlZF9wY2kgIm5hbWUiKQorICAgIHBudW1hPSQoZ2V0X2hhc2hfdmFsdWUgJHVuZGVyc2NvcmVkX3BjaSAibnVtYSIpCisgICAgW1sgJHBudW1hICE9ICRudW1hIF1dICYmIGNvbnRpbnVlIAorICAgIHBtYWM9JChnZXRfaGFzaF92YWx1ZSAkdW5kZXJzY29yZWRfcGNpICJtYWMiKQorICAgIHBwY2k9JChnZXRfaGFzaF92YWx1ZSAkdW5kZXJzY29yZWRfcGNpICJwY2kiKQorICAgIHBzcGVlZD0kKGdldF9oYXNoX3ZhbHVlICR1bmRlcnNjb3JlZF9wY2kgInNwZWVkIikKKyAgICBwU1JJT1Y9JChnZXRfaGFzaF92YWx1ZSAkdW5kZXJzY29yZWRfcGNpICJTUklPViIpCisgICAgW1sgJGludGVyZmFjZXNfbmIgLWVxIDAgXV0gJiYgZWNobyAiICAgIGludGVyZmFjZXM6IgorICAgIGludGVyZmFjZXNfbmI9JCgoaW50ZXJmYWNlc19uYisxKSkKKyAgICBzcmlvdl9uYj0wCisgICAgZWNobyAiICAgIC0gc291cmNlX25hbWU6ICRwbmFtZSIKKyAgICBlY2hvICIgICAgICBNYnBzOiAkcHNwZWVkIgorICAgIGVjaG8gIiAgICAgIHBjaTogXCIkcHBjaVwiIgorICAgIGVjaG8gIiAgICAgIG1hYzogXCIkcG1hY1wiIgorICAgIGlmICRwcm92X2Nvbm4gCisgICAgICB0aGVuCisgICAgICAgIHBkcGlkPSQoZ2V0X2hhc2hfdmFsdWUgJHVuZGVyc2NvcmVkX3BjaSAiZHBpZCIpCisgICAgICAgIHBzd2l0Y2hfcG9ydD0kKGdldF9oYXNoX3ZhbHVlICR1bmRlcnNjb3JlZF9wY2kgInN3aXRjaF9wb3J0IikKKyAgICAgICAgZWNobyAiICAgICAgc3dpdGNoX2RwaWQ6ICRwZHBpZCIKKyAgICAgICAgZWNobyAiICAgICAgc3dpdGNoX3BvcnQ6ICRwc3dpdGNoX3BvcnQiCisgICAgZmkKKyAgICBmb3IgKChqPTE7ajw9JHBTUklPVjtqKyspKQorICAgIGRvCisgICAgICBjaGlsZFNSSU9WPSJ2ZnBjaV8iJChnZXRfaGFzaF92YWx1ZSAkdW5kZXJzY29yZWRfcGNpICJTUklPViIkaikKKyAgICAgIHBuYW1lPSQoZ2V0X2hhc2hfdmFsdWUgJGNoaWxkU1JJT1YgInNvdXJjZV9uYW1lIikKKyAgICAgIGluZGV4PSR7cG5hbWUjIypffQorICAgICAgcG1hYz0kKGdldF9oYXNoX3ZhbHVlICRjaGlsZFNSSU9WICJtYWMiKQorICAgICAgcHBjaT0kKGdldF9oYXNoX3ZhbHVlICRjaGlsZFNSSU9WICJwY2kiKQorICAgICAgW1sgJHNyaW92X25iIC1lcSAwIF1dICYmIGVjaG8gIiAgICAgIHNyaW92czoiCisgICAgICBzcmlvdl9uYj0kKChzcmlvdl9uYisxKSkKKyAgICAgIGVjaG8gIiAgICAgIC0gbWFjOiBcIiRwbWFjXCIiCisgICAgICBlY2hvICIgICAgICAgIHBjaTogXCIkcHBjaVwiIgorICAgICAgZWNobyAiICAgICAgICBzb3VyY2VfbmFtZTogJGluZGV4IgorICAgIGRvbmUKKyAgZG9uZQorCisgIG51bWE9JCgobnVtYSsxKSkKK2RvbmUKK3JlbW92ZV92Zl9kcml2ZXIgaXhnYmUKK3JlbW92ZV92Zl9kcml2ZXIgaTQwZQorI0JyaW5nIHVwIGFsbCBpbnRlcmZhY2VzCitmb3IgKChpPTA7IGk8JHsjUEZfbGlzdFtAXX07aSsrKSkKK2RvCisgIHVuZGVyc2NvcmVkX3BjaT0ke1BGX2xpc3RbJGldfQorICBwbmFtZT0kKGdldF9oYXNoX3ZhbHVlICR1bmRlcnNjb3JlZF9wY2kgIm5hbWUiKQorICBpZmNvbmZpZyAkcG5hbWUgdXAKK2RvbmUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaW5pdG9wZW52aW0uc2ggYi9zY3JpcHRzL2luaXRvcGVudmltLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5ZjM2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2luaXRvcGVudmltLnNoCkBAIC0wLDAgKzEsMjEzIEBACisjIS9iaW4vYmFzaAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjVGhpcyBzY3JpcHQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpYyB0ZXN0IG9mIG9wZW52aW0gCisjc3RvcHBpbmcgb24gYW4gZXJyb3IKKyNXQVJOSU5HOiBJdCBkZXN0cm95IHRoZSBkYXRhYmFzZSBjb250ZW50CisKKworZnVuY3Rpb24gdXNhZ2UoKXsKKyAgICBlY2hvIC1lICJ1c2FnZTogJHtCQVNIX1NPVVJDRVswXX0gW09QVElPTlNdIDxhY3Rpb24+XG4gIERlbGV0ZXMgb3BlbnZpbSBjb250ZW50IGFuZCBhZGQgZmFrZSBob3N0cywgbmV0d29ya3MiCisgICAgZWNobyAtZSAiICA8YWN0aW9uPiBpcyBhIGxpc3Qgb2YgdGhlIGZvbGxvd2luZyBpdGVtcyAoYnkgZGVmYXVsdCAncmVzZXQgY3JlYXRlJykiCisgICAgZWNobyAtZSAiICAgIHJlc2V0ICAgICByZXNldCB0aGUgb3BlbnZpbSBkYXRhYmFzZSBjb250ZW50IgorICAgIGVjaG8gLWUgIiAgICBjcmVhdGUgICAgY3JlYXRlcyBmYWtlIGhvc3RzIGFuZCBuZXR3b3JrcyIKKyAgICBlY2hvIC1lICIgICAgZGVsZXRlICAgIGRlbGV0ZSBjcmVhdGVkIGl0ZW1zIgorICAgIGVjaG8gLWUgIiAgICBkZWxldGUtYWxsIGRlbGV0ZSB2bXMuIGZsYXZvcnMsIGltYWdlcywgLi4uIgorICAgIGVjaG8gLWUgIiAgT1BUSU9OUzoiCisgICAgZWNobyAtZSAiICAgIC1mIC0tZm9yY2UgOiBkb2VzIG5vdCBwcm9tcHQgZm9yIGNvbmZpcm1hdGlvbiIKKyAgICBlY2hvIC1lICIgICAgLWQgLS1kZWxldGUgOiBzYW1lIHRvIGFjdGlvbiBkZWxldGUtYWxsIgorICAgIGVjaG8gLWUgIiAgICAtLWluc2VydC1iYXNocmMgIGluc2VydCB0aGUgY3JlYXRlZCB0ZW5hbnQgdmFyaWFibGVzIGF0IgorICAgIGVjaG8gLWUgIiAgICAgICAgICAgICAgICAgICAgIH4vLmJhc2hyYyB0byBiZSBhdmFpbGFibGUgYnkgb3BlbnZpbSBDTEkiCisgICAgZWNobyAtZSAiICAgIC1oIC0taGVscCAgOiBzaG93cyB0aGlzIGhlbHAiCit9CisKK2Z1bmN0aW9uIGlzX3ZhbGlkX3V1aWQoKXsKKyAgICBlY2hvICIkMSIgfCBncmVwIC1xIC1FICdeWzAtOWEtZl17OH0tKFswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kJyAmJiByZXR1cm4gMAorICAgIHJldHVybiAxCit9CisKKworI2RldGVjdCBpZiBpcyBjYWxsZWQgd2l0aCBhIHNvdXJjZSB0byB1c2UgdGhlICdleGl0Jy8ncmV0dXJuJyBjb21tYW5kIGZvciBleGl0aW5nCitbWyAke0JBU0hfU09VUkNFWzBdfSAhPSAkMCBdXSAmJiBfZXhpdD0icmV0dXJuIiB8fCBfZXhpdD0iZXhpdCIKKworI2NoZWNrIGNvcnJlY3QgYXJndW1lbnRzCitmb3JjZT0iIgorYWN0aW9uX2xpc3Q9IiIKK2luc2VydF9iYXNocmM9IiIKKword2hpbGUgW1sgJCMgLWd0IDAgXV0KK2RvCisgICAgYXJndW1lbnQ9IiQxIgorICAgIHNoaWZ0CisgICAgaWYgW1sgJGFyZ3VtZW50ID09IHJlc2V0IF1dIHx8IFtbICRhcmd1bWVudCA9PSBjcmVhdGUgXV0gfHwgW1sgJGFyZ3VtZW50ID09IGRlbGV0ZSBdXSB8fCBbWyAkYXJndW1lbnQgPT0gZGVsZXRlLWFsbCBdXQorICAgIHRoZW4KKyAgICAgICAgYWN0aW9uX2xpc3Q9IiRhY3Rpb25fbGlzdCAkYXJndW1lbnQiCisgICAgICAgIGNvbnRpbnVlCisgICAgI3Nob3J0IG9wdGlvbnMKKyAgICBlbGlmIFtbICR7YXJndW1lbnQ6MDoxfSA9PSAiLSIgXV0gJiYgW1sgJHthcmd1bWVudDoxOjF9ICE9ICItIiBdXSAmJiBbWyAkeyNhcmd1bWVudH0gLWdlIDIgXV0KKyAgICB0aGVuCisgICAgICAgIGluZGV4PTAKKyAgICAgICAgd2hpbGUgaW5kZXg9JCgoaW5kZXgrMSkpICYmIFtbICRpbmRleCAtbHQgJHsjYXJndW1lbnR9IF1dCisgICAgICAgIGRvCisgICAgICAgICAgICBbWyAke2FyZ3VtZW50OiRpbmRleDoxfSA9PSBoIF1dICAmJiB1c2FnZSAgICYmICRfZXhpdCAwCisgICAgICAgICAgICBbWyAke2FyZ3VtZW50OiRpbmRleDoxfSA9PSBmIF1dICAmJiBmb3JjZT15ICYmIGNvbnRpbnVlCisgICAgICAgICAgICBbWyAke2FyZ3VtZW50OiRpbmRleDoxfSA9PSBkIF1dICAmJiBhY3Rpb25fbGlzdD0iZGVsZXRlLWFsbCAkYWN0aW9uX2xpc3QiICYmIGNvbnRpbnVlCisgICAgICAgICAgICBlY2hvICJpbnZhbGlkIG9wdGlvbiAnJHthcmd1bWVudDokaW5kZXg6MX0nPyAgVHlwZSAtaCBmb3IgaGVscCIgPiYyICYmICRfZXhpdCAxCisgICAgICAgIGRvbmUKKyAgICAgICAgY29udGludWUKKyAgICBmaQorICAgICNsb25nIG9wdGlvbnMKKyAgICBbWyAkYXJndW1lbnQgPT0gLS1oZWxwIF1dICAgJiYgdXNhZ2UgICAmJiAkX2V4aXQgMAorICAgIFtbICRhcmd1bWVudCA9PSAtLWZvcmNlIF1dICAmJiBmb3JjZT15ICYmIGNvbnRpbnVlCisgICAgW1sgJGFyZ3VtZW50ID09IC0tZGVsZXRlIF1dICYmIGFjdGlvbl9saXN0PSJkZWxldGUtYWxsICRhY3Rpb25fbGlzdCIgJiYgY29udGludWUKKyAgICBbWyAkYXJndW1lbnQgPT0gLS1pbnNlcnQtYmFzaHJjIF1dICYmIGluc2VydF9iYXNocmM9eSAmJiBjb250aW51ZQorICAgIGVjaG8gImludmFsaWQgYXJndW1lbnQgJyRhcmd1bWVudCc/ICBUeXBlIC1oIGZvciBoZWxwIiA+JjIgJiYgJF9leGl0IDEKK2RvbmUKKworRElSTkFNRT0kKGRpcm5hbWUgJChyZWFkbGluayAtZiAke0JBU0hfU09VUkNFWzBdfSkpCitESVJ2aW09JChkaXJuYW1lICRESVJOQU1FKQorZXhwb3J0IE9QRU5WSU1fSE9TVD1sb2NhbGhvc3QKK2V4cG9ydCBPUEVOVklNX1BPUlQ9OTA4MAorW1sgJGluc2VydF9iYXNocmMgPT0geSBdXSAmJiBlY2hvIC1lICJcbmV4cG9ydCBPUEVOVklNX0hPU1Q9bG9jYWxob3N0IiAgPj4gfi8uYmFzaHJjCitbWyAkaW5zZXJ0X2Jhc2hyYyA9PSB5IF1dICYmIGVjaG8gLWUgIlxuZXhwb3J0IE9QRU5WSU1fUE9SVD05MDgwIiAgPj4gfi8uYmFzaHJjCisjYnkgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHJlc2V0IGFuZCBjcmVhdGUKK1tbIC16ICRhY3Rpb25fbGlzdCBdXSAgJiYgYWN0aW9uX2xpc3Q9InJlc2V0IGNyZWF0ZSIKKworCitmb3IgYWN0aW9uIGluICRhY3Rpb25fbGlzdAorZG8KK2lmIFtbICRhY3Rpb24gPT0gInJlc2V0IiBdXQordGhlbgorICAgICNhc2sgZm9yIGNvbmZpcm1hdGlvbiBpZiBhcmd1bWVudCBpcyBub3QgLWYgLS1mb3JjZQorICAgIGZvcmNlXz0ieSIKKyAgICBbWyAkZm9yY2UgICE9IHkgXV0gJiYgcmVhZCAtZSAtcCAiV0FSTklORzogb3BlbnZpbSBkYXRhYmFzZSBjb250ZW50IHdpbGwgYmUgbG9zdCEhISAgQ29udGludWUoeS9OKSIgZm9yY2VfCisgICAgW1sgJGZvcmNlXyAhPSB5IF1dICYmIFtbICRmb3JjZV8gIT0geWVzIF1dICYmIGVjaG8gImFib3J0ZWQhIiAmJiAkX2V4aXQKKyAgICBlY2hvICJkZWxldGluZyBkZXBsb3llZCB2bSIKKyAgICAke0RJUnZpbX0vb3BlbnZpbSB2bS1kZWxldGUgLWYgfCBncmVwIC1xIGRlbGV0ZWQgJiYgc2xlZXAgMTAgI2dpdmUgc29tZSB0aW1lIHRvIGdldCB2aXJ0dWFsIG1hY2hpbmVzIGRlbGV0ZWQKKyAgICBlY2hvICJTdG9wcGluZyBvcGVudmltIgorICAgICRESVJOQU1FL3NlcnZpY2Utb3BlbnZpbS5zaCBzdG9wCisgICAgZWNobyAiSW5pdGlhbGl6aW5nIGRhdGFiYXNlcyIKKyAgICAkRElSdmltL2RhdGFiYXNlX3V0aWxzL2luaXRfdmltX2RiLnNoIC11IHZpbSAtcCB2aW1wdworICAgIGVjaG8gIlN0YXJ0aW5nIG9wZW52aW0iCisgICAgJERJUk5BTUUvc2VydmljZS1vcGVudmltLnNoIHN0YXJ0CisKK2VsaWYgW1sgJGFjdGlvbiA9PSBkZWxldGUtYWxsIF1dIAordGhlbgorICAgIGZvciB0IGluIGAke0RJUnZpbX0vb3BlbnZpbSB0ZW5hbnQtbGlzdCB8IGF3ayAnL14gKlswLTlhLWZdezh9LShbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9ICsve3ByaW50ZigiJXM6JXMiLCQxLCQyKX0nYAorICAgIGRvCisgICAgICAgIHRfaWQ9JHt0JSU6Kn0KKyAgICAgICAgdF9uYW1lPSR7dCMqOn0KKyAgICAgICAgW1sgLXogJHRfaWQgXV0gJiYgY29udGludWUgCisgICAgICAgIGV4cG9ydCBPUEVOVklNX1RFTkFOVD0ke3RfaWR9CisgICAgICAgIGZvciB3aGF0IGluIHZtIGltYWdlIGZsYXZvciBwb3J0IG5ldAorICAgICAgICBkbworICAgICAgICAgICAgaXRlbXM9YCR7RElSdmltfS9vcGVudmltICR3aGF0LWxpc3QgfCBhd2sgJy9eICpbMC05YS1mXXs4fS0oWzAtOWEtZl17NH0tKXszfVswLTlhLWZdezEyfSArL3twcmludCAkMX0nYAorICAgICAgICAgICAgaWYgW1sgLW4gJGl0ZW1zIF1dCisgICAgICAgICAgICB0aGVuIAorICAgICAgICAgICAgICAgIFtbICRmb3JjZSA9PSB5IF1dICYmIGVjaG8gZGVsZXRpbmcgb3BlbnZpbSAke3doYXR9cyBmcm9tIHRlbmFudCAke3RfbmFtZX0KKyAgICAgICAgICAgICAgICBbWyAkZm9yY2UgIT0geSBdXSAmJiByZWFkIC1lIC1wICJEZWxldGUgb3BlbnZpbSAke3doYXR9cyBmcm9tIHRlbmFudCAke3RfbmFtZX0/KHkvTikgIiBmb3JjZV8KKyAgICAgICAgICAgICAgICBbWyAkZm9yY2VfICE9IHkgXV0gJiYgW1sgJGZvcmNlXyAhPSB5ZXMgXV0gJiYgZWNobyAiYWJvcnRlZCEiICYmICRfZXhpdAorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluICRpdGVtcworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgIGVjaG8gLW4gIiRpdGVtICAgIgorICAgICAgICAgICAgICAgICAgICAke0RJUnZpbX0vb3BlbnZpbSAkd2hhdC1kZWxldGUgLWYgJGl0ZW0gIHx8ICEgZWNobyAiZmFpbCIgPiYyIHx8ICRfZXhpdCAxCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICAke0RJUnZpbX0vb3BlbnZpbSB0ZW5hbnQtZGVsZXRlIC1mICR0X2lkICB8fCAhIGVjaG8gImZhaWwiID4mMiB8fCAkX2V4aXQgMQorICAgICAgICBmb3Igd2hhdCBpbiBob3N0CisgICAgICAgIGRvCisgICAgICAgICAgICBpdGVtcz1gJHtESVJ2aW19L29wZW52aW0gJHdoYXQtbGlzdCB8IGF3ayAnL14gKlswLTlhLWZdezh9LShbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9ICsve3ByaW50ICQxfSdgCisgICAgICAgICAgICBpZiBbWyAtbiAkaXRlbXMgXV0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBbWyAkZm9yY2UgPT0geSBdXSAmJiBlY2hvIGRlbGV0aW5nIG9wZW52aW0gJHt3aGF0fXMKKyAgICAgICAgICAgICAgICBbWyAkZm9yY2UgIT0geSBdXSAmJiByZWFkIC1lIC1wICJEZWxldGUgb3BlbnZpbSAke3doYXR9cz8oeS9OKSAiIGZvcmNlXworICAgICAgICAgICAgICAgIFtbICRmb3JjZV8gIT0geSBdXSAmJiBbWyAkZm9yY2VfICE9IHllcyBdXSAmJiBlY2hvICJhYm9ydGVkISIgJiYgJF9leGl0CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gJGl0ZW1zCisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgZWNobyAtbiAiJGl0ZW0gICAiCisgICAgICAgICAgICAgICAgICAgICR7RElSdmltfS9vcGVudmltICR3aGF0LWRlbGV0ZSAtZiAkaXRlbSAgfHwgISBlY2hvICJmYWlsIiA+JjIgfHwgJF9leGl0IDEKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisKKyAgICBkb25lCitlbGlmIFtbICRhY3Rpb24gPT0gImRlbGV0ZSIgXV0KK3RoZW4KKyAgICAke0RJUnZpbX0vb3BlbnZpbSBuZXQtZGVsZXRlIC1mIGRlZmF1bHQgICAgICAgICAgIHx8IGVjaG8gImZhaWwiCisgICAgJHtESVJ2aW19L29wZW52aW0gbmV0LWRlbGV0ZSAtZiBtYWN2dGFwOmVtMSAgICAgICB8fCBlY2hvICJmYWlsIgorICAgICR7RElSdmltfS9vcGVudmltIG5ldC1kZWxldGUgLWYgc2hhcmVkX2JyaWRnZV9uZXQgfHwgZWNobyAiZmFpbCIKKyAgICAke0RJUnZpbX0vb3BlbnZpbSBuZXQtZGVsZXRlIC1mIGRhdGFfbmV0ICAgICAgICAgIHx8IGVjaG8gImZhaWwiCisgICAgJHtESVJ2aW19L29wZW52aW0gaG9zdC1yZW1vdmUgLWYgZmFrZS1ob3N0LTAgICAgICB8fCBlY2hvICJmYWlsIgorICAgICR7RElSdmltfS9vcGVudmltIGhvc3QtcmVtb3ZlIC1mIGZha2UtaG9zdC0xICAgICAgfHwgZWNobyAiZmFpbCIKKyAgICAke0RJUnZpbX0vb3BlbnZpbSBob3N0LXJlbW92ZSAtZiBmYWtlLWhvc3QtMiAgICAgIHx8IGVjaG8gImZhaWwiCisgICAgJHtESVJ2aW19L29wZW52aW0gaG9zdC1yZW1vdmUgLWYgZmFrZS1ob3N0LTMgICAgICB8fCBlY2hvICJmYWlsIgorICAgIHJlc3VsdD1gb3BlbnZpbSB0ZW5hbnQtbGlzdCBURVNULWFkbWluYAorICAgIHZpbXRlbmFudD1gZWNobyAkcmVzdWx0IHxnYXdrICd7cHJpbnQgJDF9J2AKKyAgICAjY2hlY2sgYSB2YWxpZCB1dWlkIGlzIG9idGFpbmVkCisgICAgaXNfdmFsaWRfdXVpZCAkdmltdGVuYW50IHx8ICEgZWNobyAiVGVuYW50IFRFU1QtYWRtaW4gbm90IGZvdW5kLiBBbHJlYWR5IGRlbGV0ZT8iID4mMiB8fCAkX2V4aXQgMQorICAgIGV4cG9ydCBPUEVOVklNX1RFTkFOVD0kdmltdGVuYW50CisgICAgJHtESVJ2aW19L29wZW52aW0gdGVuYW50LWRlbGV0ZSAtZiBURVNULWFkbWluICAgICB8fCBlY2hvICJmYWlsIgorICAgIGVjaG8KKworZWxpZiBbWyAkYWN0aW9uID09ICJjcmVhdGUiIF1dCit0aGVuCisgICAgZWNobyAiQWRkaW5nIGV4YW1wbGUgaG9zdHMiCisgICAgJHtESVJ2aW19L29wZW52aW0gaG9zdC1hZGQgJERJUnZpbS90ZXN0L2hvc3RzL2hvc3QtZXhhbXBsZTAuanNvbiB8fCAhIGVjaG8gImZhaWwiID4mMiB8fCAkX2V4aXQgMQorICAgICR7RElSdmltfS9vcGVudmltIGhvc3QtYWRkICRESVJ2aW0vdGVzdC9ob3N0cy9ob3N0LWV4YW1wbGUxLmpzb24gfHwgISBlY2hvICJmYWlsIiA+JjIgfHwgJF9leGl0IDEKKyAgICAke0RJUnZpbX0vb3BlbnZpbSBob3N0LWFkZCAkRElSdmltL3Rlc3QvaG9zdHMvaG9zdC1leGFtcGxlMi5qc29uIHx8ICEgZWNobyAiZmFpbCIgPiYyIHx8ICRfZXhpdCAxCisgICAgJHtESVJ2aW19L29wZW52aW0gaG9zdC1hZGQgJERJUnZpbS90ZXN0L2hvc3RzL2hvc3QtZXhhbXBsZTMuanNvbiB8fCAhIGVjaG8gImZhaWwiID4mMiB8fCAkX2V4aXQgMQorICAgIGVjaG8gIkFkZGluZyBleGFtcGxlIG5ldHMiCisgICAgJHtESVJ2aW19L29wZW52aW0gbmV0LWNyZWF0ZSAkRElSdmltL3Rlc3QvbmV0d29ya3MvbmV0LWV4YW1wbGUwLnlhbWwgfHwgISBlY2hvICJmYWlsIiA+JjIgfHwgJF9leGl0IDEKKyAgICAke0RJUnZpbX0vb3BlbnZpbSBuZXQtY3JlYXRlICRESVJ2aW0vdGVzdC9uZXR3b3Jrcy9uZXQtZXhhbXBsZTEueWFtbCB8fCAhIGVjaG8gImZhaWwiID4mMiB8fCAkX2V4aXQgMQorICAgICR7RElSdmltfS9vcGVudmltIG5ldC1jcmVhdGUgJERJUnZpbS90ZXN0L25ldHdvcmtzL25ldC1leGFtcGxlMi55YW1sIHx8ICEgZWNobyAiZmFpbCIgPiYyIHx8ICRfZXhpdCAxCisgICAgJHtESVJ2aW19L29wZW52aW0gbmV0LWNyZWF0ZSAkRElSdmltL3Rlc3QvbmV0d29ya3MvbmV0LWV4YW1wbGUzLnlhbWwgfHwgISBlY2hvICJmYWlsIiA+JjIgfHwgJF9leGl0IDEKKworICAgIHByaW50ZiAiJS01MHMiICJDcmVhdGluZyBvcGVudmltIHRlbmFudCAnVEVTVC1hZG1pbic6ICIKKyAgICByZXN1bHQ9YG9wZW52aW0gdGVuYW50LWNyZWF0ZSAneyJ0ZW5hbnQiOiB7Im5hbWUiOiJURVNULWFkbWluIiwgImRlc2NyaXB0aW9uIjoiYWRtaW4ifX0nYAorICAgIHZpbXRlbmFudD1gZWNobyAkcmVzdWx0IHxnYXdrICd7cHJpbnQgJDF9J2AKKyAgICAjY2hlY2sgYSB2YWxpZCB1dWlkIGlzIG9idGFpbmVkCisgICAgISBpc192YWxpZF91dWlkICR2aW10ZW5hbnQgJiYgZWNobyAiRkFJTCIgJiYgZWNobyAiICAgICRyZXN1bHQiICYmICRfZXhpdCAxCisgICAgZWNobyAiICAkdmltdGVuYW50IgorICAgIGV4cG9ydCBPUEVOVklNX1RFTkFOVD0kdmltdGVuYW50CisgICAgW1sgJGluc2VydF9iYXNocmMgPT0geSBdXSAmJiBlY2hvIC1lICJcbmV4cG9ydCBPUEVOVklNX1RFTkFOVD0kdmltdGVuYW50IiA+PiB+Ly5iYXNocmMKKworICAgIGVjaG8KKyAgICAjZWNobyAiQ2hlY2sgdmlydHVhbCBtYWNoaW5lcyBhcmUgZGVwbG95ZWQiCisgICAgI3Ztc19lcnJvcj1gb3BlbnZpbSB2bS1saXN0IHwgZ3JlcCBFUlJPUiB8IHdjIC1sYAorICAgICN2bXM9YG9wZW52aW0gdm0tbGlzdCB8IHdjIC1sYAorICAgICNbWyAkdm1zIC1uZSA4IF1dICAgICAgICYmICBlY2hvICJXQVJOSU5HOiAkdm1zIFZNcyBjcmVhdGVkLCBtdXN0IGJlIDggVk1zIiA+JjIgJiYgJF9leGl0IDEKKyAgICAjW1sgJHZtc19lcnJvciAtZ3QgMCBdXSAmJiAgZWNobyAiV0FSTklORzogJHZtc19lcnJvciBWTXMgd2l0aCBFUlJPUiIgPiYyICAgICAgICYmICRfZXhpdCAxCitmaQorZG9uZQorCitlY2hvCitlY2hvIERPTkUKKyNlY2hvICJMaXN0aW5nIFZORnMiCisjb3BlbnZpbSB2bmYtbGlzdAorI2VjaG8gIkxpc3Rpbmcgc2NlbmFyaW9zIgorI29wZW52aW0gc2NlbmFyaW8tbGlzdAorI2VjaG8gIkxpc3Rpbmcgc2NlbmFyaW8gaW5zdGFuY2VzIgorI29wZW52aW0gaW5zdGFuY2Utc2NlbmFyaW8tbGlzdAorCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaW5zdGFsbC1mbG9vZGxpZ2h0LnNoIGIvc2NyaXB0cy9pbnN0YWxsLWZsb29kbGlnaHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTA2ZDVjMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvaW5zdGFsbC1mbG9vZGxpZ2h0LnNoCkBAIC0wLDAgKzEsMTUwIEBACisjIS9iaW4vYmFzaAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjT05MWSBURVNURUQgZm9yIFVidW50dSAxNC4xMCAxNC4wNCwgQ2VudE9TNyBhbmQgUkhFTDcKKyNHZXQgbmVlZGVkIHBhY2thZ2VzLCB0byBydW4gZmxvb2RsaWdodAorCitmdW5jdGlvbiB1c2FnZSgpeworICAgIGVjaG8gIC1lICJ1c2FnZTogc3VkbyAkMCBcbiAgSW5zdGFsbCBmbG9vZGxpZ2h0IHYwLjkgaW4gLi9mbG9vZGxpZ2h0LTAuOTAiCit9CisKK2Z1bmN0aW9uIGluc3RhbGxfcGFja2FnZXMoKXsKKyAgICBbIC14IC91c3IvYmluL2FwdC1nZXQgXSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgJCoKKyAgICBbIC14IC91c3IvYmluL3l1bSBdICAgICAmJiB5dW0gaW5zdGFsbCAteSAkKiAgIAorICAgIAorICAgICNjaGVjayBwcm9wZXJseSBpbnN0YWxsZWQKKyAgICBmb3IgUEFDS0FHRSBpbiAkKgorICAgIGRvCisgICAgICAgIFBBQ0tBR0VfSU5TVEFMTEVEPSJubyIKKyAgICAgICAgWyAteCAvdXNyL2Jpbi9hcHQtZ2V0IF0gJiYgZHBrZyAtbCAkUEFDS0FHRSAgICAgICAgICAgICY+PiAvZGV2L251bGwgJiYgUEFDS0FHRV9JTlNUQUxMRUQ9InllcyIKKyAgICAgICAgWyAteCAvdXNyL2Jpbi95dW0gXSAgICAgJiYgeXVtIGxpc3QgaW5zdGFsbGVkICRQQUNLQUdFICY+PiAvZGV2L251bGwgJiYgUEFDS0FHRV9JTlNUQUxMRUQ9InllcyIgCisgICAgICAgIGlmIFsgIiRQQUNLQUdFX0lOU1RBTExFRCIgPSAibm8iIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZWNobyAiZmFpbGVkIHRvIGluc3RhbGwgcGFja2FnZSAnJFBBQ0tBR0UnLiBSZXZpc2UgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHRyeSBhZ2FpbiIKKyAgICAgICAgICAgIGV4aXQgLTEKKyAgICAgICBmaQorICAgIGRvbmUKK30KKworI2NoZWNrIHJvb3QgcHJpdmlsZWdlcyBhbmQgbm9uIGEgcm9vdCB1c2VyIGJlaGluZAorWyAiJDEiID09ICItaCIgLW8gIiQxIiA9PSAiLS1oZWxwIiBdICYmIHVzYWdlICYmIGV4aXQgMAorWyAiJFVTRVIiICE9ICJyb290IiBdICYmIGVjaG8gIk5lZWRlZCByb290IHByaXZpbGVnZXMiID4mMiAmJiB1c2FnZSA+JjIgJiYgZXhpdCAtMQorWyAteiAiJFNVRE9fVVNFUiIgLW8gIiRTVURPX1VTRVIiID0gInJvb3QiIF0gJiYgZWNobyAiTXVzdCBiZSBydW5uZWQgd2l0aCBzdWRvIGZyb20gYSBub24gcm9vdCB1c2VyIiAgPiYyICYmIHVzYWdlID4mMiAmJiBleGl0IC0xCisKK2VjaG8gIlRoaXMgc2NyaXB0IHdpbGwgdXBkYXRlIHJlcG9zaXRvcmllcyBhbmQgSW5zdGFsbGluZyBGbG9vZExpZ2h0LiIKK2VjaG8gIkl0IHdpbGwgaW5zdGFsbCBKYXZhIGFuZCBvdGhlciBwYWNrYWdlcywgdGhhdCB0YWtlcyBhIHdoaWxlIHRvIGRvd25sb2FkIgorcmVhZCAtZSAtcCAiRG8geW91IGFncmVlIG9uIGRvd25sb2FkIGFuZCBpbnN0YWxsIEZsb29kTGlnaHQgZnJvbSBodHRwOi8vd3d3LnByb2plY3RmbG9vZGxpZ2h0Lm9yZyB1cG9uIHRoZSBvd25lciBsaWNlbnNlPyAoeS9OKSIgS0sKK1tbICIkS0siICE9ICJ5IiBdXSAmJiBbWyAiJEtLIiAhPSAieWVzIiBdXSAmJiBleGl0IDAKKworI0Rpc2NvdmVyIExpbnV4IGRpc3RyaWJ1dGlvbgorI3RyeSByZWRoYXQgdHlwZQorWyAtZiAvZXRjL3JlZGhhdC1yZWxlYXNlIF0gJiYgX0RJU1RSTz0kKGNhdCAvZXRjL3JlZGhhdC1yZWxlYXNlIDI+L2Rldi9udWxsIHwgY3V0ICAtZCIgIiAtZjEpIAorI2lmIG5vdCBhc3N1bWluZyB1YnVudHUgdHlwZQorWyAtZiAvZXRjL3JlZGhhdC1yZWxlYXNlIF0gfHwgX0RJU1RSTz0kKGxzYl9yZWxlYXNlIC1pcyAgMj4vZGV2L251bGwpICAgICAgICAgICAgCitpZiBbICIkX0RJU1RSTyIgPT0gIlVidW50dSIgXQordGhlbgorICAgIF9SRUxFQVNFPSIxNCIKKyAgICBpZiAhIGxzYl9yZWxlYXNlIC1ycyB8IGdyZXAgLXEgIjE0LiIKKyAgICB0aGVuIAorICAgICAgICByZWFkIC1lIC1wICJXQVJOSU5HISBOb3QgdGVzdGVkIFVidW50dSB2ZXJzaW9uLiBDb250aW51ZSBhc3N1bWluZyBhICckX1JFTEVBU0UnIHR5cGU/ICh5L04pIiBLSworICAgICAgICBbICIkS0siICE9ICJ5IiAtYSAgIiRLSyIgIT0gInllcyIgXSAmJiBlY2hvICJDYW5jZWxsZWQiICYmIGV4aXQgMAorICAgIGZpCitlbGlmIFsgIiRfRElTVFJPIiA9PSAiQ2VudE9TIiBdCit0aGVuCisgICAgX1JFTEVBU0U9IjciIAorICAgIGlmICEgY2F0IC9ldGMvcmVkaGF0LXJlbGVhc2UgfCBncmVwIC1xICI3LiIKKyAgICB0aGVuCisgICAgICAgIHJlYWQgLWUgLXAgIldBUk5JTkchIE5vdCB0ZXN0ZWQgQ2VudE9TIHZlcnNpb24uIENvbnRpbnVlIGFzc3VtaW5nIGEgJ19SRUxFQVNFJyB0eXBlPyAoeS9OKSIgS0sKKyAgICAgICAgWyAiJEtLIiAhPSAieSIgLWEgICIkS0siICE9ICJ5ZXMiIF0gJiYgZWNobyAiQ2FuY2VsbGVkIiAmJiBleGl0IDAKKyAgICBmaQorZWxpZiBbICIkX0RJU1RSTyIgPT0gIlJlZCIgXQordGhlbgorICAgIF9SRUxFQVNFPSI3IiAKKyAgICBpZiAhIGNhdCAvZXRjL3JlZGhhdC1yZWxlYXNlIHwgZ3JlcCAtcSAiNy4iCisgICAgdGhlbgorICAgICAgICByZWFkIC1lIC1wICJXQVJOSU5HISBOb3QgdGVzdGVkIFJlZCBIYXQgT1MgdmVyc2lvbi4gQ29udGludWUgYXNzdW1pbmcgYSAnX1JFTEVBU0UnIHR5cGU/ICh5L04pIiBLSworICAgICAgICBbICIkS0siICE9ICJ5IiAtYSAgIiRLSyIgIT0gInllcyIgXSAmJiBlY2hvICJDYW5jZWxsZWQiICYmIGV4aXQgMAorICAgIGZpCitlbHNlICAjWyAiJF9ESVNUUk8iICE9ICJVYnVudHUiIC1hICIkX0RJU1RSTyIgIT0gIkNlbnRPUyIgLWEgIiRfRElTVFJPIiAhPSAiUmVkIiBdIAorICAgIF9ESVNUUk9fRElTQ09WRVI9JF9ESVNUUk8KKyAgICBbIC14IC91c3IvYmluL2FwdC1nZXQgXSAmJiBfRElTVFJPPSJVYnVudHUiICYmIF9SRUxFQVNFPSIxNCIKKyAgICBbIC14IC91c3IvYmluL3l1bSBdICAgICAmJiBfRElTVFJPPSJDZW50T1MiICYmIF9SRUxFQVNFPSI3IgorICAgIHJlYWQgLWUgLXAgIldBUk5JTkchIE5vdCB0ZXN0ZWQgTGludXggZGlzdHJpYnV0aW9uICckX0RJU1RST19ESVNDT1ZFUiAnLiBDb250aW51ZSBhc3N1bWluZyBhICckX0RJU1RSTyAkX1JFTEVBU0UnIHR5cGU/ICh5L04pIiBLSworICAgIFsgIiRLSyIgIT0gInkiIC1hICAiJEtLIiAhPSAieWVzIiBdICYmIGVjaG8gIkNhbmNlbGxlZCIgJiYgZXhpdCAwCitmaQorCisKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICBVUERBVEUgUkVQT1NJVE9SSUVTICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworWyAiJF9ESVNUUk8iID09ICJVYnVudHUiIF0gJiYgYXB0LWdldCB1cGRhdGUgLXkKKworWyAiJF9ESVNUUk8iID09ICJDZW50T1MiIC1vICIkX0RJU1RSTyIgPT0gIlJlZCIgXSAmJiB5dW0gY2hlY2stdXBkYXRlIC15CitbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgLW8gIiRfRElTVFJPIiA9PSAiUmVkIiBdICYmIHN1ZG8geXVtIHJlcG9saXN0CisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICBET1dOTE9BRElORyBBTkQgQ09ORklHVVJFIEZMT09ETElHSFQgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKyAgICAjSW5zdGFsbCBKYXZhIEpESyBhbmQgQW50IHBhY2thZ2VzIGF0IHRoZSBWTSAKKyAgICBbICIkX0RJU1RSTyIgPT0gIlVidW50dSIgXSAmJiBpbnN0YWxsX3BhY2thZ2VzICJidWlsZC1lc3NlbnRpYWwgZGVmYXVsdC1qZGsgYW50IHB5dGhvbi1kZXYgc2NyZWVuIHdnZXQiICNUT0RPIHJldmlzZSBpZiBwYWNrYWdlcyBhcmUgbmVlZGVkIGFwYXJ0IGZyb20gYW50CisgICAgWyAiJF9ESVNUUk8iID09ICJDZW50T1MiIC1vICIkX0RJU1RSTyIgPT0gIlJlZCIgXSAmJiBpbnN0YWxsX3BhY2thZ2UgIiAgICAgICAgICAgICAgICAgYW50IHNjcmVlbiB3Z2V0IgorCisgICNmbG9vZGxpZ2h0IDAuOQorICAgIGVjaG8gImRvd25sb2FkaW5nIHYwLjkwIGZyb20gdGhlIG9maWNpYWwgcGFnZSIKKyAgICBzdSAkU1VET19VU0VSIC1jICd3Z2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9vZGxpZ2h0L2Zsb29kbGlnaHQvYXJjaGl2ZS92MC45MC50YXIuZ3onCisgICAgc3UgJFNVRE9fVVNFUiAtYyAndGFyIHh2emYgdjAuOTAudGFyLmd6JworICAjZmxvb2RsaWdodCAxLjEKKyAgICAjZWNobyAiZG93bmxvYWRpbmcgdjEuMSBmcm9tIHRoZSBvZmljaWFsIHBhZ2UiCisgICAgI3N1ICRTVURPX1VTRVIgLWMgJ3dnZXQgaHR0cHM6Ly9naXRodWIuY29tL2Zsb29kbGlnaHQvZmxvb2RsaWdodC9hcmNoaXZlL3YxLjEudGFyLmd6JworICAgICNzdSAkU1VET19VU0VSIC1jICd0YXIgeHZ6ZiB2MDEuMS50YXIuZ3onCisgICAgCisgICAgI0NvbmZpZ3VyZSBKYXZhIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSXQgaXMgc2VlbSB0aGF0IGlzIG5vdCBuZWVkZWQhISEKKyAgICAjZXhwb3J0IEpBVkFfSE9NRT0vdXNyL2xpYi9qdm0vZGVmYXVsdC1qYXZhIiA+PiAvaG9tZS8ke1NVRE9fVVNFUn0vLmJhc2hyCisgICAgI2V4cG9ydCBQQVRIPSRQQVRIOiRKQVZBX0hPTUUKKyAgICAjZWNobyAiZXhwb3J0IEpBVkFfSE9NRT0vdXNyL2xpYi9qdm0vZGVmYXVsdC1qYXZhIiA+PiAvaG9tZS8ke1NVRE9fVVNFUn0vLmJhc2hyYworICAgICNlY2hvICJleHBvcnQgUEFUSD0kUEFUSDokSkFWQV9IT01FIiA+PiAvaG9tZS8ke1NVRE9fVVNFUn0vLmJhc2hyYworCisgICAgI0NvbXBpbGUgZmxvb2RsaWdodAorICAgIHB1c2hkIC4vZmxvb2RsaWdodC0wLjkwCisgICAgI3B1c2hkIC4vZmxvb2RsaWdodC0xLjEKKyAgICBzdSAkU1VET19VU0VSIC1jICdhbnQnCisgICAgZXhwb3J0IEZMT09ETElHSFRfUEFUSD0kKHB3ZCkKKyAgICBwb3BkCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICBDT05GSUdVUkUgZW52aW9yb25tZW50ICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKyNpbnNlcnQgaW50byAuYmFzaHJjCisgICAgZWNobyAiICAgIGluc2VydGluZyBGTE9PRExJR0hUX1BBVEggYXQgLmJhc2hyYyIKKyAgICBzdSAkU1VET19VU0VSIC1jICJlY2hvICdleHBvcnQgRkxPT0RMSUdIVF9QQVRIPVwiJHtGTE9PRExJR0hUX1BBVEh9XCInICA+PiB+Ly5iYXNocmMiCisKK2VjaG8KK2VjaG8gIkRvbmUhICB5b3UgbWF5IG5lZWQgdG8gbG9nb3V0IGFuZCBsb2dpbiBhZ2FpbiBmb3IgbG9hZGluZyB0aGUgY29uZmlndXJhdGlvbiIKK2VjaG8gIiBJZiB5b3VyIGhhdmUgaW5zdGFsbGVkIG9wZW52aW0sIHJ1biAnLi9vcGVudmltL3NjcmlwdHMvc2VydmljZS1mbG9vZGxpZ2h0LnNoIHN0YXJ0JyBmb3Igc3RhcnRpbmcgZmxvb2RsaWdodCBpbiBhIHNjcmVlbiIKKworCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLnNoIGIvc2NyaXB0cy9pbnN0YWxsLW9wZW52aW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJmMGZiNQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLnNoCkBAIC0wLDAgKzEsMjYwIEBACisjIS9iaW4vYmFzaAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjT05MWSBURVNURUQgZm9yIFVidW50dSAxNC4xMCAxNC4wNCwgQ2VudE9TNyBhbmQgUkhFTDcKKyNHZXQgbmVlZGVkIHBhY2thZ2VzLCBzb3VyY2UgY29kZSBhbmQgY29uZmlndXJlIHRvIHJ1biBvcGVudmltCisjQXNrIGZvciBkYXRhYmFzZSB1c2VyIGFuZCBwYXNzd29yZCBpZiBub3QgcHJvdmlkZWQKKyMgICAgICAgICQxOiBkYXRhYmFzZSB1c2VyCisjICAgICAgICAkMjogZGF0YWJhc2UgcGFzc3dvcmQgCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAgLWUgInVzYWdlOiBzdWRvICQwIFtkYi11c2VyIFtkYi1wYXNzd2RdXVxuICBJbnN0YWxsIHNvdXJjZSBjb2RlIGluIC4vb3BlbnZpbSIKK30KKworZnVuY3Rpb24gaW5zdGFsbF9wYWNrYWdlcygpeworICAgIFsgLXggL3Vzci9iaW4vYXB0LWdldCBdICYmIGFwdC1nZXQgaW5zdGFsbCAteSAkKgorICAgIFsgLXggL3Vzci9iaW4veXVtIF0gICAgICYmIHl1bSBpbnN0YWxsIC15ICQqICAgCisgICAgCisgICAgI2NoZWNrIHByb3Blcmx5IGluc3RhbGxlZAorICAgIGZvciBQQUNLQUdFIGluICQqCisgICAgZG8KKyAgICAgICAgUEFDS0FHRV9JTlNUQUxMRUQ9Im5vIgorICAgICAgICBbIC14IC91c3IvYmluL2FwdC1nZXQgXSAmJiBkcGtnIC1sICRQQUNLQUdFICAgICAgICAgICAgJj4+IC9kZXYvbnVsbCAmJiBQQUNLQUdFX0lOU1RBTExFRD0ieWVzIgorICAgICAgICBbIC14IC91c3IvYmluL3l1bSBdICAgICAmJiB5dW0gbGlzdCBpbnN0YWxsZWQgJFBBQ0tBR0UgJj4+IC9kZXYvbnVsbCAmJiBQQUNLQUdFX0lOU1RBTExFRD0ieWVzIiAKKyAgICAgICAgaWYgWyAiJFBBQ0tBR0VfSU5TVEFMTEVEIiA9ICJubyIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICJmYWlsZWQgdG8gaW5zdGFsbCBwYWNrYWdlICckUEFDS0FHRScuIFJldmlzZSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhbmQgdHJ5IGFnYWluIgorICAgICAgICAgICAgZXhpdCAtMQorICAgICAgIGZpCisgICAgZG9uZQorfQorCisjY2hlY2sgcm9vdCBwcml2aWxlZ2VzIGFuZCBub24gYSByb290IHVzZXIgYmVoaW5kCitbICIkMSIgPT0gIi1oIiAtbyAiJDEiID09ICItLWhlbHAiIF0gJiYgdXNhZ2UgJiYgZXhpdCAwCitbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgZWNobyAiTmVlZGVkIHJvb3QgcHJpdmlsZWdlcyIgPiYyICYmIHVzYWdlID4mMiAmJiBleGl0IC0xCitbIC16ICIkU1VET19VU0VSIiAtbyAiJFNVRE9fVVNFUiIgPSAicm9vdCIgXSAmJiBlY2hvICJNdXN0IGJlIHJ1bm5lZCB3aXRoIHN1ZG8gZnJvbSBhIG5vbiByb290IHVzZXIiICA+JjIgJiYgdXNhZ2UgPiYyICYmIGV4aXQgLTEKKworCisjRGlzY292ZXIgTGludXggZGlzdHJpYnV0aW9uCisjdHJ5IHJlZGhhdCB0eXBlCitbIC1mIC9ldGMvcmVkaGF0LXJlbGVhc2UgXSAmJiBfRElTVFJPPSQoY2F0IC9ldGMvcmVkaGF0LXJlbGVhc2UgMj4vZGV2L251bGwgfCBjdXQgIC1kIiAiIC1mMSkgCisjaWYgbm90IGFzc3VtaW5nIHVidW50dSB0eXBlCitbIC1mIC9ldGMvcmVkaGF0LXJlbGVhc2UgXSB8fCBfRElTVFJPPSQobHNiX3JlbGVhc2UgLWlzICAyPi9kZXYvbnVsbCkgICAgICAgICAgICAKK2lmIFsgIiRfRElTVFJPIiA9PSAiVWJ1bnR1IiBdCit0aGVuCisgICAgX1JFTEVBU0U9IjE0IgorICAgIGlmICEgbHNiX3JlbGVhc2UgLXJzIHwgZ3JlcCAtcSAiMTQuIgorICAgIHRoZW4gCisgICAgICAgIHJlYWQgLWUgLXAgIldBUk5JTkchIE5vdCB0ZXN0ZWQgVWJ1bnR1IHZlcnNpb24uIENvbnRpbnVlIGFzc3VtaW5nIGEgJyRfUkVMRUFTRScgdHlwZT8gKHkvTikiIEtLCisgICAgICAgIFsgIiRLSyIgIT0gInkiIC1hICAiJEtLIiAhPSAieWVzIiBdICYmIGVjaG8gIkNhbmNlbGxlZCIgJiYgZXhpdCAwCisgICAgZmkKK2VsaWYgWyAiJF9ESVNUUk8iID09ICJDZW50T1MiIF0KK3RoZW4KKyAgICBfUkVMRUFTRT0iNyIgCisgICAgaWYgISBjYXQgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8IGdyZXAgLXEgIjcuIgorICAgIHRoZW4KKyAgICAgICAgcmVhZCAtZSAtcCAiV0FSTklORyEgTm90IHRlc3RlZCBDZW50T1MgdmVyc2lvbi4gQ29udGludWUgYXNzdW1pbmcgYSAnX1JFTEVBU0UnIHR5cGU/ICh5L04pIiBLSworICAgICAgICBbICIkS0siICE9ICJ5IiAtYSAgIiRLSyIgIT0gInllcyIgXSAmJiBlY2hvICJDYW5jZWxsZWQiICYmIGV4aXQgMAorICAgIGZpCitlbGlmIFsgIiRfRElTVFJPIiA9PSAiUmVkIiBdCit0aGVuCisgICAgX1JFTEVBU0U9IjciIAorICAgIGlmICEgY2F0IC9ldGMvcmVkaGF0LXJlbGVhc2UgfCBncmVwIC1xICI3LiIKKyAgICB0aGVuCisgICAgICAgIHJlYWQgLWUgLXAgIldBUk5JTkchIE5vdCB0ZXN0ZWQgUmVkIEhhdCBPUyB2ZXJzaW9uLiBDb250aW51ZSBhc3N1bWluZyBhICdfUkVMRUFTRScgdHlwZT8gKHkvTikiIEtLCisgICAgICAgIFsgIiRLSyIgIT0gInkiIC1hICAiJEtLIiAhPSAieWVzIiBdICYmIGVjaG8gIkNhbmNlbGxlZCIgJiYgZXhpdCAwCisgICAgZmkKK2Vsc2UgICNbICIkX0RJU1RSTyIgIT0gIlVidW50dSIgLWEgIiRfRElTVFJPIiAhPSAiQ2VudE9TIiAtYSAiJF9ESVNUUk8iICE9ICJSZWQiIF0gCisgICAgX0RJU1RST19ESVNDT1ZFUj0kX0RJU1RSTworICAgIFsgLXggL3Vzci9iaW4vYXB0LWdldCBdICYmIF9ESVNUUk89IlVidW50dSIgJiYgX1JFTEVBU0U9IjE0IgorICAgIFsgLXggL3Vzci9iaW4veXVtIF0gICAgICYmIF9ESVNUUk89IkNlbnRPUyIgJiYgX1JFTEVBU0U9IjciCisgICAgcmVhZCAtZSAtcCAiV0FSTklORyEgTm90IHRlc3RlZCBMaW51eCBkaXN0cmlidXRpb24gJyRfRElTVFJPX0RJU0NPVkVSICcuIENvbnRpbnVlIGFzc3VtaW5nIGEgJyRfRElTVFJPICRfUkVMRUFTRScgdHlwZT8gKHkvTikiIEtLCisgICAgWyAiJEtLIiAhPSAieSIgLWEgICIkS0siICE9ICJ5ZXMiIF0gJiYgZWNobyAiQ2FuY2VsbGVkIiAmJiBleGl0IDAKK2ZpCisKKworCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgIFVQREFURSBSRVBPU0lUT1JJRVMgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCitbICIkX0RJU1RSTyIgPT0gIlVidW50dSIgXSAmJiBhcHQtZ2V0IHVwZGF0ZSAteQorCitbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgLW8gIiRfRElTVFJPIiA9PSAiUmVkIiBdICYmIHl1bSBjaGVjay11cGRhdGUgLXkKK1sgIiRfRElTVFJPIiA9PSAiQ2VudE9TIiBdICYmIHN1ZG8geXVtIGluc3RhbGwgLXkgZXBlbC1yZWxlYXNlCitbICIkX0RJU1RSTyIgPT0gIlJlZCIgXSAmJiB3Z2V0IGh0dHA6Ly9kbC5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZXBlbC83L3g4Nl82NC9lL2VwZWwtcmVsZWFzZS03LTUubm9hcmNoLnJwbSBcCisgICYmIHN1ZG8gcnBtIC1pdmggZXBlbC1yZWxlYXNlLTctNS5ub2FyY2gucnBtICYmIHN1ZG8geXVtIGluc3RhbGwgLXkgZXBlbC1yZWxlYXNlICYmIHJtIC1mIGVwZWwtcmVsZWFzZS03LTUubm9hcmNoLnJwbQorWyAiJF9ESVNUUk8iID09ICJDZW50T1MiIC1vICIkX0RJU1RSTyIgPT0gIlJlZCIgXSAmJiBzdWRvIHl1bSByZXBvbGlzdAorCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgSU5TVEFMTCBSRVFVSVJFRCBQQUNLQUdFUyAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKK1sgIiRfRElTVFJPIiA9PSAiVWJ1bnR1IiBdICYmIGluc3RhbGxfcGFja2FnZXMgIm15c3FsLXNlcnZlciIKK1sgIiRfRElTVFJPIiA9PSAiQ2VudE9TIiAtbyAiJF9ESVNUUk8iID09ICJSZWQiIF0gJiYgaW5zdGFsbF9wYWNrYWdlcyAibWFyaWFkYiBtYXJpYWRiLXNlcnZlciIKKworaWYgWyAiJF9ESVNUUk8iID09ICJDZW50T1MiIC1vICIkX0RJU1RSTyIgPT0gIlJlZCIgXQordGhlbgorICAgICNzdGFydCBzZXJ2aWNlcy4gQnkgZGVmYXVsdCBDZW50T1MgZG9lcyBub3Qgc3RhcnQgc2VydmljZXMKKyAgICBzZXJ2aWNlIG1hcmlhZGIgc3RhcnQKKyAgICBzZXJ2aWNlIGh0dHBkICAgc3RhcnQKKyAgICBzeXN0ZW1jdGwgZW5hYmxlIG1hcmlhZGIKKyAgICBzeXN0ZW1jdGwgZW5hYmxlIGh0dHBkCisgICAgcmVhZCAtZSAtcCAiRG8geW91IHdhbnQgdG8gY29uZmlndXJlIG1hcmlhZGIgKHJlY29tZW5kZWQgaWYgbm90IGRvbmUgYmVmb3JlKSAoWS9uKSIgS0sKKyAgICBbICIkS0siICE9ICJuIiAtYSAgIiRLSyIgIT0gIm5vIiBdICYmIG15c3FsX3NlY3VyZV9pbnN0YWxsYXRpb24KKworICAgIHJlYWQgLWUgLXAgIkRvIHlvdSB3YW50IHRvIHNldCBmaXJld2FsbCB0byBncmFudCB3ZWIgYWNjZXNzIHBvcnQgODAsNDQzICAoWS9uKSIgS0sKKyAgICBbICIkS0siICE9ICJuIiAtYSAgIiRLSyIgIT0gIm5vIiBdICYmIAorICAgICAgICBmaXJld2FsbC1jbWQgLS1wZXJtYW5lbnQgLS16b25lPXB1YmxpYyAtLWFkZC1zZXJ2aWNlPWh0dHAgJiYKKyAgICAgICAgZmlyZXdhbGwtY21kIC0tcGVybWFuZW50IC0tem9uZT1wdWJsaWMgLS1hZGQtc2VydmljZT1odHRwcyAmJgorICAgICAgICBmaXJld2FsbC1jbWQgLS1yZWxvYWQKK2ZpCisKKyNjaGVjayBhbmQgYXNrIGZvciBkYXRhYmFzZSB1c2VyIHBhc3N3b3JkLiBNdXN0IGJlIGRvbmUgYWZ0ZXIgZGF0YWJhc2UgaW5zdGFsYXRpb24KK1sgLW4gIiQxIiBdICYmIERCVVNFUj0kMQorWyAteiAiJDEiIF0gJiYgREJVU0VSPXJvb3QKK1sgLW4gIiQyIiBdICYmIERCUEFTU1dEPSItcCQyIgorWyAteiAiJDIiIF0gJiYgREJQQVNTV0Q9IiIKK2VjaG8gLWUgIlxuQ2hla2luZyBkYXRhYmFzZSBjb25uZWN0aW9uIGFuZCBhc2sgZm9yIGNyZWRlbnRpYWxzIgord2hpbGUgISAgZWNobyAiIiB8IG15c3FsIC11JERCVVNFUiAkREJQQVNTV0QKK2RvCisgICAgICAgIFsgLW4gIiRsb2dpbnRyeSIgXSAmJiAgZWNobyAtZSAiXG5JbnZhbGlkIGRhdGFiYXNlIGNyZWRlbnRpYWxzISEhLiBUcnkgYWdhaW4gKEN0cmwrYyB0byBhYm9ydCkiCisgICAgICAgIFsgLXogIiRsb2dpbnRyeSIgXSAmJiAgZWNobyAtZSAiXG5Qcm92aWRlIGRhdGFiYXNlIGNyZWRlbnRpYWxzIgorICAgICAgICByZWFkIC1lIC1wICJkYXRhYmFzZSB1c2VyPyAoJERCVVNFUikgIiBEQlVTRVJfCisgICAgICAgIFsgLW4gIiREQlVTRVJfIiBdICYmIERCVVNFUj0kREJVU0VSXworICAgICAgICByZWFkIC1lIC1zIC1wICJkYXRhYmFzZSBwYXNzd29yZD8gKEVudGVyIGZvciBub3QgdXNpbmcgcGFzc3dvcmQpICIgREJQQVNTV0RfCisgICAgICAgIFsgLW4gIiREQlBBU1NXRF8iIF0gJiYgREJQQVNTV0Q9Ii1wJERCUEFTU1dEXyIKKyAgICAgICAgWyAteiAiJERCUEFTU1dEXyIgXSAmJiBEQlBBU1NXRD0iIgorICAgICAgICBsb2dpbnRyeT0ieWVzIgorZG9uZQorCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgIElOU1RBTEwgUFlUSE9OIFBBQ0tBR0VTICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCitbICIkX0RJU1RSTyIgPT0gIlVidW50dSIgXSAmJiBpbnN0YWxsX3BhY2thZ2VzICJweXRob24teWFtbCBweXRob24tbGlidmlydCBweXRob24tYm90dGxlIHB5dGhvbi1teXNxbGRiIHB5dGhvbi1qc29uc2NoZW1hIHB5dGhvbi1wYXJhbWlrbyBweXRob24tYXJnY29tcGxldGUgcHl0aG9uLXJlcXVlc3RzIGdpdCBzY3JlZW4gd2dldCIKK1sgIiRfRElTVFJPIiA9PSAiQ2VudE9TIiAtbyAiJF9ESVNUUk8iID09ICJSZWQiIF0gJiYgaW5zdGFsbF9wYWNrYWdlcyAiUHlZQU1MIGxpYnZpcnQtcHl0aG9uIE15U1FMLXB5dGhvbiBweXRob24tanNvbnNjaGVtYSBweXRob24tcGFyYW1pa28gcHl0aG9uLWFyZ2NvbXBsZXRlIHB5dGhvbi1yZXF1ZXN0cyBnaXQgc2NyZWVuIHdnZXQiCisKKyNUaGUgb25seSB3YXkgdG8gaW5zdGFsbCBweXRob24tYm90dGxlIG9uIENlbnRvczcgaXMgd2l0aCBlYXN5X2luc3RhbGwgb3IgcGlwCitbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgLW8gIiRfRElTVFJPIiA9PSAiUmVkIiBdICYmIGVhc3lfaW5zdGFsbCAtVSBib3R0bGUKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgIERPV05MT0FEIFNPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworc3UgJFNVRE9fVVNFUiAtYyAnZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9uZnZsYWJzL29wZW52aW0uZ2l0IG9wZW52aW0nCisjVW5uY29tZW50IHRvIHVzZSBhIGNvbmNyZXRlIGJyYW5jaCwgaWYgbm90IG1haW4gYnJhbmNoIAorI3B1c2hkIG9wZW52aW0KKyNzdSAkU1VET19VU0VSIC1jICdnaXQgY2hlY2tvdXQgdjAuNCcKKyNwb3BkCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgQ1JFQVRFIERBVEFCQVNFICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKK215c3FsYWRtaW4gLXUkREJVU0VSICREQlBBU1NXRCBjcmVhdGUgdmltX2RiCisKK2VjaG8gIkNSRUFURSBVU0VSICd2aW0nQCdsb2NhbGhvc3QnIGlkZW50aWZpZWQgYnkgJ3ZpbXB3JzsiICAgICB8IG15c3FsIC11JERCVVNFUiAkREJQQVNTV0QKK2VjaG8gIkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIHZpbV9kYi4qIFRPICd2aW0nQCdsb2NhbGhvc3QnOyIgICB8IG15c3FsIC11JERCVVNFUiAkREJQQVNTV0QKKworZWNobyAidmltIGRhdGFiYXNlIgorc3UgJFNVRE9fVVNFUiAtYyAnLi9vcGVudmltL2RhdGFiYXNlX3V0aWxzL2luaXRfdmltX2RiLnNoIC11IHZpbSAtcCB2aW1wdycKKworCitpZiBbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgLW8gIiRfRElTVFJPIiA9PSAiUmVkIiBdCit0aGVuCisgICAgZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgIENPTkZJR1VSRSBmaXJld2FsbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworICAgIHJlYWQgLWUgLXAgIkNvbmZpZ3VyZSBmaXJld2FsbGQgZm9yIG9wZW52aW1kIHBvcnQgOTA4MD8gKFkvbikiIEtLCisgICAgaWYgWyAiJEtLIiAhPSAibiIgLWEgICIkS0siICE9ICJubyIgXQorICAgIHRoZW4KKyAgICAgICAgI0NyZWF0ZXMgYSBzZXJ2aWNlIGZpbGUgZm9yIG9wZW52aW0KKyAgICAgICAgZWNobyAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxzZXJ2aWNlPgorIDxzaG9ydD5vcGVudmltZDwvc2hvcnQ+CisgPGRlc2NyaXB0aW9uPm9wZW52aW1kIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorIDxwb3J0IHByb3RvY29sPSJ0Y3AiIHBvcnQ9IjkwODAiLz4KKzwvc2VydmljZT4nID4gL2V0Yy9maXJld2FsbGQvc2VydmljZXMvb3BlbnZpbWQueG1sCisgICAgICAgICNwdXQgcHJvcGVyIHBlcm1pc3Npb25zCisgICAgICAgIHB1c2hkIC9ldGMvZmlyZXdhbGxkL3NlcnZpY2VzID4gL2Rldi9udWxsCisgICAgICAgIHJlc3RvcmVjb24gb3BlbnZpbQorICAgICAgICBjaG1vZCA2NDAgb3BlbnZpbQorICAgICAgICBwb3BkID4gL2Rldi9udWxsCisgICAgICAgICNBZGQgdGhlIG9wZW52aW0gc2VydmljZSB0byB0aGUgZGVmYXVsdCB6b25lIHBlcm1hbmVudGx5IGFuZCByZWxvYWQgdGhlIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgZmlyZXdhbGwtY21kIC0tcGVybWFuZW50IC0tYWRkLXNlcnZpY2U9b3BlbnZpbSA+IC9kZXYvbnVsbAorICAgICAgICBmaXJld2FsbC1jbWQgLS1yZWxvYWQgPiAvZGV2L251bGwKKyAgICAgICAgZWNobyAiZG9uZS4iIAorICAgIGVsc2UKKyAgICAgICAgZWNobyAic2tpcHBpbmcuIgorICAgIGZpCitmaQorCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgQ09ORklHVVJFIG9wZW52aW0gQ0xJRU5UUyAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCisjY3JlYXRlcyBhIGxpbmsgYXQgfi9iaW4KK3N1ICRTVURPX1VTRVIgLWMgJ21rZGlyIC1wIH4vYmluJworcm0gLWYgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9vcGVudmltCitybSAtZiAvaG9tZS8ke1NVRE9fVVNFUn0vYmluL29wZW5mbG93CitybSAtZiAvaG9tZS8ke1NVRE9fVVNFUn0vYmluL3NlcnZpY2Utb3BlbnZpbQorcm0gLWYgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9pbml0b3BlbnZpbQorcm0gLWYgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9zZXJ2aWNlLWZsb29kbGlnaHQKK3JtIC1mIC9ob21lLyR7U1VET19VU0VSfS9iaW4vc2VydmljZS1vcGVuZGF5bGlnaHQKK3JtIC1mIC9ob21lLyR7U1VET19VU0VSfS9iaW4vZ2V0X2RoY3BfbGVhc2Uuc2gKK2xuIC1zICR7UFdEfS9vcGVudmltL29wZW52aW0gICAvaG9tZS8ke1NVRE9fVVNFUn0vYmluL29wZW52aW0KK2xuIC1zICR7UFdEfS9vcGVudmltL29wZW5mbG93ICAvaG9tZS8ke1NVRE9fVVNFUn0vYmluL29wZW5mbG93CitsbiAtcyAke1BXRH0vb3BlbnZpbS9zY3JpcHRzL3NlcnZpY2Utb3BlbnZpbS5zaCAgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9zZXJ2aWNlLW9wZW52aW0KK2xuIC1zICR7UFdEfS9vcGVudmltL3NjcmlwdHMvaW5pdG9wZW52aW0uc2ggIC9ob21lLyR7U1VET19VU0VSfS9iaW4vaW5pdG9wZW52aW0KK2xuIC1zICR7UFdEfS9vcGVudmltL3NjcmlwdHMvc2VydmljZS1mbG9vZGxpZ2h0LnNoICAvaG9tZS8ke1NVRE9fVVNFUn0vYmluL3NlcnZpY2UtZmxvb2RsaWdodAorbG4gLXMgJHtQV0R9L29wZW52aW0vc2NyaXB0cy9zZXJ2aWNlLW9wZW5kYXlsaWdodC5zaCAgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9zZXJ2aWNlLW9wZW5kYXlsaWdodAorbG4gLXMgJHtQV0R9L29wZW52aW0vc2NyaXB0cy9nZXRfZGhjcF9sZWFzZS5zaCAgL2hvbWUvJHtTVURPX1VTRVJ9L2Jpbi9nZXRfZGhjcF9sZWFzZS5zaAorCisjaW5zZXJ0IC9ob21lLzx1c2VyPi9iaW4gaW4gdGhlIFBBVEgKKyNza2lwZWQgYmVjYXVzZSBub3JtYWxseSB0aGlzIGlzIGRvbmUgYXV0aG9tYXRpY2FsbHkgd2hlbiB+L2JpbiBleGlzdAorI2lmICEgc3UgJFNVRE9fVVNFUiAtYyAnZWNobyAkUEFUSCcgfCBncmVwIC1xICIvaG9tZS8ke1NVRE9fVVNFUn0vYmluIgorI3RoZW4KKyMgICAgZWNobyAiICAgIGluc2VydGluZyAvaG9tZS8kU1VET19VU0VSL2JpbiBpbiB0aGUgUEFUSCBhdCAuYmFzaHJjIgorIyAgICBzdSAkU1VET19VU0VSIC1jICdlY2hvICJQQVRIPVwkUEFUSDovaG9tZS9cJHtVU0VSfS9iaW4iID4+IH4vLmJhc2hyYycKKyNmaQorCisjY29uZmlndXJlIGFyZy1hdXRvY29tcGxldGUgZm9yIHRoaXMgdXNlcgorI2luIGNhc2Ugb2YgbWlubWFsIGluc3RhbGF0aW9uIHRoaXMgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKK1tbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgfHwgIiRfRElTVFJPIiA9PSAiUmVkIiBdXSAmJiB5dW0gaW5zdGFsbCAteSBiYXNoLWNvbXBsZXRpb24KKyNzdSAkU1VET19VU0VSIC1jICdta2RpciAtcCB+Ly5iYXNoX2NvbXBsZXRpb24uZCcKK3N1ICRTVURPX1VTRVIgLWMgJ2FjdGl2YXRlLWdsb2JhbC1weXRob24tYXJnY29tcGxldGUgLS11c2VyJworaWYgISBncmVwIC1xIGJhc2hfY29tcGxldGlvbi5kL3B5dGhvbi1hcmdjb21wbGV0ZS5zaCAvaG9tZS8ke1NVRE9fVVNFUn0vLmJhc2hyYwordGhlbgorICAgIGVjaG8gIiAgICBpbnNlcnRpbmcgLmJhc2hfY29tcGxldGlvbi5kL3B5dGhvbi1hcmdjb21wbGV0ZS5zaCBleGVjdXRpb24gYXQgLmJhc2hyYyIKKyAgICBzdSAkU1VET19VU0VSIC1jICdlY2hvICIuIC9ob21lLyR7VVNFUn0vLmJhc2hfY29tcGxldGlvbi5kL3B5dGhvbi1hcmdjb21wbGV0ZS5zaCIgPj4gfi8uYmFzaHJjJworZmkKKworZWNobworZWNobyAiRG9uZSEgIHlvdSBtYXkgbmVlZCB0byBsb2dvdXQgYW5kIGxvZ2luIGFnYWluIGZvciBsb2FkaW5nIHRoZSBjb25maWd1cmF0aW9uIgorZWNobyAiIFJ1biAnLi9vcGVudmltL3NjcmlwdHMvc2VydmljZS1vcGVudmltLnNoIHN0YXJ0JyBmb3Igc3RhcnRpbmcgb3BlbnZpbSBpbiBhIHNjcmVlbiIKKworCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvb3BlbnZpbS1yZXBvcnQuc2ggYi9zY3JpcHRzL29wZW52aW0tcmVwb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1MTYzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL29wZW52aW0tcmVwb3J0LnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9iYXNoCisKKyMjCisjIENvcHlyaWdodCAyMDE1IFRlbGVmw7NuaWNhIEludmVzdGlnYWNpw7NuIHkgRGVzYXJyb2xsbywgUy5BLlUuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG9wZW5tYW5vCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisjIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCisjIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBGb3IgdGhvc2UgdXNhZ2VzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgcGxlYXNlCisjIGNvbnRhY3Qgd2l0aDogbmZ2bGFic0B0aWQuZXMKKyMjCisKKyNJdCBnZW5lcmF0ZXMgYSByZXBvcnQgZm9yIGRlYnVnZ2luZworCitESVJOQU1FPSQocmVhZGxpbmsgLWYgJHtCQVNIX1NPVVJDRVswXX0pCitESVJOQU1FPSQoZGlybmFtZSAkRElSTkFNRSApCitPVkNMSUVOVD0kRElSTkFNRS8uLi9vcGVudmltCisKKyNnZXQgc2NyZWVuIGxvZyBmaWxlcyBhdCB0aGUgYmVnaW5uaW5nCitlY2hvCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAibG9nIGZpbGVzIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8KK2VjaG8gImNhdCAkRElSTkFNRS8uLi9sb2dzL29wZW52aW0ubG9nKiIKK2NhdCAkRElSTkFNRS8uLi9sb2dzL29wZW52aW0ubG9nKgorZWNobworZWNobworCisjZ2V0IHZlcnNpb24KK2VjaG8KK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJ2ZXJzaW9uIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gImNhdCAkRElSTkFNRS8uLi9vcGVudmltZC5weXxncmVwIF5fX3ZlcnNpb25fXyIKK2NhdCAkRElSTkFNRS8uLi9vcGVudmltZC5weXxncmVwIF5fX3ZlcnNpb25fXworZWNobworZWNobworCisjZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZXMKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJDb25maWd1cmF0aW9uIGZpbGVzIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gImNhdCAkRElSTkFNRS8uLi9vcGVudmltZC5jZmciCitjYXQgJERJUk5BTUUvLi4vb3BlbnZpbWQuY2ZnCitlY2hvCisKKyNnZXQgbGlzdCBvZiBpdGVtcworZm9yIHZlcmJvc2UgaW4gIiIgIi12dnYiCitkbworICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICJPUEVOVklNJHZlcmJvc2UiCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiRPVkNMSUVOVCBjb25maWciCisgICRPVkNMSUVOVCBjb25maWcKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobyAiJE9WQ0xJRU5UIHRlbmFudC1saXN0ICR2ZXJib3NlIgorICAkT1ZDTElFTlQgdGVuYW50LWxpc3QgJHZlcmJvc2UKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobyAiJE9WQ0xJRU5UIGhvc3QtbGlzdCAkdmVyYm9zZSIKKyAgJE9WQ0xJRU5UIGhvc3QtbGlzdCAkdmVyYm9zZQorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIkT1ZDTElFTlQgbmV0LWxpc3QgJHZlcmJvc2UiCisgICRPVkNMSUVOVCBuZXQtbGlzdCAkdmVyYm9zZQorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIkT1ZDTElFTlQgcG9ydC1saXN0ICR2ZXJib3NlIgorICAkT1ZDTElFTlQgcG9ydC1saXN0ICR2ZXJib3NlCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiRPVkNMSUVOVCBmbGF2b3ItbGlzdCAkdmVyYm9zZSIKKyAgJE9WQ0xJRU5UIGZsYXZvci1saXN0ICR2ZXJib3NlCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiRPVkNMSUVOVCBpbWFnZS1saXN0ICR2ZXJib3NlIgorICAkT1ZDTElFTlQgaW1hZ2UtbGlzdCAkdmVyYm9zZQorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICBlY2hvICIkT1ZDTElFTlQgdm0tbGlzdCAkdmVyYm9zZSIKKyAgJE9WQ0xJRU5UIHZtLWxpc3QgJHZlcmJvc2UKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobworCitkb25lCitlY2hvCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlcnZpY2UtZmxvb2RsaWdodC5zaCBiL3NjcmlwdHMvc2VydmljZS1mbG9vZGxpZ2h0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MTMwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3NlcnZpY2UtZmxvb2RsaWdodC5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL2Jhc2gKKworIyMKKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbDs25pY2EgSW52ZXN0aWdhY2nDs24geSBEZXNhcnJvbGxvLCBTLkEuVS4KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygb3Blbm1hbm8KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyMgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4KKyMgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIEZvciB0aG9zZSB1c2FnZXMgbm90IGNvdmVyZWQgYnkgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCBwbGVhc2UKKyMgY29udGFjdCB3aXRoOiBuZnZsYWJzQHRpZC5lcworIyMKKworI2xhdW5jaCBmbG9vZGxpZ2h0IGluc2lkZSBhIHNjcmVlbi4gSXQgYXNzdW1lcyBzaGVsbCB2YXJpYWJsZSAkRkxPT0RMSUdIVF9QQVRICisjIGNvbnRhaW4gdGhlIGluc3RhbGxhdGlvbiBwYXRoCisKKworRElSTkFNRT0kKHJlYWRsaW5rIC1mICR7QkFTSF9TT1VSQ0VbMF19KQorRElSTkFNRT0kKGRpcm5hbWUgJERJUk5BTUUgKQorRElSX09NPSQoZGlybmFtZSAkRElSTkFNRSApCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAtZSAiVXNhZ2U6ICQwIHN0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXMiCisgICAgZWNobyAtZSAiICBMYXVuY2h8UmVtb3Zlc3xSZXN0YXJ0fEdldHN0YXR1cyBmbG9vZGxpZ2h0IG9uIGEgc2NyZWVuIgorICAgIGVjaG8gLWUgIiAgU2hlbGwgdmFyaWFibGUgRkxPT0RMSUdIVF9QQVRIIG11c3QgaW5kaWNhdGUgZmxvb2RsaWdodCBpbnN0YWxsYXRpb25wYXRoIgorfQorCitmdW5jdGlvbiBraWxsX3BpZCgpeworICAgICNzZW5kIFRFUk0gc2lnbmFsIGFuZCB3YWl0IDUgc2Vjb25kcyBhbmQgc2VuZCBLSUxMIHNpZ25hbCBpciBzdGlsbCBydW5uaW5nCisgICAgI1BBUkFNUzogJDE6IFBJRCBvZiBwcm9jZXNzIHRvIHRlcm1pbmF0ZQorICAgIGtpbGwgJDEgI3NlbmQgVEVSTSBzaWduYWwKKyAgICBXQUlUPTUKKyAgICB3aGlsZSBbICRXQUlUIC1ndCAwIF0gJiYgcHMgLW8gcGlkIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtcSAkMQorICAgIGRvCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgV0FJVD0kKChXQUlULTEpKQorICAgICAgICBbICRXQUlUIC1lcSAwIF0gJiYgZWNobyAtbiAic2VuZGluZyBTSUdLSUxMLi4uICAiICYmICBraWxsIC05ICQxICAja2lsbCB3aGVuIGNvdW50IHJlYWNoIDAKKyAgICBkb25lCisgICAgZWNobyAiZG9uZSIKKyAgIAorfQorCisjb2J0YWluIHBhcmFtZXRlcnMKKyNvbV9hY3Rpb249InN0YXJ0IiAgI3VuY29tZW50IHRvIGdldCBhIGRlZmF1bHQgYWN0aW9uCitmb3IgcGFyYW0gaW4gJCoKK2RvCisgICAgWyAiJHBhcmFtIiA9PSAic3RhcnQiIC1vICIkcGFyYW0iID09ICJzdG9wIiAgLW8gIiRwYXJhbSIgPT0gInJlc3RhcnQiIC1vICIkcGFyYW0iID09ICJzdGF0dXMiIF0gJiYgb21fYWN0aW9uPSRwYXJhbSAgJiYgY29udGludWUKKyAgICBbICIkcGFyYW0iID09ICJvcGVuZmxvdyIgLW8gIiRwYXJhbSIgPT0gImZsb3ciIC1vICIkcGFyYW0iID09ICJmbG9vZGxpZ2h0IiBdICYmIGNvbnRpbnVlCisgICAgWyAiJHBhcmFtIiA9PSAiLWgiIC1vICIkcGFyYW0iID09ICItLWhlbHAiIF0gJiYgdXNhZ2UgJiYgZXhpdCAwCisgICAgCisgICAgI2lmIG5vbmUgb2YgYWJvdmUsIHJlYWNoIHRoaXMgbGluZSBiZWNhdXNlIGEgcGFyYW0gaXMgaW5jb3JyZWN0CisgICAgZWNobyAiVW5rbm93biBwYXJhbSAnJHBhcmFtJyB0eXBlICQwIC0taGVscCIgPiYyCisgICAgZXhpdCAtMQorZG9uZQorCisjY2hlY2sgYWN0aW9uIGlzIHByb3ZpZGVkCitbIC16ICIkb21fYWN0aW9uIiBdICYmIHVzYWdlID4mMiAmJiBleGl0IC0xCisKKyAgICBvbV9jbWQ9ImZsb29kbGlnaHQuamFyIgorICAgIG9tX25hbWU9ImZsb29kbGlnaHQiCisgICAgCisgICAgI29idGFpbiBQSUQgb2YgcHJvZ3JhbQorICAgIGNvbXBvbmVudF9pZD1gcHMgLW8gcGlkLGNtZCAtVSAkVVNFUiAtdSAkVVNFUiB8IGdyZXAgLXYgZ3JlcCB8IGdyZXAgJHtvbV9jbWR9IHwgYXdrICd7cHJpbnQgJDF9J2AKKworICAgICNzdGF0dXMKKyAgICBpZiBbICIkb21fYWN0aW9uIiA9PSAic3RhdHVzIiBdCisgICAgdGhlbgorICAgICAgICBbIC1uICIkY29tcG9uZW50X2lkIiBdICYmIGVjaG8gIiAgICAkb21fbmFtZSBydW5uaW5nLCBwaWQgJGNvbXBvbmVudF9pZCIKKyAgICAgICAgWyAteiAiJGNvbXBvbmVudF9pZCIgXSAmJiBlY2hvICIgICAgJG9tX25hbWUgc3RvcHBlZCIKKyAgICBmaQorCisgICAgI3N0b3AKKyAgICBpZiBbICIkb21fYWN0aW9uIiA9PSAic3RvcCIgLW8gIiRvbV9hY3Rpb24iID09ICJyZXN0YXJ0IiBdCisgICAgdGhlbgorICAgICAgICAjdGVybWluYXRlcyBwcm9ncmFtCisgICAgICAgIFsgLW4gIiRjb21wb25lbnRfaWQiIF0gJiYgZWNobyAtbiAiICAgIHN0b3BwaW5nICRvbV9uYW1lIC4uLiAiICYmIGtpbGxfcGlkICRjb21wb25lbnRfaWQgCisgICAgICAgIGNvbXBvbmVudF9pZD0iIgorICAgICAgICAjdGVybWluYXRlcyBzY3JlZW4KKyAgICAgICAgaWYgc2NyZWVuIC13aXBlIHwgZ3JlcCAtRnEgLmZsb3cKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBzdHVmZiAiZXhpdFxuIgorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjc3RhcnQKKyAgICBpZiBbICIkb21fYWN0aW9uIiA9PSAic3RhcnQiIC1vICIkb21fYWN0aW9uIiA9PSAicmVzdGFydCIgXQorICAgIHRoZW4KKyAgICAgICAgW1sgLXogJEZMT09ETElHSFRfUEFUSCBdXSAmJiBlY2hvICJGTE9PRExJR0hUX1BBVEggc2hlbGwgdmFyaWFibGUgbXVzdCBpbmRpY2F0ZSBmbG9vZGxpZ2h0IGluc3RhbGxhdGlvbiBwYXRoIiA+JjIgJiYgZXhpdCAtMQorICAgICAgICAjY2FsY3VsYXRlcyBsb2cgZmlsZSBuYW1lCisgICAgICAgIGxvZ2ZpbGU9IiIKKyAgICAgICAgbWtkaXIgLXAgJERJUl9PTS9sb2dzICYmIGxvZ2ZpbGU9JERJUl9PTS9sb2dzL29wZW5mbG93LmxvZyB8fCBlY2hvICJjYW4gbm90IGNyZWF0ZSBsb2dzIGRpcmVjdG9yeSAgJERJUl9PTS9sb2dzIgorICAgICAgICAjY2hlY2sgYWxyZWFkeSBydW5uaW5nCisgICAgICAgIFsgLW4gIiRjb21wb25lbnRfaWQiIF0gJiYgZWNobyAiICAgICRvbV9uYW1lIGlzIGFscmVhZHkgcnVubmluZy4gU2tpcHBpbmciICYmIGNvbnRpbnVlCisgICAgICAgICNjcmVhdGUgc2NyZWVuIGlmIG5vdCBjcmVhdGVkCisgICAgICAgIGVjaG8gLW4gIiAgICBzdGFydGluZyAkb21fbmFtZSAuLi4gIgorICAgICAgICBpZiAhIHNjcmVlbiAtd2lwZSB8IGdyZXAgLUZxIC5mbG93CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHB1c2hkICR7RkxPT0RMSUdIVF9QQVRIfSA+IC9kZXYvbnVsbAorICAgICAgICAgICAgc2NyZWVuIC1kbVMgZmxvdyAgYmFzaAorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICAgcG9wZCA+IC9kZXYvbnVsbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvIC1uICIgdXNpbmcgZXhpc3Rpbmcgc2NyZWVuICdmbG93JyAuLi4gIgorICAgICAgICAgICAgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBsb2cgb2ZmCisgICAgICAgICAgICBzY3JlZW4gLVMgZmxvdyAtcCAwIC1YIHN0dWZmICJjZCAke0ZMT09ETElHSFRfUEFUSH1cbiIKKyAgICAgICAgICAgIHNsZWVwIDEKKyAgICAgICAgZmkKKyAgICAgICAgI21vdmUgb2xkIGxvZyBmaWxlIGluZGV4IG9uZSBudW1iZXIgdXAgYW5kIGxvZyBhZ2FpbiBpbiBpbmRleCAwCisgICAgICAgIGlmIFtbIC1uICRsb2dmaWxlIF1dCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGZvciBpbmRleCBpbiA4IDcgNiA1IDQgMyAyIDEKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgW1sgLWYgJHtsb2dmaWxlfS4ke2luZGV4fSBdXSAmJiBtdiAke2xvZ2ZpbGV9LiR7aW5kZXh9ICR7bG9nZmlsZX0uJCgoaW5kZXgrMSkpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBbWyAtZiAke2xvZ2ZpbGV9IF1dICYmIG12ICR7bG9nZmlsZX0gJHtsb2dmaWxlfS4xCisgICAgICAgICAgICBzY3JlZW4gLVMgZmxvdyAtcCAwIC1YIGxvZ2ZpbGUgJHtsb2dmaWxlfQorICAgICAgICAgICAgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBsb2cgb24KKyAgICAgICAgZmkKKyAgICAgICAgI2xhdW5jaCBjb21tYW5kIHRvIHNjcmVlbgorICAgICAgICBzY3JlZW4gLVMgZmxvdyAtcCAwIC1YIHN0dWZmICJqYXZhICAtRGxvZ2JhY2suY29uZmlndXJhdGlvbkZpbGU9JHtESVJOQU1FfS9mbG93LWxvZ2JhY2sueG1sIC1qYXIgLi90YXJnZXQvZmxvb2RsaWdodC5qYXIgLWNmICR7RElSTkFNRX0vZmxvdy5wcm9wZXJ0aWVzX3YwLjlcbiIKKyAgICAgICAgI2NoZWNrIGlmIGlzIHJ1bm5pbmcKKyAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgdGltZW91dD0xMjAgIzIgbWludXRlCisgICAgICAgIFtbIC16ICRsb2dmaWxlIF1dICYmIHRpbWVvdXQ9MjAKKyAgICAgICAgd2hpbGUgW1sgJHRpbWVvdXQgLWd0IDAgXV0KKyAgICAgICAgZG8KKyAgICAgICAgICAgI2NoZWNrIGlmIGlzIHJ1bm5pbmcKKyAgICAgICAgICAgI2VjaG8gdGltZW91dCAkdGltZW91dAorICAgICAgICAgICAjaWYgISAgcHMgLWYgLVUgJFVTRVIgLXUgJFVTRVIgfCBncmVwIC12IGdyZXAgfCBncmVwIC1xICR7b21fY21kfQorICAgICAgICAgICBsb2dfbGluZXM9MAorICAgICAgICAgICBbWyAtbiAkbG9nZmlsZSBdXSAmJiBsb2dfbGluZXM9YGhlYWQgJHtsb2dmaWxlfSB8IHdjIC1sYAorICAgICAgICAgICBjb21wb25lbnRfaWQ9YHBzIC1vIHBpZCxjbWQgLVUgJFVTRVIgLXUgJFVTRVIgfCBncmVwIC12IGdyZXAgfCBncmVwICR7b21fY21kfSB8IGF3ayAne3ByaW50ICQxfSdgCisgICAgICAgICAgIGlmIFtbIC16ICRjb21wb25lbnRfaWQgXV0KKyAgICAgICAgICAgdGhlbiAjcHJvY2VzcyBub3Qgc3RhcnRlZCBvciBmaW5pc2hlZAorICAgICAgICAgICAgICAgW1sgJGxvZ19saW5lcyAtZ2UgMiBdXSAmJiAgZWNobyAtbiAiRVJST1IsIGl0IGhhcyBleGl0ZWQuIiAmJiBicmVhaworICAgICAgICAgICAgICAgI3N0YXJ0ZWQgYmVjYXVzZSB3cml0dGVkIHNlcnZlcmFsIGxpbmVzIGF0IGxvZyBzbyByZXBvcnQgZXJyb3IKKyAgICAgICAgICAgZmkKKyAgICAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgZ3JlcCAtcSAiTGlzdGVuaW5nIGZvciBzd2l0Y2ggY29ubmVjdGlvbnMiICR7bG9nZmlsZX0gJiYgc2xlZXAgMSAmJiBicmVhaworICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgIHRpbWVvdXQ9JCgodGltZW91dCAtMSkpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgW1sgJHRpbWVvdXQgPT0gMCBdXSAKKyAgICAgICAgdGhlbiAKKyAgICAgICAgICAgZWNobyAtbiAidGltZW91dCEiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgZWNobyAtbiAicnVubmluZyBvbiAnc2NyZWVuIC14IGZsb3cnLiIKKyAgICAgICAgZmkKKyAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgZWNobyAiICBMb2dnaW5nIGF0ICcke2xvZ2ZpbGV9JyIgfHwgZWNobworICAgIGZpCisKKworCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2VydmljZS1vcGVuZGF5bGlnaHQuc2ggYi9zY3JpcHRzL3NlcnZpY2Utb3BlbmRheWxpZ2h0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjMDYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3NlcnZpY2Utb3BlbmRheWxpZ2h0LnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vYmFzaAorCisjIworIyBDb3B5cmlnaHQgMjAxNSBUZWxlZsOzbmljYSBJbnZlc3RpZ2FjacOzbiB5IERlc2Fycm9sbG8sIFMuQS5VLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVubWFubworIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjbGF1bmNoIG9wZW5kYXlsaWdodCBpbnNpZGUgYSBzY3JlZW4uIEl0IGFzc3VtZXMgc2hlbGwgdmFyaWFibGUgJE9QRU5EQVlMSUdIVF9QQVRICisjIGNvbnRhaW4gdGhlIGluc3RhbGxhdGlvbiBwYXRoCisKKworRElSTkFNRT0kKHJlYWRsaW5rIC1mICR7QkFTSF9TT1VSQ0VbMF19KQorRElSTkFNRT0kKGRpcm5hbWUgJERJUk5BTUUgKQorRElSX09NPSQoZGlybmFtZSAkRElSTkFNRSApCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAtZSAiVXNhZ2U6ICQwIHN0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXMiCisgICAgZWNobyAtZSAiICBMYXVuY2h8UmVtb3Zlc3xSZXN0YXJ0fEdldHN0YXR1cyBvcGVuZGF5bGlnaHQgb24gYSBzY3JlZW4iCisgICAgZWNobyAtZSAiICBTaGVsbCB2YXJpYWJsZSBPUEVOREFZRExJR0hUX1BBVEggbXVzdCBpbmRpY2F0ZSBvcGVuZGF5bGlnaHQgaW5zdGFsbGF0aW9uIHBhdGgiCit9CisKK2Z1bmN0aW9uIGtpbGxfcGlkKCl7CisgICAgI3NlbmQgVEVSTSBzaWduYWwgYW5kIHdhaXQgNSBzZWNvbmRzIGFuZCBzZW5kIEtJTEwgc2lnbmFsIGlyIHN0aWxsIHJ1bm5pbmcKKyAgICAjUEFSQU1TOiAkMTogUElEIG9mIHByb2Nlc3MgdG8gdGVybWluYXRlCisgICAga2lsbCAkMSAjc2VuZCBURVJNIHNpZ25hbAorICAgIFdBSVQ9NQorICAgIHdoaWxlIFsgJFdBSVQgLWd0IDAgXSAmJiBwcyAtbyBwaWQgLVUgJFVTRVIgLXUgJFVTRVIgfCBncmVwIC1xICQxCisgICAgZG8KKyAgICAgICAgc2xlZXAgMQorICAgICAgICBXQUlUPSQoKFdBSVQtMSkpCisgICAgICAgIFsgJFdBSVQgLWVxIDAgXSAmJiBlY2hvIC1uICJzZW5kaW5nIFNJR0tJTEwuLi4gICIgJiYgIGtpbGwgLTkgJDEgICNraWxsIHdoZW4gY291bnQgcmVhY2ggMAorICAgIGRvbmUKKyAgICBlY2hvICJkb25lIgorICAgCit9CisKKyNvYnRhaW4gcGFyYW1ldGVycworI29tX2FjdGlvbj0ic3RhcnQiICAjdW5jb21lbnQgdG8gZ2V0IGEgZGVmYXVsdCBhY3Rpb24KK2ZvciBwYXJhbSBpbiAkKgorZG8KKyAgICBbICIkcGFyYW0iID09ICJzdGFydCIgLW8gIiRwYXJhbSIgPT0gInN0b3AiICAtbyAiJHBhcmFtIiA9PSAicmVzdGFydCIgLW8gIiRwYXJhbSIgPT0gInN0YXR1cyIgXSAmJiBvbV9hY3Rpb249JHBhcmFtICAmJiBjb250aW51ZQorICAgIFsgIiRwYXJhbSIgPT0gIm9wZW5mbG93IiAtbyAiJHBhcmFtIiA9PSAiZmxvdyIgLW8gIiRwYXJhbSIgPT0gIm9wZW5kYXlsaWdodCIgXSAmJiBjb250aW51ZQorICAgIFsgIiRwYXJhbSIgPT0gIi1oIiAtbyAiJHBhcmFtIiA9PSAiLS1oZWxwIiBdICYmIHVzYWdlICYmIGV4aXQgMAorICAgIAorICAgICNpZiBub25lIG9mIGFib3ZlLCByZWFjaCB0aGlzIGxpbmUgYmVjYXVzZSBhIHBhcmFtIGlzIGluY29ycmVjdAorICAgIGVjaG8gIlVua25vd24gcGFyYW0gJyRwYXJhbScgdHlwZSAkMCAtLWhlbHAiID4mMgorICAgIGV4aXQgLTEKK2RvbmUKKworI2NoZWNrIGFjdGlvbiBpcyBwcm92aWRlZAorWyAteiAiJG9tX2FjdGlvbiIgXSAmJiB1c2FnZSA+JjIgJiYgZXhpdCAtMQorCisgICAgb21fY21kPSIuL2thcmFmIgorICAgIG9tX25hbWU9Im9wZW5kYXlsaWdodCIKKyAgICAKKyAgICAjb2J0YWluIFBJRCBvZiBwcm9ncmFtCisgICAgY29tcG9uZW50X2lkPWBwcyAtbyBwaWQsY21kIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAke29tX2NtZH0gfCBhd2sgJ3twcmludCAkMX0nYAorCisgICAgI3N0YXR1cworICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdGF0dXMiIF0KKyAgICB0aGVuCisgICAgICAgIFsgLW4gIiRjb21wb25lbnRfaWQiIF0gJiYgZWNobyAiICAgICRvbV9uYW1lIHJ1bm5pbmcsIHBpZCAkY29tcG9uZW50X2lkIgorICAgICAgICBbIC16ICIkY29tcG9uZW50X2lkIiBdICYmIGVjaG8gIiAgICAkb21fbmFtZSBzdG9wcGVkIgorICAgIGZpCisKKyAgICAjc3RvcAorICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdG9wIiAtbyAiJG9tX2FjdGlvbiIgPT0gInJlc3RhcnQiIF0KKyAgICB0aGVuCisgICAgICAgICN0ZXJtaW5hdGVzIHByb2dyYW0KKyAgICAgICAgWyAtbiAiJGNvbXBvbmVudF9pZCIgXSAmJiBlY2hvIC1uICIgICAgc3RvcHBpbmcgJG9tX25hbWUgLi4uICIgJiYga2lsbF9waWQgJGNvbXBvbmVudF9pZCAKKyAgICAgICAgY29tcG9uZW50X2lkPSIiCisgICAgICAgICN0ZXJtaW5hdGVzIHNjcmVlbgorICAgICAgICBpZiBzY3JlZW4gLXdpcGUgfCBncmVwIC1GcSAuZmxvdworICAgICAgICB0aGVuCisgICAgICAgICAgICBzY3JlZW4gLVMgZmxvdyAtcCAwIC1YIHN0dWZmICJleGl0XG4iCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgIGZpCisgICAgZmkKKworICAgICNzdGFydAorICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdGFydCIgLW8gIiRvbV9hY3Rpb24iID09ICJyZXN0YXJ0IiBdCisgICAgdGhlbgorICAgICAgICBbWyAteiAkT1BFTkRBWURMSUdIVF9QQVRIIF1dICYmIGVjaG8gIk9QRU5EQVlETElHSFRfUEFUSCBzaGVsbCB2YXJpYWJsZSBtdXN0IGluZGljYXRlIG9wZW5kYXlsaWdodCBpbnN0YWxsYXRpb24gcGF0aCIgPiYyICYmIGV4aXQgLTEKKyAgICAgICAgI2NhbGN1bGF0ZXMgbG9nIGZpbGUgbmFtZQorICAgICAgICBsb2dmaWxlPSIiCisgICAgICAgIG1rZGlyIC1wICRESVJfT00vbG9ncyAmJiBsb2dmaWxlPSRESVJfT00vbG9ncy9vcGVuZmxvdy5sb2cgJiYgbG9nZmlsZV9jb25zb2xlPSRESVJfT00vbG9ncy9vcGVuZmxvd19jb25zb2xlLmxvZyB8fCBlY2hvICJjYW4gbm90IGNyZWF0ZSBsb2dzIGRpcmVjdG9yeSAgJERJUl9PTS9sb2dzIgorICAgICAgICAjY2hlY2sgYWxyZWFkeSBydW5uaW5nCisgICAgICAgIFsgLW4gIiRjb21wb25lbnRfaWQiIF0gJiYgZWNobyAiICAgICRvbV9uYW1lIGlzIGFscmVhZHkgcnVubmluZy4gU2tpcHBpbmciICYmIGNvbnRpbnVlCisgICAgICAgICNjcmVhdGUgc2NyZWVuIGlmIG5vdCBjcmVhdGVkCisgICAgICAgIGVjaG8gLW4gIiAgICBzdGFydGluZyAkb21fbmFtZSAuLi4gIgorICAgICAgICBpZiAhIHNjcmVlbiAtd2lwZSB8IGdyZXAgLUZxIC5mbG93CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHB1c2hkICR7T1BFTkRBWURMSUdIVF9QQVRIfS9iaW4gPiAvZGV2L251bGwKKyAgICAgICAgICAgIHNjcmVlbiAtZG1TIGZsb3cgIGJhc2gKKyAgICAgICAgICAgIHNsZWVwIDEKKyAgICAgICAgICAgIHBvcGQgPiAvZGV2L251bGwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAtbiAiIHVzaW5nIGV4aXN0aW5nIHNjcmVlbiAnZmxvdycgLi4uICIKKyAgICAgICAgICAgIHNjcmVlbiAtUyBmbG93IC1wIDAgLVggbG9nIG9mZgorICAgICAgICAgICAgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBzdHVmZiAiY2QgJHtPUEVOREFZRExJR0hUX1BBVEh9L2JpblxuIgorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICBmaQorICAgICAgICAjbW92ZSBvbGQgbG9nIGZpbGUgaW5kZXggb25lIG51bWJlciB1cCBhbmQgbG9nIGFnYWluIGluIGluZGV4IDAKKyAgICAgICAgaWYgW1sgLW4gJGxvZ2ZpbGUgXV0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGluZGV4IGluIC45IC44IC43IC42IC41IC40IC4zIC4yIC4xICIiCisgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIHJtIC1mICR7bG9nZmlsZX0ke2luZGV4fQorICAgICAgICAgICAgICAgIGxuIC1zICR7T1BFTkRBWURMSUdIVF9QQVRIfS9kYXRhL2xvZy9rYXJhZi5sb2cke2luZGV4fSAke2xvZ2ZpbGV9JHtpbmRleH0KKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHJtIC1yZiAke2xvZ2ZpbGVfY29uc29sZX0KKyAgICAgICAgICAgIHNjcmVlbiAtUyBmbG93IC1wIDAgLVggbG9nZmlsZSAke2xvZ2ZpbGVfY29uc29sZX0KKyAgICAgICAgICAgIHNjcmVlbiAtUyBmbG93IC1wIDAgLVggbG9nIG9uCisgICAgICAgIGZpCisgICAgICAgICNsYXVuY2ggY29tbWFuZCB0byBzY3JlZW4KKyAgICAgICAgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBzdHVmZiAiJHtvbV9jbWR9XG4iCisgICAgICAgICNjaGVjayBpZiBpcyBydW5uaW5nCisgICAgICAgIFtbIC1uICRsb2dmaWxlIF1dICYmIHRpbWVvdXQ9MTIwICMyIG1pbnV0ZQorICAgICAgICBbWyAteiAkbG9nZmlsZSBdXSAmJiB0aW1lb3V0PTIwCisgICAgICAgIHdoaWxlIFtbICR0aW1lb3V0IC1ndCAwIF1dCisgICAgICAgIGRvCisgICAgICAgICAgICNjaGVjayBpZiBpcyBydW5uaW5nCisgICAgICAgICAgICNlY2hvIHRpbWVvdXQgJHRpbWVvdXQKKyAgICAgICAgICAgI2lmICEgIHBzIC1mIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAtcSAke29tX2NtZH0KKyAgICAgICAgICAgbG9nX2xpbmVzPTAKKyAgICAgICAgICAgW1sgLW4gJGxvZ2ZpbGVfY29uc29sZSBdXSAmJiBsb2dfbGluZXM9YGhlYWQgJHtsb2dmaWxlX2NvbnNvbGV9IHwgd2MgLWxgCisgICAgICAgICAgIGNvbXBvbmVudF9pZD1gcHMgLW8gcGlkLGNtZCAtVSAkVVNFUiAtdSAkVVNFUiB8IGdyZXAgLXYgZ3JlcCB8IGdyZXAgJHtvbV9jbWR9IHwgYXdrICd7cHJpbnQgJDF9J2AKKyAgICAgICAgICAgaWYgW1sgLXogJGNvbXBvbmVudF9pZCBdXQorICAgICAgICAgICB0aGVuICNwcm9jZXNzIG5vdCBzdGFydGVkIG9yIGZpbmlzaGVkCisgICAgICAgICAgICAgICBbWyAkbG9nX2xpbmVzIC1nZSAyIF1dICYmICBlY2hvIC1uICJFUlJPUiwgaXQgaGFzIGV4aXRlZC4iICYmIGJyZWFrCisgICAgICAgICAgICAgICAjc3RhcnRlZCBiZWNhdXNlIHdyaXR0ZWQgc2VydmVyYWwgbGluZXMgYXQgbG9nIHNvIHJlcG9ydCBlcnJvcgorICAgICAgICAgICBmaQorICAgICAgICAgICBbWyAtbiAkbG9nZmlsZV9jb25zb2xlIF1dICYmIGdyZXAgLXEgIkxpc3RlbmluZyBvbiBwb3J0IiAke2xvZ2ZpbGVfY29uc29sZX0gJiYgc2xlZXAgMSAmJiBicmVhaworICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgIHRpbWVvdXQ9JCgodGltZW91dCAtMSkpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgW1sgLW4gJGxvZ2ZpbGVfY29uc29sZSBdXSAmJiBbWyAkdGltZW91dCA9PSAwIF1dIAorICAgICAgICB0aGVuIAorICAgICAgICAgICBlY2hvIC1uICJ0aW1lb3V0ISIKKyAgICAgICAgZWxzZQorICAgICAgICAgICBlY2hvIC1uICJydW5uaW5nIG9uICdzY3JlZW4gLXggZmxvdycuIgorICAgICAgICBmaQorICAgICAgICBbWyAtbiAkbG9nZmlsZSBdXSAmJiBlY2hvICIgIExvZ2dpbmcgYXQgJyR7bG9nZmlsZX0nIiB8fCBlY2hvCisgICAgZmkKKworCisKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zZXJ2aWNlLW9wZW52aW0uc2ggYi9zY3JpcHRzL3NlcnZpY2Utb3BlbnZpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYWE5YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9zZXJ2aWNlLW9wZW52aW0uc2gKQEAgLTAsMCArMSwxODAgQEAKKyMhL2Jpbi9iYXNoCisKKyMjCisjIENvcHlyaWdodCAyMDE1IFRlbGVmw7NuaWNhIEludmVzdGlnYWNpw7NuIHkgRGVzYXJyb2xsbywgUy5BLlUuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG9wZW5tYW5vCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisjIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCisjIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBGb3IgdGhvc2UgdXNhZ2VzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgcGxlYXNlCisjIGNvbnRhY3Qgd2l0aDogbmZ2bGFic0B0aWQuZXMKKyMjCisKKyNsYXVuY2ggb3BlbnZpbSAoYW5kciBmbG9vZGxpZ2h0KSBpbnNpZGUgYSBzY3JlZW4uIAorI0l0IGFzc3VtZXMgYSByZWxhdGl2ZSBwYXRoICcuLicgZm9yIG9wZW52aW0gCisjZm9yIGZsb29kbGlnaHQsIHRoZSB2YXJpYWJsZSBGTE9PRExJR0hUX1BBVEggaW5kaWNhdGVzIHRoZSBpbnN0YWxsYXRpb24gcGF0aAorCisKK0RJUk5BTUU9JChyZWFkbGluayAtZiAke0JBU0hfU09VUkNFWzBdfSkKK0RJUk5BTUU9JChkaXJuYW1lICRESVJOQU1FICkKK0RJUl9PTT0kKGRpcm5hbWUgJERJUk5BTUUgKQorI1tbIC16ICRGTE9PRExJR0hUX1BBVEggXV0gJiYgRkxPT0RMSUdIVF9QQVRIPSQoZGlybmFtZSAke0RJUl9PTX0pL2Zsb29kbGlnaHQtMS4xCisjW1sgLXogJEZMT09ETElHSFRfUEFUSCBdXSAmJiBGTE9PRExJR0hUX1BBVEg9JChkaXJuYW1lICR7RElSX09NfSkvZmxvb2RsaWdodC0wLjkwCisKK2Z1bmN0aW9uIHVzYWdlKCl7CisgICAgZWNobyAtZSAiVXNhZ2U6ICQwIFtvcGVudmltL3ZpbV0gW2Zsb29kbGlnaHQvZmxvd10gc3RhcnR8c3RvcHxyZXN0YXJ0fHN0YXR1cyIKKyAgICBlY2hvIC1lICIgIExhdW5jaHxSZW1vdmVzfFJlc3RhcnR8R2V0c3RhdHVzIG9wZW52aW0gKGJ5IGRlZmF1bHQpIG9yL2FuZCBmbG9vZGxpZ2h0IG9uIGEgc2NyZWVuIgorICAgIGVjaG8gLWUgIiAgRm9yIGZsb29kbGlnaHQgdmFyaWFibGUgRkxPT0RMSUdIVF9QQVRIIG11c3QgaW5kaWNhdGUgaW5zdGFsbGF0aW9uIHBhdGgiCit9CisKK2Z1bmN0aW9uIGtpbGxfcGlkKCl7CisgICAgI3NlbmQgVEVSTSBzaWduYWwgYW5kIHdhaXQgNSBzZWNvbmRzIGFuZCBzZW5kIEtJTEwgc2lnbmFsIGlyIHN0aWxsIHJ1bm5pbmcKKyAgICAjUEFSQU1TOiAkMTogUElEIG9mIHByb2Nlc3MgdG8gdGVybWluYXRlCisgICAga2lsbCAkMSAjc2VuZCBURVJNIHNpZ25hbAorICAgIFdBSVQ9NQorICAgIHdoaWxlIFsgJFdBSVQgLWd0IDAgXSAmJiBwcyAtbyBwaWQgLVUgJFVTRVIgLXUgJFVTRVIgfCBncmVwIC1xICQxCisgICAgZG8KKyAgICAgICAgc2xlZXAgMQorICAgICAgICBXQUlUPSQoKFdBSVQtMSkpCisgICAgICAgIFsgJFdBSVQgLWVxIDAgXSAmJiBlY2hvIC1uICJzZW5kaW5nIFNJR0tJTEwuLi4gICIgJiYgIGtpbGwgLTkgJDEgICNraWxsIHdoZW4gY291bnQgcmVhY2ggMAorICAgIGRvbmUKKyAgICBlY2hvICJkb25lIgorICAgCit9CisKKyNvYnRhaW4gcGFyYW1ldGVycworb21fbGlzdD0iIgorI29tX2FjdGlvbj0ic3RhcnQiICAjdW5jb21lbnQgdG8gZ2V0IGEgZGVmYXVsdCBhY3Rpb24KK2ZvciBwYXJhbSBpbiAkKgorZG8KKyAgICBbICIkcGFyYW0iID09ICJzdGFydCIgLW8gIiRwYXJhbSIgPT0gInN0b3AiICAtbyAiJHBhcmFtIiA9PSAicmVzdGFydCIgLW8gIiRwYXJhbSIgPT0gInN0YXR1cyIgXSAmJiBvbV9hY3Rpb249JHBhcmFtICAmJiBjb250aW51ZQorICAgIFsgIiRwYXJhbSIgPT0gIm9wZW52aW0iIC1vICIkcGFyYW0iID09ICJ2aW0iICBdICAgICYmIG9tX2xpc3Q9IiRvbV9saXN0IHZpbSIgICAgICAgICAgICAgICYmIGNvbnRpbnVlCisgICAgWyAiJHBhcmFtIiA9PSAib3Blbm1hbm8iIC1vICIkcGFyYW0iID09ICJtYW5vIiBdICAgJiYgY29udGludWUgI2FsbG93IGFuZCBpbmdvcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgWyAiJHBhcmFtIiA9PSAib3BlbmZsb3ciIC1vICIkcGFyYW0iID09ICJmbG93IiAtbyAiJHBhcmFtIiA9PSAiZmxvb2RsaWdodCIgXSAmJiBvbV9saXN0PSJmbG93ICRvbV9saXN0IiAmJiBjb250aW51ZQorICAgIFsgIiRwYXJhbSIgPT0gIi1oIiAtbyAiJHBhcmFtIiA9PSAiLS1oZWxwIiBdICYmIHVzYWdlICYmIGV4aXQgMAorICAgICNub3RlIGZsb3cgdGhhdCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50LCBiZWNhdXNlIG9wZW52aW0gcmVsYXkgb24gdGhpcworICAgIAorICAgICNpZiBub25lIG9mIGFib3ZlLCByZWFjaCB0aGlzIGxpbmUgYmVjYXVzZSBhIHBhcmFtIGlzIGluY29ycmVjdAorICAgIGVjaG8gIlVua25vd24gcGFyYW0gJyRwYXJhbScgdHlwZSAkMCAtLWhlbHAiID4mMgorICAgIGV4aXQgLTEKK2RvbmUKKworI2NoZWNrIGFjdGlvbiBpcyBwcm92aWRlZAorWyAteiAiJG9tX2FjdGlvbiIgXSAmJiB1c2FnZSA+JjIgJiYgZXhpdCAtMQorCisjaWYgbm8gY29tcG9uZW5ldHMgc3VwcGxpZWQgYXNzdW1lIGFsbAorWyAteiAiJG9tX2xpc3QiIF0gJiYgb21fbGlzdD0idmltIgorCitmb3Igb21fY29tcG9uZW50IGluICRvbV9saXN0CitkbworICAgIFsgIiR7b21fY29tcG9uZW50fSIgPT0gImZsb3ciIF0gJiYgb21fY21kPSJmbG9vZGxpZ2h0LmphciIgJiYgb21fbmFtZT0iZmxvb2RsaWdodCIgJiYgb21fZGlyPSRGTE9PRExJR0hUX1BBVEgKKyAgICBbICIke29tX2NvbXBvbmVudH0iID09ICJ2aW0iIF0gICYmIG9tX2NtZD0ib3BlbnZpbWQucHkiICAgICYmIG9tX25hbWU9Im9wZW52aW0gICAiICYmIG9tX2Rpcj0ke0RJUl9PTX0KKyAgICAjb2J0YWluIFBJRCBvZiBwcm9ncmFtCisgICAgY29tcG9uZW50X2lkPWBwcyAtbyBwaWQsY21kIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAke29tX2NtZH0gfCBhd2sgJ3twcmludCAkMX0nYAorCisgICAgI3N0YXR1cworICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdGF0dXMiIF0KKyAgICB0aGVuCisgICAgICAgIFsgLW4gIiRjb21wb25lbnRfaWQiIF0gJiYgZWNobyAiICAgICRvbV9uYW1lIHJ1bm5pbmcsIHBpZCAkY29tcG9uZW50X2lkIgorICAgICAgICBbIC16ICIkY29tcG9uZW50X2lkIiBdICYmIGVjaG8gIiAgICAkb21fbmFtZSBzdG9wcGVkIgorICAgIGZpCisKKyAgICAjc3RvcAorICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdG9wIiAtbyAiJG9tX2FjdGlvbiIgPT0gInJlc3RhcnQiIF0KKyAgICB0aGVuCisgICAgICAgICN0ZXJtaW5hdGVzIHByb2dyYW0KKyAgICAgICAgWyAtbiAiJGNvbXBvbmVudF9pZCIgXSAmJiBlY2hvIC1uICIgICAgc3RvcHBpbmcgJG9tX25hbWUgLi4uICIgJiYga2lsbF9waWQgJGNvbXBvbmVudF9pZCAKKyAgICAgICAgY29tcG9uZW50X2lkPSIiCisgICAgICAgICN0ZXJtaW5hdGVzIHNjcmVlbgorICAgICAgICBpZiBzY3JlZW4gLXdpcGUgfCBncmVwIC1GcSAuJG9tX2NvbXBvbmVudAorICAgICAgICB0aGVuCisgICAgICAgICAgICBzY3JlZW4gLVMgJG9tX2NvbXBvbmVudCAtcCAwIC1YIHN0dWZmICJleGl0XG4iCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgIGZpCisgICAgZmkKKworICAgICNzdGFydAorICAgIGlmIFsgIiRvbV9hY3Rpb24iID09ICJzdGFydCIgLW8gIiRvbV9hY3Rpb24iID09ICJyZXN0YXJ0IiBdCisgICAgdGhlbgorICAgICAgICBbWyAteiAkRkxPT0RMSUdIVF9QQVRIIF1dICYmIFtbICRvbV9jb21wb25lbnQgPT0gZmxvdyBdXSAmJiAKKyAgICAgICAgICAgIGVjaG8gIkZMT09ETElHSFRfUEFUSCBzaGVsbCB2YXJpYWJsZSBtdXN0IGluZGljYXRlIGZsb29kbGlnaHQgaW5zdGFsbGF0aW9uIHBhdGgiID4mMiAmJiBleGl0IC0xCisgICAgICAgICNjYWxjdWxhdGVzIGxvZyBmaWxlIG5hbWUKKyAgICAgICAgbG9nZmlsZT0iIgorICAgICAgICBta2RpciAtcCAkRElSX09NL2xvZ3MgJiYgbG9nZmlsZT0kRElSX09NL2xvZ3Mvb3BlbiR7b21fY29tcG9uZW50fS5sb2cgfHwgZWNobyAiY2FuIG5vdCBjcmVhdGUgbG9ncyBkaXJlY3RvcnkgICRESVJfT00vbG9ncyIKKyAgICAgICAgI2NoZWNrIGFscmVhZHkgcnVubmluZworICAgICAgICBbIC1uICIkY29tcG9uZW50X2lkIiBdICYmIGVjaG8gIiAgICAkb21fbmFtZSBpcyBhbHJlYWR5IHJ1bm5pbmcuIFNraXBwaW5nIiAmJiBjb250aW51ZQorICAgICAgICAjY3JlYXRlIHNjcmVlbiBpZiBub3QgY3JlYXRlZAorICAgICAgICBlY2hvIC1uICIgICAgc3RhcnRpbmcgJG9tX25hbWUgLi4uICIKKyAgICAgICAgaWYgISBzY3JlZW4gLXdpcGUgfCBncmVwIC1GcSAuJHtvbV9jb21wb25lbnR9CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHB1c2hkICR7b21fZGlyfSA+IC9kZXYvbnVsbAorICAgICAgICAgICAgc2NyZWVuIC1kbVMgJHtvbV9jb21wb25lbnR9ICBiYXNoCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICBwb3BkID4gL2Rldi9udWxsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gLW4gIiB1c2luZyBleGlzdGluZyBzY3JlZW4gJyR7b21fY29tcG9uZW50fScgLi4uICIKKyAgICAgICAgICAgIHNjcmVlbiAtUyAke29tX2NvbXBvbmVudH0gLXAgMCAtWCBsb2cgb2ZmCisgICAgICAgICAgICBzY3JlZW4gLVMgJHtvbV9jb21wb25lbnR9IC1wIDAgLVggc3R1ZmYgImNkICR7b21fZGlyfVxuIgorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICBmaQorICAgICAgICAjbW92ZSBvbGQgbG9nIGZpbGUgaW5kZXggb25lIG51bWJlciB1cCBhbmQgbG9nIGFnYWluIGluIGluZGV4IDAKKyAgICAgICAgaWYgW1sgLW4gJGxvZ2ZpbGUgXV0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGluZGV4IGluIDggNyA2IDUgNCAzIDIgMQorICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBbWyAtZiAke2xvZ2ZpbGV9LiR7aW5kZXh9IF1dICYmIG12ICR7bG9nZmlsZX0uJHtpbmRleH0gJHtsb2dmaWxlfS4kKChpbmRleCsxKSkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIFtbIC1mICR7bG9nZmlsZX0gXV0gJiYgbXYgJHtsb2dmaWxlfSAke2xvZ2ZpbGV9LjEKKyAgICAgICAgICAgIHNjcmVlbiAtUyAke29tX2NvbXBvbmVudH0gLXAgMCAtWCBsb2dmaWxlICR7bG9nZmlsZX0KKyAgICAgICAgICAgIHNjcmVlbiAtUyAke29tX2NvbXBvbmVudH0gLXAgMCAtWCBsb2cgb24KKyAgICAgICAgZmkKKyAgICAgICAgI2xhdW5jaCBjb21tYW5kIHRvIHNjcmVlbgorICAgICAgICAjWyAiJHtvbV9jb21wb25lbnR9IiAhPSAiZmxvdyIgXSAmJiBzY3JlZW4gLVMgJHtvbV9jb21wb25lbnR9IC1wIDAgLVggc3R1ZmYgImNkICR7RElSX09NfS9vcGVuJHtvbV9jb21wb25lbnR9XG4iICYmIHNsZWVwIDEKKyAgICAgICAgWyAiJHtvbV9jb21wb25lbnR9IiA9PSAiZmxvdyIgXSAmJiBzY3JlZW4gLVMgZmxvdyAtcCAwIC1YIHN0dWZmICJqYXZhICAtRGxvZ2JhY2suY29uZmlndXJhdGlvbkZpbGU9JHtESVJOQU1FfS9mbG93LWxvZ2JhY2sueG1sIC1qYXIgLi90YXJnZXQvZmxvb2RsaWdodC5qYXIgLWNmICR7RElSTkFNRX0vZmxvdy5wcm9wZXJ0aWVzX3YwLjlcbiIKKyAgICAgICAgI1sgIiR7b21fY29tcG9uZW50fSIgPT0gImZsb3ciIF0gJiYgc2NyZWVuIC1TIGZsb3cgLXAgMCAtWCBzdHVmZiAiamF2YSAgLURsb2diYWNrLmNvbmZpZ3VyYXRpb25GaWxlPSR7RElSTkFNRX0vZmxvdy1sb2diYWNrLnhtbCAtamFyIC4vdGFyZ2V0L2Zsb29kbGlnaHQuamFyIC1jZiAke0RJUk5BTUV9L2Zsb3cucHJvcGVydGllc192MS4xXG4iICYmIHNsZWVwIDUKKyAgICAgICAgWyAiJHtvbV9jb21wb25lbnR9IiAhPSAiZmxvdyIgXSAmJiBzY3JlZW4gLVMgJHtvbV9jb21wb25lbnR9IC1wIDAgLVggc3R1ZmYgIi4vJHtvbV9jbWR9XG4iCisgICAgICAgICNjaGVjayBpZiBpcyBydW5uaW5nCisgICAgICAgIFtbIC1uICRsb2dmaWxlIF1dICYmIHRpbWVvdXQ9MTIwICMyIG1pbnV0ZQorICAgICAgICBbWyAteiAkbG9nZmlsZSBdXSAmJiB0aW1lb3V0PTIwCisgICAgICAgIHdoaWxlIFtbICR0aW1lb3V0IC1ndCAwIF1dCisgICAgICAgIGRvCisgICAgICAgICAgICNjaGVjayBpZiBpcyBydW5uaW5nCisgICAgICAgICAgICNlY2hvIHRpbWVvdXQgJHRpbWVvdXQKKyAgICAgICAgICAgI2lmICEgIHBzIC1mIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAtcSAke29tX2NtZH0KKyAgICAgICAgICAgbG9nX2xpbmVzPTAKKyAgICAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgbG9nX2xpbmVzPWBoZWFkICR7bG9nZmlsZX0gfCB3YyAtbGAKKyAgICAgICAgICAgY29tcG9uZW50X2lkPWBwcyAtbyBwaWQsY21kIC1VICRVU0VSIC11ICRVU0VSIHwgZ3JlcCAtdiBncmVwIHwgZ3JlcCAke29tX2NtZH0gfCBhd2sgJ3twcmludCAkMX0nYAorICAgICAgICAgICBpZiBbWyAteiAkY29tcG9uZW50X2lkIF1dCisgICAgICAgICAgIHRoZW4gI3Byb2Nlc3Mgbm90IHN0YXJ0ZWQgb3IgZmluaXNoZWQKKyAgICAgICAgICAgICAgIFtbICRsb2dfbGluZXMgLWdlIDIgXV0gJiYgIGVjaG8gLW4gIkVSUk9SLCBpdCBoYXMgZXhpdGVkLiIgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICNzdGFydGVkIGJlY2F1c2Ugd3JpdHRlZCBzZXJ2ZXJhbCBsaW5lcyBhdCBsb2cgc28gcmVwb3J0IGVycm9yCisgICAgICAgICAgIGZpCisgICAgICAgICAgIFtbIC1uICRsb2dmaWxlIF1dICYmIFtbICR7b21fY29tcG9uZW50fSA9PSBmbG93IF1dICYmIGdyZXAgLXEgIkxpc3RlbmluZyBmb3Igc3dpdGNoIGNvbm5lY3Rpb25zIiAke2xvZ2ZpbGV9ICYmIHNsZWVwIDEgJiYgYnJlYWsKKyAgICAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgW1sgJHtvbV9jb21wb25lbnR9ICE9IGZsb3cgXV0gJiYgZ3JlcCAtcSAib3BlbiR7b21fY29tcG9uZW50fWQgcmVhZHkiICR7bG9nZmlsZX0gJiYgYnJlYWsKKyAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICB0aW1lb3V0PSQoKHRpbWVvdXQgLTEpKQorICAgICAgICBkb25lCisgICAgICAgIGlmIFtbIC1uICRsb2dmaWxlIF1dICYmIFtbICR0aW1lb3V0ID09IDAgXV0gCisgICAgICAgIHRoZW4gCisgICAgICAgICAgIGVjaG8gLW4gInRpbWVvdXQhIgorICAgICAgICBlbHNlCisgICAgICAgICAgIGVjaG8gLW4gInJ1bm5pbmcgb24gJ3NjcmVlbiAteCAke29tX2NvbXBvbmVudH0nLiIKKyAgICAgICAgZmkKKyAgICAgICAgW1sgLW4gJGxvZ2ZpbGUgXV0gJiYgZWNobyAiICBMb2dnaW5nIGF0ICcke2xvZ2ZpbGV9JyIgfHwgZWNobworICAgIGZpCitkb25lCisKKworCisK