ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggNmM1MDYxNS4uZmZhMmY5YSAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNDcgKzEsMTgxIEBACiAKLUxpYnBuZyAxLjAuMjYgLSBNYXkgMTUsIDIwMDcKK0xpYnBuZyAxLjAuMjdyYzEgLSBKdWx5IDMxLCAyMDA3CiAKLVRoaXMgaXMgYSBwdWJsaWMgcmVsZWFzZSBvZiBsaWJwbmcsIGludGVuZGVkIGZvciB1c2UgaW4gcHJvZHVjdGlvbiBjb2Rlcy4KK1RoaXMgaXMgbm90IGludGVuZGVkIHRvIGJlIGEgcHVibGljIHJlbGVhc2UuICBJdCB3aWxsIGJlIHJlcGxhY2VkCit3aXRoaW4gYSBmZXcgd2Vla3MgYnkgYSBwdWJsaWMgdmVyc2lvbiBvciBieSBhbm90aGVyIHRlc3QgdmVyc2lvbi4KIAogRmlsZXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZDoKIAogU291cmNlIGZpbGVzIHdpdGggTEYgbGluZSBlbmRpbmdzIChmb3IgVW5peC9MaW51eCkgYW5kIHdpdGggYQogImNvbmZpZ3VyZSIgc2NyaXB0CiAKLSAgIGxpYnBuZy0xLjAuMjYudGFyLmd6Ci0gICBsaWJwbmctMS4wLjI2LnRhci5iejIKKyAgIGxpYnBuZy0xLjAuMjdyYzEudGFyLmd6CisgICBsaWJwbmctMS4wLjI3cmMxLnRhci5iejIKIAogU291cmNlIGZpbGVzIHdpdGggTEYgbGluZSBlbmRpbmdzIChmb3IgVW5peC9MaW51eCkgd2l0aG91dCB0aGUKICJjb25maWd1cmUiIHNjcmlwdAogCi0gICBsaWJwbmctMS4wLjI2LW5vLWNvbmZpZy50YXIuZ3oKLSAgIGxpYnBuZy0xLjAuMjYtbm8tY29uZmlnLnRhci5iejIKKyAgIGxpYnBuZy0xLjAuMjdyYzEtbm8tY29uZmlnLnRhci5negorICAgbGlicG5nLTEuMC4yN3JjMS1uby1jb25maWcudGFyLmJ6MgogCiBTb3VyY2UgZmlsZXMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncyAoZm9yIFdpbmRvd3MpLCB3aXRob3V0IHRoZQogImNvbmZpZ3VyZSIgc2NyaXB0CiAKLSAgIGxwbmcxMDI2LnppcAotICAgbHBuZzEwMjYudGFyLmJ6MgorICAgbHAxMDI3cjAxLnppcAorICAgbHAxMDI3cjAxLnRhci5iejIKIAogUHJvamVjdCBmaWxlcwogCi0gICBsaWJwbmctMS4wLjI2LXByb2plY3QtbmV0d2FyZS56aXAKLSAgIGxpYnBuZy0xLjAuMjYtcHJvamVjdC13aW5jZS56aXAKKyAgIGxpYnBuZy0xLjAuMjdyYzEtcHJvamVjdC1uZXR3YXJlLnppcAorICAgbGlicG5nLTEuMC4yN3JjMS1wcm9qZWN0LXdpbmNlLnppcAogCiBPdGhlciBpbmZvcm1hdGlvbjoKIAotICAgbGlicG5nLTEuMC4yNi1SRUFETUUudHh0Ci0gICBsaWJwbmctMS4wLjI2LUtOT1dOQlVHUy50eHQKLSAgIGxpYnBuZy0xLjAuMjYtTElDRU5TRS50eHQKLSAgIGxpYnBuZy0xLjAuMjYtWTJLLWNvbXBsaWFuY2UudHh0CisgICBsaWJwbmctMS4wLjI3cmMxLVJFQURNRS50eHQKKyAgIGxpYnBuZy0xLjAuMjdyYzEtS05PV05CVUdTLnR4dAorICAgbGlicG5nLTEuMC4yN3JjMS1MSUNFTlNFLnR4dAorICAgbGlicG5nLTEuMC4yN3JjMS1ZMkstY29tcGxpYW5jZS50eHQKIAotQ2hhbmdlcyBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSAoMS4wLjI1KToKK0NoYW5nZXMgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UgKDEuMC4yNik6CiAKLXZlcnNpb24gMS4wLjI2IFtNYXkgMTUsIDIwMDddCit2ZXJzaW9uIDEuMi4xOWJldGExIFtNYXkgMTgsIDIwMDddCisgIENoYW5nZWQgImNvbnN0IHN0YXRpYyIgdG8gInN0YXRpYyBQTkdfQ09OU1QiIGV2ZXJ5d2hlcmUsIG1vc3RseSB1bmRvaW5nCisgICAgY2hhbmdlIG9mIGxpYnBuZy0xLjIuMTdiZXRhMi4gIENoYW5nZWQgb3RoZXIgImNvbnN0IiB0byAiUE5HX0NPTlNUIgogCi0gIFJldmVydGVkIHRoZSByZWNlbnQgY2hhbmdlIHRvIHN5bWJvbC1oYW5kbGluZyBpbiBjb25maWd1cmUgc2NyaXB0Cit2ZXJzaW9uIDEuMi4xOWJldGEyIFtNYXkgMTgsIDIwMDddCisgIEZpeGVkIHBuZ19kb19leHBhbmQoKSB0byBvbmx5IHVzZSB0aGUgYXBwcm9wcmlhdGUgYml0cyBvZiB0Uk5TIHZhbHVlLgorCit2ZXJzaW9uIDEuMi4xOWJldGEzIFtNYXkgMjAsIDIwMDddCisgIEFkZCBzb21lICJwbmdfYnl0ZSIgdHlwZWNhc3RzIGluIHBuZ19jaGVja19rZXl3b3JkKCkuCisgIFdyaXRlIG5ld19rZXkgaW5zdGVhZCBvZiBrZXkgaW4gelRYdCBjaHVuay4KKwordmVyc2lvbiAxLjIuMTliZXRhNCBbTWF5IDIxLCAyMDA3XQorICBBZGQgcG5nX3NucHJpbnRmKCkgZnVuY3Rpb24gYW5kIHVzZSBpdCBpbiBwbGFjZSBvZiBzcHJpbnQoKSBmb3IgaW1wcm92ZWQKKyAgICBkZWZlbnNlIGFnYWluc3QgYnVmZmVyIG92ZXJmbG93cy4KKwordmVyc2lvbiAxLjIuMTliZXRhNSBbTWF5IDIxLCAyMDA3XQorICBGaXhlZCBwbmdfaGFuZGxlX3RSTlMoKSB0byBvbmx5IHVzZSB0aGUgYXBwcm9wcmlhdGUgYml0cyBvZiB0Uk5TIHZhbHVlLgorICBDaGFuZ2VkIGhhbmRsaW5nIG9mIG1vcmUgdW51c2VkIHBhcmFtZXRlcnMsIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgorICBSZW1vdmVkIHNvbWUgUE5HX0NPTlNUIGluIHBuZ3d1dGlsLmMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTYgW01heSAyMiwgMjAwN10KKyAgQWRkZWQgc29tZSAjaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRCB3aGVyZSBuZWVkZWQgaW4gcG5ndmNyZC5jCisgIEFkZGVkIGEgc3BlY2lhbCAiX01TQ19WRVIiIGNhc2UgdGhhdCBkZWZpbmVzIHBuZ19zbnByaW50ZiB0byBfc25wcmludGYKKwordmVyc2lvbiAxLjIuMTliZXRhNyBbTWF5IDIyLCAyMDA3XQorICBTcXVlbGNoZWQgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSBpbiBwbmdnY2NyZC5jIGFuZCBhZGRlZCBhbgorICAgICNpZmRlZiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEIGJsb2NrIGFyb3VuZCB0aGUgZGVjbGFyYXRpb25zIHRoYXQgY2F1c2VkCisgICAgdGhlIHdhcm5pbmdzIHRoYXQgcG5nX3NxdWVsY2hfd2FybmluZ3Mgd2FzIHNxdWVsY2hpbmcuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTggW01heSAyMiwgMjAwN10KKyAgUmVtb3ZlZCBfX01NWF9fIGZyb20gdGVzdCBpbiBwbmdjb25mLmguCisKK3ZlcnNpb24gMS4yLjE5YmV0YTkgW01heSAyMywgMjAwN10KKyAgTWFkZSBwbmdfc3F1ZWxjaF93YXJuaW5ncygpIGF2YWlsYWJsZSB2aWEgUE5HX1NRVUVMQ0hfV0FSTklOR1MgbWFjcm8uCisgIFJldmlzZWQgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSBzbyBpdCBtaWdodCB3b3JrLgorICBVcGRhdGVkIG1ha2VmaWxlLnNnY2MgYW5kIG1ha2VmaWxlLnNvbGFyaXM7IGFkZGVkIG1ha2VmaWxlLnNvbGFyaXMteDg2LgorCit2ZXJzaW9uIDEuMi4xOWJldGExMCBbTWF5IDI0LCAyMDA3XQorICBSZXNxdWVsY2hlZCBwbmdfc3F1ZWxjaF93YXJuaW5ncygpLCB1c2UgIl9fYXR0cmlidXRlX18oKHVzZWQpKSIgaW5zdGVhZC4KKwordmVyc2lvbiAxLjIuMTliZXRhMTEgW01heSAyOCwgMjAwN10KKyAgUmV0dXJuIDAgZnJvbSBwbmdfZ2V0X3NQTFQoKSBhbmQgcG5nX2dldF91bmtub3duX2NodW5rcygpIGlmIHBuZ19wdHIgaXMgTlVMTDsKKyAgICBjaGFuZ2VkIHRocmVlIHJlbWFpbmluZyBpbnN0YW5jZXMgb2YgcG5nX3N0cmNweSgpIHRvIHBuZ19zdHJuY3B5KCkgKERhdmlkCisgICAgSGlsbCkuCisgIE1ha2UgdGVzdCBmb3IgTlVMTCByb3dfYnVmIGF0IHRoZSBiZWdpbm5pbmcgb2YgcG5nX2RvX3JlYWRfdHJhbnNmb3JtYXRpb25zCisgICAgdW5jb25kaXRpb25hbC4KKwordmVyc2lvbiAxLjIuMTliZXRhMTIgW01heSAyOCwgMjAwN10KKyAgUmV2aXNlZCBwbmdnY2NyZC5jLgorCit2ZXJzaW9uIDEuMi4xOWJldGExMyBbSnVuZSAxNCwgMjAwN10KKyAgUHJlZmVyIFBOR19VU0VfUE5HVkNSRCB3aGVuIF9NU0NfVkVSIGlzIGRlZmluZWQgaW4gcG5nY29uZi5oCisKK3ZlcnNpb24gMS4yLjE5YmV0YTE0IFtKdW5lIDE2LCAyMDA3XQorICBGaXggYnVnIHdpdGggaGFuZGxpbmcgb2YgMTYtYml0IHRyYW5zcGFyZW5jeSwgaW50cm9kdWNlZCBpbiAxLjIuMTliZXRhMgorCit2ZXJzaW9uIDEuMi4xOWJldGExNSBbSnVuZSAxNywgMjAwN10KKyAgUmV2aXNlZCBwbmdnY2NyZC5jLgorCit2ZXJzaW9uIDEuMi4xOWJldGExNiBbSnVuZSAxOCwgMjAwN10KKyAgUmV2aXNlZCBwbmdnY2NyZC5jIGFnYWluLgorICBVcGRhdGVkIGNvbnRyaWIvZ3JlZ2Jvb2suCisgIENoYW5nZWQgJyNpbmNsdWRlICJwbmdnY2NyZC5jIicgdG8gJ2luY2x1ZGUgIiRzcmNkaXIvcG5nZ2NjcmQuYyInCisgICAgaW4gY29uZmlndXJlLmFjCisKK3ZlcnNpb24gMS4yLjE5YmV0YTE3IFtKdW5lIDE5LCAyMDA3XQorICBSZXZpc2VkIG1hbnkgb2YgdGhlIG1ha2VmaWxlcywgdG8gc2V0IC1EUE5HX05PX01NWF9DT0RFIHdoZXJlIG5lZWRlZAorICAgIGFuZCB0byBub3QgdXNlIC1PMyB1bmxlc3MgLURQTkdfTk9fTU1YX0NPREUgaXMgYWxzbyBzZXQuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTE4IFtKdW5lIDIzLCAyMDA3XQorICBSZXBsYWNlZCBzb21lIEMrKyBzdHlsZSBjb21tZW50cyB3aXRoIEMgc3R5bGUgY29tbWVudHMgaW4gcG5nZ2NjcmQuYy4KKyAgQ29waWVkIG9wdGltaXplZCBDIGNvZGUgZnJvbSBwbmdnY2NyZC5jIHRvIHBuZ3J1dGlsLmMsIHJlbW92ZWQgZGVwZW5kZW5jeQorICAgIG9uIHBuZ2djY3JkLm8gZnJvbSBtYW55IG1ha2VmaWxlcy4KKyAgQWRkZWQgc2wgYW5kIGR5bGliIHRvIGxpc3Qgb2YgZXh0ZW5zaW9ucyBiZSBpbnN0YWxsZWQgYnkgTWFrZWZpbGUuYW0KKwordmVyc2lvbiAxLjIuMTliZXRhMTkgW0p1bmUgMjgsIDIwMDddCisgIEZpeGVkIHRlc3RpbmcgUE5HX1JHQl9UT19HUkFZX0VSUiAmIFBOR19SR0JfVE9fR1JBWV9XQVJOIGluIHBuZ3J0cmFuLmMKKyAgTW9yZSBjbGVhbnVwIG9mIHBuZ2djY3JkLmMgYW5kIHBuZ3ZjcmQuYworCit2ZXJzaW9uIDEuMi4xOWJldGEyMCBbSnVuZSAyOSwgMjAwN10KKyAgUmVidWlsdCBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlIHVzaW5nIGxpYnRvb2wtMS41LjI0LgorICBGaXhlZCB0eXBvIGluIHBuZ2djY3JkLmMKKwordmVyc2lvbiAxLjIuMTliZXRhMjEgW0p1bmUgMzAsIDIwMDddCisgIE1vcmUgcmV2aXNpb24gb2YgcG5nZ2NjcmQuYworICBBZGRlZCAidGVzdCIgdGFyZ2V0IHRvIE1ha2VmaWxlLmluIGFuZCBNYWtlZmlsZS5hbQorCit2ZXJzaW9uIDEuMi4xOWJldGEyMiBbSnVseSAzLCAyMDA3XQorICBBZGRlZCBpbmZvIGFib3V0IHBuZ3J1dGlsL3BuZ2djY3JkL3BuZ3ZjcmQgdG8gcG5nX2dldF9oZWFkZXJfdmVyc2lvbigpCisgIEZpeCB0eXBlIGRlZmluaXRpb24gb2YgZHVtbXlfdmFsdWVfYSwgYiBpbiBwbmdnY2NyZC5jCisKK3ZlcnNpb24gMS4yLjE5YmV0YTIzIFtKdWx5IDEwLCAyMDA3XQorICBSZXZlcnQgY2hhbmdlIHRvIHR5cGUgZGVmaW5pdGlvbiBvZiBkdW1teV92YWx1ZV9hLCBiIGluIHBuZ2djY3JkLmMKKyAgTWFrZSBzdXJlIF9fUElDX18gaXMgZGVmaW5lZCBpbiBwbmdnY2NyZC5jIHdoZW4gUElDIGlzIGRlZmluZWQuCisgIE1ha2UgUE5HX05PX01NWF9DT0RFIHRoZSBkZWZhdWx0IG9uIHg4Nl82NCBHTlVDIHBsYXRmb3Jtcy4KKwordmVyc2lvbiAxLjIuMTliZXRhMjQgW0p1bHkgMTQsIDIwMDddCisgIEFkZGVkIFBOR19OT19SRUFEX0ZJTFRFUiwgUE5HX05PX1dSSVRFX0ZJTFRFUiwgUE5HX05PX1dBUk5JTkcgbWFjcm9zLgorICBBZGRlZCBjb250cmliL3BuZ21pbmltIHRvIGRlbW9uc3RyYXRlIGJ1aWxkaW5nIG1pbmltYWwgZW5jb2RlciBhbmQgZGVjb2RlcgorCit2ZXJzaW9uIDEuMi4xOWJldGEyNSBbSnVseSAxNSwgMjAwN10KKyAgUmVtb3ZlZCB0aGUgbmV3IFBOR19OT19SRUFEX0ZJTFRFUiBtYWNybyBzaW5jZSBpdCB3b3VsZCBtYWtlIHRoZSBsaWJyYXJ5CisgICAgdW5hYmxlIHRvIHJlYWQgdmFsaWQgUE5HIGZpbGVzLCBhbmQgZmlsdGVyaW5nIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUKKyAgICBQTkcgZm9ybWF0LgorCit2ZXJzaW9uIDEuMi4xOWJldGEyNiBbSnVseSAxNiwgMjAwN10KKyAgQ2hhbmdlZCAicG5nX2ZyZWUoc3RyKSIgdG8gInBuZ19mcmVlKHBuZ19wdHIsc3RyKSIgaW4gcG5ncnV0aWwuYyBXaW5DRQorICAgIGNvZGUgKFl2ZXMgUGlndWV0KS4gIFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIGxpYnBuZy0xLjIuMTQuCisgIFVwZGF0ZWQgc2NyaXB0cy9DTWFrZUxpc3RzLnR4dAorICBSZWxvY2F0ZWQgYSBtaXNwbGFjZWQgI2VuZGlmIGluIHBuZ2djY3JkLmMKKwordmVyc2lvbiAxLjIuMTliZXRhMjcgW0p1bHkgMTcsIDIwMDddCisgIEZpeGVkIGluY29ycmVjdCBzdHJpZGUgYW5kIG51bWJlciBvZiBieXRlcyBjb3BpZWQgKHdhcyA0IGluc3RlYWQgb2YKKyAgICA2IGJ5dGVzKSBpbiB0aGUgY2xlYW51cCBsb29wIG9mIHBuZ2djY3JkLmMgYW5kIHBuZ3ZjcmQuYyBmb3IgaGFuZGxpbmcKKyAgICB0aGUgZW5kIG9mIDQ4LWJpdCBpbnRlcmxhY2VkIHJvd3MgKEdsZW5uIFItUCkuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTI4IFtKdWx5IDE5LCAyMDA3XQorICBSZW1vdmVkIHJlcXVpcmVtZW50IGZvciBnY2MtNC4xIG9yIGJldHRlciB0byB1c2UgUE5HX0hBVkVfTU1YX0ZJTFRFUl9ST1cKKyAgICBvbiB4ODZfNjQgcGxhdGZvcm1zCisgIEFkZGVkIHBuZ193YXJuaW5nKCkgaW4gcG5ncnV0aWwuYyBmb3Igc2hvcnQgaUNDUCwgaVRYdCwgc1BMVCwgb3IgelRYVCBjaHVua3MuCisgIFJldmlzZWQgcG5ndGVzdC5jIHNvIHdhcm5pbmdzIGFyZSBkaXNwbGF5ZWQgcmVnYXJkbGVzcyBvZiBQTkdfTk9fU1RESU8uCisKK3ZlcnNpb24gMS4yLjE5YmV0YTMwIFtKdWx5IDI2LCAyMDA3XQorICBSZXZpc2VkIHBuZ2djY3JkLmMKKwordmVyc2lvbiAxLjIuMTliZXRhMzEgW0p1bHkgMjcsIDIwMDddCisgIEZpeCB0eXBvcyBpbiBwbmdnY2NyZC5jCisKK3ZlcnNpb24gMS4yLjE5YmV0YTMyIFtKdWx5IDMxLCAyMDA3XQorICBEaXNhYmxlIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgd2hlbiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEIGlzIG9mZi4KKyAgRW5hYmxlIFBOR19NTVhfUkVBRF9GSUxURVJfKiBieSBkZWZhdWx0ICh0aGV5IHdlcmUgaW5hZHZlcnRlbnRseSBkaXNhYmxlZCBpbgorICAgIGxpYnBuZy0xLjIuMTliZXRhMjMpLgorICBGaXggc29tZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBwbmdnY2NyZC5jIGFuZCBwbmdydXRpbC5jCisgIEFkZGVkIGluZm9ybWF0aW9uIGFib3V0IGRpc2FibGluZyB0aGUgTU1YIGNvZGUgaW4gbGlicG5nIGRvY3VtZW50YXRpb24uCisKIAogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvIHBuZy1tbmctaW1wbGVtZW50IGF0IGxpc3RzLnNmLm5ldAorCiAoc3Vic2NyaXB0aW9uIHJlcXVpcmVkOyB2aXNpdCAKIGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3BuZy1tbmctaW1wbGVtZW50CiB0byBzdWJzY3JpYmUpIG9yIHRvIGdsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CmRpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUwppbmRleCA2NmM1NDU1Li40NDdhMTg3IDEwMDY0NAotLS0gYS9DSEFOR0VTCisrKyBiL0NIQU5HRVMKQEAgLTE0NjksNyArMTQ2OSw3IEBACiAgIFJlc3RvcmVkIHNjcmlwdHMvbWFrZWZpbGUuZWxmIHdoaWNoIHdhcyBpbmFkdmVydGVudGx5IGRlbGV0ZWQuCiAKIHZlcnNpb24gMS4yLjliZXRhNiBbTWFyY2ggNiwgMjAwNl0KLSAgRml4ZWQgdHlwbyAoMjYpIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgIEZpeGVkIHR5cG8gKDI3KSBpbiBjb25maWd1cmF0aW9uIGZpbGVzLgogCiB2ZXJzaW9uIDEuMi45YmV0YTcgW01hcmNoIDcsIDIwMDZdCiAgIFJlbW92ZWQgbGlicG5nLnZlcnMgYW5kIGxpYnBuZy5zeW0gZnJvbSBsaWJwbmcxMl9sYV9TT1VSQ0VTIGluIE1ha2VmaWxlLmFtCkBAIC0xNzEyLDEyICsxNzEyLDE1MiBAQAogdmVyc2lvbiAxLjAuMjUgW01heSAxNSwgMjAwN10KIHZlcnNpb24gMS4yLjE3IFtNYXkgMTUsIDIwMDddCiAgIEFkZGVkICJwbmdfcHRyLT5udW1fdHJhbnM9MCIgYmVmb3JlIGVycm9yIHJldHVybiBpbiBwbmdfaGFuZGxlX3RSTlMsCi0gICAgdG8gZWxpbWluYXRlIGEgdnVsbmVyYWJpbGl0eSAoQ1ZFLTIwMDctMjU1NCwgQ0VSVCBWVSM2ODQ2NjQpCisgICAgdG8gZWxpbWluYXRlIGEgdnVsbmVyYWJpbGl0eSAoQ1ZFLTIwMDctMjQ0NSwgQ0VSVCBWVSM2ODQ2NjQpCiAKIHZlcnNpb24gMS4wLjI2IFtNYXkgMTUsIDIwMDddCiB2ZXJzaW9uIDEuMi4xOCBbTWF5IDE1LCAyMDA3XQogICBSZXZlcnRlZCB0aGUgbGlicG5nLTEuMi4xN3JjMyBjaGFuZ2UgdG8gc3ltYm9sLWhhbmRsaW5nIGluIGNvbmZpZ3VyZSBzY3JpcHQKIAordmVyc2lvbiAxLjIuMTliZXRhMSBbTWF5IDE4LCAyMDA3XQorICBDaGFuZ2VkICJjb25zdCBzdGF0aWMiIHRvICJzdGF0aWMgUE5HX0NPTlNUIiBldmVyeXdoZXJlLCBtb3N0bHkgdW5kb2luZworICAgIGNoYW5nZSBvZiBsaWJwbmctMS4yLjE3YmV0YTIuICBDaGFuZ2VkIG90aGVyICJjb25zdCIgdG8gIlBOR19DT05TVCIKKyAgQ2hhbmdlZCBzb21lIGhhbmRsaW5nIG9mIHVudXNlZCBwYXJhbWV0ZXJzLCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKyAgICAiaWYgKHVudXNlZCA9PSBOVUxMKSByZXR1cm47IiBiZWNvbWVzICJ1bnVzZWQgPSB1bnVzZWQiLgorCit2ZXJzaW9uIDEuMi4xOWJldGEyIFtNYXkgMTgsIDIwMDddCisgIE9ubHkgdXNlIHRoZSB2YWxpZCBiaXRzIG9mIHRSTlMgdmFsdWUgaW4gcG5nX2RvX2V4cGFuZCgpIChCcmlhbiBDYXJ0aWVyKQorCit2ZXJzaW9uIDEuMi4xOWJldGEzIFtNYXkgMTksIDIwMDddCisgIEFkZCBzb21lICJwbmdfYnl0ZSIgdHlwZWNhc3RzIGluIHBuZ19jaGVja19rZXl3b3JkKCkgYW5kIHdyaXRlIG5ld19rZXkKKyAgaW5zdGVhZCBvZiBrZXkgaW4gelRYdCBjaHVuayAoS2V2aW4gUnlkZSkuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTQgW01heSAyMSwgMjAwN10KKyAgQWRkIHBuZ19zbnByaW50ZigpIGZ1bmN0aW9uIGFuZCB1c2UgaXQgaW4gcGxhY2Ugb2Ygc3ByaW50KCkgZm9yIGltcHJvdmVkCisgICAgZGVmZW5zZSBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvd3MuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTUgW01heSAyMSwgMjAwN10KKyAgRml4ZWQgcG5nX2hhbmRsZV90Uk5TKCkgdG8gb25seSB1c2UgdGhlIHZhbGlkIGJpdHMgb2YgdFJOUyB2YWx1ZS4KKyAgQ2hhbmdlZCBoYW5kbGluZyBvZiBtb3JlIHVudXNlZCBwYXJhbWV0ZXJzLCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKyAgUmVtb3ZlZCBzb21lIFBOR19DT05TVCBpbiBwbmd3dXRpbC5jIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgorCit2ZXJzaW9uIDEuMi4xOWJldGE2IFtNYXkgMjIsIDIwMDddCisgIEFkZGVkIHNvbWUgI2lmZGVmIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgd2hlcmUgbmVlZGVkIGluIHBuZ3ZjcmQuYworICBBZGRlZCBhIHNwZWNpYWwgIl9NU0NfVkVSIiBjYXNlIHRoYXQgZGVmaW5lcyBwbmdfc25wcmludGYgdG8gX3NucHJpbnRmCisKK3ZlcnNpb24gMS4yLjE5YmV0YTcgW01heSAyMiwgMjAwN10KKyAgU3F1ZWxjaGVkIHBuZ19zcXVlbGNoX3dhcm5pbmdzKCkgaW4gcG5nZ2NjcmQuYyBhbmQgYWRkZWQgYW4KKyAgICAjaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRCBibG9jayBhcm91bmQgdGhlIGRlY2xhcmF0aW9ucyB0aGF0IGNhdXNlZAorICAgIHRoZSB3YXJuaW5ncyB0aGF0IHBuZ19zcXVlbGNoX3dhcm5pbmdzIHdhcyBzcXVlbGNoaW5nLgorCit2ZXJzaW9uIDEuMi4xOWJldGE4IFtNYXkgMjIsIDIwMDddCisgIFJlbW92ZWQgX19NTVhfXyBmcm9tIHRlc3QgaW4gcG5nY29uZi5oLgorCit2ZXJzaW9uIDEuMi4xOWJldGE5IFtNYXkgMjMsIDIwMDddCisgIE1hZGUgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSBhdmFpbGFibGUgdmlhIFBOR19TUVVFTENIX1dBUk5JTkdTIG1hY3JvLgorICBSZXZpc2VkIHBuZ19zcXVlbGNoX3dhcm5pbmdzKCkgc28gaXQgbWlnaHQgd29yay4KKyAgVXBkYXRlZCBtYWtlZmlsZS5zZ2NjIGFuZCBtYWtlZmlsZS5zb2xhcmlzOyBhZGRlZCBtYWtlZmlsZS5zb2xhcmlzLXg4Ni4KKwordmVyc2lvbiAxLjIuMTliZXRhMTAgW01heSAyNCwgMjAwN10KKyAgUmVzcXVlbGNoZWQgcG5nX3NxdWVsY2hfd2FybmluZ3MoKSwgdXNlICJfX2F0dHJpYnV0ZV9fKCh1c2VkKSkiIGluc3RlYWQuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTExIFtNYXkgMjgsIDIwMDddCisgIFJldHVybiAwIGZyb20gcG5nX2dldF9zUExUKCkgYW5kIHBuZ19nZXRfdW5rbm93bl9jaHVua3MoKSBpZiBwbmdfcHRyIGlzIE5VTEw7CisgICAgY2hhbmdlZCB0aHJlZSByZW1haW5pbmcgaW5zdGFuY2VzIG9mIHBuZ19zdHJjcHkoKSB0byBwbmdfc3RybmNweSgpIChEYXZpZAorICAgIEhpbGwpLgorICBNYWtlIHRlc3QgZm9yIE5VTEwgcm93X2J1ZiBhdCB0aGUgYmVnaW5uaW5nIG9mIHBuZ19kb19yZWFkX3RyYW5zZm9ybWF0aW9ucworICAgIHVuY29uZGl0aW9uYWwuCisKK3ZlcnNpb24gMS4yLjE5YmV0YTEyIFtNYXkgMjgsIDIwMDddCisgIFJldmlzZWQgcG5nZ2NjcmQuYy4KKwordmVyc2lvbiAxLjIuMTliZXRhMTMgW0p1bmUgMTQsIDIwMDddCisgIFByZWZlciBQTkdfVVNFX1BOR1ZDUkQgd2hlbiBfTVNDX1ZFUiBpcyBkZWZpbmVkIGluIHBuZ2NvbmYuaAorCit2ZXJzaW9uIDEuMi4xOWJldGExNCBbSnVuZSAxNiwgMjAwN10KKyAgRml4IGJ1ZyB3aXRoIGhhbmRsaW5nIG9mIDE2LWJpdCB0cmFuc3BhcmVuY3ksIGludHJvZHVjZWQgaW4gMS4yLjE5YmV0YTIKKwordmVyc2lvbiAxLjIuMTliZXRhMTUgW0p1bmUgMTcsIDIwMDddCisgIFJldmlzZWQgcG5nZ2NjcmQuYy4KKwordmVyc2lvbiAxLjIuMTliZXRhMTYgW0p1bmUgMTgsIDIwMDddCisgIFJldmlzZWQgcG5nZ2NjcmQuYyBhZ2Fpbi4KKyAgVXBkYXRlZCBjb250cmliL2dyZWdib29rLgorICBDaGFuZ2VkICcjaW5jbHVkZSAicG5nZ2NjcmQuYyInIHRvICdpbmNsdWRlICIkc3JjZGlyL3BuZ2djY3JkLmMiJworICAgIGluIGNvbmZpZ3VyZS5hYworCit2ZXJzaW9uIDEuMi4xOWJldGExNyBbSnVuZSAxOSwgMjAwN10KKyAgUmV2aXNlZCBtYW55IG9mIHRoZSBtYWtlZmlsZXMsIHRvIHNldCAtRFBOR19OT19NTVhfQ09ERSB3aGVyZSBuZWVkZWQKKyAgICBhbmQgdG8gbm90IHVzZSAtTzMgdW5sZXNzIC1EUE5HX05PX01NWF9DT0RFIGlzIGFsc28gc2V0LgorCit2ZXJzaW9uIDEuMi4xOWJldGExOCBbSnVuZSAyMywgMjAwN10KKyAgUmVwbGFjZWQgc29tZSBDKysgc3R5bGUgY29tbWVudHMgd2l0aCBDIHN0eWxlIGNvbW1lbnRzIGluIHBuZ2djY3JkLmMuCisgIENvcGllZCBvcHRpbWl6ZWQgQyBjb2RlIGZyb20gcG5nZ2NjcmQuYyB0byBwbmdydXRpbC5jLCByZW1vdmVkIGRlcGVuZGVuY3kKKyAgICBvbiBwbmdnY2NyZC5vIGZyb20gbWFueSBtYWtlZmlsZXMuCisgIEFkZGVkIHNsIGFuZCBkeWxpYiB0byBsaXN0IG9mIGV4dGVuc2lvbnMgYmUgaW5zdGFsbGVkIGJ5IE1ha2VmaWxlLmFtCisKK3ZlcnNpb24gMS4yLjE5YmV0YTE5IFtKdW5lIDI4LCAyMDA3XQorICBGaXhlZCB0ZXN0aW5nIFBOR19SR0JfVE9fR1JBWV9FUlIgJiBQTkdfUkdCX1RPX0dSQVlfV0FSTiBpbiBwbmdydHJhbi5jCisgIE1vcmUgY2xlYW51cCBvZiBwbmdnY2NyZC5jIGFuZCBwbmd2Y3JkLmMKKwordmVyc2lvbiAxLjIuMTliZXRhMjAgW0p1bmUgMjksIDIwMDddCisgIFJlYnVpbHQgTWFrZWZpbGUuaW4gYW5kIGNvbmZpZ3VyZSB1c2luZyBsaWJ0b29sLTEuNS4yNC4KKyAgRml4ZWQgdHlwbyBpbiBwbmdnY2NyZC5jCisKK3ZlcnNpb24gMS4yLjE5YmV0YTIxIFtKdW5lIDMwLCAyMDA3XQorICBNb3JlIHJldmlzaW9uIG9mIHBuZ2djY3JkLmMKKyAgQWRkZWQgInRlc3QiIHRhcmdldCB0byBNYWtlZmlsZS5pbiBhbmQgTWFrZWZpbGUuYW0KKwordmVyc2lvbiAxLjIuMTliZXRhMjIgW0p1bHkgMywgMjAwN10KKyAgQWRkZWQgaW5mbyBhYm91dCBwbmdydXRpbC9wbmdnY2NyZC9wbmd2Y3JkIHRvIHBuZ19nZXRfaGVhZGVyX3ZlcnNpb24oKQorICBGaXggdHlwZSBkZWZpbml0aW9uIG9mIGR1bW15X3ZhbHVlX2EsIGIgaW4gcG5nZ2NjcmQuYworCit2ZXJzaW9uIDEuMi4xOWJldGEyMyBbSnVseSAxMCwgMjAwN10KKyAgUmV2ZXJ0IGNoYW5nZSB0byB0eXBlIGRlZmluaXRpb24gb2YgZHVtbXlfdmFsdWVfYSwgYiBpbiBwbmdnY2NyZC5jCisgIE1ha2Ugc3VyZSBfX1BJQ19fIGlzIGRlZmluZWQgaW4gcG5nZ2NjcmQuYyB3aGVuIFBJQyBpcyBkZWZpbmVkLgorICBSZXF1aXJlIGdjYy00LjEgb3IgYmV0dGVyIHRvIHVzZSBQTkdfSEFWRV9NTVhfRklMVEVSX1JPVyBvbiB4ODZfNjQgcGxhdGZvcm1zCisKK3ZlcnNpb24gMS4yLjE5YmV0YTI0IFtKdWx5IDE0LCAyMDA3XQorICBBZGRlZCBQTkdfTk9fUkVBRF9GSUxURVIsIFBOR19OT19XUklURV9GSUxURVIsIFBOR19OT19XQVJOSU5HIG1hY3Jvcy4KKyAgQWRkZWQgY29udHJpYi9wbmdtaW5pbSB0byBkZW1vbnN0cmF0ZSBidWlsZGluZyBtaW5pbWFsIGVuY29kZXIgYW5kIGRlY29kZXIKKwordmVyc2lvbiAxLjIuMTliZXRhMjUgW0p1bHkgMTUsIDIwMDddCisgIFJlbW92ZWQgdGhlIG5ldyBQTkdfTk9fUkVBRF9GSUxURVIgbWFjcm8gc2luY2UgaXQgd291bGQgbWFrZSB0aGUgbGlicmFyeQorICAgIHVuYWJsZSB0byByZWFkIHZhbGlkIFBORyBmaWxlcywgYW5kIGZpbHRlcmluZyBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlCisgICAgUE5HIGZvcm1hdC4KKwordmVyc2lvbiAxLjIuMTliZXRhMjYgW0p1bHkgMTYsIDIwMDddCisgIENoYW5nZWQgInBuZ19mcmVlKHN0cikiIHRvICJwbmdfZnJlZShwbmdfcHRyLHN0cikiIGluIHBuZ3J1dGlsLmMgV2luQ0UKKyAgICBjb2RlIChZdmVzIFBpZ3VldCkuICBUaGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiBsaWJwbmctMS4yLjE0LgorICBVcGRhdGVkIHNjcmlwdHMvQ01ha2VMaXN0cy50eHQKKyAgUmVsb2NhdGVkIGEgbWlzcGxhY2VkICNlbmRpZiBpbiBwbmdnY2NyZC5jCisKK3ZlcnNpb24gMS4yLjE5YmV0YTI3IFtKdWx5IDE3LCAyMDA3XQorICBGaXhlZCBpbmNvcnJlY3Qgc3RyaWRlIGFuZCBudW1iZXIgb2YgYnl0ZXMgY29waWVkICh3YXMgNCBpbnN0ZWFkIG9mCisgICAgNiBieXRlcykgaW4gdGhlIGNsZWFudXAgbG9vcCBvZiBwbmdnY2NyZC5jIGFuZCBwbmd2Y3JkLmMgZm9yIGhhbmRsaW5nCisgICAgdGhlIGVuZCBvZiA0OC1iaXQgaW50ZXJsYWNlZCByb3dzIChHbGVubiBSLVApLgorCit2ZXJzaW9uIDEuMi4xOWJldGEyOCBbSnVseSAxOSwgMjAwN10KKyAgUmVtb3ZlZCByZXF1aXJlbWVudCBmb3IgZ2NjLTQuMSBvciBiZXR0ZXIgdG8gdXNlIFBOR19IQVZFX01NWF9GSUxURVJfUk9XCisgICAgb24geDg2XzY0IHBsYXRmb3JtcworICBBZGRlZCBwbmdfd2FybmluZygpIGluIHBuZ3J1dGlsLmMgZm9yIHNob3J0IGlDQ1AsIGlUWHQsIHNQTFQsIG9yIHpUWFQgY2h1bmtzLgorICBSZXZpc2VkIHBuZ3Rlc3QuYyBzbyB3YXJuaW5ncyBhcmUgZGlzcGxheWVkIHJlZ2FyZGxlc3Mgb2YgUE5HX05PX1NURElPLgorCit2ZXJzaW9uIDEuMi4xOWJldGEyOSBbSnVseSAyMCwgMjAwN10KKyAgRml4IHR5cG8gaW4gcG5nZ2NjcmQuYyAoJSVlYXggc2hvdWxkIGJlICUlYXggaW4gc2Vjb25kbG9vcDQ4KQorCit2ZXJzaW9uIDEuMi4xOWJldGEzMCBbSnVseSAyNiwgMjAwN10KKyAgUmV2aXNlZCBwbmdnY2NyZC5jCisKK3ZlcnNpb24gMS4yLjE5YmV0YTMxIFtKdWx5IDI3LCAyMDA3XQorICBGaXggdHlwb3MgaW4gcG5nZ2NjcmQuYworCit2ZXJzaW9uIDEuMC4yN3JjMSBhbmQgMS4yLjE5cmMxIFtKdWx5IDMxLCAyMDA3XQorICBEaXNhYmxlIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgd2hlbiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEIGlzIG9mZi4KKyAgRW5hYmxlIFBOR19NTVhfUkVBRF9GSUxURVJfKiBieSBkZWZhdWx0LCBleGNlcHQgd2hlbiBnY2MtMy54IGlzIGJlaW5nCisgICAgdXNlZCAodGhleSB3ZXJlIGluYWR2ZXJ0ZW50bHkgZGlzYWJsZWQgaW4gbGlicG5nLTEuMi4xOWJldGEyMykuCisgIEZpeCBzb21lIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIHBuZ2djY3JkLmMgYW5kIHBuZ3J1dGlsLmMKKyAgQWRkZWQgaW5mb3JtYXRpb24gYWJvdXQgZGlzYWJsaW5nIHRoZSBNTVggY29kZSBpbiBsaWJwbmcgZG9jdW1lbnRhdGlvbi4KKwogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvIHBuZy1tbmctaW1wbGVtZW50IGF0IGxpc3RzLnNmLm5ldAogKHN1YnNjcmlwdGlvbiByZXF1aXJlZDsgdmlzaXQKIGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3BuZy1tbmctaW1wbGVtZW50CmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCBiOGMwZTRkLi5iY2JiYWE0IDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEsNSArMSw1IEBACiAKLUluc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4wLjI2IC0gTWF5IDE1LCAyMDA3CitJbnN0YWxsaW5nIGxpYnBuZyB2ZXJzaW9uIDEuMC4yN3JjMSAtIEp1bHkgMzEsIDIwMDcKIAogT24gVW5peC9MaW51eCBhbmQgc2ltaWxhciBzeXN0ZW1zLCB5b3UgY2FuIHNpbXBseSB0eXBlCiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIGNvcnJlc3BvbmQgdG8gdGhlIHZlcnNpb24gb2YgemxpYiB0aGF0J3MgaW5zdGFsbGVkLgogCiBZb3UgY2FuIHJlbmFtZSB0aGUgZGlyZWN0b3JpZXMgdGhhdCB5b3UgZG93bmxvYWRlZCAodGhleQotbWlnaHQgYmUgY2FsbGVkICJsaWJwbmctMS4wLjI2IiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMi4xIgorbWlnaHQgYmUgY2FsbGVkICJsaWJwbmctMS4wLjI3cmMxIiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMi4xIgogb3IgInpsaWIxMjEiKSBzbyB0aGF0IHlvdSBoYXZlIGRpcmVjdG9yaWVzIGNhbGxlZCAiemxpYiIgYW5kICJsaWJwbmciLgogCiBZb3VyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgpAQCAtMTAxLDE0ICsxMDEsMTQgQEAKICBDTWFrZUxpc3RzLnR4dCAgICA9PiAgImNtYWtlIiBzY3JpcHQKICBtYWtlZmlsZS5zdGQgICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgbWFrZWZpbGUuZWxmICAgICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSBzeW1ib2wgdmVyc2lvbmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI2KQorICAgICAgICAgICAgICAgICAgICAgICBnY2MsIGNyZWF0ZXMgbGlicG5nMTAuc28uMC4xLjAuMjdyYzEpCiAgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI2KQorICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxKQogIG1ha2VmaWxlLmdjbW14ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yN3JjMSwKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhc3NlbWJsZXIgY29kZSB0dW5lZCBmb3IgSW50ZWwgTU1YIHBsYXRmb3JtKQogIG1ha2VmaWxlLm5vbW14ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNgorICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxCiAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHVzZSBJbnRlbCBNTVggYXNzZW1ibGVyIGNvZGUpCiAgbWFrZWZpbGUuZ2NjICAgICAgPT4gIEdlbmVyaWMgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgbWFrZWZpbGUua25yICAgICAgPT4gIEFyY2hhaWMgVU5JWCBNYWtlZmlsZSB0aGF0IGNvbnZlcnRzIGZpbGVzIHdpdGgKQEAgLTEzMSwxMiArMTMxLDE0IEBACiAgbWFrZWZpbGUub3BlbmJzZCAgPT4gIE9wZW5CU0QgbWFrZWZpbGUKICBtYWtlZmlsZS5zZ2kgICAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyBJUklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGliKQogIG1ha2VmaWxlLnNnZ2NjICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIChnY2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgbGlicG5nMTAuc28uMC4xLjAuMjYpCisgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgbGlicG5nMTAuc28uMC4xLjAuMjdyYzEpCiAgbWFrZWZpbGUuc3Vub3MgICAgPT4gIFN1biBtYWtlZmlsZQogIG1ha2VmaWxlLnNvbGFyaXMgID0+ICBTb2xhcmlzIDIuWCBtYWtlZmlsZSAoZ2NjLAotICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI2KQorICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxKQorIG1ha2VmaWxlLnNvbGFyaXMteDg2ID0+ICBTb2xhcmlzL2ludGVsTU1YIDIuWCBtYWtlZmlsZSAoZ2NjLAorICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxKQogIG1ha2VmaWxlLnNvOSAgICAgID0+ICBTb2xhcmlzIDkgbWFrZWZpbGUgKGdjYywKLSAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNikKKyAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yN3JjMSkKICBtYWtlZmlsZS4zMnN1bnUgICA9PiAgU3VuIFVsdHJhIDMyLWJpdCBtYWtlZmlsZQogIG1ha2VmaWxlLjY0c3VudSAgID0+ICBTdW4gVWx0cmEgNjQtYml0IG1ha2VmaWxlCiAgbWFrZWZpbGUuc2NvICAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCkBAIC0yMTYsNyArMjE4LDcgQEAKIHNjcmlwdHMvbWFrZWZpbGUuKiB5b3Vyc2VsZiwgdGhhdCBpcykKIAogCi1DRkxBR1M9Ii1XYWxsIC1PMyAtZnVucm9sbC1sb29wcyBcCitDRkxBR1M9Ii1XYWxsIC1PIC1mdW5yb2xsLWxvb3BzIFwKIC1tYWxpZ24tbG9vcHM9MiAtbWFsaWduLWZ1bmN0aW9ucz0yIiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyL2luY2x1ZGUgXAogLS13aXRoLXBrZ2NvbmZpZ2Rpcj0vdXNyL2xpYi9wa2djb25maWcgLS1pbmNsdWRlZGlyPS91c3IvaW5jbHVkZQogCmRpZmYgLS1naXQgYS9LTk9XTkJVRyBiL0tOT1dOQlVHCmluZGV4IGIxOTliNzYuLjBjYzYwZTggMTAwNjQ0Ci0tLSBhL0tOT1dOQlVHCisrKyBiL0tOT1dOQlVHCkBAIC0xLDUgKzEsNSBAQAogCi1Lbm93biBidWdzIGluIGxpYnBuZyB2ZXJzaW9uIDEuMC4yNgorS25vd24gYnVncyBpbiBsaWJwbmcgdmVyc2lvbiAxLjAuMjdyYzEKIAogMS4gQXByaWwgMjIsIDIwMDE6IHBuZ2djY3JkLmMgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gY3Jhc2ggb24gTmV0QlNEIHdoZW4KICAgIHJlYWRpbmcgaW50ZXJsYWNlZCBQTkcgZmlsZXMsIHdoZW4gYXNzZW1ibGVyIGNvZGUgaXMgZW5hYmxlZCBidXQgcnVubmluZwpAQCAtMTksMTAgKzE5LDExIEBACiAgICBsaWJwbmcxMi5zbyA9PiBsaWJwbmcxMi5zby4wLjEuMi45YmV0YU4KICAgIHRoYXQgYXJlIGdlbmVyYXRlZCBieSB0aGUgY3VzdG9tIG1ha2VmaWxlcy4KIAotICAgU1RBVFVTOiBGb3Igbm93LCBzeXN0ZW0gbGlicmFyeSBidWlsZGVycyBzaG91bGQgdXNlIHRoZSBjdXN0b20gbWFrZWZpbGVzLgorNC4gSnVuZSAyOCwgMjAwNzogUG5nZ2NjcmQuYyBoYXMgYmVlbiByZXBvcnRlZCB0byBiZSB1bnJlbGlhYmxlIG9uCisgICBzZXZlcmFsIDY0LWJpdCBwbGF0Zm9ybXMgcnVubmluZyBnY2MtMy54LiAgQWx0aG91Z2ggaXQgYXBwZWFycyB0bworICAgYnVpbGQgcHJvcGVybHksIGl0IGRvZXMgbm90IGFsd2F5cyByZWFkIGZpbGVzIGNvcnJlY3RseS4KIAotNC4gTWFyY2ggMjAwNzogQnVpbGRpbmcgMS4yLjE2IHdpdGggUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRDsKLSAgIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgcmVzdWx0cyBpbiBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZiBwbmdfY29tYmluZV9yb3csCi0gICBwbmdfZG9fcmVhZF9pbnRlcmxhY2UsIGFuZCBwbmdfcmVhZF9maWx0ZXJfcm93CisgICBTVEFUVVM6ICBBcHBlYXJzIHRvIGJlIGEgYnVnIGluIHRoZSA2NC1iaXQgdmVyc2lvbiBvZiBnY2MtMy40LjYuCisgICBXb3JrYXJvdW5kcyBhcmUgdG8gZGVmaW5lIFBOR19OT19NTVhfRklMVEVSX1VQfEFWR3xQQUVUSCAoYXMgaW4KKyAgIHBuZ2NvbmYuaCkgb3IgdG8gdXBncmFkZSBnY2MgdG8gYSBuZXdlciB2ZXJzaW9uLgogCi0gICBTVEFUVVM6IEludmVzdGlnYXRpbmcuCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvTElDRU5TRQppbmRleCA2YmFhNmViLi4zMDYxOTA2IDEwMDY0NAotLS0gYS9MSUNFTlNFCisrKyBiL0xJQ0VOU0UKQEAgLTgsNyArOCw3IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjAuMjYsIE1heSAxNSwgMjAwNywgYXJlCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjAuMjdyYzEsIEp1bHkgMzEsIDIwMDcsIGFyZQogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCiBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4yLjUKIHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC0xMDYsNCArMTA2LDQgQEAKIAogR2xlbm4gUmFuZGVycy1QZWhyc29uCiBnbGVubnJwIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldAotTWF5IDE1LCAyMDA3CitKdWx5IDMxLCAyMDA3CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGMzMzJmYmQuLjEyZmI2YjcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0xMDksNiArMTA5LDggQEAKIAkkKEVDSE8pICdsb2NhbDogKjsgfTsnID4+ICRALm5ldwogCW12ICRALm5ldyAkQAogCit0ZXN0OiBjaGVjaworCiAjIGluc3RhbGwgdGhlIC4uLi9pbmNsdWRlIGhlYWRlcnMgYXMgbGlua3MgdG8gdGhlIG5ldyBvbmVzCiBpbnN0YWxsLWRhdGEtaG9vazoKIAljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgcm0gLWYgcG5nLmggcG5nY29uZi5oCkBAIC0xMjMsNyArMTI1LDcgQEAKIAljZCAkKERFU1RESVIpJChiaW5kaXIpOyAkKExOX1MpICQoUE5HTElCX0JBU0VOQU1FKS1jb25maWcgbGlicG5nLWNvbmZpZwogCUBzZXQgLXg7XAogCWNkICQoREVTVERJUikkKGxpYmRpcik7XAotCWZvciBleHQgaW4gYSBsYSBzbzsgZG9cCisJZm9yIGV4dCBpbiBhIGxhIHNvIHNsIGR5bGliOyBkb1wKIAkJcm0gLWYgbGlicG5nLiQkZXh0O1wKICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICQoUE5HTElCX0JBU0VOQU1FKS4kJGV4dDsgdGhlblwKICAgICAgICAgICAgICAgICAgICAgICAgJChMTl9TKSAkKFBOR0xJQl9CQVNFTkFNRSkuJCRleHQgbGlicG5nLiQkZXh0O1wKQEAgLTEzNyw3ICsxMzksNyBAQAogCUBpZiB0ZXN0IC1uICJAY29tcGF0bGliQCI7IHRoZW5cCiAJCXNldCAteDtcCiAJCWNkICQoREVTVERJUikkKGxpYmRpcik7XAotCQlmb3IgZXh0IGluIGEgbGEgc287IGRvXAorCQlmb3IgZXh0IGluIGEgbGEgc28gc2wgZHlsaWI7IGRvXAogCQkJcm0gLWYgbGlicG5nLiQkZXh0O1wKIAkJZG9uZTtcCiAJZmkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggODFlYWEyYS4uMTVkMzVlYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTEyNTksNiArMTI1OSw4IEBACiAJJChFQ0hPKSAnbG9jYWw6ICo7IH07JyA+PiAkQC5uZXcKIAltdiAkQC5uZXcgJEAKIAordGVzdDogY2hlY2sKKwogIyBpbnN0YWxsIHRoZSAuLi4vaW5jbHVkZSBoZWFkZXJzIGFzIGxpbmtzIHRvIHRoZSBuZXcgb25lcwogaW5zdGFsbC1kYXRhLWhvb2s6CiAJY2QgJChERVNURElSKSQoaW5jbHVkZWRpcik7IHJtIC1mIHBuZy5oIHBuZ2NvbmYuaApAQCAtMTI3Myw3ICsxMjc1LDcgQEAKIAljZCAkKERFU1RESVIpJChiaW5kaXIpOyAkKExOX1MpICQoUE5HTElCX0JBU0VOQU1FKS1jb25maWcgbGlicG5nLWNvbmZpZwogCUBzZXQgLXg7XAogCWNkICQoREVTVERJUikkKGxpYmRpcik7XAotCWZvciBleHQgaW4gYSBsYSBzbzsgZG9cCisJZm9yIGV4dCBpbiBhIGxhIHNvIHNsIGR5bGliOyBkb1wKIAkJcm0gLWYgbGlicG5nLiQkZXh0O1wKICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICQoUE5HTElCX0JBU0VOQU1FKS4kJGV4dDsgdGhlblwKICAgICAgICAgICAgICAgICAgICAgICAgJChMTl9TKSAkKFBOR0xJQl9CQVNFTkFNRSkuJCRleHQgbGlicG5nLiQkZXh0O1wKQEAgLTEyODcsNyArMTI4OSw3IEBACiAJQGlmIHRlc3QgLW4gIkBjb21wYXRsaWJAIjsgdGhlblwKIAkJc2V0IC14O1wKIAkJY2QgJChERVNURElSKSQobGliZGlyKTtcCi0JCWZvciBleHQgaW4gYSBsYSBzbzsgZG9cCisJCWZvciBleHQgaW4gYSBsYSBzbyBzbCBkeWxpYjsgZG9cCiAJCQlybSAtZiBsaWJwbmcuJCRleHQ7XAogCQlkb25lO1wKIAlmaQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDQzMzAwMzAuLjBmMDM2NjQgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi1SRUFETUUgZm9yIGxpYnBuZyB2ZXJzaW9uIDEuMC4yNiAtIE1heSAxNSwgMjAwNyAoc2hhcmVkIGxpYnJhcnkgMTAuMCkKK1JFQURNRSBmb3IgbGlicG5nIHZlcnNpb24gMS4wLjI3cmMxIC0gSnVseSAzMSwgMjAwNyAoc2hhcmVkIGxpYnJhcnkgMTAuMCkKIFNlZSB0aGUgbm90ZSBhYm91dCB2ZXJzaW9uIG51bWJlcnMgbmVhciB0aGUgdG9wIG9mIHBuZy5oCiAKIFNlZSBJTlNUQUxMIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGluc3RhbGwgbGlicG5nLgpAQCAtMTkwLDExICsxOTAsMTEgQEAKICAgICAgICBkZXNjcmlwLm1tcyAgICAgID0+ICBWTVMgbWFrZWZpbGUgZm9yIE1NUyBvciBNTUsKICAgICAgICBtYWtlZmlsZS5zdGQgICAgID0+ICBHZW5lcmljIFVOSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5lbGYgICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgc3ltYm9sIHZlcnNpb25pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yN3JjMSkKICAgICAgICBtYWtlZmlsZS5saW51eCAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTAuc28uMC4xLjAuMjdyYzEpCiAgICAgICAgbWFrZWZpbGUuZ2NtbXggICA9PiAgTGludXgvRUxGIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYXNzZW1ibGVyIGNvZGUgdHVuZWQgZm9yIEludGVsIE1NWCBwbGF0Zm9ybSkKICAgICAgICBtYWtlZmlsZS5nY2MgICAgID0+ICBHZW5lcmljIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQogICAgICAgIG1ha2VmaWxlLmtuciAgICAgPT4gIEFyY2hhaWMgVU5JWCBNYWtlZmlsZSB0aGF0IGNvbnZlcnRzIGZpbGVzIHdpdGgKQEAgLTIxNiwxMiArMjE2LDEyIEBACiAgICAgICAgbWFrZWZpbGUub3BlbmJzZCA9PiAgT3BlbkJTRCBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNnaSAgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgSVJJWCAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYikKICAgICAgICBtYWtlZmlsZS5zZ2djYyAgID0+ICBTaWxpY29uIEdyYXBoaWNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxKQogICAgICAgIG1ha2VmaWxlLnN1bm9zICAgPT4gIFN1biBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNvbGFyaXMgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEwLnNvLjAuMS4wLjI3cmMxKQogICAgICAgIG1ha2VmaWxlLnNvOSAgICAgPT4gIFNvbGFyaXMgOSBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTAuc28uMC4xLjAuMjYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMC5zby4wLjEuMC4yN3JjMSkKICAgICAgICBtYWtlZmlsZS4zMnN1bnUgID0+ICBTdW4gVWx0cmEgMzItYml0IG1ha2VmaWxlCiAgICAgICAgbWFrZWZpbGUuNjRzdW51ICA9PiAgU3VuIFVsdHJhIDY0LWJpdCBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNjbyAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCmRpZmYgLS1naXQgYS9ZMktJTkZPIGIvWTJLSU5GTwppbmRleCBhODIwZWFlLi5jMjBiMWI1IDEwMDY0NAotLS0gYS9ZMktJTkZPCisrKyBiL1kyS0lORk8KQEAgLTEsMTMgKzEsMTMgQEAKICAgIFkySyBjb21wbGlhbmNlIGluIGxpYnBuZzoKICAgID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgICAgTWF5IDE1LCAyMDA3CisgICAgICBKdWx5IDMxLCAyMDA3CiAKICAgICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAgICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiAgICAgICBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi0gICAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMjYgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCisgICAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMjdyYzEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiAgICAgICB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogICAgICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlOWZlMDBjLi5mNjc0YjA3IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEgZm9yIGxpYnBuZyAxLjAuMjYuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgbGlicG5nIDEuMC4yN3JjMS4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPHBuZy1tbmctaW1wbGVtZW50QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4uCiAjCkBAIC03MjgsOCArNzI4LDggQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdsaWJwbmcnCiBQQUNLQUdFX1RBUk5BTUU9J2xpYnBuZycKLVBBQ0tBR0VfVkVSU0lPTj0nMS4wLjI2JwotUEFDS0FHRV9TVFJJTkc9J2xpYnBuZyAxLjAuMjYnCitQQUNLQUdFX1ZFUlNJT049JzEuMC4yN3JjMScKK1BBQ0tBR0VfU1RSSU5HPSdsaWJwbmcgMS4wLjI3cmMxJwogUEFDS0FHRV9CVUdSRVBPUlQ9J3BuZy1tbmctaW1wbGVtZW50QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCcKIAogYWNfdW5pcXVlX2ZpbGU9InBuZ2dldC5jIgpAQCAtODQ2LDYgKzg0Niw3IEBACiBDQ0RFUE1PREUKIGFtX19mYXN0ZGVwQ0NfVFJVRQogYW1fX2Zhc3RkZXBDQ19GQUxTRQorU0VECiBidWlsZAogYnVpbGRfY3B1CiBidWlsZF92ZW5kb3IKQEAgLTg1Nyw3ICs4NTgsNiBAQAogR1JFUAogRUdSRVAKIENQUAotU0VECiBMTl9TCiBFQ0hPCiBBUgpAQCAtMTQwNSw3ICsxNDA1LDcgQEAKICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KICAgY2F0IDw8X0FDRU9GCi1cYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsaWJwbmcgMS4wLjI2IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYnBuZyAxLjAuMjdyYzEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgogCiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KIApAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJwbmcgMS4wLjI2OiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgbGlicG5nIDEuMC4yN3JjMToiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xNTg1LDcgKzE1ODUsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLWxpYnBuZyBjb25maWd1cmUgMS4wLjI2CitsaWJwbmcgY29uZmlndXJlIDEuMC4yN3JjMQogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxCiAKIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKQEAgLTE1OTksNyArMTU5OSw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgbGlicG5nICRhc19tZSAxLjAuMjYsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgbGlicG5nICRhc19tZSAxLjAuMjdyYzEsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjI2OSw3ICsyMjY5LDcgQEAKIAogIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgogIFBBQ0tBR0U9J2xpYnBuZycKLSBWRVJTSU9OPScxLjAuMjYnCisgVkVSU0lPTj0nMS4wLjI3cmMxJwogCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTI0NDAsMTAgKzI0NDAsMTAgQEAKIAogCiAKLVBOR0xJQl9WRVJTSU9OPTEuMC4yNgorUE5HTElCX1ZFUlNJT049MS4wLjI3cmMxCiBQTkdMSUJfTUFKT1I9MQogUE5HTElCX01JTk9SPTAKLVBOR0xJQl9SRUxFQVNFPTI2CitQTkdMSUJfUkVMRUFTRT0yNwogCiAKIApAQCAtMzU1OCwxMiArMzU1OCwxMyBAQAogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKICAgICAgIGZpCiAgICAgZG9uZQogICBkb25lCiBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiBsdF9hY19tYXg9MAogbHRfYWNfY291bnQ9MAogIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKQEAgLTM1OTgsNiArMzU5OSw3IEBACiBmaQogCiBTRUQ9JGx0X2N2X3BhdGhfU0VECisKIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNFRCIgPiY1CiBlY2hvICIke0VDSE9fVH0kU0VEIiA+JjY7IH0KIApAQCAtNDU1MCw4ICs0NTUyLDggQEAKIGVjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjY7IH0KIE5NPSIkbHRfY3ZfcGF0aF9OTSIKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbmlzZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbmlzZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQogaWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbgogICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQpAQCAtNDU5MiwxNiArNDU5NCwyMiBAQAogCiBtaW5ndyogfCBwdzMyKikKICAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4KLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKICAgOzsKIAogZGFyd2luKiB8IHJoYXBzb2R5KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAotZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgIGkqODYgKQpAQCAtNDYzOSw3ICs0NjQ3LDcgQEAKICAgZXNhYwogICA7OwogCi1pbnRlcml4MyopCitpbnRlcml4WzMtOV0qKQogICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJwogICA7OwpAQCAtNDY1NSw3ICs0NjYzLDcgQEAKICAgOzsKIAogIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqKQorbGludXgqIHwgaypic2QqLWdudSkKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIApAQCAtNDY4OSw2ICs0Njk3LDEwIEBACiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCiBzb2xhcmlzKikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKQEAgLTQ3NzYsNyArNDc4OCw3IEBACiAgIDs7CiAqLSotaXJpeDYqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJyNsaW5lIDQ3NzkgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBlY2hvICcjbGluZSA0NzkxICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwpAQCAtNDgxMSw3ICs0ODIzLDggQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogCi14ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQoreDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQpAQCAtNDgyMiw2ICs0ODM1LDkgQEAKICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCiAgICAgKjMyLWJpdCopCiAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKyAgICAgICAgICA7OwogICAgICAgICB4ODZfNjQtKmxpbnV4KikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCiAgICAgICAgICAgOzsKQEAgLTQ4MzgsNiArNDg1NCw5IEBACiAgICAgICA7OwogICAgICo2NC1iaXQqKQogICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKyAgICAgICAgICA7OwogICAgICAgICB4ODZfNjQtKmxpbnV4KikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKICAgICAgICAgICA7OwpAQCAtNjQwMSwyNCArNjQyMCwyNyBAQAogICAgIGZpCiAgICAgOzsKICAgKikKLSAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQotICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0Ci0gICAgIyB3ZSBjYW4ndCB0ZWxsLgotICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCiAJICAgICAgID0gIlhYJHRlc3RzdHJpbmciKSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPSRuZXdfcmVzdWx0ICYmCi0JICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAotICAgIGRvCi0gICAgICBpPWBleHByICRpICsgMWAKLSAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwotICAgIGRvbmUKLSAgICB0ZXN0c3RyaW5nPQotICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQotICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgIyBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKwkgICAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgorCSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0kbmV3X3Jlc3VsdCAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQorICAgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KKyAgICAgICMgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQogICAgIDs7CiAgIGVzYWMKIApAQCAtNjQzNSw2ICs2NDU3LDcgQEAKIAogCiAKKwogIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNjsgfQpAQCAtNjQ3Miw3ICs2NDk1LDcgQEAKICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKICAgOzsKLWxpbnV4KikKK2xpbnV4KiB8IGsqYnNkKi1nbnUpCiAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCiAgICAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJwogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCkBAIC03MDIzLDcgKzcwNDYsNyBAQAogdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KIAogIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwogb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwogb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KIApAQCAtNzIyMywxMCArNzI0NiwxMCBAQAogb2JqZXh0PSRvYmpleHQKIAogIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwO1xuIgorbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgogCiAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9XG4nCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCiAKIAogIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KQEAgLTcyNDEsMTMgKzcyNjQsMTMgQEAKIAogIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAogJHJtIGNvbmZ0ZXN0KgogCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLXByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiAkcm0gY29uZnRlc3QqCkBAIC03MjY3LDcgKzcyOTAsNyBAQAogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwogICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgogICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KQEAgLTcyNzgsMTEgKzczMDEsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzI4MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjczMDQ6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzI4NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6NzMwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KQEAgLTczMzMsMTMgKzczNTYsMTUgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCiAgICAgICA7OwogCi0gICAgYmVvcyogfCBjeWd3aW4qIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKICAgICAgIDs7CiAKQEAgLTczNDksNyArNzM3NCw3IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCiAgICAgICA7OwogCi0gICAgaW50ZXJpeDMqKQorICAgIGludGVyaXhbMy05XSopCiAgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgogICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCiAgICAgICA7OwpAQCAtNzQwNyw3ICs3NDMyLDcgQEAKICAgICAgICBlc2FjCiAgICAgICAgOzsKIAotICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCkBAIC03NDQwLDcgKzc0NjUsNyBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgOzsKIAotICAgIGxpbnV4KikKKyAgICBsaW51eCogfCBrKmJzZCotZ251KQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgIGljYyogfCBlY2MqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCkBAIC03NDU5LDYgKzc0ODQsMjIgQEAKICAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCiAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwllc2FjCisJOzsKICAgICAgIGVzYWMKICAgICAgIDs7CiAKQEAgLTc0NjgsNiArNzUwOSwxMCBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAorICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKwogICAgIHNvbGFyaXMqKQogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwpAQCAtNzUzNSw3ICs3NTgwLDcgQEAKIGVsc2UKICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgogICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KQEAgLTc1NDYsMTEgKzc1OTEsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzU0OTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc1OTQ6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzU1MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6NzU5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KQEAgLTc1OTksNyArNzY0NCw3IEBACiAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCiAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgogICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCkBAIC03NjM5LDcgKzc2ODQsNyBAQAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAogICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTc2NTAsMTEgKzc2OTUsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzY1MzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc2OTg6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo3NjU3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTo3NzAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC03ODQ2LDcgKzc4OTEsNyBAQAogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXSAvcy8uKiBcKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKIAogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCkBAIC03ODY0LDcgKzc5MDksNyBAQAogICAgICAgZmkKICAgICAgIDs7CiAKLSAgICBpbnRlcml4MyopCisgICAgaW50ZXJpeFszLTldKikKICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKQEAgLTc4NzksNyArNzkyNCw3IEBACiAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwogICAgICAgOzsKIAotICAgIGxpbnV4KikKKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgogCXRtcF9hZGRmbGFnPQogCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgpAQCAtNzg5NywxMyArNzk0MiwyMiBAQAogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwogCWVzYWMKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKikKKwkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKIAlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgogICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CiAgICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAJZmkKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KQEAgLTgwNjIsNyArODExNiw3IEBACiAgIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCiAgIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgIAkgIDoKIAkgIGVsc2UKICAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgogICAJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKQEAgLTgxMzYsMTEgKzgxOTAsMTggQEAKICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCiAgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KIAotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2AKK2x0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCS9eMC8geworCSAgICBzL14wICAqXCguKlwpJC9cMS8KKwkgICAgcAorCX0KKyAgICB9JworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCiAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQotfSdgOyBmaQoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCiBlbHNlCiAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CkBAIC04MTk1LDExICs4MjU2LDE4IEBACiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgogICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQotfSdgCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAogIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYDsgZmkKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaQogZWxzZQogICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQpAQCAtODI1Myw3ICs4MzIxLDcgQEAKICAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCiAgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSd0cnVlJwogICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAvT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKICAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKICAgICAgIDs7CkBAIC04Mjk1LDEwICs4MzYzLDEwIEBACiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgICB4bGMqKQogICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHZlcnN0cmluZycKKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwogICAgICAgICAgbW9kdWxlX2NtZHM9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwogICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwogICAgICAgICAgIDs7CiAgICAgICAgKikKQEAgLTgzMzgsNyArODQwNiw3IEBACiAgICAgICA7OwogCiAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQogICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKQEAgLTg0NjAsMjQgKzg1MjgsMjggQEAKICAgICAgIDs7CiAKICAgICBvcGVuYnNkKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisgICAgICAgIGZpCiAgICAgICBlbHNlCi0gICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCSBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0JICAgOzsKLQkgKikKLQkgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgIDs7Ci0gICAgICAgZXNhYworCWxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAKQEAgLTg1MzYsMTcgKzg2MDgsMTYgQEAKICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKICAgICAgICopCi0gCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKLSAJIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCi0gCSMgd2l0aG91dCAkd2wsIGlmZiB3ZSBkbyBub3QgbGluayB3aXRoICRMRC4KLSAJIyBMdWNraWx5LCBnY2Mgc3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IHdlIG5lZWQgZm9yIFN1biBTdHVkaW8uCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCiAgCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0gCWNhc2UgJHdsYXJjIGluCi0gCScnKQotIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OwotIAkqKQotIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7Ci0gCWVzYWMgOzsKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CiAgICAgICBlc2FjCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwogICAgICAgOzsKQEAgLTg2MDMsNyArODY3NCw3IEBACiAgICAgICBmaQogICAgICAgOzsKIAotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCiAgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KQEAgLTg2ODAsNyArODc1MSw3IEBACiAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQogZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9CiAgICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAKICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQpAQCAtODczOCwxNyArODgwOSw1NSBAQAogdmVyc2lvbl90eXBlPW5vbmUKIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgIGlmIGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCiAgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgogICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwogICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAogICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKICAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgZmkKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CisgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCiBlbHNlCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKIGZpCkBAIC04OTA4LDEyICs5MDE3LDggQEAKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICiAgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCi0gIGZpCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKICAgOzsKIApAQCAtODkzMCwxOCArOTAzNSw2IEBACiAgIGR5bmFtaWNfbGlua2VyPW5vCiAgIDs7CiAKLWtmcmVlYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCi0gIDs7Ci0KIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKICAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwogICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KQEAgLTg5NzksNyArOTA3Miw3IEBACiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7Ci0gIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7CkBAIC05MDQyLDcgKzkxMzUsNyBAQAogICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKICAgOzsKIAotaW50ZXJpeDMqKQoraW50ZXJpeFszLTldKikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTkwOTcsNyArOTE5MCw3IEBACiAgIDs7CiAKICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KikKK2xpbnV4KiB8IGsqYnNkKi1nbnUpCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCkBAIC05MTEzLDcgKzkyMDYsNyBAQAogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtOTEyNiwxOCArOTIxOSw2IEBACiAgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCiAgIDs7CiAKLWtuZXRic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKLSAgOzsKLQogbmV0YnNkKikKICAgdmVyc2lvbl90eXBlPXN1bm9zCiAgIG5lZWRfbGliX3ByZWZpeD1ubwpAQCAtOTIxOSw2ICs5MzAwLDEwIEBACiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgogICA7OwogCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKwogc29sYXJpcyopCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBuZWVkX2xpYl9wcmVmaXg9bm8KQEAgLTkzNzIsNiArOTQ1Nyw3IEBACiAgICBkYXJ3aW4qKQogICAgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCiAgICAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCiAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CiBlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQogICAgICAgIGVsc2UKQEAgLTk5NTgsNyArMTAwNDQsNyBAQAogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDk5NjEgImNvbmZpZ3VyZSIKKyNsaW5lIDEwMDQ3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAwNTgsNyArMTAxNDQsNyBAQAogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEwMDYxICJjb25maWd1cmUiCisjbGluZSAxMDE0NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZiBIQVZFX0RMRkNOX0gKQEAgLTEwMjU2LDYgKzEwMzQyLDcgQEAKICAgICBtb2R1bGVfY21kcyBcCiAgICAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgICAgZml4X3NyY2ZpbGVfcGF0aCBcCiAgICAgZXhjbHVkZV9leHBzeW1zIFwKICAgICBpbmNsdWRlX2V4cHN5bXM7IGRvCiAKQEAgLTEwMzAwLDcgKzEwMzg3LDcgQEAKICMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCiAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICMKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNwogIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6CkBAIC0xMDYyNCw3ICsxMDcxMSw3IEBACiBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKIAogIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGgiCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCiAKICMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCkBAIC0xMDc5MywxMCArMTA4ODAsMTAgQEAKIG9iamV4dF9DWFg9JG9iamV4dAogCiAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7XG4iCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCiAKICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9XG4nCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JwogCiAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCiAKQEAgLTEwODEyLDEzICsxMDg5OSwxMyBAQAogCiAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1wcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiAkcm0gY29uZnRlc3QqCiAKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKICRybSBjb25mdGVzdCoKQEAgLTExMDc3LDcgKzExMTY0LDcgQEAKIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJdGhlbgogCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgOgogCWVsc2UKIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKIAkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKQEAgLTExMTUxLDExICsxMTIzOCwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTExMjExLDExICsxMTMwNSwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTExMzM0LDEwICsxMTQzNSwxMCBAQAogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgeGxjKikKICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwogICAgICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCiAgICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKICAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCiAgICAgICAgICAgOzsKICAgICAgICAqKQpAQCAtMTEzNzEsNyArMTE0NzIsNyBAQAogICBmcmVlYnNkLWVsZiopCiAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCiAgICAgOzsKLSAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQogICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCiAgICAgIyBjb252ZW50aW9ucwogICAgIGxkX3NobGlic19DWFg9eWVzCkBAIC0xMTQyMCw5ICsxMTUyMSw3IEBACiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CiAKICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0nK2IgJGxpYmRpcicKLSAgICAgICAgOzsKKyAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwogICAgICAgKikKIAlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwogICAgICAgICA7OwpAQCAtMTE0OTAsNyArMTE1ODksNyBAQAogCTs7CiAgICAgZXNhYwogICAgIDs7Ci0gIGludGVyaXgzKikKKyAgaW50ZXJpeFszLTldKikKICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCiAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKQEAgLTExNTMwLDcgKzExNjI5LDcgQEAKICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKICAgICA7OwotICBsaW51eCopCisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgIEtDQyopCiAJIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgpAQCAtMTE2MTAsNiArMTE3MDksMjkgQEAKIAkjIGRlcGVuZGVuY2llcy4KIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwogCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQysrIDUuOQorCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisKKwkgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICMgd291bGQgYmUgYmV0dGVyLgorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICMgaW4gdGhlIGFyY2hpdmUuCisJICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgIDs7CisJZXNhYworCTs7CiAgICAgZXNhYwogICAgIDs7CiAgIGx5bnhvcyopCkBAIC0xMTY0OCwxNiArMTE3NzAsMjAgQEAKICAgICBsZF9zaGxpYnNfQ1hYPW5vCiAgICAgOzsKICAgb3BlbmJzZCopCi0gICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIGZpCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICBlbHNlCisgICAgICBsZF9zaGxpYnNfQ1hYPW5vCiAgICAgZmkKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKICAgICA7OwogICBvc2YzKikKICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgpAQCAtMTE4MTksMTUgKzExOTQ1LDEwIEBACiAJY2FzZSAkaG9zdF9vcyBpbgogCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwogCSAgKikKLQkgICAgIyBUaGUgQysrIGNvbXBpbGVyIGlzIHVzZWQgYXMgbGlua2VyIHNvIHdlIG11c3QgdXNlICR3bAotCSAgICAjIGZsYWcgdG8gcGFzcyB0aGUgY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcgc3lzdGVtCi0JICAgICMgbGlua2VyLiBXZSBtdXN0IGFsc28gcGFzcyBlYWNoIGNvbnZpZW5jZSBsaWJyYXJ5IHRocm91Z2gKLQkgICAgIyB0byB0aGUgc3lzdGVtIGxpbmtlciBiZXR3ZWVuIGFsbGV4dHJhY3QvZGVmYXVsdGV4dHJhY3QuCi0JICAgICMgVGhlIEMrKyBjb21waWxlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKLQkgICAgIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCi0JICAgICMgd2l0aG91dCAkd2wuCisJICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCiAJICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3RgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCiAJICAgIDs7CiAJZXNhYwogCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwpAQCAtMTE4NzQsNiArMTE5OTUsMTIgQEAKIAkgIGZpCiAKIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICR3bCRsaWJkaXInCisJICBjYXNlICRob3N0X29zIGluCisJICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisJICAqKQorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkgICAgOzsKKwkgIGVzYWMKIAlmaQogCTs7CiAgICAgZXNhYwpAQCAtMTIwNjUsNyArMTIxOTIsNyBAQAogCiAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgogY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeDMqKQoraW50ZXJpeFszLTldKikKICAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgogICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgogICBwcmVkZXBfb2JqZWN0c19DWFg9CkBAIC0xMjA3MywxMyArMTIyMDAsNDYgQEAKICAgcG9zdGRlcHNfQ1hYPQogICA7OwogCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisgICAgIworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCiBzb2xhcmlzKikKICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKICAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgogICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKICAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIHBvc3RkZXBzX0NYWD0nLWxDc3RkIC1sQ3J1bicKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKICAgICA7OwogICBlc2FjCiAgIDs7CkBAIC0xMjExNiwxMiArMTIyNzYsMTQgQEAKICAgICAgICMgbGlrZSBgLW02ODA0MCcuCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKICAgICAgIDs7Ci0gICAgYmVvcyogfCBjeWd3aW4qIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KICAgICAgIDs7Ci0gICAgbWluZ3cqIHwgb3MyKiB8IHB3MzIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJwogICAgICAgOzsKICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQpAQCAtMTIxMzMsNyArMTIyOTUsNyBAQAogICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CiAgICAgICA7OwotICAgIGludGVyaXgzKikKKyAgICBpbnRlcml4WzMtOV0qKQogICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KICAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgogICAgICAgOzsKQEAgLTEyMTk5LDcgKzEyMzYxLDcgQEAKIAkgICAgOzsKIAllc2FjCiAJOzsKLSAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCiAJIyBGcmVlQlNEIHVzZXMgR05VIEMrKwogCTs7CiAgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKQEAgLTEyMjQyLDcgKzEyNDA0LDcgQEAKIAkgICAgOzsKIAllc2FjCiAJOzsKLSAgICAgIGxpbnV4KikKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAkgIEtDQyopCiAJICAgICMgS0FJIEMrKyBDb21waWxlcgpAQCAtMTIyNjksNiArMTI0MzEsMTQgQEAKIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKIAkgICAgOzsKIAkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYwogCSAgICA7OwogCWVzYWMKIAk7OwpAQCAtMTIzODMsNyArMTI1NTMsNyBAQAogZWxzZQogICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCkBAIC0xMjM5NCwxMSArMTI1NjQsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTIzOTc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMjU2NzogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxMjQwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTI1NzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCkBAIC0xMjQ0Nyw3ICsxMjYxNyw3IEBACiAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubwogICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKICAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwpAQCAtMTI0ODcsNyArMTI2NTcsNyBAQAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAogICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTEyNDk4LDExICsxMjY2OCwxMSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMjUwMTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyNjcxOiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI1MDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjEyNjc1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC0xMjU2OCw3ICsxMjczOCw3IEBACiAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgogICA7OwogICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU10gL3MvLiogXChbXiBdKlwpL1wxIERBVEEvOy9eLiogX19ubV9fL3MvXi4qIF9fbm1fX1woW14gXSpcKSBbXiBdKi9cMSBEQVRBLzsvXkkgL2Q7L15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvOy9eLipbIF1fX25tX18vcy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCiAgIDs7CiAgICopCiAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKQEAgLTEyNTk5LDcgKzEyNzY5LDcgQEAKICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KICAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAogICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CkBAIC0xMjY1NywyMCArMTI4MjcsNyBAQAogdmVyc2lvbl90eXBlPW5vbmUKIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCi0gICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgotICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwotICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAotICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgZmkKLWVsc2UKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotZmkKKwogbmVlZF9saWJfcHJlZml4PXVua25vd24KIGhhcmRjb2RlX2ludG9fbGlicz1ubwogCkBAIC0xMjgyNywxMiArMTI5ODQsNyBAQAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKICAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0gICMgQXBwbGUncyBnY2MgcHJpbnRzICdnY2MgLXByaW50LXNlYXJjaC1kaXJzJyBkb2Vzbid0IG9wZXJhdGUgdGhlIHNhbWUuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgdHIgIlxuIiAiJFBBVEhfU0VQQVJBVE9SIiB8IHNlZCAtZSAncy9saWJyYXJpZXM6L0BsaWJyYXJpZXM6LycgfCB0ciAiQCIgIlxuIiB8IGdyZXAgIl5saWJyYXJpZXM6IiB8IHNlZCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciIC1lICJzLCRQQVRIX1NFUEFSQVRPUiwgLGciIC1lICJzLC4qLCYgL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYixnImAKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYicKLSAgZmkKKwogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKICAgOzsKIApAQCAtMTI4NDksMTggKzEzMDAxLDYgQEAKICAgZHluYW1pY19saW5rZXI9bm8KICAgOzsKIAota2ZyZWVic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKLSAgOzsKLQogZnJlZWJzZCogfCBkcmFnb25mbHkqKQogICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CiAgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgpAQCAtMTI4OTgsNyArMTMwMzgsNyBAQAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgICA7OwotICBmcmVlYnNkKikgIyBmcm9tIDQuNiBvbgorICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgICA7OwpAQCAtMTI5NjEsNyArMTMxMDEsNyBAQAogICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKICAgOzsKIAotaW50ZXJpeDMqKQoraW50ZXJpeFszLTldKikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTEzMDE2LDcgKzEzMTU2LDcgQEAKICAgOzsKIAogIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqKQorbGludXgqIHwgaypic2QqLWdudSkKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTEzMDMyLDcgKzEzMTcyLDcgQEAKIAogICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAogICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCiAgIGZpCiAKQEAgLTEzMDQ1LDE4ICsxMzE4NSw2IEBACiAgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCiAgIDs7CiAKLWtuZXRic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKLSAgOzsKLQogbmV0YnNkKikKICAgdmVyc2lvbl90eXBlPXN1bm9zCiAgIG5lZWRfbGliX3ByZWZpeD1ubwpAQCAtMTMxMzgsNiArMTMyNjYsMTAgQEAKICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCiAgIDs7CiAKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCiBzb2xhcmlzKikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwpAQCAtMTMzMzIsNiArMTM0NjQsNyBAQAogICAgIG1vZHVsZV9jbWRzX0NYWCBcCiAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCiAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKKyAgICBmaXhfc3JjZmlsZV9wYXRoX0NYWCBcCiAgICAgZXhjbHVkZV9leHBzeW1zX0NYWCBcCiAgICAgaW5jbHVkZV9leHBzeW1zX0NYWDsgZG8KIApAQCAtMTM2NTIsNyArMTM3ODUsNyBAQAogc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCiAKICMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9IiRmaXhfc3JjZmlsZV9wYXRoX0NYWCIKK2ZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKIAogIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCkBAIC0xMzc0MywxMCArMTM4NzYsMTcgQEAKIG9iamV4dF9GNzc9JG9iamV4dAogCiAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSIgICAgICBzdWJyb3V0aW5lIHRcbiAgICAgIHJldHVyblxuICAgICAgZW5kXG4iCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKIAogIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iICAgICAgcHJvZ3JhbSB0XG4gICAgICBlbmRcbiIKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKIAogIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgogCkBAIC0xMzc2MiwxMyArMTM5MDIsMTMgQEAKIAogIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAogJHJtIGNvbmZ0ZXN0KgogCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLXByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiAkcm0gY29uZnRlc3QqCkBAIC0xMzg1NSwxMyArMTM5OTUsMTUgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwogICAgICAgOzsKIAotICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQogICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCiAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLURETExfRVhQT1JUJwogICAgICAgOzsKIApAQCAtMTM4NzEsNyArMTQwMTMsNyBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZm5vLWNvbW1vbicKICAgICAgIDs7CiAKLSAgICBpbnRlcml4MyopCisgICAgaW50ZXJpeFszLTldKikKICAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCiAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KICAgICAgIDs7CkBAIC0xMzkyOSw3ICsxNDA3MSw3IEBACiAgICAgICAgZXNhYwogICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKQEAgLTEzOTYyLDcgKzE0MTA0LDcgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCiAgICAgICA7OwogCi0gICAgbGludXgqKQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgaWNjKiB8IGVjYyopCiAJbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCkBAIC0xMzk4MSw2ICsxNDEyMywyMiBAQAogICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKICAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nJworCSAgOzsKKwllc2FjCisJOzsKICAgICAgIGVzYWMKICAgICAgIDs7CiAKQEAgLTEzOTkwLDYgKzE0MTQ4LDEwIEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAorICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKICAgICBzb2xhcmlzKikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwpAQCAtMTQwNTcsNyArMTQyMTksNyBAQAogZWxzZQogICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9bm8KICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCkBAIC0xNDA2OCwxMSArMTQyMzAsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQwNzE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDIzMzogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNDA3NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTQyMzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCkBAIC0xNDEyMSw3ICsxNDI4Myw3IEBACiAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz1ubwogICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKICAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwpAQCAtMTQxNjEsNyArMTQzMjMsNyBAQAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAogICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTE0MTcyLDExICsxNDMzNCwxMSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDE3NTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE0MzM3OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTQxNzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjE0MzQxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC0xNDM2OCw3ICsxNDUzMCw3IEBACiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXSAvcy8uKiBcKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCiAKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKQEAgLTE0Mzg2LDcgKzE0NTQ4LDcgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgaW50ZXJpeDMqKQorICAgIGludGVyaXhbMy05XSopCiAgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCkBAIC0xNDQwMSw3ICsxNDU2Myw3IEBACiAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKLSAgICBsaW51eCopCisgICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KIAl0bXBfYWRkZmxhZz0KIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KQEAgLTE0NDE5LDEzICsxNDU4MSwyMiBAQAogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwogCWVzYWMKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqKQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7CisJZXNhYworCWFyY2hpdmVfY21kc19GNzc9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKIAlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgogICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogCWZpCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzX0Y3Nz1ubwpAQCAtMTQ1ODQsNyArMTQ3NTUsNyBAQAogICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgogICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgCSAgOgogCSAgZWxzZQogICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCiAgIAkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKQEAgLTE0NjQ4LDExICsxNDgxOSwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTE0Njk3LDExICsxNDg3NSwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTE0NzU1LDcgKzE0OTQwLDcgQEAKICAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCiAgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0ndHJ1ZScKICAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0nbGliIC9PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgb2xkX2FyY2hpdmVfY21kc19GNzc9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKICAgICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3PSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwogICAgICAgOzsKQEAgLTE0Nzk3LDEwICsxNDk4MiwxMCBAQAogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgeGxjKikKICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwogICAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKICAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwogICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKICAgICAgICAgICA7OwogICAgICAgICopCkBAIC0xNDg0MCw3ICsxNTAyNSw3IEBACiAgICAgICA7OwogCiAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQogICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwogICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKQEAgLTE0OTYyLDI0ICsxNTE0NywyOCBAQAogICAgICAgOzsKIAogICAgIG9wZW5ic2QqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwloYXJkY29kZV9kaXJlY3RfRjc3PXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisgICAgICAgIGZpCiAgICAgICBlbHNlCi0gICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCSBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLQkgICA7OwotCSAqKQotCSAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICA7OwotICAgICAgIGVzYWMKKwlsZF9zaGxpYnNfRjc3PW5vCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtMTUwMzgsMTcgKzE1MjI3LDE2IEBACiAgICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CiAgICAgICAqKQotIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGxpbmtlciBvcHRpb25zIHNvIHdlCi0gCSMgY2Fubm90IGp1c3QgcGFzcyB0aGUgY29udmllbmNlIGxpYnJhcnkgbmFtZXMgdGhyb3VnaAotIAkjIHdpdGhvdXQgJHdsLCBpZmYgd2UgZG8gbm90IGxpbmsgd2l0aCAkTEQuCi0gCSMgTHVja2lseSwgZ2NjIHN1cHBvcnRzIHRoZSBzYW1lIHN5bnRheCB3ZSBuZWVkIGZvciBTdW4gU3R1ZGlvLgorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgogIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotIAljYXNlICR3bGFyYyBpbgotIAknJykKLSAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnIDs7Ci0gCSopCi0gCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7Ci0gCWVzYWMgOzsKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKICAgICAgIGVzYWMKICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwogICAgICAgOzsKQEAgLTE1MTA1LDcgKzE1MjkzLDcgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyopCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwpAQCAtMTUxODIsNyArMTUzNzAsNyBAQAogICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQogICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogCiAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKQEAgLTE1MjQwLDIwICsxNTQyOCw3IEBACiB2ZXJzaW9uX3R5cGU9bm9uZQogZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgogc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maQorCiBuZWVkX2xpYl9wcmVmaXg9dW5rbm93bgogaGFyZGNvZGVfaW50b19saWJzPW5vCiAKQEAgLTE1NDEwLDEyICsxNTU4NSw3IEBACiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAogICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLSAgIyBBcHBsZSdzIGdjYyBwcmludHMgJ2djYyAtcHJpbnQtc2VhcmNoLWRpcnMnIGRvZXNuJ3Qgb3BlcmF0ZSB0aGUgc2FtZS4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCB0ciAiXG4iICIkUEFUSF9TRVBBUkFUT1IiIHwgc2VkIC1lICdzL2xpYnJhcmllczovQGxpYnJhcmllczovJyB8IHRyICJAIiAiXG4iIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyIgLWUgInMsJFBBVEhfU0VQQVJBVE9SLCAsZyIgLWUgInMsLiosJiAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliLGciYAotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliJwotICBmaQorCiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwogICA7OwogCkBAIC0xNTQzMiwxOCArMTU2MDIsNiBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogCi1rZnJlZWJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJwotICA7OwotCiBmcmVlYnNkKiB8IGRyYWdvbmZseSopCiAgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKICAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCkBAIC0xNTQ4MSw3ICsxNTYzOSw3IEBACiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7Ci0gIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7CkBAIC0xNTU0NCw3ICsxNTcwMiw3IEBACiAgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwogICA7OwogCi1pbnRlcml4MyopCitpbnRlcml4WzMtOV0qKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtMTU1OTksNyArMTU3NTcsNyBAQAogICA7OwogCiAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCopCitsaW51eCogfCBrKmJzZCotZ251KQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtMTU2MTUsNyArMTU3NzMsNyBAQAogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtMTU2MjgsMTggKzE1Nzg2LDYgQEAKICAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKICAgOzsKIAota25ldGJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJwotICA7OwotCiBuZXRic2QqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKICAgbmVlZF9saWJfcHJlZml4PW5vCkBAIC0xNTcyMSw2ICsxNTg2NywxMCBAQAogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKICAgOzsKIAorcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKIHNvbGFyaXMqKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCkBAIC0xNTkxNSw2ICsxNjA2NSw3IEBACiAgICAgbW9kdWxlX2NtZHNfRjc3IFwKICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IFwKICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcgXAorICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3IFwKICAgICBleGNsdWRlX2V4cHN5bXNfRjc3IFwKICAgICBpbmNsdWRlX2V4cHN5bXNfRjc3OyBkbwogCkBAIC0xNjIzNSw3ICsxNjM4Niw3IEBACiBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKIAogIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGhfRjc3IgorZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAogCiAjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCiBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzcKQEAgLTE2MjkzLDEwICsxNjQ0NCwxMCBAQAogb2JqZXh0X0dDSj0kb2JqZXh0CiAKICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fVxuIgorbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCiAKICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHt9OyB9XG4nCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHt9OyB9JwogCiAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCiAKQEAgLTE2MzEyLDEzICsxNjQ2MywxMyBAQAogCiAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1wcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiAkcm0gY29uZnRlc3QqCiAKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKICRybSBjb25mdGVzdCoKQEAgLTE2MzU5LDcgKzE2NTEwLDcgQEAKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCkBAIC0xNjM3MCwxMSArMTY1MjEsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTYzNzM6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNjUyNDogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNjM3NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTY1Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCkBAIC0xNjQyNSwxMyArMTY1NzYsMTUgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwogICAgICAgOzsKIAotICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQogICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCiAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLURETExfRVhQT1JUJwogICAgICAgOzsKIApAQCAtMTY0NDEsNyArMTY1OTQsNyBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZm5vLWNvbW1vbicKICAgICAgIDs7CiAKLSAgICBpbnRlcml4MyopCisgICAgaW50ZXJpeFszLTldKikKICAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCiAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KICAgICAgIDs7CkBAIC0xNjQ5OSw3ICsxNjY1Miw3IEBACiAgICAgICAgZXNhYwogICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1ERExMX0VYUE9SVCcKQEAgLTE2NTMyLDcgKzE2Njg1LDcgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCiAgICAgICA7OwogCi0gICAgbGludXgqKQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgaWNjKiB8IGVjYyopCiAJbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCkBAIC0xNjU1MSw2ICsxNjcwNCwyMiBAQAogICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKICAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nJworCSAgOzsKKwllc2FjCisJOzsKICAgICAgIGVzYWMKICAgICAgIDs7CiAKQEAgLTE2NTYwLDYgKzE2NzI5LDEwIEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwogICAgICAgOzsKIAorICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKICAgICBzb2xhcmlzKikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwpAQCAtMTY2MjcsNyArMTY4MDAsNyBAQAogZWxzZQogICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9bm8KICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCkBAIC0xNjYzOCwxMSArMTY4MTEsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY2NDE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNjgxNDogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNjY0NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTY4MTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCkBAIC0xNjY5MSw3ICsxNjg2NCw3IEBACiAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj1ubwogICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKICAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KICAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwpAQCAtMTY3MzEsNyArMTY5MDQsNyBAQAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKLSAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKIAogICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTE2NzQyLDExICsxNjkxNSwxMSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNjc0NTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2OTE4OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY3NDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjE2OTIyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC0xNjkzOCw3ICsxNzExMSw3IEBACiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXSAvcy8uKiBcKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCiAKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKQEAgLTE2OTU2LDcgKzE3MTI5LDcgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgaW50ZXJpeDMqKQorICAgIGludGVyaXhbMy05XSopCiAgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCkBAIC0xNjk3MSw3ICsxNzE0NCw3IEBACiAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKLSAgICBsaW51eCopCisgICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KIAl0bXBfYWRkZmxhZz0KIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KQEAgLTE2OTg5LDEzICsxNzE2MiwyMiBAQAogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwogCWVzYWMKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqKQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7CisJZXNhYworCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKIAlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgogICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAkQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogCWZpCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzX0dDSj1ubwpAQCAtMTcxNTQsNyArMTczMzYsNyBAQAogICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgogICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKyAgCSAgOgogCSAgZWxzZQogICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCiAgIAkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKQEAgLTE3MjI4LDExICsxNzQxMCwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTE3Mjg3LDExICsxNzQ3NiwxOCBAQAogICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKICAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgogCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAorbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2A7IGZpCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKIGVsc2UKICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKQEAgLTE3MzQ1LDcgKzE3NTQxLDcgQEAKICAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCiAgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0ndHJ1ZScKICAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSj0nbGliIC9PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgb2xkX2FyY2hpdmVfY21kc19HQ0o9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKICAgICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwogICAgICAgOzsKQEAgLTE3Mzg3LDEwICsxNzU4MywxMCBAQAogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgeGxjKikKICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwogICAgICAgICAgbW9kdWxlX2NtZHNfR0NKPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKICAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwogICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKICAgICAgICAgICA7OwogICAgICAgICopCkBAIC0xNzQzMCw3ICsxNzYyNiw3IEBACiAgICAgICA7OwogCiAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQogICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwogICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKQEAgLTE3NTUyLDI0ICsxNzc0OCwyOCBAQAogICAgICAgOzsKIAogICAgIG9wZW5ic2QqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJworICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwloYXJkY29kZV9kaXJlY3RfR0NKPXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisgICAgICAgIGZpCiAgICAgICBlbHNlCi0gICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCSBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLQkgICA7OwotCSAqKQotCSAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICA7OwotICAgICAgIGVzYWMKKwlsZF9zaGxpYnNfR0NKPW5vCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtMTc2MjgsMTcgKzE3ODI4LDE2IEBACiAgICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CiAgICAgICAqKQotIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGxpbmtlciBvcHRpb25zIHNvIHdlCi0gCSMgY2Fubm90IGp1c3QgcGFzcyB0aGUgY29udmllbmNlIGxpYnJhcnkgbmFtZXMgdGhyb3VnaAotIAkjIHdpdGhvdXQgJHdsLCBpZmYgd2UgZG8gbm90IGxpbmsgd2l0aCAkTEQuCi0gCSMgTHVja2lseSwgZ2NjIHN1cHBvcnRzIHRoZSBzYW1lIHN5bnRheCB3ZSBuZWVkIGZvciBTdW4gU3R1ZGlvLgorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgogIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotIAljYXNlICR3bGFyYyBpbgotIAknJykKLSAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnIDs7Ci0gCSopCi0gCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7Ci0gCWVzYWMgOzsKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKICAgICAgIGVzYWMKICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwogICAgICAgOzsKQEAgLTE3Njk1LDcgKzE3ODk0LDcgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyopCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teix0ZXh0JwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwpAQCAtMTc3NzIsNyArMTc5NzEsNyBAQAogICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQogICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogCiAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKQEAgLTE3ODMwLDIwICsxODAyOSw3IEBACiB2ZXJzaW9uX3R5cGU9bm9uZQogZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgogc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maQorCiBuZWVkX2xpYl9wcmVmaXg9dW5rbm93bgogaGFyZGNvZGVfaW50b19saWJzPW5vCiAKQEAgLTE4MDAwLDEyICsxODE4Niw3IEBACiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAogICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLSAgIyBBcHBsZSdzIGdjYyBwcmludHMgJ2djYyAtcHJpbnQtc2VhcmNoLWRpcnMnIGRvZXNuJ3Qgb3BlcmF0ZSB0aGUgc2FtZS4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCB0ciAiXG4iICIkUEFUSF9TRVBBUkFUT1IiIHwgc2VkIC1lICdzL2xpYnJhcmllczovQGxpYnJhcmllczovJyB8IHRyICJAIiAiXG4iIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyIgLWUgInMsJFBBVEhfU0VQQVJBVE9SLCAsZyIgLWUgInMsLiosJiAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliLGciYAotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliJwotICBmaQorCiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwogICA7OwogCkBAIC0xODAyMiwxOCArMTgyMDMsNiBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogCi1rZnJlZWJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJwotICA7OwotCiBmcmVlYnNkKiB8IGRyYWdvbmZseSopCiAgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKICAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCkBAIC0xODA3MSw3ICsxODI0MCw3IEBACiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7Ci0gIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICAgIDs7CkBAIC0xODEzNCw3ICsxODMwMyw3IEBACiAgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwogICA7OwogCi1pbnRlcml4MyopCitpbnRlcml4WzMtOV0qKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtMTgxODksNyArMTgzNTgsNyBAQAogICA7OwogCiAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCopCitsaW51eCogfCBrKmJzZCotZ251KQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwpAQCAtMTgyMDUsNyArMTgzNzQsNyBAQAogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtMTgyMTgsMTggKzE4Mzg3LDYgQEAKICAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKICAgOzsKIAota25ldGJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJwotICA7OwotCiBuZXRic2QqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKICAgbmVlZF9saWJfcHJlZml4PW5vCkBAIC0xODMxMSw2ICsxODQ2OCwxMCBAQAogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKICAgOzsKIAorcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKIHNvbGFyaXMqKQogICB2ZXJzaW9uX3R5cGU9bGludXgKICAgbmVlZF9saWJfcHJlZml4PW5vCkBAIC0xODUwNSw2ICsxODY2Niw3IEBACiAgICAgbW9kdWxlX2NtZHNfR0NKIFwKICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKIFwKICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0ogXAorICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKIFwKICAgICBleGNsdWRlX2V4cHN5bXNfR0NKIFwKICAgICBpbmNsdWRlX2V4cHN5bXNfR0NKOyBkbwogCkBAIC0xODgyNSw3ICsxODk4Nyw3IEBACiBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKIAogIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGhfR0NKIgorZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAogCiAjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCiBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0oKQEAgLTE4ODgyLDcgKzE5MDQ0LDcgQEAKIG9iamV4dF9SQz0kb2JqZXh0CiAKICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH1cbicKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKIAogIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKQEAgLTE4OTAxLDEzICsxOTA2MywxMyBAQAogCiAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQogYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1wcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAogZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCiBfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiAkcm0gY29uZnRlc3QqCiAKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKICRybSBjb25mdGVzdCoKQEAgLTE4OTg1LDYgKzE5MTQ3LDcgQEAKICAgICBtb2R1bGVfY21kc19SQyBcCiAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX1JDIFwKICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQyBcCisgICAgZml4X3NyY2ZpbGVfcGF0aF9SQyBcCiAgICAgZXhjbHVkZV9leHBzeW1zX1JDIFwKICAgICBpbmNsdWRlX2V4cHN5bXNfUkM7IGRvCiAKQEAgLTE5MzA1LDcgKzE5NDY4LDcgQEAKIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwogCiAjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSIkZml4X3NyY2ZpbGVfcGF0aF9SQyIKK2ZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKIAogIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgogYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfUkMKQEAgLTIwNTU4LDcgKzIwNzIxLDcgQEAKIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAogY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgInBuZ2djY3JkLmMiCisjaW5jbHVkZSAiJHNyY2Rpci9wbmdnY2NyZC5jIgogaW50CiBtYWluICgpCiB7CkBAIC0yMTExOSw3ICsyMTI4Miw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJwbmcgJGFzX21lIDEuMC4yNiwgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYnBuZyAkYXNfbWUgMS4wLjI3cmMxLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTIxMTcyLDcgKzIxMzM1LDcgQEAKIF9BQ0VPRgogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKIGFjX2NzX3ZlcnNpb249IlxcCi1saWJwbmcgY29uZmlnLnN0YXR1cyAxLjAuMjYKK2xpYnBuZyBjb25maWcuc3RhdHVzIDEuMC4yN3JjMQogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLAogICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgogCkBAIC0yMTQyOSw2ICsyMTU5Miw3IEBACiBDQ0RFUE1PREUhJENDREVQTU9ERSRhY19kZWxpbQogYW1fX2Zhc3RkZXBDQ19UUlVFISRhbV9fZmFzdGRlcENDX1RSVUUkYWNfZGVsaW0KIGFtX19mYXN0ZGVwQ0NfRkFMU0UhJGFtX19mYXN0ZGVwQ0NfRkFMU0UkYWNfZGVsaW0KK1NFRCEkU0VEJGFjX2RlbGltCiBidWlsZCEkYnVpbGQkYWNfZGVsaW0KIGJ1aWxkX2NwdSEkYnVpbGRfY3B1JGFjX2RlbGltCiBidWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQpAQCAtMjE0NDAsNyArMjE2MDQsNiBAQAogR1JFUCEkR1JFUCRhY19kZWxpbQogRUdSRVAhJEVHUkVQJGFjX2RlbGltCiBDUFAhJENQUCRhY19kZWxpbQotU0VEISRTRUQkYWNfZGVsaW0KIExOX1MhJExOX1MkYWNfZGVsaW0KIEVDSE8hJEVDSE8kYWNfZGVsaW0KIEFSISRBUiRhY19kZWxpbQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDNmZGUzNWEuLjZmN2QwNzIgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTE4LDE1ICsxOCwxNSBAQAogCiBkbmwgVmVyc2lvbiBudW1iZXIgc3R1ZmYgaGVyZToKIAotQUNfSU5JVChbbGlicG5nXSwgWzEuMC4yNl0sIFtwbmctbW5nLWltcGxlbWVudEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQorQUNfSU5JVChbbGlicG5nXSwgWzEuMC4yN3JjMV0sIFtwbmctbW5nLWltcGxlbWVudEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQogQU1fSU5JVF9BVVRPTUFLRQogZG5sIHN0b3AgY29uZmlndXJlIGZyb20gYXV0b21hZ2ljYWxseSBydW5uaW5nIGF1dG9tYWtlCiBBTV9NQUlOVEFJTkVSX01PREUKIAotUE5HTElCX1ZFUlNJT049MS4wLjI2CitQTkdMSUJfVkVSU0lPTj0xLjAuMjdyYzEKIFBOR0xJQl9NQUpPUj0xCiBQTkdMSUJfTUlOT1I9MAotUE5HTElCX1JFTEVBU0U9MjYKK1BOR0xJQl9SRUxFQVNFPTI3CiAKIGRubCBFbmQgb2YgdmVyc2lvbiBudW1iZXIgc3R1ZmYKIApAQCAtNjIsNyArNjIsNyBAQAogQUNfTVNHX0NIRUNLSU5HKAogICBbaWYgYXNzZW1ibGVyIGNvZGUgaW4gcG5nZ2NjcmQuYyBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCBQTkdfTk9fTU1YX0NPREVdKQogQUNfVFJZX0NPTVBJTEUoCi0gIFsjaW5jbHVkZSAicG5nZ2NjcmQuYyJdLAorICBbI2luY2x1ZGUgIiRzcmNkaXIvcG5nZ2NjcmQuYyJdLAogICBbcmV0dXJuIDA7XSwKICAgQUNfTVNHX1JFU1VMVCh5ZXMpCiAgIExJQlBOR19OT19NTVg9IiIsCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL0NPUFlJTkcgYi9jb250cmliL2dyZWdib29rL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL0xJQ0VOU0UgYi9jb250cmliL2dyZWdib29rL0xJQ0VOU0UKaW5kZXggMTc1ZWJmZC4uYTM5MjY0ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9ncmVnYm9vay9MSUNFTlNFCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svTElDRU5TRQpAQCAtMSwxMiArMSwxOSBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzLCIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwKICAgICAgIGV4cHJlc3Mgb3IgaW1wbGllZC4gIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3Igb3IgY29udHJpYnV0b3JzCiAgICAgICBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBpbiBhbnkgd2F5IGZyb20gdGhlIHVzZSBvZgogICAgICAgdGhpcyBzb2Z0d2FyZS4KIAorICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgRFVBTC1MSUNFTlNFRC4gIFlvdSBtYXkgbW9kaWZ5IGFuZC9vcgorICAgICAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhlCisgICAgICBmb2xsb3dpbmcgdHdvIGxpY2Vuc2VzIChhdCB5b3VyIG9wdGlvbik6CisKKworICAgICAgTElDRU5TRSAxICgiQlNELWxpa2Ugd2l0aCBhZHZlcnRpc2luZyBjbGF1c2UiKToKKwogICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCiAgICAgICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlCiAgICAgICBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CkBAIC0yMyw0ICszMCwyMSBAQAogICAgICAgICAgICAgYW5kIGNvbnRyaWJ1dG9ycyBmb3IgdGhlIGJvb2ssICJQTkc6IFRoZSBEZWZpbml0aXZlIEd1aWRlLCIKICAgICAgICAgICAgIHB1Ymxpc2hlZCBieSBPJ1JlaWxseSBhbmQgQXNzb2NpYXRlcy4KIAorCisgICAgICBMSUNFTlNFIDIgKEdOVSBHUEwgdjIgb3IgbGF0ZXIpOgorCisgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUubWluZ3czMiBiL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUubWluZ3czMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzBhNTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ncmVnYm9vay9NYWtlZmlsZS5taW5ndzMyCkBAIC0wLDAgKzEsMTMwIEBACisjIFNhbXBsZSBtYWtlZmlsZSBmb3IgcnBuZy13aW4gLyBycG5nMi13aW4gLyB3cG5nIHVzaW5nIG1pbmd3MzItZ2NjIGFuZCBtYWtlLgorIyBHcmVnIFJvZWxvZnMKKyMgTGFzdCBtb2RpZmllZDogIDIgSnVuZSAyMDA3CisjCisjCVRoZSBwcm9ncmFtcyBidWlsdCBieSB0aGlzIG1ha2VmaWxlIGFyZSBkZXNjcmliZWQgaW4gdGhlIGJvb2ssCisjCSJQTkc6ICBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwiIGJ5IEdyZWcgUm9lbG9mcyAoTydSZWlsbHkgYW5kCisjCUFzc29jaWF0ZXMsIDE5OTkpLiAgR28gYnV5IGEgY29weSwgZWg/ICBXZWxsLCBPSywgaXQncyBub3QKKyMJZ2VuZXJhbGx5IGZvciBzYWxlIGFueW1vcmUsIGJ1dCBpdCdzIHRoZSB0aG91Z2h0IHRoYXQgY291bnRzLAorIwlyaWdodD8gIChIaW50OiAgaHR0cDovL3d3dy5saWJwbmcub3JnL3B1Yi9wbmcvYm9vay8gKQorIworIyBJbnZva2UgdGhpcyBtYWtlZmlsZSBmcm9tIGEgRE9TLXByb21wdCB3aW5kb3cgdmlhOgorIworIwltYWtlIC1mIE1ha2VmaWxlLm1pbmd3MzIKKyMKKyMgVGhpcyBtYWtlZmlsZSBhc3N1bWVzIGxpYnBuZyBhbmQgemxpYiBoYXZlIGFscmVhZHkgYmVlbiBidWlsdCBvciBkb3dubG9hZGVkCisjIGFuZCBhcmUgaW4gc3ViZGlyZWN0b3JpZXMgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5CisjIChhcyBpbmRpY2F0ZWQgYnkgdGhlIFBOR0RJUiBhbmQgWkRJUiBtYWNyb3MgYmVsb3cpLiAgSXQgbWFrZXMgbm8gYXNzdW1wdGlvbnMKKyMgYXQgYWxsIGFib3V0IHRoZSBtaW5ndzMyIGluc3RhbGxhdGlvbiB0cmVlIChXMzJESVIpLiAgRWRpdCBhcyBhcHByb3ByaWF0ZS4KKyMKKyMgTm90ZSB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgZHluYW1pYyBhbmQgc3RhdGljIGxpYnBuZyBhbmQgemxpYiBsaWJyYXJpZXMKKyMgdXNlZCBiZWxvdyBtYXkgY2hhbmdlIGluIGxhdGVyIHJlbGVhc2VzIG9mIHRoZSBsaWJyYXJpZXMuICBUaGlzIG1ha2VmaWxlCisjIGJ1aWxkcyBib3RoIHN0YXRpY2FsbHkgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcyBieSBkZWZhdWx0LgorIyAoWW91IG5lZWQgb25seSBvbmUgc2V0LCBidXQgZm9yIHRlc3RpbmcgaXQgY2FuIGJlIGhhbmR5IHRvIGhhdmUgYm90aC4pCisKKworIyBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI1BOR0RJUiA9IC4uLy4uIwkJZm9yIGxpYnBuZy14Lnkuei9jb250cmliL2dyZWdib29rIGJ1aWxkcworUE5HRElSID0gLi4vbGlicG5nLXdpbjMyCitQTkdJTkMgPSAtSSQoUE5HRElSKQorUE5HTElCZCA9ICQoUE5HRElSKS9saWJwbmcuZGxsLmEJIyBkeW5hbWljYWxseSBsaW5rZWQKK1BOR0xJQnMgPSAkKFBOR0RJUikvbGlicG5nLmEJCSMgc3RhdGljYWxseSBsaW5rZWQsIGxvY2FsIGxpYnBuZworCisjWkRJUiA9IC4uLy4uLy4uL3psaWItd2luMzIjCWZvciBsaWJwbmcteC55LnovY29udHJpYi9ncmVnYm9vayBidWlsZHMKK1pESVIgPSAuLi96bGliLXdpbjMyCitaSU5DID0gLUkkKFpESVIpCitaTElCZCA9ICQoWkRJUikvbGliemRsbC5hCitaTElCcyA9ICQoWkRJUikvbGliei5hCisKKyMgY2hhbmdlIHRoaXMgdG8gYmUgdGhlIHBhdGggd2hlcmUgbWluZ3czMiBpbnN0YWxscyBpdHMgc3R1ZmY6CitXMzJESVIgPQorI1czMkRJUiA9IC91c3IvbG9jYWwvY3Jvc3MtdG9vbHMvaTM4Ni1taW5ndzMybXN2YworVzMySU5DID0gLUkkKFczMkRJUikvaW5jbHVkZQorVzMyTElCID0gJChXMzJESVIpL2xpYi9saWJ1c2VyMzIuYSAkKFczMkRJUikvbGliL2xpYmdkaTMyLmEKKworQ0MgPSBnY2MKKyNDQyA9IGkzODYtbWluZ3czMm1zdmMtZ2NjICMJZS5nLiwgTGludXggLT4gV2luMzIgY3Jvc3MtY29tcGlsYXRpb24KK0xEID0gJChDQykKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1PIC1XYWxsICQoSU5DUykgJChNSU5HV19DQ0ZMQUdTKQorIyBbbm90ZSB0aGF0IC1XYWxsIGlzIGEgZ2NjLXNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWcgKCJtb3N0IHdhcm5pbmdzIG9uIildCisjIFstYW5zaSwgLXBlZGFudGljIGFuZCAtVyBjYW4gYWxzbyBiZSB1c2VkXQorTERGTEFHUyA9ICQoTUlOR1dfTERGTEFHUykKK08gPSAubworRSA9IC5leGUKKworSU5DUyA9ICQoUE5HSU5DKSAkKFpJTkMpICQoVzMySU5DKQorUkxJQlNkID0gJChQTkdMSUJkKSAkKFpMSUJkKSAkKFczMkxJQikgLWxtCitSTElCU3MgPSAkKFBOR0xJQnMpICQoWkxJQnMpICQoVzMyTElCKSAtbG0KK1dMSUJTZCA9ICQoUE5HTElCZCkgJChaTElCZCkKK1dMSUJTcyA9ICQoUE5HTElCcykgJChaTElCcykKKworUlBORyAgID0gcnBuZy13aW4KK1JQTkcyICA9IHJwbmcyLXdpbgorV1BORyAgID0gd3BuZworCitST0JKU2QgID0gJChSUE5HKSQoTykgcmVhZHBuZy5waWMkKE8pCitST0JKUzJkID0gJChSUE5HMikkKE8pIHJlYWRwbmcyLnBpYyQoTykKK1dPQkpTZCAgPSAkKFdQTkcpJChPKSB3cml0ZXBuZy5waWMkKE8pCisKK1JQTkdzICA9ICQoUlBORyktc3RhdGljCitSUE5HMnMgPSAkKFJQTkcyKS1zdGF0aWMKK1dQTkdzICA9ICQoV1BORyktc3RhdGljCisKK1JPQkpTcyAgPSAkKFJQTkcpJChPKSByZWFkcG5nJChPKQorUk9CSlMycyA9ICQoUlBORzIpJChPKSByZWFkcG5nMiQoTykKK1dPQkpTcyAgPSAkKFdQTkcpJChPKSB3cml0ZXBuZyQoTykKKworU1RBVElDX0VYRVMgID0gJChSUE5HcykkKEUpICQoUlBORzJzKSQoRSkgJChXUE5HcykkKEUpCitEWU5BTUlDX0VYRVMgPSAkKFJQTkcpJChFKSAkKFJQTkcyKSQoRSkgJChXUE5HKSQoRSkKKworRVhFUyA9ICQoU1RBVElDX0VYRVMpICQoRFlOQU1JQ19FWEVTKQorCisKKyMgaW1wbGljaXQgbWFrZSBydWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy5jJChPKToKKwkkKENDKSAtYyAkKENGTEFHUykgJDwKKworJS5waWMkKE8pOiAlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLURQTkdfQlVJTERfRExMIC1vICRAICQ8CisKKworIyBkZXBlbmRlbmNpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWxsOiAgJChFWEVTKQorCiskKFJQTkdzKSQoRSk6ICQoUk9CSlNzKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChST0JKU3MpICQoUkxJQlNzKQorCiskKFJQTkcpJChFKTogJChST0JKU2QpCisJJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKFJPQkpTZCkgJChSTElCU2QpCisKKyQoUlBORzJzKSQoRSk6ICQoUk9CSlMycykKKwkkKExEKSAkKExERkxBR1MpIC1vICRAICQoUk9CSlMycykgJChSTElCU3MpCisKKyQoUlBORzIpJChFKTogJChST0JKUzJkKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChST0JKUzJkKSAkKFJMSUJTZCkKKworJChXUE5HcykkKEUpOiAkKFdPQkpTcykKKwkkKExEKSAkKExERkxBR1MpIC1vICRAICQoV09CSlNzKSAkKFdMSUJTcykKKworJChXUE5HKSQoRSk6ICQoV09CSlNkKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChXT0JKU2QpICQoV0xJQlNkKQorCiskKFJQTkcpJChPKToJJChSUE5HKS5jIHJlYWRwbmcuaAorJChSUE5HMikkKE8pOgkkKFJQTkcyKS5jIHJlYWRwbmcyLmgKKyQoV1BORykkKE8pOgkkKFdQTkcpLmMgd3JpdGVwbmcuaAorCityZWFkcG5nJChPKSByZWFkcG5nLnBpYyQoTyk6CXJlYWRwbmcuYyByZWFkcG5nLmgKK3JlYWRwbmcyJChPKSByZWFkcG5nMi5waWMkKE8pOglyZWFkcG5nMi5jIHJlYWRwbmcyLmgKK3dyaXRlcG5nJChPKSB3cml0ZXBuZy5waWMkKE8pOgl3cml0ZXBuZy5jIHdyaXRlcG5nLmgKKworCisjIG1haW50ZW5hbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGVhbjoKKwkkKFJNKSAkKEVYRVMpCisJJChSTSkgJChST0JKU3MpICQoUk9CSlMycykgJChXT0JKU3MpCisJJChSTSkgJChST0JKU2QpICQoUk9CSlMyZCkgJChXT0JKU2QpCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL01ha2VmaWxlLnVueCBiL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudW54CmluZGV4IGMwYzNmYjEuLjdmZjY1YmYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudW54CisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudW54CkBAIC0xLDczICsxLDkyIEBACiAjIFNhbXBsZSBtYWtlZmlsZSBmb3IgcnBuZy14IC8gcnBuZzIteCAvIHdwbmcgdXNpbmcgZ2NjIGFuZCBtYWtlLgogIyBHcmVnIFJvZWxvZnMKLSMgTGFzdCBtb2RpZmllZDogIDcgTWFyY2ggMjAwMgorIyBMYXN0IG1vZGlmaWVkOiAgMiBKdW5lIDIwMDcKICMKICMJVGhlIHByb2dyYW1zIGJ1aWx0IGJ5IHRoaXMgbWFrZWZpbGUgYXJlIGRlc2NyaWJlZCBpbiB0aGUgYm9vaywKICMJIlBORzogIFRoZSBEZWZpbml0aXZlIEd1aWRlLCIgYnkgR3JlZyBSb2Vsb2ZzIChPJ1JlaWxseSBhbmQKLSMJQXNzb2NpYXRlcywgMTk5OSkuICBHbyBidXkgYSBjb3B5LCBlaD8gIEJ1eSBzb21lIGZvciBmcmllbmRzCi0jCWFuZCBmYW1pbHksIHRvby4gIChOb3QgdGhhdCB0aGlzIGlzIGEgYmxhdGFudCBwbHVnIG9yIGFueXRoaW5nLikKKyMJQXNzb2NpYXRlcywgMTk5OSkuICBHbyBidXkgYSBjb3B5LCBlaD8gIFdlbGwsIE9LLCBpdCdzIG5vdAorIwlnZW5lcmFsbHkgZm9yIHNhbGUgYW55bW9yZSwgYnV0IGl0J3MgdGhlIHRob3VnaHQgdGhhdCBjb3VudHMsCisjCXJpZ2h0PyAgKEhpbnQ6ICBodHRwOi8vd3d3LmxpYnBuZy5vcmcvcHViL3BuZy9ib29rLyApCiAjCiAjIEludm9rZSB0aGlzIG1ha2VmaWxlIGZyb20gYSBzaGVsbCBwcm9tcHQgaW4gdGhlIHVzdWFsIHdheTsgZm9yIGV4YW1wbGU6CiAjCiAjCW1ha2UgLWYgTWFrZWZpbGUudW54CiAjCiAjIFRoaXMgbWFrZWZpbGUgYXNzdW1lcyBsaWJwbmcgYW5kIHpsaWIgaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQgb3IgZG93bmxvYWRlZAotIyBhbmQgYXJlIGJvdGggaW5zdGFsbGVkIGluIC91c3IvbG9jYWwve2luY2x1ZGUsbGlifSAoYXMgaW5kaWNhdGVkIGJ5IHRoZQotIyBQTkcqIGFuZCBaKiBtYWNyb3MgYmVsb3cpLiAgRWRpdCBhcyBhcHByb3ByaWF0ZS0tY2hvb3NlIG9ubHkgT05FIGVhY2ggb2YKLSMgdGhlIFBOR0lOQywgUE5HTElCLCBaSU5DIGFuZCBaTElCIGxpbmVzLgorIyBhbmQgYXJlIGluc3RhbGxlZCBpbiAvdXNyL2xvY2FsL3tpbmNsdWRlLGxpYn0gb3IgYXMgb3RoZXJ3aXNlIGluZGljYXRlZCBieQorIyB0aGUgUE5HKiBhbmQgWiogbWFjcm9zIGJlbG93LiAgRWRpdCBhcyBhcHByb3ByaWF0ZS0tY2hvb3NlIG9ubHkgT05FIGVhY2ggb2YKKyMgdGhlIFBOR0lOQywgUE5HTElCZCwgUE5HTElCcywgWklOQywgWkxJQmQgYW5kIFpMSUJzIGxpbmVzLgogIwotIyBUaGlzIG1ha2VmaWxlIGJ1aWxkcyBzdGF0aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcyAoYWdhaW5zdCBsaWJwbmcgYW5kIHpsaWIsCi0jIHRoYXQgaXMpLCBidXQgdGhhdCBjYW4gYmUgY2hhbmdlZCBieSB1bmNvbW1lbnRpbmcgdGhlIGFwcHJvcHJpYXRlIFBOR0xJQiBhbmQKLSMgWkxJQiBsaW5lcy4KKyMgVGhpcyBtYWtlZmlsZSBidWlsZHMgYm90aCBkeW5hbWljYWxseSBhbmQgc3RhdGljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMKKyMgKGFnYWluc3QgbGlicG5nIGFuZCB6bGliLCB0aGF0IGlzKSwgYnV0IHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgbW9kaWZ5aW5nCisjIHRoZSAiRVhFUyA9IiBsaW5lLiAgKFlvdSBuZWVkIG9ubHkgb25lIHNldCwgYnV0IGZvciB0ZXN0aW5nIGl0IGNhbiBiZSBoYW5keQorIyB0byBoYXZlIGJvdGguKQogCiAKICMgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVBOR0lOQyA9IC1JL3Vzci9sb2NhbC9pbmNsdWRlL2xpYnBuZzEyCi0jUE5HTElCID0gLUwvdXNyL2xvY2FsL2xpYiAtbHBuZzEyICMgZHluYW1pY2FsbHkgbGlua2VkIGFnYWluc3QgbGlicG5nCi1QTkdMSUIgPSAvdXNyL2xvY2FsL2xpYi9saWJwbmcxMi5hICMgc3RhdGljYWxseSBsaW5rZWQgYWdhaW5zdCBsaWJwbmcKKyNQTkdESVIgPSAvdXNyL2xvY2FsL2xpYgorI1BOR0lOQyA9IC1JL3Vzci9sb2NhbC9pbmNsdWRlL2xpYnBuZzEyCisjUE5HTElCZCA9IC1MJChQTkdESVIpIC1scG5nMTIgIyBkeW5hbWljYWxseSBsaW5rZWQsIGluc3RhbGxlZCBsaWJwbmcKKyNQTkdMSUJzID0gJChQTkdESVIpL2xpYnBuZzEyLmEgIyBzdGF0aWNhbGx5IGxpbmtlZCwgaW5zdGFsbGVkIGxpYnBuZwogIyBvcjoKLSNQTkdJTkMgPSAtSS4uL2xpYnBuZwotI1BOR0xJQiA9IC1MLi4vbGlicG5nIC1scG5nCi0jUE5HTElCID0gLi4vbGlicG5nL2xpYnBuZy5hCitQTkdESVIgPSAuLi8uLiMJdGhpcyBvbmUgaXMgZm9yIGxpYnBuZy14Lnkuei9jb250cmliL2dyZWdib29rIGJ1aWxkcworI1BOR0RJUiA9IC4uL2xpYnBuZworUE5HSU5DID0gLUkkKFBOR0RJUikKK1BOR0xJQmQgPSAtV2wsLXJwYXRoLCQoUE5HRElSKSAtTCQoUE5HRElSKSAtbHBuZzEyCSMgZHluYW1pY2FsbHkgbGlua2VkCitQTkdMSUJzID0gJChQTkdESVIpL2xpYnBuZy5hCQkjIHN0YXRpY2FsbHkgbGlua2VkLCBsb2NhbCBsaWJwbmcKIAorWkRJUiA9IC91c3IvbG9jYWwvbGliCisjWkRJUiA9IC91c3IvbGliNjQKIFpJTkMgPSAtSS91c3IvbG9jYWwvaW5jbHVkZQotI1pMSUIgPSAtTC91c3IvbG9jYWwvbGliIC1segkJIyBkeW5hbWljYWxseSBsaW5rZWQgYWdhaW5zdCB6bGliCi1aTElCID0gL3Vzci9sb2NhbC9saWIvbGliei5hCQkjIHN0YXRpY2FsbHkgbGlua2VkIGFnYWluc3QgemxpYgotI1pJTkMgPSAtSS4uL3psaWIKLSNaTElCID0gLUwuLi96bGliIC1segotI1pMSUIgPSAuLi96bGliL2xpYnouYQorWkxJQmQgPSAtTCQoWkRJUikgLWx6CQkJIyBkeW5hbWljYWxseSBsaW5rZWQgYWdhaW5zdCB6bGliCitaTElCcyA9ICQoWkRJUikvbGliei5hCQkJIyBzdGF0aWNhbGx5IGxpbmtlZCBhZ2FpbnN0IHpsaWIKKyMgb3I6CisjWkRJUiA9IC4uL3psaWIKKyNaSU5DID0gLUkkKFpESVIpCisjWkxJQmQgPSAtV2wsLXJwYXRoLCQoWkRJUikgLUwkKFpESVIpIC1seiAgIyAtcnBhdGggYWxsb3dzIGluLXBsYWNlIHRlc3RpbmcKKyNaTElCcyA9ICQoWkRJUikvbGliei5hCiAKICNYSU5DID0gLUkvdXNyL2luY2x1ZGUJCQkjIG9sZC1zdHlsZSwgc3RvY2sgWCBkaXN0cmlidXRpb25zCi0jWExJQiA9IC1ML3Vzci9saWIvWDExIC1sWDExCisjWExJQiA9IC1ML3Vzci9saWIvWDExIC1sWDExCQkjICAoaW5jbHVkaW5nIFNHSSBJUklYKQogI1hJTkMgPSAtSS91c3Ivb3Blbndpbi9pbmNsdWRlCQkjIFN1biB3b3Jrc3RhdGlvbnMgKE9wZW5XaW5kb3dzKQogI1hMSUIgPSAtTC91c3Ivb3Blbndpbi9saWIgLWxYMTEKLVhJTkMgPSAtSS91c3IvWDExUjYvaW5jbHVkZQkJIyBuZXcgWCBkaXN0cmlidXRpb25zIChYRnJlZTg2LCBldGMuKQorWElOQyA9IC1JL3Vzci9YMTFSNi9pbmNsdWRlCQkjIG5ldyBYIGRpc3RyaWJ1dGlvbnMgKFgub3JnLCBldGMuKQogWExJQiA9IC1ML3Vzci9YMTFSNi9saWIgLWxYMTEKKyNYTElCID0gLUwvdXNyL1gxMVI2L2xpYjY0IC1sWDExCSMgZS5nLiwgUmVkIEhhdCBvbiBBTUQ2NAogCiBJTkNTID0gJChQTkdJTkMpICQoWklOQykgJChYSU5DKQotUkxJQlMgPSAkKFBOR0xJQikgJChaTElCKSAkKFhMSUIpIC1sbQotV0xJQlMgPSAkKFBOR0xJQikgJChaTElCKQorUkxJQlNkID0gJChQTkdMSUJkKSAkKFpMSUJkKSAkKFhMSUIpIC1sbQorUkxJQlNzID0gJChQTkdMSUJzKSAkKFpMSUJzKSAkKFhMSUIpIC1sbQorV0xJQlNkID0gJChQTkdMSUJkKSAkKFpMSUJkKSAtbG0KK1dMSUJTcyA9ICQoUE5HTElCcykgJChaTElCcykKIAogQ0MgPSBnY2MKIExEID0gZ2NjCiBSTSA9IHJtIC1mCi1DRkxBR1MgPSAtTyAtV2FsbCAkKElOQ1MpCitDRkxBR1MgPSAtTyAtV2FsbCAkKElOQ1MpIC1ERkVBVFVSRV9MT09QCiAjIFtub3RlIHRoYXQgLVdhbGwgaXMgYSBnY2Mtc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZyAoIm1vc3Qgd2FybmluZ3Mgb24iKV0KICMgWy1hbnNpLCAtcGVkYW50aWMgYW5kIC1XIGNhbiBhbHNvIGJlIHVzZWRdCiBMREZMQUdTID0KIE8gPSAubwogRSA9CiAKLVJQTkcgID0gcnBuZy14Ci1SUE5HMiA9IHJwbmcyLXgKLVdQTkcgID0gd3BuZworUlBORyAgID0gcnBuZy14CitSUE5HMiAgPSBycG5nMi14CitXUE5HICAgPSB3cG5nCisKK1JQTkdzICA9ICQoUlBORyktc3RhdGljCitSUE5HMnMgPSAkKFJQTkcyKS1zdGF0aWMKK1dQTkdzICA9ICQoV1BORyktc3RhdGljCiAKIFJPQkpTICA9ICQoUlBORykkKE8pIHJlYWRwbmckKE8pCiBST0JKUzIgPSAkKFJQTkcyKSQoTykgcmVhZHBuZzIkKE8pCiBXT0JKUyAgPSAkKFdQTkcpJChPKSB3cml0ZXBuZyQoTykKIAotRVhFUyA9ICQoUlBORykkKEUpICQoUlBORzIpJChFKSAkKFdQTkcpJChFKQorU1RBVElDX0VYRVMgID0gJChSUE5HcykkKEUpICQoUlBORzJzKSQoRSkgJChXUE5HcykkKEUpCitEWU5BTUlDX0VYRVMgPSAkKFJQTkcpJChFKSAkKFJQTkcyKSQoRSkgJChXUE5HKSQoRSkKKworRVhFUyA9ICQoU1RBVElDX0VYRVMpICQoRFlOQU1JQ19FWEVTKQogCiAKICMgaW1wbGljaXQgbWFrZSBydWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MCwxNCArOTksMjMgQEAKIAogYWxsOiAgJChFWEVTKQogCiskKFJQTkdzKSQoRSk6ICQoUk9CSlMpCisJJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKFJPQkpTKSAkKFJMSUJTcykKKwogJChSUE5HKSQoRSk6ICQoUk9CSlMpCi0JJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKFJPQkpTKSAkKFJMSUJTKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChST0JKUykgJChSTElCU2QpCisKKyQoUlBORzJzKSQoRSk6ICQoUk9CSlMyKQorCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChST0JKUzIpICQoUkxJQlNzKQogCiAkKFJQTkcyKSQoRSk6ICQoUk9CSlMyKQotCSQoTEQpICQoTERGTEFHUykgLW8gJEAgJChST0JKUzIpICQoUkxJQlMpCisJJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKFJPQkpTMikgJChSTElCU2QpCisKKyQoV1BOR3MpJChFKTogJChXT0JKUykKKwkkKExEKSAkKExERkxBR1MpIC1vICRAICQoV09CSlMpICQoV0xJQlNzKQogCiAkKFdQTkcpJChFKTogJChXT0JKUykKLQkkKExEKSAkKExERkxBR1MpIC1vICRAICQoV09CSlMpICQoV0xJQlMpCisJJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKFdPQkpTKSAkKFdMSUJTZCkKIAogJChSUE5HKSQoTyk6CSQoUlBORykuYyByZWFkcG5nLmgKICQoUlBORzIpJChPKToJJChSUE5HMikuYyByZWFkcG5nMi5oCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL01ha2VmaWxlLnczMiBiL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudzMyCmluZGV4IDYyMDQxY2QuLjNjMDgwODUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudzMyCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svTWFrZWZpbGUudzMyCkBAIC0xLDExICsxLDEyIEBACiAjIFNhbXBsZSBtYWtlZmlsZSBmb3IgcnBuZy13aW4gLyBycG5nMi13aW4gLyB3cG5nIHVzaW5nIE1TVkMgYW5kIE5NQUtFLgogIyBHcmVnIFJvZWxvZnMKLSMgTGFzdCBtb2RpZmllZDogIDE2IEZlYnJ1YXJ5IDE5OTkKKyMgTGFzdCBtb2RpZmllZDogIDIgSnVuZSAyMDA3CiAjCiAjCVRoZSBwcm9ncmFtcyBidWlsdCBieSB0aGlzIG1ha2VmaWxlIGFyZSBkZXNjcmliZWQgaW4gdGhlIGJvb2ssCiAjCSJQTkc6ICBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwiIGJ5IEdyZWcgUm9lbG9mcyAoTydSZWlsbHkgYW5kCi0jCUFzc29jaWF0ZXMsIDE5OTkpLiAgR28gYnV5IGEgY29weSwgZWg/ICBCdXkgc29tZSBmb3IgZnJpZW5kcwotIwlhbmQgZmFtaWx5LCB0b28uICAoTm90IHRoYXQgdGhpcyBpcyBhIGJsYXRhbnQgcGx1ZyBvciBhbnl0aGluZy4pCisjCUFzc29jaWF0ZXMsIDE5OTkpLiAgR28gYnV5IGEgY29weSwgZWg/ICBXZWxsLCBPSywgaXQncyBub3QKKyMJZ2VuZXJhbGx5IGZvciBzYWxlIGFueW1vcmUsIGJ1dCBpdCdzIHRoZSB0aG91Z2h0IHRoYXQgY291bnRzLAorIwlyaWdodD8gIChIaW50OiAgaHR0cDovL3d3dy5saWJwbmcub3JnL3B1Yi9wbmcvYm9vay8gKQogIwogIyBJbnZva2UgdGhpcyBtYWtlZmlsZSBmcm9tIGEgRE9TIHByb21wdCB3aW5kb3cgdmlhOgogIwpAQCAtNTMsNyArNTQsNyBAQAogTEQgPSBsaW5rCiBSTSA9IGRlbAogQ0ZMQUdTID0gLW5vbG9nbyAtTyAtVzMgJChJTkNTKSAkKGN2YXJzKQotIyBbbm90ZSB0aGF0IC1XYWxsIGlzIGFuIE1TVkMtc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZyAoImFsbCB3YXJuaW5ncyBvbiIpXQorIyBbbm90ZSB0aGF0IC1XMyBpcyBhbiBNU1ZDLXNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWcgKCJhbGwgd2FybmluZ3Mgb24iKV0KICMgW3NlZSAlZGV2c3R1ZGlvJVx2Y1xpbmNsdWRlXHdpbjMyLm1hayBmb3IgY3ZhcnMgbWFjcm8gZGVmaW5pdGlvbl0KIE8gPSAub2JqCiBFID0gLmV4ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9SRUFETUUgYi9jb250cmliL2dyZWdib29rL1JFQURNRQppbmRleCBjNjcwNDVjLi41YjA4YmM2IDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL1JFQURNRQorKysgYi9jb250cmliL2dyZWdib29rL1JFQURNRQpAQCAtMjIsNyArMjIsOCBAQAogRmlsZXM6CiAKICAgIFJFQURNRSAgICAgICAgICAgICB0aGlzIGZpbGUKLSAgIExJQ0VOU0UgICAgICAgICAgICB0ZXJtcyBvZiBkaXN0cmlidXRpb24gYW5kIHJldXNlIChCU0QtbGlrZSkKKyAgIExJQ0VOU0UgICAgICAgICAgICB0ZXJtcyBvZiBkaXN0cmlidXRpb24gYW5kIHJldXNlIChCU0QtbGlrZSBvciBHTlUgR1BMKQorICAgQ09QWUlORyAgICAgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpCiAKICAgIE1ha2VmaWxlLnVueCAgICAgICBVbml4IG1ha2VmaWxlCiAgICBNYWtlZmlsZS53MzIgICAgICAgV2luZG93cyAoTVNWQykgbWFrZWZpbGUKQEAgLTU0LDE1ICs1NSwxNSBAQAogMTMtMTUgb2YgdGhlIGJvb2sgZm9yIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgdGhlIHRocmVlIHByb2dyYW1zLgogCiBHcmVnIFJvZWxvZnMKLW5ld3RAcG9ib3guY29tCi0zMCBKdW5lIDIwMDEKK2h0dHA6Ly9wb2JveC5jb20vfm5ld3QvZ3JlZ19jb250YWN0Lmh0bWwKKzIgSnVuZSAyMDA3CiAKIAogQlVJTEQgSU5TVFJVQ1RJT05TCiAKICAtIFByZXJlcXVpc2l0ZXMgKGluIG9yZGVyIG9mIGNvbXBpbGF0aW9uKToKIAotICAgICAgLSB6bGliCQlodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvCisgICAgICAtIHpsaWIJCWh0dHA6Ly96bGliLm5ldC8KICAgICAgIC0gbGlicG5nCQlodHRwOi8vd3d3LmxpYnBuZy5vcmcvcHViL3BuZy9saWJwbmcuaHRtbAogICAgICAgLSBwbmdib29rCQlodHRwOi8vd3d3LmxpYnBuZy5vcmcvcHViL3BuZy9ib29rL3NvdXJjZXMuaHRtbAogCkBAIC0xNTAsOSArMTUxLDkgQEAKICAgICAgVG8gcnVuIHRoZSBwcm9ncmFtcywgdGhleSBwcm9iYWJseSBmaXJzdCBuZWVkIHRvIGJlIHNldCB1cCBhcyAiZm9yZWlnbgogICAgICBzeW1ib2xzLCIgd2l0aCAiZGlzayIgYW5kICJkaXIiIHNldCBhcHByb3ByaWF0ZWx5OgogCi0gICAgICQgcnBuZyA9PSAiJGRpc2s6W2Rpcl1ycG5nLXguZXhlIgorICAgICAkIHJwbmcgID09ICIkZGlzazpbZGlyXXJwbmcteC5leGUiCiAgICAgICQgcnBuZzIgPT0gIiRkaXNrOltkaXJdcnBuZzIteC5leGUiCi0gICAgICQgd3BuZyA9PSAiJGRpc2s6W2Rpcl13cG5nLmV4ZSIKKyAgICAgJCB3cG5nICA9PSAiJGRpc2s6W2Rpcl13cG5nLmV4ZSIKIAogICAgICBBbGwgdGhyZWUgd2lsbCBwcmludCBhIGJhc2ljIHVzYWdlIHNjcmVlbiB3aGVuIHJ1biB3aXRob3V0IGFueSBjb21tYW5kLQogICAgICBsaW5lIGFyZ3VtZW50czsgc2VlIHRoZSBib29rIGZvciBtb3JlIGRldGFpbHMuICBOb3RlIHRoYXQgdGhlIG9wdGlvbnMKQEAgLTE3Niw3ICsxNzcsNyBAQAogICAgICB3cG5nIGlzIGEgcHVyZWx5IGNvbW1hbmQtbGluZSBpbWFnZSBjb252ZXJ0ZXIgZnJvbSBiaW5hcnkgUEJNUExVUy9OZXRQQk0KICAgICAgZm9ybWF0ICgucGdtIG9yIC5wcG0pIHRvIFBORzsgZm9yIGV4YW1wbGUsCiAKLQl3cG5nIC10aW1lIDwgdG91Y2FuLnBwbSA+IHRvdWNhbi5wbmcKKwl3cG5nIC10aW1lIDwgdG91Y2FuLW5vdHJhbnMucHBtID4gdG91Y2FuLW5vdHJhbnMucG5nCiAKICAgICAgd291bGQgY29udmVydCB0aGUgc3BlY2lmaWVkIFBQTSBmaWxlICh1c2luZyByZWRpcmVjdGlvbikgdG8gUE5HLCBhdXRvLQogICAgICBtYXRpY2FsbHkgc2V0dGluZyB0aGUgUE5HIG1vZGlmaWNhdGlvbi10aW1lIGNodW5rLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nLmMgYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcuYwppbmRleCBiOGUwOTA0Li5kODdmNmM3IDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3JlYWRwbmcuYworKysgYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcuYwpAQCAtNCwxMyArNCwyMCBAQAogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMsIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLAogICAgICAgZXhwcmVzcyBvciBpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBvciBjb250cmlidXRvcnMKICAgICAgIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGluIGFueSB3YXkgZnJvbSB0aGUgdXNlIG9mCiAgICAgICB0aGlzIHNvZnR3YXJlLgogCisgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBEVUFMLUxJQ0VOU0VELiAgWW91IG1heSBtb2RpZnkgYW5kL29yCisgICAgICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyB0d28gbGljZW5zZXMgKGF0IHlvdXIgb3B0aW9uKToKKworCisgICAgICBMSUNFTlNFIDEgKCJCU0QtbGlrZSB3aXRoIGFkdmVydGlzaW5nIGNsYXVzZSIpOgorCiAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKICAgICAgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUKICAgICAgIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKQEAgLTI3LDYgKzM0LDIzIEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nLmggYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcuaAppbmRleCAxYzE5YWNhLi5mYWQ5ZmUzIDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3JlYWRwbmcuaAorKysgYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcuaApAQCAtNCwxMyArNCwyMCBAQAogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMsIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLAogICAgICAgZXhwcmVzcyBvciBpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBvciBjb250cmlidXRvcnMKICAgICAgIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGluIGFueSB3YXkgZnJvbSB0aGUgdXNlIG9mCiAgICAgICB0aGlzIHNvZnR3YXJlLgogCisgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBEVUFMLUxJQ0VOU0VELiAgWW91IG1heSBtb2RpZnkgYW5kL29yCisgICAgICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyB0d28gbGljZW5zZXMgKGF0IHlvdXIgb3B0aW9uKToKKworCisgICAgICBMSUNFTlNFIDEgKCJCU0QtbGlrZSB3aXRoIGFkdmVydGlzaW5nIGNsYXVzZSIpOgorCiAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKICAgICAgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUKICAgICAgIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKQEAgLTI3LDYgKzM0LDIzIEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZm5kZWYgVFJVRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5jIGIvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5jCmluZGV4IDllNjZhMGIuLmZkOTU2NjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZ3JlZ2Jvb2svcmVhZHBuZzIuYworKysgYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcyLmMKQEAgLTQsMTkgKzQsMjAgQEAKIAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgQ2hhbmdlbG9nOgotICAgIC0gMS4wMTogIGluaXRpYWwgcHVibGljIHJlbGVhc2UKLSAgICAtIDEuMDI6ICBhZGRlZCBjb2RlIHRvIHNraXAgdW51c2VkIGNodW5rcyAoR1ItUCkKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzLCIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwKICAgICAgIGV4cHJlc3Mgb3IgaW1wbGllZC4gIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3Igb3IgY29udHJpYnV0b3JzCiAgICAgICBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBpbiBhbnkgd2F5IGZyb20gdGhlIHVzZSBvZgogICAgICAgdGhpcyBzb2Z0d2FyZS4KIAorICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgRFVBTC1MSUNFTlNFRC4gIFlvdSBtYXkgbW9kaWZ5IGFuZC9vcgorICAgICAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhlCisgICAgICBmb2xsb3dpbmcgdHdvIGxpY2Vuc2VzIChhdCB5b3VyIG9wdGlvbik6CisKKworICAgICAgTElDRU5TRSAxICgiQlNELWxpa2Ugd2l0aCBhZHZlcnRpc2luZyBjbGF1c2UiKToKKwogICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCiAgICAgICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlCiAgICAgICBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CkBAIC0zMyw2ICszNCwyMyBAQAogICAgICAgICAgICAgYW5kIGNvbnRyaWJ1dG9ycyBmb3IgdGhlIGJvb2ssICJQTkc6IFRoZSBEZWZpbml0aXZlIEd1aWRlLCIKICAgICAgICAgICAgIHB1Ymxpc2hlZCBieSBPJ1JlaWxseSBhbmQgQXNzb2NpYXRlcy4KIAorCisgICAgICBMSUNFTlNFIDIgKEdOVSBHUEwgdjIgb3IgbGF0ZXIpOgorCisgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKQEAgLTU2LDcgKzc0LDcgQEAKIHZvaWQgcmVhZHBuZzJfdmVyc2lvbl9pbmZvKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSAmJiBcCi0gICAgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikpICYmIFwKKyAgICAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSAmJiBcCiAgICAgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQogICAgIC8qCiAgICAgICogV0FSTklORzogIFRoaXMgcHJlcHJvY2Vzc29yIGFwcHJvYWNoIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlCkBAIC03OSw3ICs5NywxMiBAQAogICAgICAgICAgICAgICAid2l0aCBNTVggc3VwcG9ydFxuICAgKCVzIHZlcnNpb24pLiIsIFBOR19MSUJQTkdfVkVSX1NUUklORywKICAgICAgICAgICAgICAgcG5nX2xpYnBuZ192ZXIsIGNvbXBpbGVySUQgPT0gMT8gIk1TVkMrKyIgOgogICAgICAgICAgICAgICAoY29tcGlsZXJJRCA9PSAyPyAiR05VIEMiIDogInVua25vd24iKSk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgUHJvY2Vzc29yICVzIE1NWCBpbnN0cnVjdGlvbnMuXG4iLAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIFByb2Nlc3NvciAoeDg2JXMpICVzIE1NWCBpbnN0cnVjdGlvbnMuXG4iLAorI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyAgICAgICAgICAgICAgIl82NCIKKyNlbHNlCisgICAgICAgICAgICAgICIiLAorI2VuZGlmCiAgICAgICAgICAgICAgIG1teHN1cHBvcnQ/ICJzdXBwb3J0cyIgOiAiZG9lcyBub3Qgc3VwcG9ydCIpOwogICAgICAgICAgICAgaWYgKG1teHN1cHBvcnQgPiAwKSB7CiAgICAgICAgICAgICAgICAgaW50IG51bV9vcHRpbXMgPSAwOwpAQCAtMTc5LDQwICsyMDIsMzggQEAKICAgICAgICAgcmV0dXJuIDI7CiAgICAgfQogCi0gICAgLyogcHJlcGFyZSB0aGUgcmVhZGVyIHRvIGlnbm9yZSBhbGwgcmVjb2duaXplZCBjaHVua3Mgd2hvc2UgZGF0YSBpc24ndAotICAgICAqIGdvaW5nIHRvIGJlIHVzZWQsIGkuZS4sIGFsbCBjaHVua3MgcmVjb2duaXplZCBieSBsaWJwbmcgZXhjZXB0IGZvcgotICAgICAqIElIRFIsIFBMVEUsIElEQVQsIElFTkQsIHRSTlMsIGJLR0QsIGdBTUEsIGFuZCBzUkdCIDogKi8KIAotI2lmIGRlZmluZWQoUE5HX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKKyNpZmRlZiBQTkdfVU5LTk9XTl9DSFVOS1NfU1VQUE9SVEVECisgICAgLyogcHJlcGFyZSB0aGUgcmVhZGVyIHRvIGlnbm9yZSBhbGwgcmVjb2duaXplZCBjaHVua3Mgd2hvc2UgZGF0YSB3b24ndCBiZQorICAgICAqIHVzZWQsIGkuZS4sIGFsbCBjaHVua3MgcmVjb2duaXplZCBieSBsaWJwbmcgZXhjZXB0IGZvciBJSERSLCBQTFRFLCBJREFULAorICAgICAqIElFTkQsIHRSTlMsIGJLR0QsIGdBTUEsIGFuZCBzUkdCIChzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCkgKi8KICAgICB7Ci0jaWZuZGVmIEhBTkRMRV9DSFVOS19ORVZFUgotLyogcHJpb3IgdG8gbGlicG5nLTEuMi41LCB0aGlzIG1hY3JvIHdhcyBpbnRlcm5hbCwgc28gd2UgZGVmaW5lIGl0IGhlcmUuICovCi0jIGRlZmluZSBIQU5ETEVfQ0hVTktfTkVWRVIgMQotI2VuZGlmCi0gICAgICAgLyogdGhlc2UgYnl0ZSBzdHJpbmdzIHdlcmUgY29waWVkIGZyb20gcG5nLmguCi0gICAgICAgICogSWYgYSBmdXR1cmUgbGlicG5nIHZlcnNpb24gcmVjb2duaXplcyBtb3JlIGNodW5rcywgYWRkIHRoZW0KLSAgICAgICAgKiB0byB0aGlzIGxpc3QuICBJZiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHJlYWRwbmcyLmMgcmVjb2duaXplcwotICAgICAgICAqIG1vcmUgY2h1bmtzLCBkZWxldGUgdGhlbSBmcm9tIHRoaXMgbGlzdC4gKi8KLSAgICAgICBwbmdfYnl0ZSBwbmdfY2h1bmtfdHlwZXNfdG9faWdub3JlW109Ci0gICAgICAgICAgeyA5OSwgIDcyLCAgODIsICA3NywgJ1wwJywgLyogY0hSTSAqLwotICAgICAgICAgICAxMDQsICA3MywgIDgzLCAgODQsICdcMCcsIC8qIGhJU1QgKi8KLSAgICAgICAgICAgMTA1LCAgNjcsICA2NywgIDgwLCAnXDAnLCAvKiBpQ0NQICovCi0gICAgICAgICAgIDEwNSwgIDg0LCAgODgsIDExNiwgJ1wwJywgLyogaVRYdCAqLwotICAgICAgICAgICAxMTEsICA3MCwgIDcwLCAxMTUsICdcMCcsIC8qIG9GRnMgKi8KLSAgICAgICAgICAgMTEyLCAgNjcsICA2NSwgIDc2LCAnXDAnLCAvKiBwQ0FMICovCi0gICAgICAgICAgIDExNSwgIDY3LCAgNjUsICA3NiwgJ1wwJywgLyogc0NBTCAqLwotICAgICAgICAgICAxMTIsICA3MiwgIDg5LCAxMTUsICdcMCcsIC8qIHBIWXMgKi8KLSAgICAgICAgICAgMTE1LCAgNjYsICA3MywgIDg0LCAnXDAnLCAvKiBzQklUICovCi0gICAgICAgICAgIDExNSwgIDgwLCAgNzYsICA4NCwgJ1wwJywgLyogc1BMVCAqLwotICAgICAgICAgICAxMTYsICA2OSwgIDg4LCAxMTYsICdcMCcsIC8qIHRFWHQgKi8KLSAgICAgICAgICAgMTE2LCAgNzMsICA3NywgIDY5LCAnXDAnLCAvKiB0SU1FICovCi0gICAgICAgICAgIDEyMiwgIDg0LCAgODgsIDExNiwgJ1wwJ307IC8qIHpUWHQgKi8KLSNkZWZpbmUgTlVNX1BOR19DSFVOS19UWVBFU19UT19JR05PUkUgMTMKKyAgICAgICAgLyogVGhlc2UgYnl0ZSBzdHJpbmdzIHdlcmUgY29waWVkIGZyb20gcG5nLmguICBJZiBhIGZ1dHVyZSBsaWJwbmcKKyAgICAgICAgICogdmVyc2lvbiByZWNvZ25pemVzIG1vcmUgY2h1bmtzLCBhZGQgdGhlbSB0byB0aGlzIGxpc3QuICBJZiBhCisgICAgICAgICAqIGZ1dHVyZSB2ZXJzaW9uIG9mIHJlYWRwbmcyLmMgcmVjb2duaXplcyBtb3JlIGNodW5rcywgZGVsZXRlIHRoZW0KKyAgICAgICAgICogZnJvbSB0aGlzIGxpc3QuICovCisgICAgICAgIHN0YXRpYyBjb25zdCBwbmdfYnl0ZSBjaHVua3NfdG9faWdub3JlW10gPSB7CisgICAgICAgICAgICAgOTksICA3MiwgIDgyLCAgNzcsICdcMCcsICAvKiBjSFJNICovCisgICAgICAgICAgICAxMDQsICA3MywgIDgzLCAgODQsICdcMCcsICAvKiBoSVNUICovCisgICAgICAgICAgICAxMDUsICA2NywgIDY3LCAgODAsICdcMCcsICAvKiBpQ0NQICovCisgICAgICAgICAgICAxMDUsICA4NCwgIDg4LCAxMTYsICdcMCcsICAvKiBpVFh0ICovCisgICAgICAgICAgICAxMTEsICA3MCwgIDcwLCAxMTUsICdcMCcsICAvKiBvRkZzICovCisgICAgICAgICAgICAxMTIsICA2NywgIDY1LCAgNzYsICdcMCcsICAvKiBwQ0FMICovCisgICAgICAgICAgICAxMTIsICA3MiwgIDg5LCAxMTUsICdcMCcsICAvKiBwSFlzICovCisgICAgICAgICAgICAxMTUsICA2NiwgIDczLCAgODQsICdcMCcsICAvKiBzQklUICovCisgICAgICAgICAgICAxMTUsICA2NywgIDY1LCAgNzYsICdcMCcsICAvKiBzQ0FMICovCisgICAgICAgICAgICAxMTUsICA4MCwgIDc2LCAgODQsICdcMCcsICAvKiBzUExUICovCisgICAgICAgICAgICAxMTUsICA4NCwgIDY5LCAgODIsICdcMCcsICAvKiBzVEVSICovCisgICAgICAgICAgICAxMTYsICA2OSwgIDg4LCAxMTYsICdcMCcsICAvKiB0RVh0ICovCisgICAgICAgICAgICAxMTYsICA3MywgIDc3LCAgNjksICdcMCcsICAvKiB0SU1FICovCisgICAgICAgICAgICAxMjIsICA4NCwgIDg4LCAxMTYsICdcMCcgICAvKiB6VFh0ICovCisgICAgICAgIH07CiAKLSAgICBwbmdfc2V0X2tlZXBfdW5rbm93bl9jaHVua3MocG5nX3B0ciwgSEFORExFX0NIVU5LX05FVkVSLAotICAgICAgICBwbmdfY2h1bmtfdHlwZXNfdG9faWdub3JlLCBOVU1fUE5HX0NIVU5LX1RZUEVTX1RPX0lHTk9SRSk7CisgICAgICAgIHBuZ19zZXRfa2VlcF91bmtub3duX2NodW5rcyhwbmdfcHRyLCAxIC8qIFBOR19IQU5ETEVfQ0hVTktfTkVWRVIgKi8sCisgICAgICAgICAgY2h1bmtzX3RvX2lnbm9yZSwgc2l6ZW9mKGNodW5rc190b19pZ25vcmUpLzUpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFBOR19VTktOT1dOX0NIVU5LU19TVVBQT1JURUQgKi8KKwogCiAgICAgLyogaW5zdGVhZCBvZiBkb2luZyBwbmdfaW5pdF9pbygpIGhlcmUsIG5vdyB3ZSBzZXQgdXAgb3VyIGNhbGxiYWNrCiAgICAgICogZnVuY3Rpb25zIGZvciBwcm9ncmVzc2l2ZSBkZWNvZGluZyAqLwpAQCAtMjM3LDcgKzI1OCw3IEBACiAgICAgICogICAgICAgICAgICAgICAgICBwbmdfc2V0X2FzbV9mbGFncyAocG5nX3B0ciwgZmxhZ3MpOwogICAgICAqLwogCi0jaWYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikpICYmIFwKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSAmJiBcCiAgICAgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQogICAgIC8qCiAgICAgICogV0FSTklORzogIFRoaXMgcHJlcHJvY2Vzc29yIGFwcHJvYWNoIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3JlYWRwbmcyLmggYi9jb250cmliL2dyZWdib29rL3JlYWRwbmcyLmgKaW5kZXggN2NhYTlkOS4uMzg2ZTVlZSAxMDA2NDQKLS0tIGEvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5oCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcmVhZHBuZzIuaApAQCAtNCwxMyArNCwyMCBAQAogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMsIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLAogICAgICAgZXhwcmVzcyBvciBpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBvciBjb250cmlidXRvcnMKICAgICAgIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGluIGFueSB3YXkgZnJvbSB0aGUgdXNlIG9mCiAgICAgICB0aGlzIHNvZnR3YXJlLgogCisgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBEVUFMLUxJQ0VOU0VELiAgWW91IG1heSBtb2RpZnkgYW5kL29yCisgICAgICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyB0d28gbGljZW5zZXMgKGF0IHlvdXIgb3B0aW9uKToKKworCisgICAgICBMSUNFTlNFIDEgKCJCU0QtbGlrZSB3aXRoIGFkdmVydGlzaW5nIGNsYXVzZSIpOgorCiAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKICAgICAgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUKICAgICAgIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKQEAgLTI3LDYgKzM0LDIzIEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZm5kZWYgVFJVRQpAQCAtNjYsNyArOTAsNyBAQAogICAgIGludCByb3dieXRlczsKICAgICBpbnQgY2hhbm5lbHM7CiAgICAgaW50IG5lZWRfYmdjb2xvcjsKLSNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQogICAgIGludCBub21teGZpbHRlcnM7CiAgICAgaW50IG5vbW14Y29tYmluZTsKICAgICBpbnQgbm9tbXhpbnRlcmxhY2U7CmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3JlYWRwcG0uYyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcmVhZHBwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dyZWdib29rL3JlYWRwcG0uYwpAQCAtMCwwICsxLDE3OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgcnBuZyAtIHNpbXBsZSBQTkcgZGlzcGxheSBwcm9ncmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHBwbS5jCisKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFRoaXMgaXMgYSBzcGVjaWFsLXB1cnBvc2UgcmVwbGFjZW1lbnQgZm9yIHJlYWRwbmcuYyB0aGF0IGFsbG93cyBiaW5hcnkKKyAgIFBQTSBmaWxlcyB0byBiZSB1c2VkIGluIHBsYWNlIG9mIFBORyBpbWFnZXMuCisKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzLCIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwKKyAgICAgIGV4cHJlc3Mgb3IgaW1wbGllZC4gIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3Igb3IgY29udHJpYnV0b3JzCisgICAgICBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBpbiBhbnkgd2F5IGZyb20gdGhlIHVzZSBvZgorICAgICAgdGhpcyBzb2Z0d2FyZS4KKworICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgRFVBTC1MSUNFTlNFRC4gIFlvdSBtYXkgbW9kaWZ5IGFuZC9vcgorICAgICAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhlCisgICAgICBmb2xsb3dpbmcgdHdvIGxpY2Vuc2VzIChhdCB5b3VyIG9wdGlvbik6CisKKworICAgICAgTElDRU5TRSAxICgiQlNELWxpa2Ugd2l0aCBhZHZlcnRpc2luZyBjbGF1c2UiKToKKworICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgICAgICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlCisgICAgICBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIGRpc2NsYWltZXIsIGFuZCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucy4KKyAgICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIGRpc2NsYWltZXIsIGFuZCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBpbiB0aGUgZG9jdW1lbnRhLQorICAgICAgICAgdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICAgICAgICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisKKyAgICAgICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgR3JlZyBSb2Vsb2ZzCisgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgorICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgorCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicmVhZHBuZy5oIiAgICAvKiB0eXBlZGVmcywgY29tbW9uIG1hY3JvcywgcHVibGljIHByb3RvdHlwZXMgKi8KKworCit1bGcgIHdpZHRoLCBoZWlnaHQ7CitpbnQgIGJpdF9kZXB0aCwgY29sb3JfdHlwZSwgY2hhbm5lbHM7Cit1Y2ggICppbWFnZV9kYXRhID0gTlVMTDsKK0ZJTEUgKnNhdmVkX2luZmlsZTsKKworCit2b2lkIHJlYWRwbmdfdmVyc2lvbl9pbmZvKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIENvbXBpbGVkIHdpdGhvdXQgbGlicG5nLCB6bGliIG9yIFBCTVBMVVMvTmV0UEJNLlxuIik7Cit9CisKKworLyogcmV0dXJuIHZhbHVlID0gMCBmb3Igc3VjY2VzcywgMSBmb3IgYmFkIHNpZywgMiBmb3IgYmFkIElIRFIsIDQgZm9yIG5vIG1lbSAqLworCitpbnQgcmVhZHBuZ19pbml0KEZJTEUgKmluZmlsZSwgdWxnICpwV2lkdGgsIHVsZyAqcEhlaWdodCkKK3sKKyAgICBzdGF0aWMgdWNoIHBwbWxpbmVbMjU2XTsKKyAgICBpbnQgbWF4dmFsOworCisKKyAgICBzYXZlZF9pbmZpbGUgPSBpbmZpbGU7CisKKyAgICBmZ2V0cyhwcG1saW5lLCAyNTYsIGluZmlsZSk7CisgICAgaWYgKHBwbWxpbmVbMF0gIT0gJ1AnIHx8IHBwbWxpbmVbMV0gIT0gJzYnKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICBub3QgYSBQUE0gZmlsZVxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvKiBwb3NzaWJsZSBjb2xvciB0eXBlczogIFA1ID0gZ3JheXNjYWxlICgwKSwgUDYgPSBSR0IgKDIpLCBQOCA9IFJHQkEgKDYpICovCisgICAgaWYgKHBwbWxpbmVbMV0gPT0gJzYnKSB7CisgICAgICAgIGNvbG9yX3R5cGUgPSAyOworICAgICAgICBjaGFubmVscyA9IDM7CisgICAgfSBlbHNlIGlmIChwcG1saW5lWzFdID09ICc4JykgeworICAgICAgICBjb2xvcl90eXBlID0gNjsKKyAgICAgICAgY2hhbm5lbHMgPSA0OworICAgIH0gZWxzZSAvKiBpZiAocHBtbGluZVsxXSA9PSAnNScpICovIHsKKyAgICAgICAgY29sb3JfdHlwZSA9IDA7CisgICAgICAgIGNoYW5uZWxzID0gMTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGZnZXRzKHBwbWxpbmUsIDI1NiwgaW5maWxlKTsKKyAgICB9IHdoaWxlIChwcG1saW5lWzBdID09ICcjJyk7CisgICAgc3NjYW5mKHBwbWxpbmUsICIlbHUgJWx1IiwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIGRvIHsKKyAgICAgICAgZmdldHMocHBtbGluZSwgMjU2LCBpbmZpbGUpOworICAgIH0gd2hpbGUgKHBwbWxpbmVbMF0gPT0gJyMnKTsKKyAgICBzc2NhbmYocHBtbGluZSwgIiVkIiwgJm1heHZhbCk7CisgICAgaWYgKG1heHZhbCAhPSAyNTUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogIG1heHZhbCA9ICVkXG4iLCBtYXh2YWwpOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgYml0X2RlcHRoID0gODsKKworICAgICpwV2lkdGggPSB3aWR0aDsKKyAgICAqcEhlaWdodCA9IGhlaWdodDsKKworICAgIHJldHVybiAwOworfQorCisKKworCisvKiByZXR1cm5zIDAgaWYgc3VjY2VlZHMsIDEgaWYgZmFpbHMgZHVlIHRvIG5vIGJLR0QgY2h1bmssIDIgaWYgbGlicG5nIGVycm9yOworICogc2NhbGVzIHZhbHVlcyB0byA4LWJpdCBpZiBuZWNlc3NhcnkgKi8KKworaW50IHJlYWRwbmdfZ2V0X2JnY29sb3IodWNoICpyZWQsIHVjaCAqZ3JlZW4sIHVjaCAqYmx1ZSkKK3sKKyAgICByZXR1cm4gMTsKK30KKworCisKKworLyogZGlzcGxheV9leHBvbmVudCA9PSBMVVRfZXhwb25lbnQgKiBDUlRfZXhwb25lbnQgKi8KKwordWNoICpyZWFkcG5nX2dldF9pbWFnZShkb3VibGUgZGlzcGxheV9leHBvbmVudCwgaW50ICpwQ2hhbm5lbHMsIHVsZyAqcFJvd2J5dGVzKQoreworICAgIHVsZyAgcm93Ynl0ZXM7CisKKworICAgIC8qIGV4cGFuZCBwYWxldHRlIGltYWdlcyB0byBSR0IsIGxvdy1iaXQtZGVwdGggZ3JheXNjYWxlIGltYWdlcyB0byA4IGJpdHMsCisgICAgICogdHJhbnNwYXJlbmN5IGNodW5rcyB0byBmdWxsIGFscGhhIGNoYW5uZWw7IHN0cmlwIDE2LWJpdC1wZXItc2FtcGxlCisgICAgICogaW1hZ2VzIHRvIDggYml0cyBwZXIgc2FtcGxlOyBhbmQgY29udmVydCBncmF5c2NhbGUgdG8gUkdCW0FdICovCisKKyAgICAvKiBHUlIgV0FSTklORzogIGdyYXlzY2FsZSBuZWVkcyB0byBiZSBleHBhbmRlZCBhbmQgY2hhbm5lbHMgcmVzZXQhICovCisKKyAgICAqcFJvd2J5dGVzID0gcm93Ynl0ZXMgPSBjaGFubmVscyp3aWR0aDsKKyAgICAqcENoYW5uZWxzID0gY2hhbm5lbHM7CisKKyAgICBpZiAoKGltYWdlX2RhdGEgPSAodWNoICopbWFsbG9jKHJvd2J5dGVzKmhlaWdodCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgVHJhY2UoKHN0ZGVyciwgInJlYWRwbmdfZ2V0X2ltYWdlOiAgcm93Ynl0ZXMgPSAlbGQsIGhlaWdodCA9ICVsZFxuIiwgcm93Ynl0ZXMsIGhlaWdodCkpOworCisKKyAgICAvKiBub3cgd2UgY2FuIGdvIGFoZWFkIGFuZCBqdXN0IHJlYWQgdGhlIHdob2xlIGltYWdlICovCisKKyAgICBmcmVhZChpbWFnZV9kYXRhLCAxTCwgcm93Ynl0ZXMqaGVpZ2h0LCBzYXZlZF9pbmZpbGUpOworCisKKyAgICByZXR1cm4gaW1hZ2VfZGF0YTsKK30KKworCit2b2lkIHJlYWRwbmdfY2xlYW51cChpbnQgZnJlZV9pbWFnZV9kYXRhKQoreworICAgIGlmIChmcmVlX2ltYWdlX2RhdGEgJiYgaW1hZ2VfZGF0YSkgeworICAgICAgICBmcmVlKGltYWdlX2RhdGEpOworICAgICAgICBpbWFnZV9kYXRhID0gTlVMTDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3Jwbmctd2luLmMgYi9jb250cmliL2dyZWdib29rL3Jwbmctd2luLmMKaW5kZXggYjg0YTdmYy4uYjM3YzAwYSAxMDA2NDQKLS0tIGEvY29udHJpYi9ncmVnYm9vay9ycG5nLXdpbi5jCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcnBuZy13aW4uYwpAQCAtMjIsMTYgKzIyLDI0IEBACiAgICAgLSAxLjAyOiAgYWRkZWQgZXh0cmEgc2V0IG9mIHBhcmVudGhlc2VzIHRvIHBuZ19qbXBidWYoKSBtYWNybzsgZml4ZWQKICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIHBhcnNpbmcgYnVnCiAgICAgLSAxLjEwOiAgZW5hYmxlZCAibWVzc2FnZSB3aW5kb3ciL2NvbnNvbGUgKHRoYW5rcyB0byBEYXZpZCBHZWxkcmVpY2gpCisgICAgLSAyLjAwOiAgZHVhbC1saWNlbnNlZCAoYWRkZWQgR05VIEdQTCkKIAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzLCIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwKICAgICAgIGV4cHJlc3Mgb3IgaW1wbGllZC4gIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3Igb3IgY29udHJpYnV0b3JzCiAgICAgICBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBpbiBhbnkgd2F5IGZyb20gdGhlIHVzZSBvZgogICAgICAgdGhpcyBzb2Z0d2FyZS4KIAorICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgRFVBTC1MSUNFTlNFRC4gIFlvdSBtYXkgbW9kaWZ5IGFuZC9vcgorICAgICAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhlCisgICAgICBmb2xsb3dpbmcgdHdvIGxpY2Vuc2VzIChhdCB5b3VyIG9wdGlvbik6CisKKworICAgICAgTElDRU5TRSAxICgiQlNELWxpa2Ugd2l0aCBhZHZlcnRpc2luZyBjbGF1c2UiKToKKwogICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCiAgICAgICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlCiAgICAgICBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CkBAIC00OCwxMSArNTYsMjggQEAKICAgICAgICAgICAgIGFuZCBjb250cmlidXRvcnMgZm9yIHRoZSBib29rLCAiUE5HOiBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwiCiAgICAgICAgICAgICBwdWJsaXNoZWQgYnkgTydSZWlsbHkgYW5kIEFzc29jaWF0ZXMuCiAKKworICAgICAgTElDRU5TRSAyIChHTlUgR1BMIHYyIG9yIGxhdGVyKToKKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBQUk9HTkFNRSAgInJwbmctd2luIgogI2RlZmluZSBMT05HTkFNRSAgIlNpbXBsZSBQTkcgVmlld2VyIGZvciBXaW5kb3dzIgotI2RlZmluZSBWRVJTSU9OICAgIjEuMjAgb2YgMjggTWF5IDIwMDEiCisjZGVmaW5lIFZFUlNJT04gICAiMi4wMCBvZiAyIEp1bmUgMjAwNyIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC04NSwxMCArMTEwLDkgQEAKIExSRVNVTFQgQ0FMTEJBQ0sgIHJwbmdfd2luX3duZHByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogCiAKLXN0YXRpYyBjaGFyIHRpdGxlYmFyWzEwMjRdLCAqd2luZG93X25hbWUgPSB0aXRsZWJhcjsKK3N0YXRpYyBjaGFyIHRpdGxlYmFyWzEwMjRdOwogc3RhdGljIGNoYXIgKnByb2duYW1lID0gUFJPR05BTUU7CiBzdGF0aWMgY2hhciAqYXBwbmFtZSA9IExPTkdOQU1FOwotc3RhdGljIGNoYXIgKmljb25fbmFtZSA9IFBST0dOQU1FOyAgICAgLyogR1JSOiAgbm90ICh5ZXQpIHVzZWQgKi8KIHN0YXRpYyBjaGFyICpmaWxlbmFtZTsKIHN0YXRpYyBGSUxFICppbmZpbGU7CiAKQEAgLTMyNSw5ICszNDksMTQgQEAKICAgICAgKiBjaGVjayBmb3Igb25lIGluIHRoZSBQTkcgZmlsZS0taWYgbm90LCB0aGUgaW5pdGlhbGl6ZWQgdmFsdWVzIG9mIDAKICAgICAgKiAoYmxhY2spIHdpbGwgYmUgdXNlZCAqLwogCi0gICAgaWYgKGhhdmVfYmcpCi0gICAgICAgIHNzY2FuZihiZ3N0cisxLCAiJTJ4JTJ4JTJ4IiwgJmJnX3JlZCwgJmJnX2dyZWVuLCAmYmdfYmx1ZSk7Ci0gICAgZWxzZSBpZiAocmVhZHBuZ19nZXRfYmdjb2xvcigmYmdfcmVkLCAmYmdfZ3JlZW4sICZiZ19ibHVlKSA+IDEpIHsKKyAgICBpZiAoaGF2ZV9iZykgeworICAgICAgICB1bnNpZ25lZCByLCBnLCBiOyAgIC8qIHRoaXMgYXBwcm9hY2ggcXVpZXRzIGNvbXBpbGVyIHdhcm5pbmdzICovCisKKyAgICAgICAgc3NjYW5mKGJnc3RyKzEsICIlMnglMnglMngiLCAmciwgJmcsICZiKTsKKyAgICAgICAgYmdfcmVkICAgPSAodWNoKXI7CisgICAgICAgIGJnX2dyZWVuID0gKHVjaClnOworICAgICAgICBiZ19ibHVlICA9ICh1Y2gpYjsKKyAgICB9IGVsc2UgaWYgKHJlYWRwbmdfZ2V0X2JnY29sb3IoJmJnX3JlZCwgJmJnX2dyZWVuLCAmYmdfYmx1ZSkgPiAxKSB7CiAgICAgICAgIHJlYWRwbmdfY2xlYW51cChUUlVFKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsIFBST0dOQU1FCiAgICAgICAgICAgIjogIGxpYnBuZyBlcnJvciB3aGlsZSBjaGVja2luZyBmb3IgYmFja2dyb3VuZCBjb2xvclxuIik7CmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3JwbmcteC5jIGIvY29udHJpYi9ncmVnYm9vay9ycG5nLXguYwppbmRleCBlNzg3ZWYxLi45NDc3MjYwIDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3JwbmcteC5jCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcnBuZy14LmMKQEAgLTksNyArOSw3IEBACiAgICBieSBNYXJ0aW4gWmluc2VyIHVuZGVyIE9wZW5WTVM7IG1heSB3b3JrIHVuZGVyIE9TLzIgd2l0aCBzb21lIHR3ZWFraW5nKS4KIAogICAgdG8gZG86Ci0gICAgLSA4LWJpdCBzdXBwb3J0CisgICAgLSA4LWJpdCAoY29sb3JtYXBwZWQpIFggc3VwcG9ydAogICAgIC0gdXNlICUuMTAyM3MgdG8gc2ltcGxpZnkgdHJ1bmNhdGlvbiBvZiB0aXRsZS1iYXIgc3RyaW5nPwogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjEsMTggKzIxLDI3IEBACiAgICAgLSAxLjEwOiAgYWRkZWQgc3VwcG9ydCBmb3Igbm9uLWRlZmF1bHQgdmlzdWFsczsgZml4ZWQgWCBwaXhlbC1jb252ZXJzaW9uCiAgICAgLSAxLjExOiAgYWRkZWQgZXh0cmEgc2V0IG9mIHBhcmVudGhlc2VzIHRvIHBuZ19qbXBidWYoKSBtYWNybzsgZml4ZWQKICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIHBhcnNpbmcgYnVnCi0gICAgLSAxLjEyOiAgZml4ZWQgc21hbGwgWCBtZW1vcnkgbGVhayAodGhhbmtzIHRvIEZyYW5jb2lzIFBldGl0amVhbikKLSAgICAtIDEuMTM6ICBmaXhlZCBYRnJlZUdDKCkgY3Jhc2ggYnVnCisgICAgLSAxLjEyOiAgZml4ZWQgc29tZSBzbWFsbCBYIG1lbW9yeSBsZWFrcyAodGhhbmtzIHRvIEZyYW7nb2lzIFBldGl0amVhbikKKyAgICAtIDEuMTM6ICBmaXhlZCBYRnJlZUdDKCkgY3Jhc2ggYnVnICh0aGFua3MgdG8gUGF0cmljayBXZWxjaGUpCisgICAgLSAxLjE0OiAgYWRkZWQgc3VwcG9ydCBmb3IgWCByZXNvdXJjZXMgKHRoYW5rcyB0byBHZXJoYXJkIE5pa2xhc2NoKQorICAgIC0gMi4wMDogIGR1YWwtbGljZW5zZWQgKGFkZGVkIEdOVSBHUEwpCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcywiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCiAgICAgICBleHByZXNzIG9yIGltcGxpZWQuICBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycwogICAgICAgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgaW4gYW55IHdheSBmcm9tIHRoZSB1c2Ugb2YKICAgICAgIHRoaXMgc29mdHdhcmUuCiAKKyAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIERVQUwtTElDRU5TRUQuICBZb3UgbWF5IG1vZGlmeSBhbmQvb3IKKyAgICAgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2Ygb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHR3byBsaWNlbnNlcyAoYXQgeW91ciBvcHRpb24pOgorCisKKyAgICAgIExJQ0VOU0UgMSAoIkJTRC1saWtlIHdpdGggYWR2ZXJ0aXNpbmcgY2xhdXNlIik6CisKICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogICAgICAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZQogICAgICAgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgpAQCAtNDksMTEgKzU4LDMwIEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgUFJPR05BTUUgICJycG5nLXgiCiAjZGVmaW5lIExPTkdOQU1FICAiU2ltcGxlIFBORyBWaWV3ZXIgZm9yIFgiCi0jZGVmaW5lIFZFUlNJT04gICAiMS4xMyBvZiAxNiBBdWd1c3QgMjAwMSIKKyNkZWZpbmUgVkVSU0lPTiAgICIyLjAwIG9mIDIgSnVuZSAyMDA3IgorI2RlZmluZSBSRVNOQU1FICAgInJwbmciCS8qIG91ciBYIHJlc291cmNlIGFwcGxpY2F0aW9uIG5hbWUgKi8KKyNkZWZpbmUgUkVTQ0xBU1MgICJScG5nIgkvKiBvdXIgWCByZXNvdXJjZSBjbGFzcyBuYW1lICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtOTEsNiArMTE5LDggQEAKIHN0YXRpYyBjaGFyIHRpdGxlYmFyWzEwMjRdLCAqd2luZG93X25hbWUgPSB0aXRsZWJhcjsKIHN0YXRpYyBjaGFyICphcHBuYW1lID0gTE9OR05BTUU7CiBzdGF0aWMgY2hhciAqaWNvbl9uYW1lID0gUFJPR05BTUU7CitzdGF0aWMgY2hhciAqcmVzX25hbWUgPSBSRVNOQU1FOworc3RhdGljIGNoYXIgKnJlc19jbGFzcyA9IFJFU0NMQVNTOwogc3RhdGljIGNoYXIgKmZpbGVuYW1lOwogc3RhdGljIEZJTEUgKmluZmlsZTsKIApAQCAtMzk5LDExICs0MjksMTIgQEAKICAgICBYRXZlbnQgZTsKICAgICBYR0NWYWx1ZXMgZ2N2YWx1ZXM7CiAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKLSAgICBYU2l6ZUhpbnRzICpzaXplX2hpbnRzOwogICAgIFhUZXh0UHJvcGVydHkgd2luZG93TmFtZSwgKnBXaW5kb3dOYW1lID0gJndpbmRvd05hbWU7CiAgICAgWFRleHRQcm9wZXJ0eSBpY29uTmFtZSwgKnBJY29uTmFtZSA9ICZpY29uTmFtZTsKICAgICBYVmlzdWFsSW5mbyB2aXN1YWxfaW5mbzsKKyAgICBYU2l6ZUhpbnRzICpzaXplX2hpbnRzOwogICAgIFhXTUhpbnRzICp3bV9oaW50czsKKyAgICBYQ2xhc3NIaW50ICpjbGFzc19oaW50czsKIAogCiAgICAgc2NyZWVuID0gRGVmYXVsdFNjcmVlbihkaXNwbGF5KTsKQEAgLTUyNiw3ICs1NTcsNyBAQAogICAgIGlmICghWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eSgmaWNvbl9uYW1lLCAxLCBwSWNvbk5hbWUpKQogICAgICAgICBwSWNvbk5hbWUgPSBOVUxMOwogCi0gICAgLyogT0sgaWYgZWl0aGVyIGhpbnRzIGFsbG9jYXRpb24gZmFpbHM7IFhTZXRXTVByb3BlcnRpZXMoKSBhbGxvd3MgTlVMTHMgKi8KKyAgICAvKiBPSyBpZiBhbnkgaGludHMgYWxsb2NhdGlvbiBmYWlsczsgWFNldFdNUHJvcGVydGllcygpIGFsbG93cyBOVUxMcyAqLwogCiAgICAgaWYgKChzaXplX2hpbnRzID0gWEFsbG9jU2l6ZUhpbnRzKCkpICE9IE5VTEwpIHsKICAgICAgICAgLyogd2luZG93IHdpbGwgbm90IGJlIHJlc2l6YWJsZSAqLwpAQCAtNTQyLDggKzU3MywxMyBAQAogICAgICAgICB3bV9oaW50cy0+ZmxhZ3MgPSBTdGF0ZUhpbnQgfCBJbnB1dEhpbnQgIC8qIHwgSWNvblBpeG1hcEhpbnQgKi8gOwogICAgIH0KIAorICAgIGlmICgoY2xhc3NfaGludHMgPSBYQWxsb2NDbGFzc0hpbnQoKSkgIT0gTlVMTCkgeworICAgICAgICBjbGFzc19oaW50cy0+cmVzX25hbWUgPSByZXNfbmFtZTsKKyAgICAgICAgY2xhc3NfaGludHMtPnJlc19jbGFzcyA9IHJlc19jbGFzczsKKyAgICB9CisKICAgICBYU2V0V01Qcm9wZXJ0aWVzKGRpc3BsYXksIHdpbmRvdywgcFdpbmRvd05hbWUsIHBJY29uTmFtZSwgTlVMTCwgMCwKLSAgICAgIHNpemVfaGludHMsIHdtX2hpbnRzLCBOVUxMKTsKKyAgICAgIHNpemVfaGludHMsIHdtX2hpbnRzLCBjbGFzc19oaW50cyk7CiAKICAgICAvKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIGhpbnRzIG5vIGxvbmdlciBuZWVkZWQ7IGZyZWUgbWVtb3J5ICovCiAgICAgaWYgKHBXaW5kb3dOYW1lKQpAQCAtNTU0LDYgKzU5MCw4IEBACiAgICAgICAgIFhGcmVlKHNpemVfaGludHMpOwogICAgIGlmICh3bV9oaW50cykKICAgICAgICBYRnJlZSh3bV9oaW50cyk7CisgICAgaWYgKGNsYXNzX2hpbnRzKQorICAgICAgIFhGcmVlKGNsYXNzX2hpbnRzKTsKIAogICAgIFhNYXBXaW5kb3coZGlzcGxheSwgd2luZG93KTsKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9ycG5nMi13aW4uYyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcnBuZzItd2luLmMKaW5kZXggMGMxYTlkMS4uZGZiZDZiMSAxMDA2NDQKLS0tIGEvY29udHJpYi9ncmVnYm9vay9ycG5nMi13aW4uYworKysgYi9jb250cmliL2dyZWdib29rL3JwbmcyLXdpbi5jCkBAIC0yNywxNiArMjcsMjUgQEAKICAgICAtIDEuMTA6ICBlbmFibGVkICJtZXNzYWdlIHdpbmRvdyIvY29uc29sZSAodGhhbmtzIHRvIERhdmlkIEdlbGRyZWljaCkKICAgICAtIDEuMjA6ICBhZGRlZCBydW50aW1lIE1NWC1lbmFibGluZy9kaXNhYmxpbmcgYW5kIG5ldyAtbW14KiBvcHRpb25zCiAgICAgLSAxLjIxOiAgbWFkZSBtaW5vciB0d2VhayB0byB1c2FnZSBzY3JlZW4gdG8gZml0IHdpdGhpbiAyNS1saW5lIGNvbnNvbGUKKyAgICAtIDEuMjI6ICBhZGRlZCBBTUQ2NC9FTTY0VCBzdXBwb3J0IChfX3g4Nl82NF9fKQorICAgIC0gMi4wMDogIGR1YWwtbGljZW5zZWQgKGFkZGVkIEdOVSBHUEwpCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcywiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCiAgICAgICBleHByZXNzIG9yIGltcGxpZWQuICBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycwogICAgICAgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgaW4gYW55IHdheSBmcm9tIHRoZSB1c2Ugb2YKICAgICAgIHRoaXMgc29mdHdhcmUuCiAKKyAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIERVQUwtTElDRU5TRUQuICBZb3UgbWF5IG1vZGlmeSBhbmQvb3IKKyAgICAgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2Ygb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHR3byBsaWNlbnNlcyAoYXQgeW91ciBvcHRpb24pOgorCisKKyAgICAgIExJQ0VOU0UgMSAoIkJTRC1saWtlIHdpdGggYWR2ZXJ0aXNpbmcgY2xhdXNlIik6CisKICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogICAgICAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZQogICAgICAgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgpAQCAtNTMsMTEgKzYyLDI4IEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgUFJPR05BTUUgICJycG5nMi13aW4iCiAjZGVmaW5lIExPTkdOQU1FICAiUHJvZ3Jlc3NpdmUgUE5HIFZpZXdlciBmb3IgV2luZG93cyIKLSNkZWZpbmUgVkVSU0lPTiAgICIxLjIxIG9mIDI5IEp1bmUgMjAwMSIKKyNkZWZpbmUgVkVSU0lPTiAgICIyLjAwIG9mIDIgSnVuZSAyMDA3IgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTExOSwxMCArMTQ1LDkgQEAKIExSRVNVTFQgQ0FMTEJBQ0sgIHJwbmcyX3dpbl93bmRwcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIAogCi1zdGF0aWMgY2hhciB0aXRsZWJhclsxMDI0XSwgKndpbmRvd19uYW1lID0gdGl0bGViYXI7CitzdGF0aWMgY2hhciB0aXRsZWJhclsxMDI0XTsKIHN0YXRpYyBjaGFyICpwcm9nbmFtZSA9IFBST0dOQU1FOwogc3RhdGljIGNoYXIgKmFwcG5hbWUgPSBMT05HTkFNRTsKLXN0YXRpYyBjaGFyICppY29uX25hbWUgPSBQUk9HTkFNRTsgICAgLyogR1JSOiAgbm90ICh5ZXQpIHVzZWQgKi8KIHN0YXRpYyBjaGFyICpmaWxlbmFtZTsKIHN0YXRpYyBGSUxFICppbmZpbGU7CiAKQEAgLTM2Nyw3ICszOTIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKCphcmd2LCAiLXRpbWluZyIsIDIpKSB7CiAgICAgICAgICAgICB0aW1pbmcgPSBUUlVFOwotI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpKQorI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCiAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoKmFyZ3YsICItbm9tbXhmaWx0ZXJzIiwgNykpIHsKICAgICAgICAgICAgIHJwbmcyX2luZm8ubm9tbXhmaWx0ZXJzID0gVFJVRTsKICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcCgqYXJndiwgIi1ub21teGNvbWJpbmUiLCA3KSkgewpAQCAtNDMyLDcgKzQ1Nyw3IEBACiAgICAgICAgIHJlYWRwbmcyX3ZlcnNpb25faW5mbygpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIgogICAgICAgICAgICJVc2FnZTogICVzIFstZ2FtbWEgZXhwXSBbLWJnY29sb3IgYmcgfCAtYmdwYXQgcGF0XSBbLXRpbWluZ11cbiIKLSNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQogICAgICAgICAgICIgICAgICAgICUqcyBbWy1ub21teGZpbHRlcnNdIFstbm9tbXhjb21iaW5lXSBbLW5vbW14aW50ZXJsYWNlXSB8IC1ub21teF1cbiIKICNlbmRpZgogICAgICAgICAgICIgICAgICAgICUqcyBmaWxlLnBuZ1xuXG4iCkBAIC00NDcsMTcgKzQ3MiwxNyBAQAogICAgICAgICAgICJcdFx0ICB0cmFuc3BhcmVudCBpbWFnZXM7IG92ZXJyaWRlcyAtYmdjb2xvciBvcHRpb25cbiIKICAgICAgICAgICAiICAgIC10aW1pbmdcdGVuYWJsZXMgZGVsYXkgZm9yIGV2ZXJ5IGJsb2NrIHJlYWQsIHRvIHNpbXVsYXRlIG1vZGVtXG4iCiAgICAgICAgICAgIlx0XHQgIGRvd25sb2FkIG9mIGltYWdlICh+MzYgS2JwcylcbiIKLSNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQogICAgICAgICAgICIgICAgLW5vbW14Klx0ZGlzYWJsZSBvcHRpbWl6ZWQgTU1YIHJvdXRpbmVzIGZvciBkZWNvZGluZyByb3cgZmlsdGVycyxcbiIKICAgICAgICAgICAiXHRcdCAgY29tYmluaW5nIHJvd3MsIGFuZCBleHBhbmRpbmcgaW50ZXJsYWNpbmcsIHJlc3BlY3RpdmVseVxuIgogI2VuZGlmCiAgICAgICAgICAgIlxuUHJlc3MgUSwgRXNjIG9yIG1vdXNlIGJ1dHRvbiAxIGFmdGVyIGltYWdlIGlzIGRpc3BsYXllZCB0byBxdWl0LlxuIgogICAgICAgICAgICJQcmVzcyBRIG9yIEVzYyB0byBxdWl0IHRoaXMgdXNhZ2Ugc2NyZWVuLiAiLAogICAgICAgICAgIFBST0dOQU1FLAotI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpKQotICAgICAgICAgIHN0cmxlbihQUk9HTkFNRSksICIgIiwKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorICAgICAgICAgIChpbnQpc3RybGVuKFBST0dOQU1FKSwgIiAiLAogI2VuZGlmCi0gICAgICAgICAgc3RybGVuKFBST0dOQU1FKSwgIiAiLCBkZWZhdWx0X2Rpc3BsYXlfZXhwb25lbnQsIG51bV9iZ3BhdCk7CisgICAgICAgICAgKGludClzdHJsZW4oUFJPR05BTUUpLCAiICIsIGRlZmF1bHRfZGlzcGxheV9leHBvbmVudCwgbnVtX2JncGF0KTsKICAgICAgICAgZmZsdXNoKHN0ZGVycik7CiAgICAgICAgIGRvCiAgICAgICAgICAgICBjaCA9IF9nZXRjaCgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ncmVnYm9vay9ycG5nMi14LmMgYi9jb250cmliL2dyZWdib29rL3JwbmcyLXguYwppbmRleCA1ZmMyOWVhLi42YmJhNjQ5IDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3JwbmcyLXguYworKysgYi9jb250cmliL2dyZWdib29rL3JwbmcyLXguYwpAQCAtMTMsNyArMTMsOCBAQAogICAgYW5kICJyYWRpYWwgd2F2ZXMiIHBhdHRlcm5zLCByZXNwZWN0aXZlbHkuCiAKICAgIHRvIGRvOgotICAgIC0gOC1iaXQgc3VwcG9ydAorICAgIC0gZml4IGV4cG9zZS9yZWRyYXcgY29kZTogIGRvbid0IGRyYXcgZW50aXJlIHJvdyBpZiBvbmx5IHBhcnQgZXhwb3NlZAorICAgIC0gOC1iaXQgKGNvbG9ybWFwcGVkKSBYIHN1cHBvcnQKICAgICAtIGZpbmlzaCByZXNpemFibGUgY2hlY2tlcmJvYXJkLWdyYWRpZW50IChzaXplcyA0LTEyOD8pCiAgICAgLSB1c2UgJS4xMDIzcyB0byBzaW1wbGlmeSB0cnVuY2F0aW9uIG9mIHRpdGxlLWJhciBzdHJpbmc/CiAKQEAgLTI2LDE4ICsyNywzMiBAQAogICAgIC0gMS4xMTogIGFkZGVkIC11c2xlZXAgb3B0aW9uIGZvciBkZW1vczsgZml4ZWQgY29tbWFuZC1saW5lIHBhcnNpbmcgYnVnCiAgICAgLSAxLjEyOiAgYWRkZWQgLXBhdXNlIG9wdGlvbiBmb3IgZGVtb3MgYW5kIHRlc3RpbmcKICAgICAtIDEuMjA6ICBhZGRlZCBydW50aW1lIE1NWC1lbmFibGluZy9kaXNhYmxpbmcgYW5kIG5ldyAtbW14KiBvcHRpb25zCi0gICAgLSAxLjIxOiAgZml4ZWQgc21hbGwgWCBtZW1vcnkgbGVhayAodGhhbmtzIHRvIEZyYW5jb2lzIFBldGl0amVhbikKLSAgICAtIDEuMjI6ICBmaXhlZCBYRnJlZUdDKCkgY3Jhc2ggYnVnCisgICAgLSAxLjIxOiAgZml4ZWQgc29tZSBzbWFsbCBYIG1lbW9yeSBsZWFrcyAodGhhbmtzIHRvIEZyYW7nb2lzIFBldGl0amVhbikKKyAgICAtIDEuMjI6ICBmaXhlZCBYRnJlZUdDKCkgY3Jhc2ggYnVnICh0aGFua3MgdG8gUGF0cmljayBXZWxjaGUpCisgICAgLSAxLjIzOiAgYWRkZWQgLWJncGF0IDAgbW9kZSAoc3RkIHdoaXRlL2dyYXkgY2hlY2tlcmJvYXJkLCA4eDggc3F1YXJlcykKKyAgICAtIDEuMzA6ICBhZGRlZCAtbG9vcCBvcHRpb24gZm9yIC1iZ3BhdCAoaWZkZWYgRkVBVFVSRV9MT09QKTsgZml4ZWQgYnBwID0KKyAgICAgICAgICAgICAgMjQ7IGFkZGVkIHN1cHBvcnQgZm9yIFggcmVzb3VyY2VzICh0aGFua3MgdG8gR2VyaGFyZCBOaWtsYXNjaCkKKyAgICAtIDEuMzE6ICBhZGRlZCBjb2RlIHRvIHNraXAgdW51c2VkIGNodW5rcyAodGhhbmtzIHRvIEdsZW5uIFJhbmRlcnMtUGVocnNvbikKKyAgICAtIDEuMzI6ICBhZGRlZCBBTUQ2NC9FTTY0VCBzdXBwb3J0IChfX3g4Nl82NF9fKTsgYWRkZWQgYmFzaWMgZXhwb3NlL3JlZHJhdworICAgICAgICAgICAgICBoYW5kbGluZworICAgIC0gMi4wMDogIGR1YWwtbGljZW5zZWQgKGFkZGVkIEdOVSBHUEwpCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcywiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCiAgICAgICBleHByZXNzIG9yIGltcGxpZWQuICBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycwogICAgICAgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgaW4gYW55IHdheSBmcm9tIHRoZSB1c2Ugb2YKICAgICAgIHRoaXMgc29mdHdhcmUuCiAKKyAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIERVQUwtTElDRU5TRUQuICBZb3UgbWF5IG1vZGlmeSBhbmQvb3IKKyAgICAgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2Ygb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHR3byBsaWNlbnNlcyAoYXQgeW91ciBvcHRpb24pOgorCisKKyAgICAgIExJQ0VOU0UgMSAoIkJTRC1saWtlIHdpdGggYWR2ZXJ0aXNpbmcgY2xhdXNlIik6CisKICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogICAgICAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZQogICAgICAgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgpAQCAtNTQsMTQgKzY5LDM0IEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgUFJPR05BTUUgICJycG5nMi14IgogI2RlZmluZSBMT05HTkFNRSAgIlByb2dyZXNzaXZlIFBORyBWaWV3ZXIgZm9yIFgiCi0jZGVmaW5lIFZFUlNJT04gICAiMS4yMiBvZiAxNiBBdWd1c3QgMjAwMSIKKyNkZWZpbmUgVkVSU0lPTiAgICIyLjAwIG9mIDIgSnVuZSAyMDA3IgorI2RlZmluZSBSRVNOQU1FICAgInJwbmcyIgkvKiBvdXIgWCByZXNvdXJjZSBhcHBsaWNhdGlvbiBuYW1lICovCisjZGVmaW5lIFJFU0NMQVNTICAiUnBuZyIJLyogb3VyIFggcmVzb3VyY2UgY2xhc3MgbmFtZSAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHNldGptcC5oPiAgICAgICAvKiBmb3Igam1wYnVmIGRlY2xhcmF0aW9uIGluIHJlYWRwbmcyLmggKi8KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC04OCw2ICsxMjMsMTIgQEAKICNkZWZpbmUgQ0xJUDhQKGMpICAgICAgICBNQVgoMCwoTUlOKChjKSwyNTUpKSkgICAvKiA4LWJpdCBwb3MuIGludGVnZXIgKHVjaCkgKi8KICNkZWZpbmUgUk9VTkRGKGYpICAgICAgICAoKGludCkoZiArIDAuNSkpCiAKKyNkZWZpbmUgUVVJVChlLGspICgoZS50eXBlID09IEJ1dHRvblByZXNzICYmIGUueGJ1dHRvbi5idXR0b24gPT0gQnV0dG9uMSkgfHwgIFwKKyAgICAgICAgICAgICAgICAgIChlLnR5cGUgPT0gS2V5UHJlc3MgJiYgICAvKiAgdi0tLSBvciAxIGZvciBzaGlmdGVkIGtleXMgKi8gIFwKKyAgICAgICAgICAgICAgICAgICgoayA9IFhMb29rdXBLZXlzeW0oJmUueGtleSwgMCkpID09IFhLX3EgfHwgayA9PSBYS19Fc2NhcGUpKSkKKworI2RlZmluZSBOT18yNEJJVF9NQVNLUwkvKiB1bmRlZiBjYXNlIG5vdCBmdWxseSB3cml0dGVuLS1vbmx5IGZvciByZWRpc3BsYXkoKSAqLworCiAjZGVmaW5lIHJnYjFfbWF4ICAgYmdfZnJlcQogI2RlZmluZSByZ2IxX21pbiAgIGJnX2dyYXkKICNkZWZpbmUgcmdiMl9tYXggICBiZ19ic2F0CkBAIC0xMTcsMTggKzE1OCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAqICBvdmVyaGVhZCkgKi8KIAogLyogbG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgcnBuZzJfeF9pbml0KHZvaWQpOwotc3RhdGljIGludCAgcnBuZzJfeF9jcmVhdGVfd2luZG93KHZvaWQpOwotc3RhdGljIGludCAgcnBuZzJfeF9sb2FkX2JnX2ltYWdlKHZvaWQpOwotc3RhdGljIHZvaWQgcnBuZzJfeF9kaXNwbGF5X3Jvdyh1bGcgcm93KTsKLXN0YXRpYyB2b2lkIHJwbmcyX3hfZmluaXNoX2Rpc3BsYXkodm9pZCk7Ci1zdGF0aWMgdm9pZCBycG5nMl94X2NsZWFudXAodm9pZCk7Ci1zdGF0aWMgaW50ICBycG5nMl94X21zYih1bGcgdTMydmFsKTsKK3N0YXRpYyB2b2lkIHJwbmcyX3hfaW5pdCAodm9pZCk7CitzdGF0aWMgaW50ICBycG5nMl94X2NyZWF0ZV93aW5kb3cgKHZvaWQpOworc3RhdGljIGludCAgcnBuZzJfeF9sb2FkX2JnX2ltYWdlICh2b2lkKTsKK3N0YXRpYyB2b2lkIHJwbmcyX3hfZGlzcGxheV9yb3cgKHVsZyByb3cpOworc3RhdGljIHZvaWQgcnBuZzJfeF9maW5pc2hfZGlzcGxheSAodm9pZCk7CitzdGF0aWMgdm9pZCBycG5nMl94X3JlZGlzcGxheV9pbWFnZSAodWxnIHN0YXJ0Y29sLCB1bGcgc3RhcnRyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHdpZHRoLCB1bGcgaGVpZ2h0KTsKKyNpZmRlZiBGRUFUVVJFX0xPT1AKK3N0YXRpYyB2b2lkIHJwbmcyX3hfcmVsb2FkX2JnX2ltYWdlICh2b2lkKTsKK3N0YXRpYyBpbnQgIGlzX251bWJlciAoY2hhciAqcCk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIHJwbmcyX3hfY2xlYW51cCAodm9pZCk7CitzdGF0aWMgaW50ICBycG5nMl94X21zYiAodWxnIHUzMnZhbCk7CiAKIAogc3RhdGljIGNoYXIgdGl0bGViYXJbMTAyNF0sICp3aW5kb3dfbmFtZSA9IHRpdGxlYmFyOwogc3RhdGljIGNoYXIgKmFwcG5hbWUgPSBMT05HTkFNRTsKIHN0YXRpYyBjaGFyICppY29uX25hbWUgPSBQUk9HTkFNRTsKK3N0YXRpYyBjaGFyICpyZXNfbmFtZSA9IFJFU05BTUU7CitzdGF0aWMgY2hhciAqcmVzX2NsYXNzID0gUkVTQ0xBU1M7CiBzdGF0aWMgY2hhciAqZmlsZW5hbWU7CiBzdGF0aWMgRklMRSAqaW5maWxlOwogCkBAIC0xMzksNyArMTg4LDcgQEAKIAogc3RhdGljIGludCBwYXQgPSA2OyAgICAgICAgLyogbXVzdCBiZSBsZXNzIHRoYW4gbnVtX2JncGF0ICovCiBzdGF0aWMgaW50IGJnX2ltYWdlID0gMDsKLXN0YXRpYyBpbnQgYmdzY2FsZSA9IDE2Oworc3RhdGljIGludCBiZ3NjYWxlLCBiZ3NjYWxlX2RlZmF1bHQgPSAxNjsKIHN0YXRpYyB1bGcgYmdfcm93Ynl0ZXM7CiBzdGF0aWMgdWNoICpiZ19kYXRhOwogCkBAIC0xNjUsNyArMjE0LDggQEAKICAgICB7MjU1LCAxMjcsICAgMH0sICAgIC8qIDEyOiAgb3JhbmdlICovCiAgICAgezE5MiwgIDk2LCAgIDB9LCAgICAvKiAxMzogIGRhcmtlciBvcmFuZ2UgKi8KICAgICB7IDI0LCAgNjAsICAgMH0sICAgIC8qIDE0OiAgZGFyayBncmVlbi15ZWxsb3cgKi8KLSAgICB7IDg1LCAxMjUsIDIwMH0gICAgIC8qIDE1OiAgaWNlIGJsdWUgKi8KKyAgICB7IDg1LCAxMjUsIDIwMH0sICAgIC8qIDE1OiAgaWNlIGJsdWUgKi8KKyAgICB7MTkyLCAxOTIsIDE5Mn0gICAgIC8qIDE2OiAgTmV0c2NhcGUvTW9zYWljIGdyYXkgKi8KIH07CiAvKiBub3QgdXNlZCBmb3Igbm93LCBidXQgc2hvdWxkIGJlIGZvciBlcnJvci1jaGVja2luZzoKIHN0YXRpYyBpbnQgbnVtX3JnYiA9IHNpemVvZihyZ2IpIC8gc2l6ZW9mKHN0cnVjdCByZ2JfY29sb3IpOwpAQCAtMTkzLDYgKzI0Myw3IEBACiAgICAgaW50IHJnYjFfbWF4LCByZ2IxX21pbjsgICAgIC8qIG9yIGJnX2ZyZXEsIGJnX2dyYXkgKi8KICAgICBpbnQgcmdiMl9tYXgsIHJnYjJfbWluOyAgICAgLyogb3IgYmdfYnNhdCwgYmdfYnJvdCAoYm90aCBzY2FsZWQgYnkgMTApKi8KIH0gYmdbXSA9IHsKKyAgICB7MCwgICAgIDEsMSwgMTYsMTZ9LCAgICAgICAgLyogY2hlY2tlcmVkOiAgd2hpdGUgdnMuIGxpZ2h0IGdyYXkgKGJhc2ljKSAqLwogICAgIHswKzgsICAgMiwwLCAgMSwxNX0sICAgICAgICAvKiBjaGVja2VyZWQ6ICB0YW4vYmxhY2sgdnMuIHdoaXRlL2ljZSBibHVlICovCiAgICAgezArMjQsICAyLDAsICAxLDB9LCAgICAgICAgIC8qIGNoZWNrZXJlZDogIHRhbi9ibGFjayB2cy4gd2hpdGUvYmxhY2sgKi8KICAgICB7MCs4LCAgIDQsNSwgIDAsMn0sICAgICAgICAgLyogY2hlY2tlcmVkOiAgZ29sZC95ZWxsb3cgdnMuIGJsYWNrL3RhbiAqLwpAQCAtMjQ0LDYgKzI5NSwxMCBAQAogICAgIGludCBlcnJvciA9IDA7CiAgICAgaW50IHRpbWluZyA9IEZBTFNFOwogICAgIGludCBoYXZlX2JnID0gRkFMU0U7CisjaWZkZWYgRkVBVFVSRV9MT09QCisgICAgaW50IGxvb3AgPSBGQUxTRTsKKyAgICBsb25nIGxvb3BfaW50ZXJ2YWwgPSAtMTsJCS8qIHNlY29uZHMgKDEwMCwwMDAgbWF4KSAqLworI2VuZGlmCiAgICAgZG91YmxlIExVVF9leHBvbmVudDsgICAgICAgICAgICAgICAgLyoganVzdCB0aGUgbG9va3VwIHRhYmxlICovCiAgICAgZG91YmxlIENSVF9leHBvbmVudCA9IDIuMjsgICAgICAgICAgLyoganVzdCB0aGUgbW9uaXRvciAqLwogICAgIGRvdWJsZSBkZWZhdWx0X2Rpc3BsYXlfZXhwb25lbnQ7ICAgIC8qIHdob2xlIGRpc3BsYXkgc3lzdGVtICovCkBAIC0zNDQsMTMgKzM5OSwxMiBAQAogICAgICAgICAgICAgaWYgKCEqKythcmd2KQogICAgICAgICAgICAgICAgICsrZXJyb3I7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwYXQgPSBhdG9pKCphcmd2KSAtIDE7Ci0gICAgICAgICAgICAgICAgaWYgKHBhdCA8IDAgfHwgcGF0ID49IG51bV9iZ3BhdCkKLSAgICAgICAgICAgICAgICAgICAgKytlcnJvcjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXQgPSBhdG9pKCphcmd2KTsKKyAgICAgICAgICAgICAgICBpZiAocGF0ID49IDAgJiYgcGF0IDwgbnVtX2JncGF0KSB7CiAgICAgICAgICAgICAgICAgICAgIGJnX2ltYWdlID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgaGF2ZV9iZyA9IEZBTFNFOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKytlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcCgqYXJndiwgIi11c2xlZXAiLCAyKSkgewogICAgICAgICAgICAgaWYgKCEqKythcmd2KQpAQCAtMzYzLDcgKzQxNywyMSBAQAogICAgICAgICAgICAgcGF1c2VfYWZ0ZXJfcGFzcyA9IFRSVUU7CiAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoKmFyZ3YsICItdGltaW5nIiwgMikpIHsKICAgICAgICAgICAgIHRpbWluZyA9IFRSVUU7Ci0jaWYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikpCisjaWZkZWYgRkVBVFVSRV9MT09QCisgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoKmFyZ3YsICItbG9vcCIsIDIpKSB7CisgICAgICAgICAgICBsb29wID0gVFJVRTsKKyAgICAgICAgICAgIGlmICghYXJndlsxXSB8fCAhaXNfbnVtYmVyKGFyZ3ZbMV0pKQorICAgICAgICAgICAgICAgIGxvb3BfaW50ZXJ2YWwgPSAyOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKythcmd2OworICAgICAgICAgICAgICAgIGxvb3BfaW50ZXJ2YWwgPSBhdG9sKCphcmd2KTsKKyAgICAgICAgICAgICAgICBpZiAobG9vcF9pbnRlcnZhbCA8IDApCisgICAgICAgICAgICAgICAgICAgIGxvb3BfaW50ZXJ2YWwgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvb3BfaW50ZXJ2YWwgPiAxMDAwMDApICAgLyogYml0IG1vcmUgdGhhbiBvbmUgZGF5ICovCisgICAgICAgICAgICAgICAgICAgIGxvb3BfaW50ZXJ2YWwgPSAxMDAwMDA7CisgICAgICAgICAgICB9CisjZW5kaWYKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQogICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKCphcmd2LCAiLW5vbW14ZmlsdGVycyIsIDcpKSB7CiAgICAgICAgICAgICBycG5nMl9pbmZvLm5vbW14ZmlsdGVycyA9IFRSVUU7CiAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoKmFyZ3YsICItbm9tbXhjb21iaW5lIiwgNykpIHsKQEAgLTQzNCwxMCArNTAyLDE0IEBACiAgICAgICAgIHJlYWRwbmcyX3ZlcnNpb25faW5mbygpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIgogICAgICAgICAgICJVc2FnZTogICVzIFstZGlzcGxheSB4ZHB5XSBbLWdhbW1hIGV4cF0gWy1iZ2NvbG9yIGJnIHwgLWJncGF0IHBhdF1cbiIKLSNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQogICAgICAgICAgICIgICAgICAgICUqcyBbWy1ub21teGZpbHRlcnNdIFstbm9tbXhjb21iaW5lXSBbLW5vbW14aW50ZXJsYWNlXSB8IC1ub21teF1cbiIKICNlbmRpZgorI2lmZGVmIEZFQVRVUkVfTE9PUAorICAgICAgICAgICIgICAgICAgICUqcyBbLXVzbGVlcCBkdXIgfCAtdGltaW5nXSBbLXBhdXNlXSBbLWxvb3AgW3NlY11dIGZpbGUucG5nXG5cbiIKKyNlbHNlCiAgICAgICAgICAgIiAgICAgICAgJSpzIFstdXNsZWVwIGR1ciB8IC10aW1pbmddIFstcGF1c2VdIGZpbGUucG5nXG5cbiIKKyNlbmRpZgogICAgICAgICAgICIgICAgeGRweVx0bmFtZSBvZiB0aGUgdGFyZ2V0IFggZGlzcGxheSAoZS5nLiwgYGBob3N0bmFtZTowJycpXG4iCiAgICAgICAgICAgIiAgICBleHAgXHR0cmFuc2Zlci1mdW5jdGlvbiBleHBvbmVudCAoYGBnYW1tYScnKSBvZiB0aGUgZGlzcGxheVxuIgogICAgICAgICAgICJcdFx0ICBzeXN0ZW0gaW4gZmxvYXRpbmctcG9pbnQgZm9ybWF0IChlLmcuLCBgYCUuMWYnJyk7IGVxdWFsXG4iCkBAIC00NDYsOSArNTE4LDE0IEBACiAgICAgICAgICAgIiAgICBiZyAgXHRkZXNpcmVkIGJhY2tncm91bmQgY29sb3IgaW4gNy1jaGFyYWN0ZXIgaGV4IFJHQiBmb3JtYXRcbiIKICAgICAgICAgICAiXHRcdCAgKGUuZy4sIGBgI2ZmNzcwMCcnIGZvciBvcmFuZ2U6ICBzYW1lIGFzIEhUTUwgY29sb3JzKTtcbiIKICAgICAgICAgICAiXHRcdCAgdXNlZCB3aXRoIHRyYW5zcGFyZW50IGltYWdlczsgb3ZlcnJpZGVzIC1iZ3BhdFxuIgotICAgICAgICAgICIgICAgcGF0IFx0ZGVzaXJlZCBiYWNrZ3JvdW5kIHBhdHRlcm4gbnVtYmVyICgxLSVkKTsgdXNlZCB3aXRoXG4iCisgICAgICAgICAgIiAgICBwYXQgXHRkZXNpcmVkIGJhY2tncm91bmQgcGF0dGVybiBudW1iZXIgKDAtJWQpOyB1c2VkIHdpdGhcbiIKICAgICAgICAgICAiXHRcdCAgdHJhbnNwYXJlbnQgaW1hZ2VzOyBvdmVycmlkZXMgLWJnY29sb3JcbiIKLSNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkKKyNpZmRlZiBGRUFUVVJFX0xPT1AKKyAgICAgICAgICAiICAgIC1sb29wXHRsb29wcyB0aHJvdWdoIGJhY2tncm91bmQgaW1hZ2VzIGFmdGVyIGluaXRpYWwgZGlzcGxheVxuIgorICAgICAgICAgICJcdFx0ICBpcyBjb21wbGV0ZSAoZGVwZW5kcyBvbiAtYmdwYXQpXG4iCisgICAgICAgICAgIiAgICBzZWMgXHRzZWNvbmRzIHRvIGRpc3BsYXkgZWFjaCBiYWNrZ3JvdW5kIGltYWdlIChkZWZhdWx0ID0gMilcbiIKKyNlbmRpZgorI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCiAgICAgICAgICAgIiAgICAtbm9tbXgqXHRkaXNhYmxlIG9wdGltaXplZCBNTVggcm91dGluZXMgZm9yIGRlY29kaW5nIHJvdyBmaWx0ZXJzLFxuIgogICAgICAgICAgICJcdFx0ICBjb21iaW5pbmcgcm93cywgYW5kIGV4cGFuZGluZyBpbnRlcmxhY2luZywgcmVzcGVjdGl2ZWx5XG4iCiAjZW5kaWYKQEAgLTQ2MCwxMCArNTM3LDEwIEBACiAgICAgICAgICAgIlxuUHJlc3MgUSwgRXNjIG9yIG1vdXNlIGJ1dHRvbiAxICh3aXRoaW4gaW1hZ2Ugd2luZG93LCBhZnRlciBpbWFnZVxuIgogICAgICAgICAgICJpcyBkaXNwbGF5ZWQpIHRvIHF1aXQuXG4iCiAgICAgICAgICAgIlxuIiwgUFJPR05BTUUsCi0jaWYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikpCi0gICAgICAgICAgc3RybGVuKFBST0dOQU1FKSwgIiAiLAorI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisgICAgICAgICAgKGludClzdHJsZW4oUFJPR05BTUUpLCAiICIsCiAjZW5kaWYKLSAgICAgICAgICBzdHJsZW4oUFJPR05BTUUpLCAiICIsIGRlZmF1bHRfZGlzcGxheV9leHBvbmVudCwgbnVtX2JncGF0KTsKKyAgICAgICAgICAoaW50KXN0cmxlbihQUk9HTkFNRSksICIgIiwgZGVmYXVsdF9kaXNwbGF5X2V4cG9uZW50LCBudW1fYmdwYXQtMSk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCkBAIC01MzAsMTMgKzYwNywxMTEgQEAKICAgICB9CiAKIAorI2lmZGVmIEZFQVRVUkVfTE9PUAorCisgICAgaWYgKGxvb3AgJiYgYmdfaW1hZ2UpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaW50IGksIHVzZV9zbGVlcDsKKyAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdywgdGhlbjsKKworICAgICAgICAgICAgLyogZ2V0IGN1cnJlbnQgdGltZSBhbmQgYWRkIGxvb3BfaW50ZXJ2YWwgdG8gZ2V0IHRhcmdldCB0aW1lICovCisgICAgICAgICAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0aGVuLCBOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhlbi50dl9zZWMgKz0gbG9vcF9pbnRlcnZhbDsKKyAgICAgICAgICAgICAgICB1c2Vfc2xlZXAgPSBGQUxTRTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHVzZV9zbGVlcCA9IFRSVUU7CisKKyAgICAgICAgICAgIC8qIGRvIHF1aWNrIGNoZWNrIGZvciBhIHF1aXQgZXZlbnQgYnV0IGRvbid0IHdhaXQgZm9yIGl0ICovCisgICAgICAgICAgICAvKiBHUlIgQlVHOiAgc2hvdWxkIGFsc28gY2hlY2sgZm9yIEV4cG9zZSBldmVudHMgYW5kIHJlZHJhdy4uLiAqLworICAgICAgICAgICAgaWYgKFhDaGVja01hc2tFdmVudChkaXNwbGF5LCBLZXlQcmVzc01hc2sgfCBCdXR0b25QcmVzc01hc2ssICZlKSkKKyAgICAgICAgICAgICAgICBpZiAoUVVJVChlLGspKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogZ2VuZXJhdGUgbmV4dCBiYWNrZ3JvdW5kIGltYWdlICovCisgICAgICAgICAgICBpZiAoKytwYXQgPj0gbnVtX2JncGF0KQorICAgICAgICAgICAgICAgIHBhdCA9IDA7CisgICAgICAgICAgICBycG5nMl94X3JlbG9hZF9iZ19pbWFnZSgpOworCisgICAgICAgICAgICAvKiB3YWl0IGZvciB0aW1lb3V0LCB1c2luZyB3aGF0ZXZlciBtZWFucyBhcmUgYXZhaWxhYmxlICovCisgICAgICAgICAgICBpZiAodXNlX3NsZWVwIHx8IGdldHRpbWVvZmRheSgmbm93LCBOVUxMKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gbG9vcF9pbnRlcnZhbDsgIGkgPiAwOyAgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgICAgICAvKiBHUlIgQlVHOiAgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBFeHBvc2UgKGFuZCByZWRyYXchKSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoWENoZWNrTWFza0V2ZW50KGRpc3BsYXksIEtleVByZXNzTWFzayB8IEJ1dHRvblByZXNzTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICZlKSAmJiBRVUlUKGUsaykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIFkyMDM4IEJVRyEgKi8KKyAgICAgICAgICAgICAgICBpZiAobm93LnR2X3NlYyA8IHRoZW4udHZfc2VjIHx8CisgICAgICAgICAgICAgICAgICAgIChub3cudHZfc2VjID09IHRoZW4udHZfc2VjICYmIG5vdy50dl91c2VjIDwgdGhlbi50dl91c2VjKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCBxdWl0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIGxvbmcgc2Vjb25kc190b19nbyA9IHRoZW4udHZfc2VjIC0gbm93LnR2X3NlYzsKKyAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2xlZXBfdXNlYzsKKworICAgICAgICAgICAgICAgICAgICAvKiBiYXNpY2FsbHkgY2hldyB1cCBtb3N0IG9mIHJlbWFpbmluZyBsb29wLWludGVydmFsIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICogIGNhbGxzIHRvIHNsZWVwKDEpIGludGVybGVhdmVkIHdpdGggY2hlY2tzIGZvciBxdWl0CisgICAgICAgICAgICAgICAgICAgICAqICBldmVudHMsIGJ1dCBhbHNvIHJlY2FsYyB0aW1lLXRvLWdvIHBlcmlvZGljYWxseTsgd2hlbgorICAgICAgICAgICAgICAgICAgICAgKiAgZG9uZSwgY2xlYW4gdXAgYW55IHJlbWFpbmluZyB0aW1lIHdpdGggdXNsZWVwKCkgY2FsbAorICAgICAgICAgICAgICAgICAgICAgKiAgKGNvdWxkIGFsc28gdXNlIFNJR0FMUk0sIGJ1dCBzaWduYWxzIGFyZSBhIHBhaW4uLi4pICovCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzZWNvbmRzX3RvX2dvLS0gPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kc19kb25lID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc2Vjb25kc190b19nbzsgIGkgPiAwICYmICFxdWl0OyAgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR1JSIEJVRzogIG5lZWQgdG8gY2hlY2sgZm9yIEV4cG9zZSBhbmQgcmVkcmF3ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFhDaGVja01hc2tFdmVudChkaXNwbGF5LCBLZXlQcmVzc01hc2sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b25QcmVzc01hc2ssICZlKSAmJiBRVUlUKGUsaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3NlY29uZHNfZG9uZSA+IDEwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8qIHRpbWUgdG8gcmVkbyBzZWNvbmRzX3RvX2dvIG1lYXMuICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogT0ssIG1vcmUgdGhhbiAxMDAwIHNlY29uZHMgc2luY2UgbGFzdCBjaGVjazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqICBjb3JyZWN0IHRoZSB0aW1lLXRvLWdvIG1lYXN1cmVtZW50IGZvciBkcmlmdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRpbWVvZmRheSgmbm93LCBOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdy50dl9zZWMgPj0gdGhlbi50dl9zZWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHNfdG9fZ28gPSB0aGVuLnR2X3NlYyAtIG5vdy50dl9zZWM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3NlY29uZHNfdG9fZ287ICAvKiByZXN0b3JlIHdoYXQgd2Ugc3VidHJhY3RlZCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChxdWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogYnJlYWtzIG91dGVyIGRvLWxvb3AsIHNraXBzIHJlZGlzcGxheSAqLworCisgICAgICAgICAgICAgICAgICAgIC8qIHNpbmNlIGRpZmZlcmVuY2UgYmV0d2VlbiAibm93IiBhbmQgInRoZW4iIGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICogIGVhdGVuIHVwIHRvIHdpdGhpbiBhIGNvdXBsZSBvZiBzZWNvbmRzLCBkb24ndCBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAqICB3b3JyeSBhYm91dCBvdmVyZmxvdy0tYnV0IG1pZ2h0IGhhdmUgb3ZlcnNob3QgKG5lZy4pICovCisgICAgICAgICAgICAgICAgICAgIGlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNsZWVwX3VzZWMgPSAxMDAwMDAwTCoodGhlbi50dl9zZWMgLSBub3cudHZfc2VjKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4udHZfdXNlYyAtIG5vdy50dl91c2VjOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzbGVlcF91c2VjID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2xlZXAoKHVsZyl1c2xlZXBfdXNlYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGNvbXBvc2l0ZSBpbWFnZSBhZ2FpbnN0IG5ldyBiYWNrZ3JvdW5kIGFuZCBkaXNwbGF5IChub3RlIHRoYXQKKyAgICAgICAgICAgICAqICB3ZSBkbyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIHRpbWUgc3BlbnQgZG9pbmcgdGhpcy4uLikgKi8KKyAgICAgICAgICAgIHJwbmcyX3hfcmVkaXNwbGF5X2ltYWdlICgwLCAwLCBycG5nMl9pbmZvLndpZHRoLCBycG5nMl9pbmZvLmhlaWdodCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSAvKiBGQUxMIFRIUk9VR0ggYW5kIGRvIHRoZSBub3JtYWwgdGhpbmcgKi8KKworI2VuZGlmIC8qIEZFQVRVUkVfTE9PUCAqLworCiAgICAgLyogd2FpdCBmb3IgdGhlIHVzZXIgdG8gdGVsbCB1cyB3aGVuIHRvIHF1aXQgKi8KIAotICAgIGRvCisgICAgZG8gewogICAgICAgICBYTmV4dEV2ZW50KGRpc3BsYXksICZlKTsKLSAgICB3aGlsZSAoIShlLnR5cGUgPT0gQnV0dG9uUHJlc3MgJiYgZS54YnV0dG9uLmJ1dHRvbiA9PSBCdXR0b24xKSAmJgotICAgICAgICAgICAhKGUudHlwZSA9PSBLZXlQcmVzcyAmJiAgICAvKiAgdi0tLSBvciAxIGZvciBzaGlmdGVkIGtleXMgKi8KLSAgICAgICAgICAgICAoKGsgPSBYTG9va3VwS2V5c3ltKCZlLnhrZXksIDApKSA9PSBYS19xIHx8IGsgPT0gWEtfRXNjYXBlKSApKTsKKyAgICAgICAgaWYgKGUudHlwZSA9PSBFeHBvc2UpIHsKKyAgICAgICAgICAgIFhFeHBvc2VFdmVudCAqZXggPSAoWEV4cG9zZUV2ZW50ICopJmU7CisgICAgICAgICAgICBycG5nMl94X3JlZGlzcGxheV9pbWFnZSAoZXgtPngsIGV4LT55LCBleC0+d2lkdGgsIGV4LT5oZWlnaHQpOworICAgICAgICB9CisgICAgfSB3aGlsZSAoIVFVSVQoZSxrKSk7CiAKIAogICAgIC8qIHdlJ3JlIGRvbmU6ICBjbGVhbiB1cCBhbGwgaW1hZ2UgYW5kIFggcmVzb3VyY2VzIGFuZCBnbyBhd2F5ICovCkBAIC01OTQsNyArNzY5LDYgQEAKICAgICAgICAgICogSWYgd2UvaXQgc2VnZmF1bHQgaW5zdGVhZCwgc2VlbXMgbGlrZSBhIGxpYnBuZyBidWcuLi4gKi8KIAogICAgICAgICAvKiB3ZSdyZSBoZXJlIHZpYSBsaWJwbmcgY2FsbGJhY2ssIHNvIGlmIHdpbmRvdyBmYWlscywgY2xlYW4gYW5kIGJhaWwgKi8KLXByaW50ZigicmVhZHBuZzJfY2xlYW51cC5cbiIpOwogICAgICAgICByZWFkcG5nMl9jbGVhbnVwKCZycG5nMl9pbmZvKTsKICAgICAgICAgcnBuZzJfeF9jbGVhbnVwKCk7CiAgICAgICAgIGV4aXQoMik7CkBAIC02MTksMTEgKzc5MywxMiBAQAogICAgIFhFdmVudCBlOwogICAgIFhHQ1ZhbHVlcyBnY3ZhbHVlczsKICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyOwotICAgIFhTaXplSGludHMgKnNpemVfaGludHM7CiAgICAgWFRleHRQcm9wZXJ0eSB3aW5kb3dOYW1lLCAqcFdpbmRvd05hbWUgPSAmd2luZG93TmFtZTsKICAgICBYVGV4dFByb3BlcnR5IGljb25OYW1lLCAqcEljb25OYW1lID0gJmljb25OYW1lOwogICAgIFhWaXN1YWxJbmZvIHZpc3VhbF9pbmZvOworICAgIFhTaXplSGludHMgKnNpemVfaGludHM7CiAgICAgWFdNSGludHMgKndtX2hpbnRzOworICAgIFhDbGFzc0hpbnQgKmNsYXNzX2hpbnRzOwogCiAKICAgICBUcmFjZSgoc3RkZXJyLCAiYmVnaW5uaW5nIHJwbmcyX3hfY3JlYXRlX3dpbmRvdygpXG4iKSkKQEAgLTc0Niw4ICs5MjEsMTMgQEAKICAgICAgICAgd21faGludHMtPmZsYWdzID0gU3RhdGVIaW50IHwgSW5wdXRIaW50ICAvKiB8IEljb25QaXhtYXBIaW50ICovIDsKICAgICB9CiAKKyAgICBpZiAoKGNsYXNzX2hpbnRzID0gWEFsbG9jQ2xhc3NIaW50KCkpICE9IE5VTEwpIHsKKyAgICAgICAgY2xhc3NfaGludHMtPnJlc19uYW1lID0gcmVzX25hbWU7CisgICAgICAgIGNsYXNzX2hpbnRzLT5yZXNfY2xhc3MgPSByZXNfY2xhc3M7CisgICAgfQorCiAgICAgWFNldFdNUHJvcGVydGllcyhkaXNwbGF5LCB3aW5kb3csIHBXaW5kb3dOYW1lLCBwSWNvbk5hbWUsIE5VTEwsIDAsCi0gICAgICBzaXplX2hpbnRzLCB3bV9oaW50cywgTlVMTCk7CisgICAgICBzaXplX2hpbnRzLCB3bV9oaW50cywgY2xhc3NfaGludHMpOwogCiAgICAgLyogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBoaW50cyBubyBsb25nZXIgbmVlZGVkOyBmcmVlIG1lbW9yeSAqLwogICAgIGlmIChwV2luZG93TmFtZSkKQEAgLTc1OCw2ICs5MzgsOCBAQAogICAgICAgICBYRnJlZShzaXplX2hpbnRzKTsKICAgICBpZiAod21faGludHMpCiAgICAgICAgWEZyZWUod21faGludHMpOworICAgIGlmIChjbGFzc19oaW50cykKKyAgICAgICBYRnJlZShjbGFzc19oaW50cyk7CiAKICAgICBYTWFwV2luZG93KGRpc3BsYXksIHdpbmRvdyk7CiAKQEAgLTg1NSw3ICsxMDM3LDcgQEAKICAgICB1Y2ggcjEsIHIyLCBnMSwgZzIsIGIxLCBiMjsKICAgICB1Y2ggcjFfaW52LCByMl9pbnYsIGcxX2ludiwgZzJfaW52LCBiMV9pbnYsIGIyX2ludjsKICAgICBpbnQgaywgaG1heCwgbWF4OwotICAgIGludCB4aWR4LCB5aWR4LCB5aWR4X21heCA9IChiZ3NjYWxlLTEpOworICAgIGludCB4aWR4LCB5aWR4LCB5aWR4X21heDsKICAgICBpbnQgZXZlbl9vZGRfdmVydCwgZXZlbl9vZGRfaG9yaXosIGV2ZW5fb2RkOwogICAgIGludCBpbnZlcnRfZ3JhZGllbnQyID0gKGJnW3BhdF0udHlwZSAmIDB4MDgpOwogICAgIGludCBpbnZlcnRfY29sdW1uOwpAQCAtODc3LDYgKzEwNTksOSBAQAogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKKyAgICBiZ3NjYWxlID0gKHBhdCA9PSAwKT8gOCA6IGJnc2NhbGVfZGVmYXVsdDsKKyAgICB5aWR4X21heCA9IGJnc2NhbGUgLSAxOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIFZlcnRpY2FsIGdyYWRpZW50cyAocmFtcHMpIGluIE54TiBzcXVhcmVzLCBhbHRlcm5hdGluZyBkaXJlY3Rpb24gYW5kCiAgICAgY29sb3JzIChOID09IGJnc2NhbGUpLgpAQCAtMTA2OCwyMyArMTI1Myw0MCBAQAogCiAgICAgaWYgKGRlcHRoID09IDI0IHx8IGRlcHRoID09IDMyKSB7CiAgICAgICAgIHVsZyByZWQsIGdyZWVuLCBibHVlOworICAgICAgICBpbnQgYnBwID0geGltYWdlLT5iaXRzX3Blcl9waXhlbDsKIAogICAgICAgICBmb3IgKHJvdyA9IDA7ICByb3cgPCBycG5nMl9pbmZvLmhlaWdodDsgICsrcm93KSB7CiAgICAgICAgICAgICBzcmMgPSBiZ19kYXRhICsgcm93KmJnX3Jvd2J5dGVzOwogICAgICAgICAgICAgZGVzdCA9IHhpbWFnZS0+ZGF0YSArIHJvdyp4aW1hZ2Vfcm93Ynl0ZXM7Ci0gICAgICAgICAgICBmb3IgKGkgPSBycG5nMl9pbmZvLndpZHRoOyAgaSA+IDA7ICAtLWkpIHsKLSAgICAgICAgICAgICAgICByZWQgICA9ICpzcmMrKzsKLSAgICAgICAgICAgICAgICBncmVlbiA9ICpzcmMrKzsKLSAgICAgICAgICAgICAgICBibHVlICA9ICpzcmMrKzsKLSAgICAgICAgICAgICAgICBwaXhlbCA9IChyZWQgICA8PCBSU2hpZnQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChncmVlbiA8PCBHU2hpZnQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChibHVlICA8PCBCU2hpZnQpOwotICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLwotICAgICAgICAgICAgICAgIC8qIEdSUiBCVUc6ICB0aGlzIGFzc3VtZXMgYnBwID09IDMyLCBidXQgbWF5IGJlIDI0OiAqLwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDI0KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgaWYgKGJwcCA9PSAzMikgewkvKiBzbGlnaHRseSBvcHRpbWl6ZWQgdmVyc2lvbiAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IHJwbmcyX2luZm8ud2lkdGg7ICBpID4gMDsgIC0taSkgeworICAgICAgICAgICAgICAgICAgICByZWQgICA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGJsdWUgID0gKnNyYysrOworICAgICAgICAgICAgICAgICAgICBwaXhlbCA9IChyZWQgICA8PCBSU2hpZnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JlZW4gPDwgR1NoaWZ0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdWUgIDw8IEJTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IHJwbmcyX2luZm8ud2lkdGg7ICBpID4gMDsgIC0taSkgeworICAgICAgICAgICAgICAgICAgICByZWQgICA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGJsdWUgID0gKnNyYysrOworICAgICAgICAgICAgICAgICAgICBwaXhlbCA9IChyZWQgICA8PCBSU2hpZnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JlZW4gPDwgR1NoaWZ0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdWUgIDw8IEJTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICAvKiBHUlIgQlVHPyAgdGhpcyBhc3N1bWVzIGJwcCA9PSAyNCAmIGJpdHMgYXJlIHBhY2tlZCBsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgIChwcm9iYWJseSBuZWVkIHRvIHVzZSBSU2hpZnQsIFJNYXNrLCBldGMuKSAqLworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMTU1LDEwICsxMzU3LDcgQEAKICAgICAgICAgICAgICAgUFJPR05BTUUsIHByZXZwYXNzICsgMSk7CiAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgIFhOZXh0RXZlbnQoZGlzcGxheSwgJmUpOwotICAgICAgICAgICAgd2hpbGUgKCEoZS50eXBlID09IEJ1dHRvblByZXNzICYmIGUueGJ1dHRvbi5idXR0b24gPT0gQnV0dG9uMSkKLSAgICAgICAgICAgICAgICAgICAmJiAhKGUudHlwZSA9PSBLZXlQcmVzcyAmJgotICAgICAgICAgICAgICAgICAgICgoayA9IFhMb29rdXBLZXlzeW0oJmUueGtleSwgMCkpID09IFhLX3EKLSAgICAgICAgICAgICAgICAgICAgfHwgayA9PSBYS19Fc2NhcGUpICkpIDsKKyAgICAgICAgICAgIHdoaWxlICghUVVJVChlLGspKTsKICAgICAgICAgfQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAgcGFzcyAlZCBvZiA3XHIiLCBQUk9HTkFNRSwgcnBuZzJfaW5mby5wYXNzICsgMSk7CiAgICAgICAgIGZmbHVzaChzdGRlcnIpOwpAQCAtMTE3OSw2ICsxMzc4LDcgQEAKIAogICAgIGlmIChkZXB0aCA9PSAyNCB8fCBkZXB0aCA9PSAzMikgewogICAgICAgICB1bGcgcmVkLCBncmVlbiwgYmx1ZTsKKyAgICAgICAgaW50IGJwcCA9IHhpbWFnZS0+Yml0c19wZXJfcGl4ZWw7CiAKICAgICAgICAgc3JjID0gcnBuZzJfaW5mby5pbWFnZV9kYXRhICsgcm93KnJwbmcyX2luZm8ucm93Ynl0ZXM7CiAgICAgICAgIGlmIChiZ19pbWFnZSkKQEAgLTExOTMsMTEgKzEzOTMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIChncmVlbiA8PCBHU2hpZnQpIHwKICAgICAgICAgICAgICAgICAgICAgICAgIChibHVlICA8PCBCU2hpZnQpOwogICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLwotICAgICAgICAgICAgICAgIC8qIEdSUiBCVUc6ICB0aGlzIGFzc3VtZXMgYnBwID09IDMyLCBidXQgbWF5IGJlIDI0OiAqLwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDI0KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGlmIChicHAgPT0gMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMjQpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSggcGl4ZWwgICAgICAgICYgMHhmZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogR1JSIEJVRz8gIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0LCBSTWFzaywgZXRjLikgKi8KKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSAvKiBpZiAocnBuZzJfaW5mby5jaGFubmVscyA9PSA0KSAqLyB7CiAgICAgICAgICAgICBmb3IgKGkgPSBycG5nMl9pbmZvLndpZHRoOyAgaSA+IDA7ICAtLWkpIHsKQEAgLTEyMzAsMTEgKzE0MzcsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIChncmVlbiA8PCBHU2hpZnQpIHwKICAgICAgICAgICAgICAgICAgICAgICAgIChibHVlICA8PCBCU2hpZnQpOwogICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLwotICAgICAgICAgICAgICAgIC8qIEdSUiBCVUc6ICB0aGlzIGFzc3VtZXMgYnBwID09IDMyLCBidXQgbWF5IGJlIDI0OiAqLwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDI0KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGlmIChicHAgPT0gMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMjQpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSggcGl4ZWwgICAgICAgICYgMHhmZik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogR1JSIEJVRz8gIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0LCBSTWFzaywgZXRjLikgKi8KKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+ICA4KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTM1Miw2ICsxNTY2LDQ3MiBAQAogCiAKIAorc3RhdGljIHZvaWQgcnBuZzJfeF9yZWRpc3BsYXlfaW1hZ2UodWxnIHN0YXJ0Y29sLCB1bGcgc3RhcnRyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgd2lkdGgsIHVsZyBoZWlnaHQpCit7CisgICAgdWNoIGJnX3JlZCAgID0gcnBuZzJfaW5mby5iZ19yZWQ7CisgICAgdWNoIGJnX2dyZWVuID0gcnBuZzJfaW5mby5iZ19ncmVlbjsKKyAgICB1Y2ggYmdfYmx1ZSAgPSBycG5nMl9pbmZvLmJnX2JsdWU7CisgICAgdWNoICpzcmMsICpzcmMyPU5VTEw7CisgICAgY2hhciAqZGVzdDsKKyAgICB1Y2ggciwgZywgYiwgYTsKKyAgICB1bGcgaSwgcm93LCBsYXN0cm93ID0gMDsKKyAgICB1bGcgcGl4ZWw7CisgICAgaW50IHhpbWFnZV9yb3dieXRlcyA9IHhpbWFnZS0+Ynl0ZXNfcGVyX2xpbmU7CisKKworICAgIFRyYWNlKChzdGRlcnIsICJiZWdpbm5pbmcgZGlzcGxheSBsb29wIChpbWFnZV9jaGFubmVscyA9PSAlZClcbiIsCisgICAgICBpbWFnZV9jaGFubmVscykpCisgICAgVHJhY2UoKHN0ZGVyciwgIiAgICh3aWR0aCA9ICVsZCwgcm93Ynl0ZXMgPSAlbGQsIHhpbWFnZV9yb3dieXRlcyA9ICVkKVxuIiwKKyAgICAgIHJwbmcyX2luZm8ud2lkdGgsIGltYWdlX3Jvd2J5dGVzLCB4aW1hZ2Vfcm93Ynl0ZXMpKQorICAgIFRyYWNlKChzdGRlcnIsICIgICAoYnBwID0gJWQpXG4iLCB4aW1hZ2UtPmJpdHNfcGVyX3BpeGVsKSkKKyAgICBUcmFjZSgoc3RkZXJyLCAiICAgKGJ5dGVfb3JkZXIgPSAlcylcbiIsIHhpbWFnZS0+Ynl0ZV9vcmRlciA9PSBNU0JGaXJzdD8KKyAgICAgICJNU0JGaXJzdCIgOiAoeGltYWdlLT5ieXRlX29yZGVyID09IExTQkZpcnN0PyAiTFNCRmlyc3QiIDogInVua25vd24iKSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQXNpZGUgZnJvbSB0aGUgdXNlIG9mIHRoZSBycG5nMl9pbmZvIHN0cnVjdCBhbmQgb2Ygc3JjMiAoZm9yIGJhY2tncm91bmQKKyAgICBpbWFnZSksIHRoaXMgcm91dGluZSBpcyBpZGVudGljYWwgdG8gcnBuZ194X2Rpc3BsYXlfaW1hZ2UoKSBpbiB0aGUgbm9uLQorICAgIHByb2dyZXNzaXZlIHZlcnNpb24gb2YgdGhlIHByb2dyYW0tLWZvciB0aGUgc2ltcGxlIHJlYXNvbiB0aGF0IHJlZGlzcGxheQorICAgIG9mIHRoZSBpbWFnZSBhZ2FpbnN0IGEgbmV3IGJhY2tncm91bmQgaGFwcGVucyBhZnRlciB0aGUgaW1hZ2UgaXMgZnVsbHkKKyAgICBkZWNvZGVkIGFuZCB0aGVyZWZvcmUgaXMsIGJ5IGRlZmluaXRpb24sIG5vbi1wcm9ncmVzc2l2ZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGlmIChkZXB0aCA9PSAyNCB8fCBkZXB0aCA9PSAzMikgeworICAgICAgICB1bGcgcmVkLCBncmVlbiwgYmx1ZTsKKyAgICAgICAgaW50IGJwcCA9IHhpbWFnZS0+Yml0c19wZXJfcGl4ZWw7CisKKyAgICAgICAgZm9yIChsYXN0cm93ID0gcm93ID0gc3RhcnRyb3c7ICByb3cgPCBzdGFydHJvdytoZWlnaHQ7ICArK3JvdykgeworICAgICAgICAgICAgc3JjID0gcnBuZzJfaW5mby5pbWFnZV9kYXRhICsgcm93KnJwbmcyX2luZm8ucm93Ynl0ZXM7CisgICAgICAgICAgICBpZiAoYmdfaW1hZ2UpCisgICAgICAgICAgICAgICAgc3JjMiA9IGJnX2RhdGEgKyByb3cqYmdfcm93Ynl0ZXM7CisgICAgICAgICAgICBkZXN0ID0geGltYWdlLT5kYXRhICsgcm93KnhpbWFnZV9yb3dieXRlczsKKyAgICAgICAgICAgIGlmIChycG5nMl9pbmZvLmNoYW5uZWxzID09IDMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSBycG5nMl9pbmZvLndpZHRoOyAgaSA+IDA7ICAtLWkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVkICAgPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKnNyYysrOworICAgICAgICAgICAgICAgICAgICBibHVlICA9ICpzcmMrKzsKKyNpZmRlZiBOT18yNEJJVF9NQVNLUworICAgICAgICAgICAgICAgICAgICBwaXhlbCA9IChyZWQgICA8PCBSU2hpZnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JlZW4gPDwgR1NoaWZ0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdWUgIDw8IEJTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYnBwID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0LCBSTWFzaywgZXRjLikgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVkICAgPSAoUlNoaWZ0IDwgMCk/IHJlZCAgIDw8ICgtUlNoaWZ0KSA6IHJlZCAgID4+IFJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoR1NoaWZ0IDwgMCk/IGdyZWVuIDw8ICgtR1NoaWZ0KSA6IGdyZWVuID4+IEdTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSAgPSAoQlNoaWZ0IDwgMCk/IGJsdWUgIDw8ICgtQlNoaWZ0KSA6IGJsdWUgID4+IEJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgPSAocmVkICYgUk1hc2spIHwgKGdyZWVuICYgR01hc2spIHwgKGJsdWUgJiBCTWFzayk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYnBwID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdSUiBCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0L1JNYXNrL2V0Yy4gaGVyZSwgdG9vKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocnBuZzJfaW5mby5jaGFubmVscyA9PSA0KSAqLyB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gcnBuZzJfaW5mby53aWR0aDsgIGkgPiAwOyAgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIHIgPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGcgPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGIgPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGEgPSAqc3JjKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZ19pbWFnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYmdfcmVkICAgPSAqc3JjMisrOworICAgICAgICAgICAgICAgICAgICAgICAgYmdfZ3JlZW4gPSAqc3JjMisrOworICAgICAgICAgICAgICAgICAgICAgICAgYmdfYmx1ZSAgPSAqc3JjMisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChhID09IDI1NSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVkICAgPSByOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBnOworICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZSAgPSBiOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVkICAgPSBiZ19yZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGJnX2dyZWVuOworICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZSAgPSBiZ19ibHVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBtYWNybyAoZnJvbSBwbmcuaCkgY29tcG9zaXRlcyB0aGUgZm9yZWdyb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICogYW5kIGJhY2tncm91bmQgdmFsdWVzIGFuZCBwdXRzIHRoZSByZXN1bHQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpcnN0IGFyZ3VtZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9jb21wb3NpdGUocmVkLCAgIHIsIGEsIGJnX3JlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9jb21wb3NpdGUoZ3JlZW4sIGcsIGEsIGJnX2dyZWVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2NvbXBvc2l0ZShibHVlLCAgYiwgYSwgYmdfYmx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBOT18yNEJJVF9NQVNLUworICAgICAgICAgICAgICAgICAgICBwaXhlbCA9IChyZWQgICA8PCBSU2hpZnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JlZW4gPDwgR1NoaWZ0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdWUgIDw8IEJTaGlmdCk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYnBwID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0LCBSTWFzaywgZXRjLikgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVkICAgPSAoUlNoaWZ0IDwgMCk/IHJlZCAgIDw8ICgtUlNoaWZ0KSA6IHJlZCAgID4+IFJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoR1NoaWZ0IDwgMCk/IGdyZWVuIDw8ICgtR1NoaWZ0KSA6IGdyZWVuID4+IEdTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSAgPSAoQlNoaWZ0IDwgMCk/IGJsdWUgIDw8ICgtQlNoaWZ0KSA6IGJsdWUgID4+IEJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgPSAocmVkICYgUk1hc2spIHwgKGdyZWVuICYgR01hc2spIHwgKGJsdWUgJiBCTWFzayk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYnBwID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoKHBpeGVsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gIDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKCBwaXhlbCAgICAgICAgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdSUiBCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgYXNzdW1lcyBicHAgPT0gMjQgJiBiaXRzIGFyZSBwYWNrZWQgbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAocHJvYmFibHkgbmVlZCB0byB1c2UgUlNoaWZ0L1JNYXNrL2V0Yy4gaGVyZSwgdG9vKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSgocGl4ZWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAoY2hhcikoIHBpeGVsICAgICAgICAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBkaXNwbGF5IGFmdGVyIGV2ZXJ5IDE2IGxpbmVzICovCisgICAgICAgICAgICBpZiAoKChyb3crMSkgJiAweGYpID09IDApIHsKKyAgICAgICAgICAgICAgICBYUHV0SW1hZ2UoZGlzcGxheSwgd2luZG93LCBnYywgeGltYWdlLCAwLCAoaW50KWxhc3Ryb3csIDAsCisgICAgICAgICAgICAgICAgICAoaW50KWxhc3Ryb3csIHJwbmcyX2luZm8ud2lkdGgsIDE2KTsKKyAgICAgICAgICAgICAgICBYRmx1c2goZGlzcGxheSk7CisgICAgICAgICAgICAgICAgbGFzdHJvdyA9IHJvdyArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMTYpIHsKKyAgICAgICAgdXNoIHJlZCwgZ3JlZW4sIGJsdWU7CisKKyAgICAgICAgZm9yIChsYXN0cm93ID0gcm93ID0gc3RhcnRyb3c7ICByb3cgPCBzdGFydHJvdytoZWlnaHQ7ICArK3JvdykgeworICAgICAgICAgICAgc3JjID0gcnBuZzJfaW5mby5yb3dfcG9pbnRlcnNbcm93XTsKKyAgICAgICAgICAgIGlmIChiZ19pbWFnZSkKKyAgICAgICAgICAgICAgICBzcmMyID0gYmdfZGF0YSArIHJvdypiZ19yb3dieXRlczsKKyAgICAgICAgICAgIGRlc3QgPSB4aW1hZ2UtPmRhdGEgKyByb3cqeGltYWdlX3Jvd2J5dGVzOworICAgICAgICAgICAgaWYgKHJwbmcyX2luZm8uY2hhbm5lbHMgPT0gMykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IHJwbmcyX2luZm8ud2lkdGg7ICBpID4gMDsgIC0taSkgeworICAgICAgICAgICAgICAgICAgICByZWQgICA9ICgodXNoKSgqc3JjKSA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgKytzcmM7CisgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKCh1c2gpKCpzcmMpIDw8IDgpOworICAgICAgICAgICAgICAgICAgICArK3NyYzsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSAgPSAoKHVzaCkoKnNyYykgPDwgOCk7CisgICAgICAgICAgICAgICAgICAgICsrc3JjOworICAgICAgICAgICAgICAgICAgICBwaXhlbCA9ICgocmVkICAgPj4gUlNoaWZ0KSAmIFJNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChncmVlbiA+PiBHU2hpZnQpICYgR01hc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJsdWUgID4+IEJTaGlmdCkgJiBCTWFzayk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSggcGl4ZWwgICAgICAgICYgMHhmZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChycG5nMl9pbmZvLmNoYW5uZWxzID09IDQpICovIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSBycG5nMl9pbmZvLndpZHRoOyAgaSA+IDA7ICAtLWkpIHsKKyAgICAgICAgICAgICAgICAgICAgciA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgYiA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgYSA9ICpzcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJnX2ltYWdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiZ19yZWQgICA9ICpzcmMyKys7CisgICAgICAgICAgICAgICAgICAgICAgICBiZ19ncmVlbiA9ICpzcmMyKys7CisgICAgICAgICAgICAgICAgICAgICAgICBiZ19ibHVlICA9ICpzcmMyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGEgPT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWQgICA9ICgodXNoKXIgPDwgOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBncmVlbiA9ICgodXNoKWcgPDwgOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBibHVlICA9ICgodXNoKWIgPDwgOCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWQgICA9ICgodXNoKWJnX3JlZCAgIDw8IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoKHVzaCliZ19ncmVlbiA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsdWUgID0gKCh1c2gpYmdfYmx1ZSAgPDwgOCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIG1hY3JvIChmcm9tIHBuZy5oKSBjb21wb3NpdGVzIHRoZSBmb3JlZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgYmFja2dyb3VuZCB2YWx1ZXMgYW5kIHB1dHMgdGhlIHJlc3VsdCBiYWNrIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBmaXJzdCBhcmd1bWVudCAoPT0gZmcgYnl0ZSBoZXJlOiAgc2FmZSkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2NvbXBvc2l0ZShyLCByLCBhLCBiZ19yZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfY29tcG9zaXRlKGcsIGcsIGEsIGJnX2dyZWVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2NvbXBvc2l0ZShiLCBiLCBhLCBiZ19ibHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZCAgID0gKCh1c2gpciA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKCh1c2gpZyA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsdWUgID0gKCh1c2gpYiA8PCA4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwaXhlbCA9ICgocmVkICAgPj4gUlNoaWZ0KSAmIFJNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChncmVlbiA+PiBHU2hpZnQpICYgR01hc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJsdWUgID4+IEJTaGlmdCkgJiBCTWFzayk7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY2FsbCB0aGF0IHdlIHNldCB4aW1hZ2UtPmJ5dGVfb3JkZXIgPSBNU0JGaXJzdCBhYm92ZSAqLworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGNoYXIpKChwaXhlbCA+PiAgOCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IChjaGFyKSggcGl4ZWwgICAgICAgICYgMHhmZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogZGlzcGxheSBhZnRlciBldmVyeSAxNiBsaW5lcyAqLworICAgICAgICAgICAgaWYgKCgocm93KzEpICYgMHhmKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgWFB1dEltYWdlKGRpc3BsYXksIHdpbmRvdywgZ2MsIHhpbWFnZSwgMCwgKGludClsYXN0cm93LCAwLAorICAgICAgICAgICAgICAgICAgKGludClsYXN0cm93LCBycG5nMl9pbmZvLndpZHRoLCAxNik7CisgICAgICAgICAgICAgICAgWEZsdXNoKGRpc3BsYXkpOworICAgICAgICAgICAgICAgIGxhc3Ryb3cgPSByb3cgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGVsc2UgLyogZGVwdGggPT0gOCAqLyB7CisKKyAgICAgICAgLyogR1JSOiAgYWRkIDgtYml0IHN1cHBvcnQgKi8KKworICAgIH0KKworICAgIFRyYWNlKChzdGRlcnIsICJjYWxsaW5nIGZpbmFsIFhQdXRJbWFnZSgpXG4iKSkKKyAgICBpZiAobGFzdHJvdyA8IHN0YXJ0cm93K2hlaWdodCkgeworICAgICAgICBYUHV0SW1hZ2UoZGlzcGxheSwgd2luZG93LCBnYywgeGltYWdlLCAwLCAoaW50KWxhc3Ryb3csIDAsCisgICAgICAgICAgKGludClsYXN0cm93LCBycG5nMl9pbmZvLndpZHRoLCBycG5nMl9pbmZvLmhlaWdodC1sYXN0cm93KTsKKyAgICAgICAgWEZsdXNoKGRpc3BsYXkpOworICAgIH0KKworfSAvKiBlbmQgZnVuY3Rpb24gcnBuZzJfeF9yZWRpc3BsYXlfaW1hZ2UoKSAqLworCisKKworCisKKyNpZmRlZiBGRUFUVVJFX0xPT1AKKworc3RhdGljIHZvaWQgcnBuZzJfeF9yZWxvYWRfYmdfaW1hZ2Uodm9pZCkKK3sKKyAgICBjaGFyICpkZXN0OworICAgIHVjaCByMSwgcjIsIGcxLCBnMiwgYjEsIGIyOworICAgIHVjaCByMV9pbnYsIHIyX2ludiwgZzFfaW52LCBnMl9pbnYsIGIxX2ludiwgYjJfaW52OworICAgIGludCBrLCBobWF4LCBtYXg7CisgICAgaW50IHhpZHgsIHlpZHgsIHlpZHhfbWF4OworICAgIGludCBldmVuX29kZF92ZXJ0LCBldmVuX29kZF9ob3JpeiwgZXZlbl9vZGQ7CisgICAgaW50IGludmVydF9ncmFkaWVudDIgPSAoYmdbcGF0XS50eXBlICYgMHgwOCk7CisgICAgaW50IGludmVydF9jb2x1bW47CisgICAgdWxnIGksIHJvdzsKKworCisgICAgYmdzY2FsZSA9IChwYXQgPT0gMCk/IDggOiBiZ3NjYWxlX2RlZmF1bHQ7CisgICAgeWlkeF9tYXggPSBiZ3NjYWxlIC0gMTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBWZXJ0aWNhbCBncmFkaWVudHMgKHJhbXBzKSBpbiBOeE4gc3F1YXJlcywgYWx0ZXJuYXRpbmcgZGlyZWN0aW9uIGFuZAorICAgIGNvbG9ycyAoTiA9PSBiZ3NjYWxlKS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGlmICgoYmdbcGF0XS50eXBlICYgMHgwNykgPT0gMCkgeworICAgICAgICB1Y2ggcjFfbWluICA9IHJnYltiZ1twYXRdLnJnYjFfbWluXS5yOworICAgICAgICB1Y2ggZzFfbWluICA9IHJnYltiZ1twYXRdLnJnYjFfbWluXS5nOworICAgICAgICB1Y2ggYjFfbWluICA9IHJnYltiZ1twYXRdLnJnYjFfbWluXS5iOworICAgICAgICB1Y2ggcjJfbWluICA9IHJnYltiZ1twYXRdLnJnYjJfbWluXS5yOworICAgICAgICB1Y2ggZzJfbWluICA9IHJnYltiZ1twYXRdLnJnYjJfbWluXS5nOworICAgICAgICB1Y2ggYjJfbWluICA9IHJnYltiZ1twYXRdLnJnYjJfbWluXS5iOworICAgICAgICBpbnQgcjFfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjFfbWF4XS5yIC0gcjFfbWluOworICAgICAgICBpbnQgZzFfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjFfbWF4XS5nIC0gZzFfbWluOworICAgICAgICBpbnQgYjFfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjFfbWF4XS5iIC0gYjFfbWluOworICAgICAgICBpbnQgcjJfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjJfbWF4XS5yIC0gcjJfbWluOworICAgICAgICBpbnQgZzJfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjJfbWF4XS5nIC0gZzJfbWluOworICAgICAgICBpbnQgYjJfZGlmZiA9IHJnYltiZ1twYXRdLnJnYjJfbWF4XS5iIC0gYjJfbWluOworCisgICAgICAgIGZvciAocm93ID0gMDsgIHJvdyA8IHJwbmcyX2luZm8uaGVpZ2h0OyAgKytyb3cpIHsKKyAgICAgICAgICAgIHlpZHggPSAoaW50KShyb3cgJSBiZ3NjYWxlKTsKKyAgICAgICAgICAgIGV2ZW5fb2RkX3ZlcnQgPSAoaW50KSgocm93IC8gYmdzY2FsZSkgJiAxKTsKKworICAgICAgICAgICAgcjEgPSByMV9taW4gKyAocjFfZGlmZiAqIHlpZHgpIC8geWlkeF9tYXg7CisgICAgICAgICAgICBnMSA9IGcxX21pbiArIChnMV9kaWZmICogeWlkeCkgLyB5aWR4X21heDsKKyAgICAgICAgICAgIGIxID0gYjFfbWluICsgKGIxX2RpZmYgKiB5aWR4KSAvIHlpZHhfbWF4OworICAgICAgICAgICAgcjFfaW52ID0gcjFfbWluICsgKHIxX2RpZmYgKiAoeWlkeF9tYXgteWlkeCkpIC8geWlkeF9tYXg7CisgICAgICAgICAgICBnMV9pbnYgPSBnMV9taW4gKyAoZzFfZGlmZiAqICh5aWR4X21heC15aWR4KSkgLyB5aWR4X21heDsKKyAgICAgICAgICAgIGIxX2ludiA9IGIxX21pbiArIChiMV9kaWZmICogKHlpZHhfbWF4LXlpZHgpKSAvIHlpZHhfbWF4OworCisgICAgICAgICAgICByMiA9IHIyX21pbiArIChyMl9kaWZmICogeWlkeCkgLyB5aWR4X21heDsKKyAgICAgICAgICAgIGcyID0gZzJfbWluICsgKGcyX2RpZmYgKiB5aWR4KSAvIHlpZHhfbWF4OworICAgICAgICAgICAgYjIgPSBiMl9taW4gKyAoYjJfZGlmZiAqIHlpZHgpIC8geWlkeF9tYXg7CisgICAgICAgICAgICByMl9pbnYgPSByMl9taW4gKyAocjJfZGlmZiAqICh5aWR4X21heC15aWR4KSkgLyB5aWR4X21heDsKKyAgICAgICAgICAgIGcyX2ludiA9IGcyX21pbiArIChnMl9kaWZmICogKHlpZHhfbWF4LXlpZHgpKSAvIHlpZHhfbWF4OworICAgICAgICAgICAgYjJfaW52ID0gYjJfbWluICsgKGIyX2RpZmYgKiAoeWlkeF9tYXgteWlkeCkpIC8geWlkeF9tYXg7CisKKyAgICAgICAgICAgIGRlc3QgPSAoY2hhciAqKWJnX2RhdGEgKyByb3cqYmdfcm93Ynl0ZXM7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyAgaSA8IHJwbmcyX2luZm8ud2lkdGg7ICArK2kpIHsKKyAgICAgICAgICAgICAgICBldmVuX29kZF9ob3JpeiA9IChpbnQpKChpIC8gYmdzY2FsZSkgJiAxKTsKKyAgICAgICAgICAgICAgICBldmVuX29kZCA9IGV2ZW5fb2RkX3ZlcnQgXiBldmVuX29kZF9ob3JpejsKKyAgICAgICAgICAgICAgICBpbnZlcnRfY29sdW1uID0KKyAgICAgICAgICAgICAgICAgIChldmVuX29kZF9ob3JpeiAmJiAoYmdbcGF0XS50eXBlICYgMHgxMCkpOworICAgICAgICAgICAgICAgIGlmIChldmVuX29kZCA9PSAwKSB7ICAgICAgICAvKiBncmFkaWVudCAjMSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoaW52ZXJ0X2NvbHVtbikgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IHIxX2ludjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBnMV9pbnY7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gYjFfaW52OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IHIxOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IGcxOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IGIxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIGdyYWRpZW50ICMyICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoaW52ZXJ0X2NvbHVtbiAmJiBpbnZlcnRfZ3JhZGllbnQyKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKCFpbnZlcnRfY29sdW1uICYmICFpbnZlcnRfZ3JhZGllbnQyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IHIyOyAgICAgICAvKiBub3QgaW52ZXJ0ZWQgb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBnMjsgICAgICAgLyogIGRvdWJseSBpbnZlcnRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IGIyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IHIyX2ludjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBnMl9pbnY7ICAgLyogc2luZ2x5IGludmVydGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gYjJfaW52OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU29mdCBncmFkaWVudC1kaWFtb25kcyB3aXRoIHNjYWxlID0gYmdzY2FsZS4gIENvZGUgY29udHJpYnV0ZWQgYnkgQWRhbQorICAgIE0uIENvc3RlbGxvLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgfSBlbHNlIGlmICgoYmdbcGF0XS50eXBlICYgMHgwNykgPT0gMSkgeworCisgICAgICAgIGhtYXggPSAoYmdzY2FsZS0xKS8yOyAgIC8qIGhhbGYgdGhlIG1heCB3ZWlnaHQgb2YgYSBjb2xvciAqLworICAgICAgICBtYXggPSAyKmhtYXg7ICAgICAgICAgICAvKiB0aGUgbWF4IHdlaWdodCBvZiBhIGNvbG9yICovCisKKyAgICAgICAgcjEgPSByZ2JbYmdbcGF0XS5yZ2IxX21heF0ucjsKKyAgICAgICAgZzEgPSByZ2JbYmdbcGF0XS5yZ2IxX21heF0uZzsKKyAgICAgICAgYjEgPSByZ2JbYmdbcGF0XS5yZ2IxX21heF0uYjsKKyAgICAgICAgcjIgPSByZ2JbYmdbcGF0XS5yZ2IyX21heF0ucjsKKyAgICAgICAgZzIgPSByZ2JbYmdbcGF0XS5yZ2IyX21heF0uZzsKKyAgICAgICAgYjIgPSByZ2JbYmdbcGF0XS5yZ2IyX21heF0uYjsKKworICAgICAgICBmb3IgKHJvdyA9IDA7ICByb3cgPCBycG5nMl9pbmZvLmhlaWdodDsgICsrcm93KSB7CisgICAgICAgICAgICB5aWR4ID0gKGludCkocm93ICUgYmdzY2FsZSk7CisgICAgICAgICAgICBpZiAoeWlkeCA+IGhtYXgpCisgICAgICAgICAgICAgICAgeWlkeCA9IGJnc2NhbGUtMSAtIHlpZHg7CisgICAgICAgICAgICBkZXN0ID0gKGNoYXIgKiliZ19kYXRhICsgcm93KmJnX3Jvd2J5dGVzOworICAgICAgICAgICAgZm9yIChpID0gMDsgIGkgPCBycG5nMl9pbmZvLndpZHRoOyAgKytpKSB7CisgICAgICAgICAgICAgICAgeGlkeCA9IChpbnQpKGkgJSBiZ3NjYWxlKTsKKyAgICAgICAgICAgICAgICBpZiAoeGlkeCA+IGhtYXgpCisgICAgICAgICAgICAgICAgICAgIHhpZHggPSBiZ3NjYWxlLTEgLSB4aWR4OworICAgICAgICAgICAgICAgIGsgPSB4aWR4ICsgeWlkeDsKKyAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGsqcjEgKyAobWF4LWspKnIyKSAvIG1heDsKKyAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGsqZzEgKyAobWF4LWspKmcyKSAvIG1heDsKKyAgICAgICAgICAgICAgICAqZGVzdCsrID0gKGsqYjEgKyAobWF4LWspKmIyKSAvIG1heDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFJhZGlhbCAic3RhcmJ1cnN0IiB3aXRoIGF6aW11dGhhbCBzaW51c29pZHM7IFtldmVudHVhbGx5IG51bWJlciBvZiBzaW51LQorICAgIHNvaWRzIHdpbGwgZXF1YWwgYmdzY2FsZT9dLiAgVGhpcyBvbmUgaXMgc2xvdyBidXQgdmVyeSBjb29sLiAgQ29kZSBjb24tCisgICAgdHJpYnV0ZWQgYnkgUGlldGVyIFMuIHZhbiBkZXIgTWV1bGVuIChvcmlnaW5hbGx5IGluIFNtYWxsdGFsaykuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICB9IGVsc2UgaWYgKChiZ1twYXRdLnR5cGUgJiAweDA3KSA9PSAyKSB7CisgICAgICAgIHVjaCBjaDsKKyAgICAgICAgaW50IGlpLCB4LCB5LCBodywgaGgsIGdyYXlzcG90OworICAgICAgICBkb3VibGUgZnJlcSwgcm90YXRlLCBzYXR1cmF0ZSwgZ3JheSwgaW50ZW5zaXR5OworICAgICAgICBkb3VibGUgYW5nbGU9MC4wLCBhb2Zmc2V0PTAuMCwgbWF4RGlzdCwgZGlzdDsKKyAgICAgICAgZG91YmxlIHJlZD0wLjAsIGdyZWVuPTAuMCwgYmx1ZT0wLjAsIGh1ZSwgcywgdiwgZiwgcCwgcSwgdDsKKworICAgICAgICBoaCA9IChpbnQpKHJwbmcyX2luZm8uaGVpZ2h0IC8gMik7CisgICAgICAgIGh3ID0gKGludCkocnBuZzJfaW5mby53aWR0aCAvIDIpOworCisgICAgICAgIC8qIHZhcmlhYmxlcyBmb3IgcmFkaWFsIHdhdmVzOgorICAgICAgICAgKiAgIGFvZmZzZXQ6ICBudW1iZXIgb2YgZGVncmVlcyB0byByb3RhdGUgaHVlIFtDVVJSRU5UTFkgTk9UIFVTRURdCisgICAgICAgICAqICAgZnJlcTogIG51bWJlciBvZiBjb2xvciBiZWFtcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBjZW50ZXIKKyAgICAgICAgICogICBncmF5c3BvdDogIHNpemUgb2YgdGhlIGdyYXlpbmcgY2VudGVyIGFyZWEgKGFudGktYWxpYXMpCisgICAgICAgICAqICAgcm90YXRlOiAgcm90YXRpb24gb2YgdGhlIGJlYW1zIGFzIGEgZnVuY3Rpb24gb2YgcmFkaXVzCisgICAgICAgICAqICAgc2F0dXJhdGU6ICBzYXR1cmF0aW9uIG9mIGJlYW1zJyBzaGFwZSBhemltdXRoYWxseQorICAgICAgICAgKi8KKyAgICAgICAgYW5nbGUgPSBDTElQKGFuZ2xlLCAwLjAsIDM2MC4wKTsKKyAgICAgICAgZ3JheXNwb3QgPSBDTElQKGJnW3BhdF0uYmdfZ3JheSwgMSwgKGhoICsgaHcpKTsKKyAgICAgICAgZnJlcSA9IE1BWCgoZG91YmxlKWJnW3BhdF0uYmdfZnJlcSwgMC4wKTsKKyAgICAgICAgc2F0dXJhdGUgPSAoZG91YmxlKWJnW3BhdF0uYmdfYnNhdCAqIDAuMTsKKyAgICAgICAgcm90YXRlID0gKGRvdWJsZSliZ1twYXRdLmJnX2Jyb3QgKiAwLjE7CisgICAgICAgIGdyYXkgPSAwLjA7CisgICAgICAgIGludGVuc2l0eSA9IDAuMDsKKyAgICAgICAgbWF4RGlzdCA9IChkb3VibGUpKChodypodykgKyAoaGgqaGgpKTsKKworICAgICAgICBmb3IgKHJvdyA9IDA7ICByb3cgPCBycG5nMl9pbmZvLmhlaWdodDsgICsrcm93KSB7CisgICAgICAgICAgICB5ID0gKGludCkocm93IC0gaGgpOworICAgICAgICAgICAgZGVzdCA9IChjaGFyICopYmdfZGF0YSArIHJvdypiZ19yb3dieXRlczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7ICBpIDwgcnBuZzJfaW5mby53aWR0aDsgICsraSkgeworICAgICAgICAgICAgICAgIHggPSAoaW50KShpIC0gaHcpOworICAgICAgICAgICAgICAgIGFuZ2xlID0gKHggPT0gMCk/IFBJXzIgOiBhdGFuKChkb3VibGUpeSAvIChkb3VibGUpeCk7CisgICAgICAgICAgICAgICAgZ3JheSA9IChkb3VibGUpTUFYKEFCUyh5KSwgQUJTKHgpKSAvIGdyYXlzcG90OworICAgICAgICAgICAgICAgIGdyYXkgPSBNSU4oMS4wLCBncmF5KTsKKyAgICAgICAgICAgICAgICBkaXN0ID0gKGRvdWJsZSkoKHgqeCkgKyAoeSp5KSkgLyBtYXhEaXN0OworICAgICAgICAgICAgICAgIGludGVuc2l0eSA9IGNvcygoYW5nbGUrKHJvdGF0ZSpkaXN0KlBJKSkgKiBmcmVxKSAqCisgICAgICAgICAgICAgICAgICBncmF5ICogc2F0dXJhdGU7CisgICAgICAgICAgICAgICAgaW50ZW5zaXR5ID0gKE1BWChNSU4oaW50ZW5zaXR5LDEuMCksLTEuMCkgKyAxLjApICogMC41OworICAgICAgICAgICAgICAgIGh1ZSA9IChhbmdsZSArIFBJKSAqIElOVl9QSV8zNjAgKyBhb2Zmc2V0OworICAgICAgICAgICAgICAgIHMgPSBncmF5ICogKChkb3VibGUpKEFCUyh4KStBQlMoeSkpIC8gKGRvdWJsZSkoaHcgKyBoaCkpOworICAgICAgICAgICAgICAgIHMgPSBNSU4oTUFYKHMsMC4wKSwgMS4wKTsKKyAgICAgICAgICAgICAgICB2ID0gTUlOKE1BWChpbnRlbnNpdHksMC4wKSwgMS4wKTsKKworICAgICAgICAgICAgICAgIGlmIChzID09IDAuMCkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICh1Y2gpKHYgKiAyNTUuMCk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IGNoOworICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gY2g7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChodWUgPCAwLjApIHx8IChodWUgPj0gMzYwLjApKQorICAgICAgICAgICAgICAgICAgICAgICAgaHVlIC09ICgoKGludCkoaHVlIC8gMzYwLjApKSAqIDM2MC4wKTsKKyAgICAgICAgICAgICAgICAgICAgaHVlIC89IDYwLjA7CisgICAgICAgICAgICAgICAgICAgIGlpID0gKGludClodWU7CisgICAgICAgICAgICAgICAgICAgIGYgPSBodWUgLSAoZG91YmxlKWlpOworICAgICAgICAgICAgICAgICAgICBwID0gKDEuMCAtIHMpICogdjsKKyAgICAgICAgICAgICAgICAgICAgcSA9ICgxLjAgLSAocyAqIGYpKSAqIHY7CisgICAgICAgICAgICAgICAgICAgIHQgPSAoMS4wIC0gKHMgKiAoMS4wIC0gZikpKSAqIHY7CisgICAgICAgICAgICAgICAgICAgIGlmICAgICAgKGlpID09IDApIHsgcmVkID0gdjsgZ3JlZW4gPSB0OyBibHVlID0gcDsgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpaSA9PSAxKSB7IHJlZCA9IHE7IGdyZWVuID0gdjsgYmx1ZSA9IHA7IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWkgPT0gMikgeyByZWQgPSBwOyBncmVlbiA9IHY7IGJsdWUgPSB0OyB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlpID09IDMpIHsgcmVkID0gcDsgZ3JlZW4gPSBxOyBibHVlID0gdjsgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpaSA9PSA0KSB7IHJlZCA9IHQ7IGdyZWVuID0gcDsgYmx1ZSA9IHY7IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWkgPT0gNSkgeyByZWQgPSB2OyBncmVlbiA9IHA7IGJsdWUgPSBxOyB9CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAodWNoKShyZWQgKiAyNTUuMCk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0KysgPSAodWNoKShncmVlbiAqIDI1NS4wKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICh1Y2gpKGJsdWUgKiAyNTUuMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCit9IC8qIGVuZCBmdW5jdGlvbiBycG5nMl94X3JlbG9hZF9iZ19pbWFnZSgpICovCisKKworCisKKworc3RhdGljIGludCBpc19udW1iZXIoY2hhciAqcCkKK3sKKyAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgaWYgKCFpc2RpZ2l0KCpwKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgKytwOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8qIEZFQVRVUkVfTE9PUCAqLworCisKKworCisKIHN0YXRpYyB2b2lkIHJwbmcyX3hfY2xlYW51cCh2b2lkKQogewogICAgIGlmIChiZ19pbWFnZSAmJiBiZ19kYXRhKSB7CmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3dwbmcuYyBiL2NvbnRyaWIvZ3JlZ2Jvb2svd3BuZy5jCmluZGV4IGQ2ZTg1MTQuLmEwNmUzNTIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZ3JlZ2Jvb2svd3BuZy5jCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svd3BuZy5jCkBAIC01LDggKzUsMTAgQEAKICAgIFRoaXMgcHJvZ3JhbSBjb252ZXJ0cyBjZXJ0YWluIE5ldFBCTSBiaW5hcnkgZmlsZXMgKGdyYXlzY2FsZSBhbmQgUkdCLAogICAgbWF4dmFsID0gMjU1KSB0byBQTkcuICBOb24taW50ZXJsYWNlZCBQTkdzIGFyZSB3cml0dGVuIHByb2dyZXNzaXZlbHk7CiAgICBpbnRlcmxhY2VkIFBOR3MgYXJlIHJlYWQgYW5kIHdyaXR0ZW4gaW4gb25lIG1lbW9yeS1pbnRlbnNpdmUgYmxhc3QuCisKICAgIFRoYW5rcyB0byBKZWFuLWxvdXAgR2FpbGx5IGZvciBwcm92aWRpbmcgdGhlIG5lY2Vzc2FyeSB0cmljayB0byByZWFkCi0gICBpbnRlcmFjdGl2ZSB0ZXh0IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHN0ZGluIGlzIHJlZGlyZWN0ZWQuCisgICBpbnRlcmFjdGl2ZSB0ZXh0IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHN0ZGluIGlzIHJlZGlyZWN0ZWQuICBUaGFua3MKKyAgIHRvIENvc21pbiBUcnV0YSBmb3IgQ3lnd2luIGZpeGVzLgogCiAgICBOT1RFOiAgaW5jbHVkZXMgcHJvdmlzaW9uYWwgc3VwcG9ydCBmb3IgUE5NIHR5cGUgIjgiIChwb3J0YWJsZSBhbHBoYW1hcCkKICAgICAgICAgICBpbWFnZXMsIHByZXN1bWVkIHRvIGJlIGEgMzItYml0IGludGVybGVhdmVkIFJHQkEgZm9ybWF0OyBubyBwcm8tCkBAIC0yNCwxNiArMjYsMzIgQEAKICAgICAtIDEuMDI6ICBtb2RpZmllZCB0byBhbGxvdyBhYmJyZXZpYXRlZCBvcHRpb25zCiAgICAgLSAxLjAzOiAgcmVtb3ZlZCBleHRyYW5lb3VzIGNoYXJhY3RlciBmcm9tIHVzYWdlIHNjcmVlbjsgZml4ZWQgYnVnIGluCiAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBwYXJzaW5nCisgICAgLSAxLjA0OiAgZml4ZWQgRE9TL09TMi9XaW4zMiBkZXRlY3Rpb24sIGluY2x1ZGluZyBwYXJ0aWFsIEN5Z3dpbiBmaXgKKyAgICAgICAgICAgICAgKHNlZSBodHRwOi8vaG9tZS5hdHQubmV0L35wZXJsc3BpbnIvZGlmZnMvR3JlZ0Jvb2tfY3lnd2luLmRpZmYpCisgICAgLSAyLjAwOiAgZHVhbC1saWNlbnNlZCAoYWRkZWQgR05VIEdQTCkKKworICAgICAgICBbUkVQT1JURUQgQlVHICh3aW4zMiBvbmx5KTogICJjb250cmliL2dyZWdib29rL3dwbmcuYyAtIGNtZCBsaW5lCisgICAgICAgICBkb3NlIG5vdCB3b3JrISAgSW4gb3JkZXIgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBJIG5lZWRlZCB0byByZWRpcmVjdAorICAgICAgICAgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB3aXRoIGN5Z3dpbiBhbmQgd2l0aCBiY2MzMiBhcyB3ZWxsLiAgVW5kZXIKKyAgICAgICAgIExpbnV4LCB0aGUgc2FtZSB3cG5nIGFwcGVhcnMgdG8gd29yayBmaW5lLiAgSSBkb24ndCBrbm93IHdoYXQgaXMKKyAgICAgICAgIHRoZSBwcm9ibGVtLiJdCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcywiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCiAgICAgICBleHByZXNzIG9yIGltcGxpZWQuICBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycwogICAgICAgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgaW4gYW55IHdheSBmcm9tIHRoZSB1c2Ugb2YKICAgICAgIHRoaXMgc29mdHdhcmUuCiAKKyAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIERVQUwtTElDRU5TRUQuICBZb3UgbWF5IG1vZGlmeSBhbmQvb3IKKyAgICAgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2Ygb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHR3byBsaWNlbnNlcyAoYXQgeW91ciBvcHRpb24pOgorCisKKyAgICAgIExJQ0VOU0UgMSAoIkJTRC1saWtlIHdpdGggYWR2ZXJ0aXNpbmcgY2xhdXNlIik6CisKICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogICAgICAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZQogICAgICAgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgpAQCAtNTAsMTYgKzY4LDM1IEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgUFJPR05BTUUgICJ3cG5nIgotI2RlZmluZSBWRVJTSU9OICAgIjEuMDMgb2YgMTkgTWFyY2ggMjAwMCIKKyNkZWZpbmUgVkVSU0lPTiAgICIyLjAwIG9mIDIgSnVuZSAyMDA3IgogI2RlZmluZSBBUFBOQU1FICAgIlNpbXBsZSBQR00vUFBNL1BBTSB0byBQTkcgQ29udmVydGVyIgogCiAjaWYgZGVmaW5lZChfX01TRE9TX18pIHx8IGRlZmluZWQoX19PUzJfXykKICMgIGRlZmluZSBET1NfT1MyX1czMgotI2VsaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgZGVmaW5lIERPU19PUzJfVzMyCisjZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pCisjICBpZm5kZWYgX19HTlVDX18gICAvKiB0cmVhdCBXaW4zMiBuYXRpdmUgcG9ydHMgb2YgZ2NjIGFzIFVuaXggZW52aXJvbm1lbnRzICovCisjICAgIGRlZmluZSBET1NfT1MyX1czMgorIyAgZW5kaWYKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ3JlZ2Jvb2svd3JpdGVwbmcuYyBiL2NvbnRyaWIvZ3JlZ2Jvb2svd3JpdGVwbmcuYwppbmRleCA2ODAyYjEyLi5lNmQ4MWVhIDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3dyaXRlcG5nLmMKKysrIGIvY29udHJpYi9ncmVnYm9vay93cml0ZXBuZy5jCkBAIC00LDEzICs0LDIwIEBACiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIEdyZWcgUm9lbG9mcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcywiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCiAgICAgICBleHByZXNzIG9yIGltcGxpZWQuICBJbiBubyBldmVudCBzaGFsbCB0aGUgYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycwogICAgICAgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgaW4gYW55IHdheSBmcm9tIHRoZSB1c2Ugb2YKICAgICAgIHRoaXMgc29mdHdhcmUuCiAKKyAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIERVQUwtTElDRU5TRUQuICBZb3UgbWF5IG1vZGlmeSBhbmQvb3IKKyAgICAgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2Ygb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHR3byBsaWNlbnNlcyAoYXQgeW91ciBvcHRpb24pOgorCisKKyAgICAgIExJQ0VOU0UgMSAoIkJTRC1saWtlIHdpdGggYWR2ZXJ0aXNpbmcgY2xhdXNlIik6CisKICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogICAgICAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZQogICAgICAgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgpAQCAtMjcsNiArMzQsMjMgQEAKICAgICAgICAgICAgIGFuZCBjb250cmlidXRvcnMgZm9yIHRoZSBib29rLCAiUE5HOiBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwiCiAgICAgICAgICAgICBwdWJsaXNoZWQgYnkgTydSZWlsbHkgYW5kIEFzc29jaWF0ZXMuCiAKKworICAgICAgTElDRU5TRSAyIChHTlUgR1BMIHYyIG9yIGxhdGVyKToKKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCmRpZmYgLS1naXQgYS9jb250cmliL2dyZWdib29rL3dyaXRlcG5nLmggYi9jb250cmliL2dyZWdib29rL3dyaXRlcG5nLmgKaW5kZXggOTNjM2RhOC4uNzhiOTY2YiAxMDA2NDQKLS0tIGEvY29udHJpYi9ncmVnYm9vay93cml0ZXBuZy5oCisrKyBiL2NvbnRyaWIvZ3JlZ2Jvb2svd3JpdGVwbmcuaApAQCAtNCwxMyArNCwyMCBAQAogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBHcmVnIFJvZWxvZnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR3JlZyBSb2Vsb2ZzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMsIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLAogICAgICAgZXhwcmVzcyBvciBpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBvciBjb250cmlidXRvcnMKICAgICAgIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGluIGFueSB3YXkgZnJvbSB0aGUgdXNlIG9mCiAgICAgICB0aGlzIHNvZnR3YXJlLgogCisgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBEVUFMLUxJQ0VOU0VELiAgWW91IG1heSBtb2RpZnkgYW5kL29yCisgICAgICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyB0d28gbGljZW5zZXMgKGF0IHlvdXIgb3B0aW9uKToKKworCisgICAgICBMSUNFTlNFIDEgKCJCU0QtbGlrZSB3aXRoIGFkdmVydGlzaW5nIGNsYXVzZSIpOgorCiAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKICAgICAgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUKICAgICAgIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKQEAgLTI3LDYgKzM0LDIzIEBACiAgICAgICAgICAgICBhbmQgY29udHJpYnV0b3JzIGZvciB0aGUgYm9vaywgIlBORzogVGhlIERlZmluaXRpdmUgR3VpZGUsIgogICAgICAgICAgICAgcHVibGlzaGVkIGJ5IE8nUmVpbGx5IGFuZCBBc3NvY2lhdGVzLgogCisKKyAgICAgIExJQ0VOU0UgMiAoR05VIEdQTCB2MiBvciBsYXRlcik6CisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZm5kZWYgVFJVRQpkaWZmIC0tZ2l0IGEvbGlicG5nLTEuMC4yNi50eHQgYi9saWJwbmctMS4wLjI3cmMxLnR4dApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBsaWJwbmctMS4wLjI2LnR4dApyZW5hbWUgdG8gbGlicG5nLTEuMC4yN3JjMS50eHQKaW5kZXggMTc1NmQ5Zi4uNGYzZThkOSAxMDA2NDQKLS0tIGEvbGlicG5nLTEuMC4yNi50eHQKKysrIGIvbGlicG5nLTEuMC4yN3JjMS50eHQKQEAgLTEsNiArMSw2IEBACiBsaWJwbmcudHh0IC0gQSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gdXNlIGFuZCBtb2RpZnkgbGlicG5nCiAKLSBsaWJwbmcgdmVyc2lvbiAxLjAuMjYgLSBNYXkgMTUsIDIwMDcKKyBsaWJwbmcgdmVyc2lvbiAxLjAuMjdyYzEgLSBKdWx5IDMxLCAyMDA3CiAgVXBkYXRlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgPGdsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0PgogIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvbgpAQCAtMjc2NiwxMyArMjc2NiwxMyBAQAogCiBWSUlJLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotTWF5IDE1LCAyMDA3CitKdWx5IDMxLCAyMDA3CiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjAuMjYgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCit1cHdhcmQgdGhyb3VnaCAxLjAuMjdyYzEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIgdGhhdApkaWZmIC0tZ2l0IGEvbGlicG5nLjMgYi9saWJwbmcuMwppbmRleCAzYmE4YmRmLi5lN2QwNWVjIDEwMDY0NAotLS0gYS9saWJwbmcuMworKysgYi9saWJwbmcuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkcgMyAiTWF5IDE1LCAyMDA3IgorLlRIIExJQlBORyAzICJKdWx5IDMxLCAyMDA3IgogLlNIIE5BTUUKLWxpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMC4yNgorbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4wLjI3cmMxCiAuU0ggU1lOT1BTSVMKIFxmQgogI2luY2x1ZGUgPHBuZy5oPlxmUApAQCAtNDEwLDcgKzQxMCw3IEBACiAuU0ggTElCUE5HLlRYVAogbGlicG5nLnR4dCAtIEEgZGVzY3JpcHRpb24gb24gaG93IHRvIHVzZSBhbmQgbW9kaWZ5IGxpYnBuZwogCi0gbGlicG5nIHZlcnNpb24gMS4wLjI2IC0gTWF5IDE1LCAyMDA3CisgbGlicG5nIHZlcnNpb24gMS4wLjI3cmMxIC0gSnVseSAzMSwgMjAwNwogIFVwZGF0ZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogIDxnbGVubnJwIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTMxNzYsMTMgKzMxNzYsMTMgQEAKIAogLlNIIFZJSUkuIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZwogCi1NYXkgMTUsIDIwMDcKK0p1bHkgMzEsIDIwMDcKIAogU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAKIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLXVwd2FyZCB0aHJvdWdoIDEuMC4yNiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKK3Vwd2FyZCB0aHJvdWdoIDEuMC4yN3JjMSBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciB0aGF0CkBAIC0zMzcxLDYgKzMzNzEsOSBAQAogIDEuMi4xNyAgICAgICAgICAgICAgMTMgICAgMTAyMTcgIDEyLnNvLjAuMTdbLjBdCiAgMS4wLjI2ICAgICAgICAgICAgICAxMCAgICAxMDAyNiAgMTAuc28uMC4yNlsuMF0KICAxLjIuMTggICAgICAgICAgICAgIDEzICAgIDEwMjE4ICAxMi5zby4wLjE4Wy4wXQorIDEuMi4xOWJldGExLTMxICAgICAgMTMgICAgMTAyMTkgIDEyLnNvLjAuMTlbLjBdCisgMS4wLjI3cmMxICAgICAgICAgICAxMCAgICAxMDAyNyAgMTAuc28uMC4yN1suMF0KKyAxLjIuMTlyYzEgICAgICAgICAgIDEzICAgIDEwMjE5ICAxMi5zby4wLjE5Wy4wXQogCiBIZW5jZWZvcnRoIHRoZSBzb3VyY2UgdmVyc2lvbiB3aWxsIG1hdGNoIHRoZSBzaGFyZWQtbGlicmFyeSBtaW5vcgogYW5kIHBhdGNoIG51bWJlcnM7IHRoZSBzaGFyZWQtbGlicmFyeSBtYWpvciB2ZXJzaW9uIG51bWJlciB3aWxsIGJlCkBAIC0zMzgzLDcgKzMzODYsNyBAQAogcmVsZWFzZSBudW1iZXIgcGx1cyAiYmV0YU5OIiBvciAicmNOIi4KIAogLlNIICJTRUUgQUxTTyIKLWxpYnBuZ3BmKDMpLCBwbmcoNSkKKy5JUiBsaWJwbmdwZigzKSAiLCAiIHBuZyg1KQogLkxQCiAuSVIgbGlicG5nIDoKIC5JUApAQCAtMzQyNiw3ICszNDI5LDcgQEAKIAogVGhhbmtzIHRvIEZyYW5rIEouIFQuIFdvamNpayBmb3IgaGVscGluZyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uLgogCi1MaWJwbmcgdmVyc2lvbiAxLjAuMjYgLSBNYXkgMTUsIDIwMDc6CitMaWJwbmcgdmVyc2lvbiAxLjAuMjdyYzEgLSBKdWx5IDMxLCAyMDA3OgogSW5pdGlhbGx5IGNyZWF0ZWQgaW4gMTk5NSBieSBHdXkgRXJpYyBTY2hhbG5hdCwgdGhlbiBvZiBHcm91cCA0MiwgSW5jLgogQ3VycmVudGx5IG1haW50YWluZWQgYnkgR2xlbm4gUmFuZGVycy1QZWhyc29uIChnbGVubnJwIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkuCiAKQEAgLTM0NDcsNyArMzQ1MCw3IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjAuMjYsIE1heSAxNSwgMjAwNywgYXJlCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjAuMjdyYzEsIEp1bHkgMzEsIDIwMDcsIGFyZQogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTM1NDYsNyArMzU0OSw3IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLU1heSAxNSwgMjAwNworSnVseSAzMSwgMjAwNwogCiAuXCIgZW5kIG9mIG1hbiBwYWdlCiAKZGlmZiAtLWdpdCBhL2xpYnBuZ3BmLjMgYi9saWJwbmdwZi4zCmluZGV4IDlkZGM4N2MuLjQyY2VjNmYgMTAwNjQ0Ci0tLSBhL2xpYnBuZ3BmLjMKKysrIGIvbGlicG5ncGYuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkdQRiAzICJNYXkgMTUsIDIwMDciCisuVEggTElCUE5HUEYgMyAiSnVseSAzMSwgMjAwNyIKIC5TSCBOQU1FCi1saWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMjYKK2xpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMC4yN3JjMQogKHByaXZhdGUgZnVuY3Rpb25zKQogLlNIIFNZTk9QU0lTCiBcZkIjaW5jbHVkZSA8cG5nLmg+XGZQCkBAIC0yNjksNiArMjY5LDYgQEAKIFNlZSBwbmcuaCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMuCiAKIC5TSCBTRUUgQUxTTwotbGlicG5nKDMpLCBwbmcoNSkKKy5JUiBsaWJwbmcoMykgIiwgIiBwbmcoNSkKIC5TSCBBVVRIT1IKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgpkaWZmIC0tZ2l0IGEvcG5nLjUgYi9wbmcuNQppbmRleCBiZjZjNmZkLi5jODUxZDE0IDEwMDY0NAotLS0gYS9wbmcuNQorKysgYi9wbmcuNQpAQCAtMSw0ICsxLDQgQEAKLS5USCBQTkcgNSAiTWF5IDE1LCAyMDA3IgorLlRIIFBORyA1ICJKdWx5IDMxLCAyMDA3IgogLlNIIE5BTUUKIHBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIGZvcm1hdAogLlNIIERFU0NSSVBUSU9OCkBAIC0xOCw3ICsxOCw3IEBACiBwbGF0Zm9ybXMuCiAKIC5TSCAiU0VFIEFMU08iCi0uSVIgbGlicG5nKDMpLCB6bGliKDMpLCBkZWZsYXRlKDUpLCBhbmQgemxpYig1KQorLklSIGxpYnBuZygzKSAiLCAiIHpsaWIoMykgIiwgIiBkZWZsYXRlKDUpICIsIGFuZCAiIHpsaWIoNSkKIC5MUAogUE5HIHNwZWNpZmljYXRpb24gKHNlY29uZCBlZGl0aW9uKSwgTm92ZW1iZXIgMjAwMzoKIC5JUApkaWZmIC0tZ2l0IGEvcG5nLmMgYi9wbmcuYwppbmRleCBiNjJiOWYyLi40NzhiNjU1IDEwMDY0NAotLS0gYS9wbmcuYworKysgYi9wbmcuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nLmMgLSBsb2NhdGlvbiBmb3IgZ2VuZXJhbCBwdXJwb3NlIGxpYnBuZyBmdW5jdGlvbnMKICAqCi0gKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xNyBNYXkgMTUsIDIwMDcKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bHkgMzEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTEzLDIwICsxMywyMCBAQAogI2luY2x1ZGUgInBuZy5oIgogCiAvKiBHZW5lcmF0ZSBhIGNvbXBpbGVyIGVycm9yIGlmIHRoZXJlIGlzIGFuIG9sZCBwbmcuaCBpbiB0aGUgc2VhcmNoIHBhdGguICovCi10eXBlZGVmIHZlcnNpb25fMV8wXzI2IFlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzI2OwordHlwZWRlZiB2ZXJzaW9uXzFfMF8yN3JjMSBZb3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMF8yN3JjMTsKIAogLyogVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgQyBmaWxlcy4gIFRoaXMgaGFkIGJldHRlciBtYXRjaCB0aGUgdmVyc2lvbgogICogc3RyaW5nIGRlZmluZWQgaW4gcG5nLmguICAqLwogCiAjaWZkZWYgUE5HX1VTRV9HTE9CQUxfQVJSQVlTCiAvKiBwbmdfbGlicG5nX3ZlciB3YXMgY2hhbmdlZCB0byBhIGZ1bmN0aW9uIGluIHZlcnNpb24gMS4wLjVjICovCi1jb25zdCBjaGFyIHBuZ19saWJwbmdfdmVyWzE4XSA9IFBOR19MSUJQTkdfVkVSX1NUUklORzsKK1BOR19DT05TVCBjaGFyIHBuZ19saWJwbmdfdmVyWzE4XSA9IFBOR19MSUJQTkdfVkVSX1NUUklORzsKIAogI2lmZGVmIFBOR19SRUFEX1NVUFBPUlRFRAogCiAvKiBwbmdfc2lnIHdhcyBjaGFuZ2VkIHRvIGEgZnVuY3Rpb24gaW4gdmVyc2lvbiAxLjAuNWMgKi8KIC8qIFBsYWNlIHRvIGhvbGQgdGhlIHNpZ25hdHVyZSBzdHJpbmcgZm9yIGEgUE5HIGZpbGUuICovCi1jb25zdCBwbmdfYnl0ZSBGQVJEQVRBIHBuZ19zaWdbOF0gPSB7MTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMH07CitQTkdfQ09OU1QgcG5nX2J5dGUgRkFSREFUQSBwbmdfc2lnWzhdID0gezEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTB9OwogI2VuZGlmIC8qIFBOR19SRUFEX1NVUFBPUlRFRCAqLwogCiAvKiBJbnZva2UgZ2xvYmFsIGRlY2xhcmF0aW9ucyBmb3IgY29uc3RhbnQgc3RyaW5ncyBmb3Iga25vd24gY2h1bmsgdHlwZXMgKi8KQEAgLTU2LDMyICs1NiwzMiBAQAogLyogYXJyYXlzIHRvIGZhY2lsaXRhdGUgZWFzeSBpbnRlcmxhY2luZyAtIHVzZSBwYXNzICgwIC0gNikgYXMgaW5kZXggKi8KIAogLyogc3RhcnQgb2YgaW50ZXJsYWNlIGJsb2NrICovCi1jb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OworUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07CiAKIC8qIG9mZnNldCB0byBuZXh0IGludGVybGFjZSBibG9jayAqLwotY29uc3QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CitQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAKIC8qIHN0YXJ0IG9mIGludGVybGFjZSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24gKi8KLWNvbnN0IGludCBGQVJEQVRBIHBuZ19wYXNzX3lzdGFydFtdID0gezAsIDAsIDQsIDAsIDIsIDAsIDF9OworUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3lzdGFydFtdID0gezAsIDAsIDQsIDAsIDIsIDAsIDF9OwogCiAvKiBvZmZzZXQgdG8gbmV4dCBpbnRlcmxhY2UgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uICovCi1jb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc195aW5jW10gPSB7OCwgOCwgOCwgNCwgNCwgMiwgMn07CitQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfeWluY1tdID0gezgsIDgsIDgsIDQsIDQsIDIsIDJ9OwogCiAvKiB3aWR0aCBvZiBpbnRlcmxhY2UgYmxvY2sgKHVzZWQgaW4gYXNzZW1ibGVyIHJvdXRpbmVzIG9ubHkpICovCi0jaWZkZWYgUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XCi1jb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OworI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XKSB8fCBkZWZpbmVkKFBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQpCitQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsKICNlbmRpZgogCiAvKiBIZWlnaHQgb2YgaW50ZXJsYWNlIGJsb2NrLiAgVGhpcyBpcyBub3QgY3VycmVudGx5IHVzZWQgLSBpZiB5b3UgbmVlZAogICogaXQsIHVuY29tbWVudCBpdCBoZXJlIGFuZCBpbiBwbmcuaAotY29uc3QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaGVpZ2h0W10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CitQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaGVpZ2h0W10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAqLwogCiAvKiBNYXNrIHRvIGRldGVybWluZSB3aGljaCBwaXhlbHMgYXJlIHZhbGlkIGluIGEgcGFzcyAqLwotY29uc3QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfbWFza1tdID0gezB4ODAsIDB4MDgsIDB4ODgsIDB4MjIsIDB4YWEsIDB4NTUsIDB4ZmZ9OworUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX21hc2tbXSA9IHsweDgwLCAweDA4LCAweDg4LCAweDIyLCAweGFhLCAweDU1LCAweGZmfTsKIAogLyogTWFzayB0byBkZXRlcm1pbmUgd2hpY2ggcGl4ZWxzIHRvIG92ZXJ3cml0ZSB3aGlsZSBkaXNwbGF5aW5nICovCi1jb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc19kc3BfbWFza1tdCitQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfZHNwX21hc2tbXQogICAgPSB7MHhmZiwgMHgwZiwgMHhmZiwgMHgzMywgMHhmZiwgMHg1NSwgMHhmZn07CiAKICNlbmRpZiAvKiBQTkdfUkVBRF9TVVBQT1JURUQgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogI2lmIGRlZmluZWQoUE5HXzFfMF9YKSB8fCBkZWZpbmVkKFBOR18xXzJfWCkKIC8qIChPYnNvbGV0ZSkgZnVuY3Rpb24gdG8gY2hlY2sgc2lnbmF0dXJlIGJ5dGVzLiAgSXQgZG9lcyBub3QgYWxsb3cgb25lCiAgKiB0byBjaGVjayBhIHBhcnRpYWwgc2lnbmF0dXJlLiAgVGhpcyBmdW5jdGlvbiBtaWdodCBiZSByZW1vdmVkIGluIHRoZQotICogZnV0dXJlIC0gdXNlIHBuZ19zaWdfY21wKCkuICBSZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmIHRoZSBmaWxlIGlzIGEgUE5HLgorICogZnV0dXJlIC0gdXNlIHBuZ19zaWdfY21wKCkuICBSZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmIHRoZSBmaWxlIGlzIFBORy4KICAqLwogaW50IFBOR0FQSQogcG5nX2NoZWNrX3NpZyhwbmdfYnl0ZXAgc2lnLCBpbnQgbnVtKQpAQCAtNjc0LDcgKzY3NCw3IEBACiAjaWZkZWYgVVNFX0ZBUl9LRVlXT1JECiAgICB7CiAgICAgICBjaGFyIG5lYXJfdGltZV9idWZbMjldOwotICAgICAgc3ByaW50ZihuZWFyX3RpbWVfYnVmLCAiJWQgJXMgJWQgJTAyZDolMDJkOiUwMmQgKzAwMDAiLAorICAgICAgcG5nX3NucHJpbnRmNihuZWFyX3RpbWVfYnVmLDI5LCIlZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCiAgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAogICAgICAgICAgIHB0aW1lLT55ZWFyLCBwdGltZS0+aG91ciAlIDI0LCBwdGltZS0+bWludXRlICUgNjAsCiAgICAgICAgICAgcHRpbWUtPnNlY29uZCAlIDYxKTsKQEAgLTY4Miw3ICs2ODIsNyBAQAogICAgICAgICAgIDI5KnBuZ19zaXplb2YoY2hhcikpOwogICAgfQogI2Vsc2UKLSAgIHNwcmludGYocG5nX3B0ci0+dGltZV9idWZmZXIsICIlZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCisgICBwbmdfc25wcmludGY2KHBuZ19wdHItPnRpbWVfYnVmZmVyLDI5LCIlZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCiAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAogICAgICAgIHB0aW1lLT55ZWFyLCBwdGltZS0+aG91ciAlIDI0LCBwdGltZS0+bWludXRlICUgNjAsCiAgICAgICAgcHRpbWUtPnNlY29uZCAlIDYxKTsKQEAgLTcwNSwxMiArNzA1LDExIEBACiBwbmdfY2hhcnAgUE5HQVBJCiBwbmdfZ2V0X2NvcHlyaWdodChwbmdfc3RydWN0cCBwbmdfcHRyKQogewotICAgaWYgKCZwbmdfcHRyICE9IE5VTEwpICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KLSAgIHJldHVybiAoKHBuZ19jaGFycCkgIlxuIGxpYnBuZyB2ZXJzaW9uIDEuMC4yNiAtIE1heSAxNSwgMjAwN1xuXAorICAgcG5nX3B0ciA9IHBuZ19wdHI7ICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KKyAgIHJldHVybiAoKHBuZ19jaGFycCkgIlxuIGxpYnBuZyB2ZXJzaW9uIDEuMC4yN3JjMSAtIEp1bHkgMzEsIDIwMDdcblwKICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvblxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgQW5kcmVhcyBEaWxnZXJcblwKICAgIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLlxuIik7Ci0gICByZXR1cm4gKChwbmdfY2hhcnApICIiKTsKIH0KIAogLyogVGhlIGZvbGxvd2luZyByZXR1cm4gdGhlIGxpYnJhcnkgdmVyc2lvbiBhcyBhIHNob3J0IHN0cmluZyBpbiB0aGUKQEAgLTcyNSwyNyArNzI0LDcwIEBACiBwbmdfZ2V0X2xpYnBuZ192ZXIocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKICAgIC8qIFZlcnNpb24gb2YgKi5jIGZpbGVzIHVzZWQgd2hlbiBidWlsZGluZyBsaWJwbmcgKi8KLSAgIGlmICgmcG5nX3B0ciAhPSBOVUxMKSAgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nIGFib3V0IHVudXNlZCBwbmdfcHRyICovCi0gICAgICByZXR1cm4gKChwbmdfY2hhcnApIFBOR19MSUJQTkdfVkVSX1NUUklORyk7Ci0gICByZXR1cm4gKChwbmdfY2hhcnApICIiKTsKKyAgIHBuZ19wdHIgPSBwbmdfcHRyOyAgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nIGFib3V0IHVudXNlZCBwbmdfcHRyICovCisgICByZXR1cm4gKChwbmdfY2hhcnApIFBOR19MSUJQTkdfVkVSX1NUUklORyk7CiB9CiAKIHBuZ19jaGFycCBQTkdBUEkKIHBuZ19nZXRfaGVhZGVyX3Zlcihwbmdfc3RydWN0cCBwbmdfcHRyKQogewogICAgLyogVmVyc2lvbiBvZiAqLmggZmlsZXMgdXNlZCB3aGVuIGJ1aWxkaW5nIGxpYnBuZyAqLwotICAgaWYgKCZwbmdfcHRyICE9IE5VTEwpICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KLSAgICAgIHJldHVybiAoKHBuZ19jaGFycCkgUE5HX0xJQlBOR19WRVJfU1RSSU5HKTsKLSAgIHJldHVybiAoKHBuZ19jaGFycCkgIiIpOworICAgcG5nX3B0ciA9IHBuZ19wdHI7ICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KKyAgIHJldHVybiAoKHBuZ19jaGFycCkgUE5HX0xJQlBOR19WRVJfU1RSSU5HKTsKIH0KIAogcG5nX2NoYXJwIFBOR0FQSQogcG5nX2dldF9oZWFkZXJfdmVyc2lvbihwbmdfc3RydWN0cCBwbmdfcHRyKQogewogICAgLyogUmV0dXJucyBsb25nZXIgc3RyaW5nIGNvbnRhaW5pbmcgYm90aCB2ZXJzaW9uIGFuZCBkYXRlICovCi0gICBpZiAoJnBuZ19wdHIgIT0gTlVMTCkgIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgcG5nX3B0ciAqLwotICAgICAgcmV0dXJuICgocG5nX2NoYXJwKSBQTkdfSEVBREVSX1ZFUlNJT05fU1RSSU5HKTsKLSAgIHJldHVybiAoKHBuZ19jaGFycCkgIiIpOworICAgcG5nX3B0ciA9IHBuZ19wdHI7ICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KKyAgIHJldHVybiAoKHBuZ19jaGFycCkgUE5HX0hFQURFUl9WRVJTSU9OX1NUUklORworI2lmZGVmIFBOR19SRUFEX1NVUFBPUlRFRAorIyAgaWZkZWYgUE5HX1VTRV9QTkdHQ0NSRAorIyAgICBpZmRlZiBfX3g4Nl82NF9fCisjICAgICAgaWZkZWYgX19QSUNfXworICAgIiAgICAgKFBOR0dDUkQgeDg2XzY0LCBQSUMpXG4iCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgUE5HX1RIUkVBRF9VTlNBRkVfT0sKKyAgICIgICAgIChQTkdHQ1JEIHg4Nl82NCwgVGhyZWFkIHVuc2FmZSlcbiIKKyMgICAgICAgIGVsc2UKKyAgICIgICAgIChQTkdHQ1JEIHg4Nl82NCwgVGhyZWFkIHNhZmUpXG4iCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVsc2UKKyMgICAgaWZkZWYgUE5HX1RIUkVBRF9VTlNBRkVfT0sKKyAgICIgICAgIChQTkdHQ1JELCBUaHJlYWQgdW5zYWZlKVxuIgorIyAgICAgIGVsc2UKKyAgICIgICAgIChQTkdHQ1JELCBUaHJlYWQgc2FmZSlcbiIKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBpZmRlZiBQTkdfVVNFX1BOR1ZDUkQKKyMgICAgICBpZmRlZiBfX3g4Nl82NF9fCisgICAiICAgICAoeDg2XzY0IFBOR1ZDUkQpXG4iCisjICAgICAgZWxzZQorICAgIiAgICAgKFBOR1ZDUkQpXG4iCisjICAgICAgZW5kaWYKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIF9feDg2XzY0X18KKyMgICAgICAgIGlmZGVmIFBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQKKyAgICIgICAgICh4ODZfNjQgT1BUSU1JWkVEKVxuIgorIyAgICAgICAgZWxzZQorICAgIiAgICAgKHg4Nl82NCBOT1QgT1BUSU1JWkVEKVxuIgorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBQTkdfT1BUSU1JWkVEX0NPREVfU1VQUE9SVEVECisgICAiICAgICAoT1BUSU1JWkVEKVxuIgorIyAgICAgICAgZWxzZQorICAgIiAgICAgKE5PVCBPUFRJTUlaRUQpXG4iCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2Vsc2UKKyAgICIgICAgIChOTyBSRUFEIFNVUFBPUlQpXG4iCisjZW5kaWYKKyAgICk7CiB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChQTkdfV1JJVEVfU1VQUE9SVEVEKQpAQCAtNzU2LDcgKzc5OCw3IEBACiAgICAvKiBjaGVjayBjaHVua19uYW1lIGFuZCByZXR1cm4gImtlZXAiIHZhbHVlIGlmIGl0J3Mgb24gdGhlIGxpc3QsIGVsc2UgMCAqLwogICAgaW50IGk7CiAgICBwbmdfYnl0ZXAgcDsKLSAgIGlmKChwbmdfcHRyID09IE5VTEwgJiYgY2h1bmtfbmFtZSA9PSBOVUxMKSB8fCBwbmdfcHRyLT5udW1fY2h1bmtfbGlzdDw9MCkKKyAgIGlmKHBuZ19wdHIgPT0gTlVMTCB8fCBjaHVua19uYW1lID09IE5VTEwgfHwgcG5nX3B0ci0+bnVtX2NodW5rX2xpc3Q8PTApCiAgICAgICByZXR1cm4gMDsKICAgIHA9cG5nX3B0ci0+Y2h1bmtfbGlzdCtwbmdfcHRyLT5udW1fY2h1bmtfbGlzdCo1LTU7CiAgICBmb3IgKGkgPSBwbmdfcHRyLT5udW1fY2h1bmtfbGlzdDsgaTsgaS0tLCBwLT01KQpAQCAtODQzLDggKzg4NSw4IEBACiAgICAgcmV0dXJuIC0xOwogfQogI2VuZGlmCi0jZW5kaWYgLyogUE5HXzFfMF9YICAmJiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICovCi0jZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEICovCisjZW5kaWYgLyogUE5HXzFfMF9YICovCisjZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEICYmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgKi8KIAogI2lmIGRlZmluZWQoUE5HX1JFQURfU1VQUE9SVEVEKSB8fCBkZWZpbmVkKFBOR19XUklURV9TVVBQT1JURUQpCiAjaWZkZWYgUE5HX1NJWkVfVApkaWZmIC0tZ2l0IGEvcG5nLmggYi9wbmcuaAppbmRleCA5N2FhNzgxLi42MTcyMzY2IDEwMDY0NAotLS0gYS9wbmcuaAorKysgYi9wbmcuaApAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nLmggLSBoZWFkZXIgZmlsZSBmb3IgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5CiAgKgotICogbGlicG5nIHZlcnNpb24gMS4wLjI2IC0gTWF5IDE1LCAyMDA3CisgKiBsaWJwbmcgdmVyc2lvbiAxLjAuMjdyYzEgLSBKdWx5IDMxLCAyMDA3CiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQogICogKFZlcnNpb24gMC44OCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuKQpAQCAtOSw3ICs5LDcgQEAKICAqIEF1dGhvcnMgYW5kIG1haW50YWluZXJzOgogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjcxLCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTY6IEd1eSBTY2hhbG5hdAogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjg5YywgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3OiBBbmRyZWFzIERpbGdlcgotICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4wLjI2IC0gTWF5IDE1LCAyMDA3OiBHbGVubgorICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4wLjI3cmMxIC0gSnVseSAzMSwgMjAwNzogR2xlbm4KICAqICBTZWUgYWxzbyAiQ29udHJpYnV0aW5nIEF1dGhvcnMiLCBiZWxvdy4KICAqCiAgKiBOb3RlIGFib3V0IGxpYnBuZyB2ZXJzaW9uIG51bWJlcnM6CkBAIC0xNTAsNiArMTUwLDkgQEAKICAqICAgIDEuMi4xNyAgICAgICAgICAgICAgICAgIDEzICAgIDEwMjE3ICAxMi5zby4wLjE3Wy4wXQogICogICAgMS4wLjI2ICAgICAgICAgICAgICAgICAgMTAgICAgMTAwMjYgIDEwLnNvLjAuMjZbLjBdCiAgKiAgICAxLjIuMTggICAgICAgICAgICAgICAgICAxMyAgICAxMDIxOCAgMTIuc28uMC4xOFsuMF0KKyAqICAgIDEuMi4xOWJldGExLTMxICAgICAgICAgIDEzICAgIDEwMjE5ICAxMi5zby4wLjE5Wy4wXQorICogICAgMS4wLjI3cmMxICAgICAgICAgICAgICAgMTAgICAgMTAwMjcgIDEwLnNvLjAuMjdbLjBdCisgKiAgICAxLjIuMTlyYzEgICAgICAgICAgICAgICAxMyAgICAxMDIxOSAgMTIuc28uMC4xOVsuMF0KICAqCiAgKiAgICBIZW5jZWZvcnRoIHRoZSBzb3VyY2UgdmVyc2lvbiB3aWxsIG1hdGNoIHRoZSBzaGFyZWQtbGlicmFyeSBtYWpvcgogICogICAgYW5kIG1pbm9yIG51bWJlcnM7IHRoZSBzaGFyZWQtbGlicmFyeSBtYWpvciB2ZXJzaW9uIG51bWJlciB3aWxsIGJlCkBAIC0xNzksNyArMTgyLDcgQEAKICAqIElmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKICAqIHRoaXMgc2VudGVuY2UuCiAgKgotICogbGlicG5nIHZlcnNpb25zIDEuMi42LCBBdWd1c3QgMTUsIDIwMDQsIHRocm91Z2ggMS4wLjI2LCBNYXkgMTUsIDIwMDcsIGFyZQorICogbGlicG5nIHZlcnNpb25zIDEuMi42LCBBdWd1c3QgMTUsIDIwMDQsIHRocm91Z2ggMS4wLjI3cmMxLCBKdWx5IDMxLCAyMDA3LCBhcmUKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNi0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQogICogZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMi41CiAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKQEAgLTI5MSwxMyArMjk0LDEzIEBACiAgKiBZMksgY29tcGxpYW5jZSBpbiBsaWJwbmc6CiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgotICogICAgTWF5IDE1LCAyMDA3CisgKiAgICBKdWx5IDMxLCAyMDA3CiAgKgogICogICAgU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogICogICAgYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAgKgogICogICAgVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotICogICAgdXB3YXJkIHRocm91Z2ggMS4wLjI2IGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgorICogICAgdXB3YXJkIHRocm91Z2ggMS4wLjI3cmMxIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogICogICAgdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAgKgogICogICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKQEAgLTM1Myw5ICszNTYsOSBAQAogICovCiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHBuZy5oIC0gdGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZlcnNpb24gaW4gcG5nLmMgKi8KLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU1RSSU5HICIxLjAuMjYiCisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4wLjI3cmMxIgogI2RlZmluZSBQTkdfSEVBREVSX1ZFUlNJT05fU1RSSU5HIFwKLSAgICIgbGlicG5nIHZlcnNpb24gMS4wLjI2IC0gTWF5IDE1LCAyMDA3IChoZWFkZXIpXG4iCisgICAiIGxpYnBuZyB2ZXJzaW9uIDEuMC4yN3JjMSAtIEp1bHkgMzEsIDIwMDdcbiIKIAogI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9TT05VTSAgIDAKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfRExMTlVNICAxMApAQCAtMzYzLDExICszNjYsMTEgQEAKIC8qIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgZmlyc3QgMyBjb21wb25lbnRzIG9mIFBOR19MSUJQTkdfVkVSX1NUUklORzogKi8KICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfTUFKT1IgICAxCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX01JTk9SICAgMAotI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9SRUxFQVNFIDI2CisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX1JFTEVBU0UgMjcKIC8qIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBudW1lcmljIHBhcnQgb2YgdGhlIGZpbmFsIGNvbXBvbmVudCBvZgogICogUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBvbWl0dGluZyBhbnkgbGVhZGluZyB6ZXJvOiAqLwogCi0jZGVmaW5lIFBOR19MSUJQTkdfVkVSX0JVSUxEICAwCisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX0JVSUxEICAxCiAKIC8qIFJlbGVhc2UgU3RhdHVzICovCiAjZGVmaW5lIFBOR19MSUJQTkdfQlVJTERfQUxQSEEgICAgMQpAQCAtMzg0LDE0ICszODcsMTQgQEAKICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9TUEVDSUFMIDMyIC8qIENhbm5vdCBiZSBPUidlZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTkdfTElCUE5HX0JVSUxEX1BSSVZBVEUgKi8KIAotI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX0JBU0VfVFlQRSBQTkdfTElCUE5HX0JVSUxEX1NUQUJMRQorI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX0JBU0VfVFlQRSBQTkdfTElCUE5HX0JVSUxEX1JDCiAKIC8qIENhcmVmdWwgaGVyZS4gIEF0IG9uZSB0aW1lLCBHdXkgd2FudGVkIHRvIHVzZSAwODIsIGJ1dCB0aGF0IHdvdWxkIGJlIG9jdGFsLgogICogV2UgbXVzdCBub3QgaW5jbHVkZSBsZWFkaW5nIHplcm9zLgogICogVmVyc2lvbnMgMC43IHRocm91Z2ggMS4wLjAgd2VyZSBpbiB0aGUgcmFuZ2UgMCB0byAxMDAgaGVyZSAob25seQogICogdmVyc2lvbiAxLjAuMCB3YXMgbWlzLW51bWJlcmVkIDEwMCBpbnN0ZWFkIG9mIDEwMDAwKS4gIEZyb20KICAqIHZlcnNpb24gMS4wLjEgaXQncyAgICB4eHl5enosIHdoZXJlIHg9bWFqb3IsIHk9bWlub3IsIHo9cmVsZWFzZSAqLwotI2RlZmluZSBQTkdfTElCUE5HX1ZFUiAxMDAyNiAvKiAxLjAuMjYgKi8KKyNkZWZpbmUgUE5HX0xJQlBOR19WRVIgMTAwMjcgLyogMS4wLjI3ICovCiAKICNpZm5kZWYgUE5HX1ZFUlNJT05fSU5GT19PTkxZCiAvKiBpbmNsdWRlIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5J3MgaGVhZGVyICovCkBAIC00NzksNyArNDgyLDcgQEAKICAqIHRoZSB2ZXJzaW9uIGFib3ZlLgogICovCiAjaWZkZWYgUE5HX1VTRV9HTE9CQUxfQVJSQVlTCi1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgY2hhcikgcG5nX2xpYnBuZ192ZXJbMThdOworUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBjaGFyKSBwbmdfbGlicG5nX3ZlclsxOF07CiAgIC8qIG5lZWQgcm9vbSBmb3IgOTkuOTkuOTliZXRhOTl6ICovCiAjZWxzZQogI2RlZmluZSBwbmdfbGlicG5nX3ZlciBwbmdfZ2V0X2hlYWRlcl92ZXIoTlVMTCkKQEAgLTQ4OCwxNyArNDkxLDE3IEBACiAjaWZkZWYgUE5HX1VTRV9HTE9CQUxfQVJSQVlTCiAvKiBUaGlzIHdhcyByZW1vdmVkIGluIHZlcnNpb24gMS4wLjVjICovCiAvKiBTdHJ1Y3R1cmVzIHRvIGZhY2lsaXRhdGUgZWFzeSBpbnRlcmxhY2luZy4gIFNlZSBwbmcuYyBmb3IgbW9yZSBkZXRhaWxzICovCi1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX3N0YXJ0WzddOwotUE5HX0VYUE9SVF9WQVIgKGNvbnN0IGludCBGQVJEQVRBKSBwbmdfcGFzc19pbmNbN107Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX3lzdGFydFs3XTsKLVBOR19FWFBPUlRfVkFSIChjb25zdCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfeWluY1s3XTsKLVBOR19FWFBPUlRfVkFSIChjb25zdCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfbWFza1s3XTsKLVBOR19FWFBPUlRfVkFSIChjb25zdCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfZHNwX21hc2tbN107Ci0jaWZkZWYgUE5HX1VTRV9QTkdHQ0NSRAotUE5HX0VYUE9SVF9WQVIgKGNvbnN0IGludCBGQVJEQVRBKSBwbmdfcGFzc193aWR0aFs3XTsKK1BOR19FWFBPUlRfVkFSIChQTkdfQ09OU1QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX3N0YXJ0WzddOworUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfaW5jWzddOworUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfeXN0YXJ0WzddOworUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfeWluY1s3XTsKK1BOR19FWFBPUlRfVkFSIChQTkdfQ09OU1QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX21hc2tbN107CitQTkdfRVhQT1JUX1ZBUiAoUE5HX0NPTlNUIGludCBGQVJEQVRBKSBwbmdfcGFzc19kc3BfbWFza1s3XTsKKyNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykgfHwgZGVmaW5lZChQTkdfT1BUSU1JWkVEX0NPREVfU1VQUE9SVEVEKQorUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3Nfd2lkdGhbN107CiAjZW5kaWYKIC8qIFRoaXMgaXNuJ3QgY3VycmVudGx5IHVzZWQuICBJZiB5b3UgbmVlZCBpdCwgc2VlIHBuZy5jIGZvciBtb3JlIGRldGFpbHMuCi1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX2hlaWdodFs3XTsKK1BOR19FWFBPUlRfVkFSIChQTkdfQ09OU1QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX2hlaWdodFs3XTsKICovCiAjZW5kaWYKIApAQCAtMTM1Miw3ICsxMzU1LDcgQEAKICAgIHBuZ19ieXRlIGZpbHRlcl90eXBlOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR18xXzBfWCkgfHwgKGRlZmluZWQoUE5HX0RFQlVHKSAmJiBkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpKQorI2lmIGRlZmluZWQoUE5HXzFfMF9YKQogLyogTmV3IG1lbWJlciBhZGRlZCBpbiBsaWJwbmctMS4wLjEwLCBpZmRlZidlZCBvdXQgaW4gMS4yLjAgKi8KICAgIHBuZ191aW50XzMyIHJvd19idWZfc2l6ZTsKICNlbmRpZgpAQCAtMTQwNiw3ICsxNDA5LDcgQEAKIC8qIFRoaXMgdHJpZ2dlcnMgYSBjb21waWxlciBlcnJvciBpbiBwbmcuYywgaWYgcG5nLmMgYW5kIHBuZy5oCiAgKiBkbyBub3QgYWdyZWUgdXBvbiB0aGUgdmVyc2lvbiBudW1iZXIuCiAgKi8KLXR5cGVkZWYgcG5nX3N0cnVjdHAgdmVyc2lvbl8xXzBfMjY7Cit0eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8wXzI3cmMxOwogCiB0eXBlZGVmIHBuZ19zdHJ1Y3QgRkFSICogRkFSICogcG5nX3N0cnVjdHBwOwogCkBAIC0yMDYyLDEzICsyMDY1LDE3IEBACiBleHRlcm4gUE5HX0VYUE9SVCh2b2lkLHBuZ19jaHVua19lcnJvcikgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLAogICAgcG5nX2NvbnN0X2NoYXJwIGVycm9yX21lc3NhZ2UpKTsKIAorI2lmbmRlZiBQTkdfTk9fV0FSTklOR1MKIC8qIE5vbi1mYXRhbCBlcnJvciBpbiBsaWJwbmcuICBDYW4gY29udGludWUsIGJ1dCBtYXkgaGF2ZSBhIHByb2JsZW0uICovCiBleHRlcm4gUE5HX0VYUE9SVCh2b2lkLHBuZ193YXJuaW5nKSBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsCiAgICBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tZXNzYWdlKSk7CiAKKyNpZmRlZiBQTkdfUkVBRF9TVVBQT1JURUQKIC8qIE5vbi1mYXRhbCBlcnJvciBpbiBsaWJwbmcsIGNodW5rIG5hbWUgaXMgcHJlcGVuZGVkIHRvIG1lc3NhZ2UuICovCiBleHRlcm4gUE5HX0VYUE9SVCh2b2lkLHBuZ19jaHVua193YXJuaW5nKSBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsCiAgICBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tZXNzYWdlKSk7CisjZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEICovCisjZW5kaWYgLyogUE5HX05PX1dBUk5JTkdTICovCiAKIC8qIFRoZSBwbmdfc2V0XzxjaHVuaz4gZnVuY3Rpb25zIGFyZSBmb3Igc3RvcmluZyB2YWx1ZXMgaW4gdGhlIHBuZ19pbmZvX3N0cnVjdC4KICAqIFNpbWlsYXJseSwgdGhlIHBuZ19nZXRfPGNodW5rPiBjYWxscyBhcmUgdXNlZCB0byByZWFkIHZhbHVlcyBmcm9tIHRoZQpAQCAtMjgxNyw3ICsyODI0LDcgQEAKICNpZiAhZGVmaW5lZChQTkdfTk9fRVhURVJOKSB8fCBkZWZpbmVkKFBOR19BTFdBWVNfRVhURVJOKQogLyogcGxhY2UgdG8gaG9sZCB0aGUgc2lnbmF0dXJlIHN0cmluZyBmb3IgYSBQTkcgZmlsZS4gKi8KICNpZmRlZiBQTkdfVVNFX0dMT0JBTF9BUlJBWVMKLSAgIFBOR19FWFBPUlRfVkFSIChjb25zdCBwbmdfYnl0ZSBGQVJEQVRBKSBwbmdfc2lnWzhdOworICAgUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBwbmdfYnl0ZSBGQVJEQVRBKSBwbmdfc2lnWzhdOwogI2Vsc2UKICNpZiAwCiAjZGVmaW5lIHBuZ19zaWcgcG5nX3NpZ19ieXRlcyhOVUxMKQpAQCAtMjgyOSw1MCArMjgzNiw1MCBAQAogICogZGVmaW5lIHRoZSBuYW1lIGhlcmUsIGFuZCBhZGQgYW4gaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8gaW4gcG5nLmMgYW5kCiAgKiB3aGVyZXZlciBpdCdzIG5lZWRlZC4KICAqLwotI2RlZmluZSBQTkdfSUhEUiBjb25zdCBwbmdfYnl0ZSBwbmdfSUhEUls1XSA9IHsgNzMsICA3MiwgIDY4LCAgODIsICdcMCd9Ci0jZGVmaW5lIFBOR19JREFUIGNvbnN0IHBuZ19ieXRlIHBuZ19JREFUWzVdID0geyA3MywgIDY4LCAgNjUsICA4NCwgJ1wwJ30KLSNkZWZpbmUgUE5HX0lFTkQgY29uc3QgcG5nX2J5dGUgcG5nX0lFTkRbNV0gPSB7IDczLCAgNjksICA3OCwgIDY4LCAnXDAnfQotI2RlZmluZSBQTkdfUExURSBjb25zdCBwbmdfYnl0ZSBwbmdfUExURVs1XSA9IHsgODAsICA3NiwgIDg0LCAgNjksICdcMCd9Ci0jZGVmaW5lIFBOR19iS0dEIGNvbnN0IHBuZ19ieXRlIHBuZ19iS0dEWzVdID0geyA5OCwgIDc1LCAgNzEsICA2OCwgJ1wwJ30KLSNkZWZpbmUgUE5HX2NIUk0gY29uc3QgcG5nX2J5dGUgcG5nX2NIUk1bNV0gPSB7IDk5LCAgNzIsICA4MiwgIDc3LCAnXDAnfQotI2RlZmluZSBQTkdfZ0FNQSBjb25zdCBwbmdfYnl0ZSBwbmdfZ0FNQVs1XSA9IHsxMDMsICA2NSwgIDc3LCAgNjUsICdcMCd9Ci0jZGVmaW5lIFBOR19oSVNUIGNvbnN0IHBuZ19ieXRlIHBuZ19oSVNUWzVdID0gezEwNCwgIDczLCAgODMsICA4NCwgJ1wwJ30KLSNkZWZpbmUgUE5HX2lDQ1AgY29uc3QgcG5nX2J5dGUgcG5nX2lDQ1BbNV0gPSB7MTA1LCAgNjcsICA2NywgIDgwLCAnXDAnfQotI2RlZmluZSBQTkdfaVRYdCBjb25zdCBwbmdfYnl0ZSBwbmdfaVRYdFs1XSA9IHsxMDUsICA4NCwgIDg4LCAxMTYsICdcMCd9Ci0jZGVmaW5lIFBOR19vRkZzIGNvbnN0IHBuZ19ieXRlIHBuZ19vRkZzWzVdID0gezExMSwgIDcwLCAgNzAsIDExNSwgJ1wwJ30KLSNkZWZpbmUgUE5HX3BDQUwgY29uc3QgcG5nX2J5dGUgcG5nX3BDQUxbNV0gPSB7MTEyLCAgNjcsICA2NSwgIDc2LCAnXDAnfQotI2RlZmluZSBQTkdfc0NBTCBjb25zdCBwbmdfYnl0ZSBwbmdfc0NBTFs1XSA9IHsxMTUsICA2NywgIDY1LCAgNzYsICdcMCd9Ci0jZGVmaW5lIFBOR19wSFlzIGNvbnN0IHBuZ19ieXRlIHBuZ19wSFlzWzVdID0gezExMiwgIDcyLCAgODksIDExNSwgJ1wwJ30KLSNkZWZpbmUgUE5HX3NCSVQgY29uc3QgcG5nX2J5dGUgcG5nX3NCSVRbNV0gPSB7MTE1LCAgNjYsICA3MywgIDg0LCAnXDAnfQotI2RlZmluZSBQTkdfc1BMVCBjb25zdCBwbmdfYnl0ZSBwbmdfc1BMVFs1XSA9IHsxMTUsICA4MCwgIDc2LCAgODQsICdcMCd9Ci0jZGVmaW5lIFBOR19zUkdCIGNvbnN0IHBuZ19ieXRlIHBuZ19zUkdCWzVdID0gezExNSwgIDgyLCAgNzEsICA2NiwgJ1wwJ30KLSNkZWZpbmUgUE5HX3RFWHQgY29uc3QgcG5nX2J5dGUgcG5nX3RFWHRbNV0gPSB7MTE2LCAgNjksICA4OCwgMTE2LCAnXDAnfQotI2RlZmluZSBQTkdfdElNRSBjb25zdCBwbmdfYnl0ZSBwbmdfdElNRVs1XSA9IHsxMTYsICA3MywgIDc3LCAgNjksICdcMCd9Ci0jZGVmaW5lIFBOR190Uk5TIGNvbnN0IHBuZ19ieXRlIHBuZ190Uk5TWzVdID0gezExNiwgIDgyLCAgNzgsICA4MywgJ1wwJ30KLSNkZWZpbmUgUE5HX3pUWHQgY29uc3QgcG5nX2J5dGUgcG5nX3pUWHRbNV0gPSB7MTIyLCAgODQsICA4OCwgMTE2LCAnXDAnfQorI2RlZmluZSBQTkdfSUhEUiBwbmdfYnl0ZSBwbmdfSUhEUls1XSA9IHsgNzMsICA3MiwgIDY4LCAgODIsICdcMCd9CisjZGVmaW5lIFBOR19JREFUIHBuZ19ieXRlIHBuZ19JREFUWzVdID0geyA3MywgIDY4LCAgNjUsICA4NCwgJ1wwJ30KKyNkZWZpbmUgUE5HX0lFTkQgcG5nX2J5dGUgcG5nX0lFTkRbNV0gPSB7IDczLCAgNjksICA3OCwgIDY4LCAnXDAnfQorI2RlZmluZSBQTkdfUExURSBwbmdfYnl0ZSBwbmdfUExURVs1XSA9IHsgODAsICA3NiwgIDg0LCAgNjksICdcMCd9CisjZGVmaW5lIFBOR19iS0dEIHBuZ19ieXRlIHBuZ19iS0dEWzVdID0geyA5OCwgIDc1LCAgNzEsICA2OCwgJ1wwJ30KKyNkZWZpbmUgUE5HX2NIUk0gcG5nX2J5dGUgcG5nX2NIUk1bNV0gPSB7IDk5LCAgNzIsICA4MiwgIDc3LCAnXDAnfQorI2RlZmluZSBQTkdfZ0FNQSBwbmdfYnl0ZSBwbmdfZ0FNQVs1XSA9IHsxMDMsICA2NSwgIDc3LCAgNjUsICdcMCd9CisjZGVmaW5lIFBOR19oSVNUIHBuZ19ieXRlIHBuZ19oSVNUWzVdID0gezEwNCwgIDczLCAgODMsICA4NCwgJ1wwJ30KKyNkZWZpbmUgUE5HX2lDQ1AgcG5nX2J5dGUgcG5nX2lDQ1BbNV0gPSB7MTA1LCAgNjcsICA2NywgIDgwLCAnXDAnfQorI2RlZmluZSBQTkdfaVRYdCBwbmdfYnl0ZSBwbmdfaVRYdFs1XSA9IHsxMDUsICA4NCwgIDg4LCAxMTYsICdcMCd9CisjZGVmaW5lIFBOR19vRkZzIHBuZ19ieXRlIHBuZ19vRkZzWzVdID0gezExMSwgIDcwLCAgNzAsIDExNSwgJ1wwJ30KKyNkZWZpbmUgUE5HX3BDQUwgcG5nX2J5dGUgcG5nX3BDQUxbNV0gPSB7MTEyLCAgNjcsICA2NSwgIDc2LCAnXDAnfQorI2RlZmluZSBQTkdfc0NBTCBwbmdfYnl0ZSBwbmdfc0NBTFs1XSA9IHsxMTUsICA2NywgIDY1LCAgNzYsICdcMCd9CisjZGVmaW5lIFBOR19wSFlzIHBuZ19ieXRlIHBuZ19wSFlzWzVdID0gezExMiwgIDcyLCAgODksIDExNSwgJ1wwJ30KKyNkZWZpbmUgUE5HX3NCSVQgcG5nX2J5dGUgcG5nX3NCSVRbNV0gPSB7MTE1LCAgNjYsICA3MywgIDg0LCAnXDAnfQorI2RlZmluZSBQTkdfc1BMVCBwbmdfYnl0ZSBwbmdfc1BMVFs1XSA9IHsxMTUsICA4MCwgIDc2LCAgODQsICdcMCd9CisjZGVmaW5lIFBOR19zUkdCIHBuZ19ieXRlIHBuZ19zUkdCWzVdID0gezExNSwgIDgyLCAgNzEsICA2NiwgJ1wwJ30KKyNkZWZpbmUgUE5HX3RFWHQgcG5nX2J5dGUgcG5nX3RFWHRbNV0gPSB7MTE2LCAgNjksICA4OCwgMTE2LCAnXDAnfQorI2RlZmluZSBQTkdfdElNRSBwbmdfYnl0ZSBwbmdfdElNRVs1XSA9IHsxMTYsICA3MywgIDc3LCAgNjksICdcMCd9CisjZGVmaW5lIFBOR190Uk5TIHBuZ19ieXRlIHBuZ190Uk5TWzVdID0gezExNiwgIDgyLCAgNzgsICA4MywgJ1wwJ30KKyNkZWZpbmUgUE5HX3pUWHQgcG5nX2J5dGUgcG5nX3pUWHRbNV0gPSB7MTIyLCAgODQsICA4OCwgMTE2LCAnXDAnfQogCiAjaWZkZWYgUE5HX1VTRV9HTE9CQUxfQVJSQVlTCi1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX0lIRFJbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX0lEQVRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX0lFTkRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX1BMVEVbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2JLR0RbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2NIUk1bNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2dBTUFbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2hJU1RbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2lDQ1BbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX2lUWHRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX29GRnNbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3BDQUxbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3NDQUxbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3BIWXNbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3NCSVRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3NQTFRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3NSR0JbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3RFWHRbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3RJTUVbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3RSTlNbNV07Ci1QTkdfRVhQT1JUX1ZBUiAoY29uc3QgcG5nX2J5dGUgRkFSREFUQSkgcG5nX3pUWHRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX0lIRFJbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX0lEQVRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX0lFTkRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX1BMVEVbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2JLR0RbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2NIUk1bNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2dBTUFbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2hJU1RbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2lDQ1BbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX2lUWHRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX29GRnNbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3BDQUxbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3NDQUxbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3BIWXNbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3NCSVRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3NQTFRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3NSR0JbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3RFWHRbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3RJTUVbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3RSTlNbNV07CitQTkdfRVhQT1JUX1ZBUiAocG5nX2J5dGUgRkFSREFUQSkgcG5nX3pUWHRbNV07CiAjZW5kaWYgLyogUE5HX1VTRV9HTE9CQUxfQVJSQVlTICovCiAKICNpZiBkZWZpbmVkKFBOR18xXzBfWCkgfHwgZGVmaW5lZCAoUE5HXzFfMl9YKQpkaWZmIC0tZ2l0IGEvcG5nY29uZi5oIGIvcG5nY29uZi5oCmluZGV4IDM1ZDYzMTYuLjhkZjAxYTIgMTAwNjQ0Ci0tLSBhL3BuZ2NvbmYuaAorKysgYi9wbmdjb25mLmgKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ2NvbmYuaCAtIG1hY2hpbmUgY29uZmlndXJhYmxlIGZpbGUgZm9yIGxpYnBuZwogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMC4yNiAtIE1heSAxNSwgMjAwNworICogbGlicG5nIHZlcnNpb24gMS4wLjI3cmMxIC0gSnVseSAzMSwgMjAwNwogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMjcwLDYgKzI3MCw3IEBACiAjICBkZWZpbmUgUE5HQVJHKGFyZ2xpc3QpIGFyZ2xpc3QKICNlbmRpZiAvKiBfTk9fUFJPVE8gKi8KIAorCiAjZW5kaWYgLyogT0YgKi8KIAogI2VuZGlmIC8qIFBOR0FSRyAqLwpAQCAtNTg4LDE2ICs1ODksMTYgQEAKICNlbmRpZiAvKiBQTkdfUkVBRF9UUkFOU0ZPUk1TX1NVUFBPUlRFRCAqLwogCiAjaWYgIWRlZmluZWQoUE5HX05PX1BST0dSRVNTSVZFX1JFQUQpICYmIFwKLSAhZGVmaW5lZChQTkdfUFJPR1JFU1NJVkVfUkVBRF9OT1RfU1VQUE9SVEVEKSAgLyogaWYgeW91IGRvbid0IGRvIHByb2dyZXNzaXZlICovCi0jICBkZWZpbmUgUE5HX1BST0dSRVNTSVZFX1JFQURfU1VQUE9SVEVEICAgICAvKiByZWFkaW5nLiAgVGhpcyBpcyBub3QgdGFsa2luZyAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFib3V0IGludGVybGFjaW5nIGNhcGFiaWxpdHkhICBZb3UnbGwgKi8KLSAgICAgICAgICAgICAgLyogc3RpbGwgaGF2ZSBpbnRlcmxhY2luZyB1bmxlc3MgeW91IGNoYW5nZSB0aGUgZm9sbG93aW5nIGxpbmU6ICovCisgIWRlZmluZWQoUE5HX1BST0dSRVNTSVZFX1JFQURfTk9UX1NVUFBPUlRFRCkgLyogaWYgeW91IGRvbid0IGRvIHByb2dyZXNzaXZlICovCisjICBkZWZpbmUgUE5HX1BST0dSRVNTSVZFX1JFQURfU1VQUE9SVEVEICAgIC8qIHJlYWRpbmcuICBUaGlzIGlzIG5vdCB0YWxraW5nICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhYm91dCBpbnRlcmxhY2luZyBjYXBhYmlsaXR5ISAgWW91J2xsICovCisgICAgICAgICAgICAgLyogc3RpbGwgaGF2ZSBpbnRlcmxhY2luZyB1bmxlc3MgeW91IGNoYW5nZSB0aGUgZm9sbG93aW5nIGxpbmU6ICovCiAKLSNkZWZpbmUgUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVEIC8qIHJlcXVpcmVkIGZvciBQTkctY29tcGxpYW50IGRlY29kZXJzICovCisjZGVmaW5lIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCAvKiByZXF1aXJlZCBpbiBQTkctY29tcGxpYW50IGRlY29kZXJzICovCiAKICNpZm5kZWYgUE5HX05PX1JFQURfQ09NUE9TSVRFX05PRElWCiAjICBpZm5kZWYgUE5HX05PX1JFQURfQ09NUE9TSVRFRF9OT0RJViAgLyogbGlicG5nLTEuMC54IG1pc3NwZWxsaW5nICovCi0jICAgIGRlZmluZSBQTkdfUkVBRF9DT01QT1NJVEVfTk9ESVZfU1VQUE9SVEVEICAgLyogd2VsbCB0ZXN0ZWQgb24gSW50ZWwsIFNHSSAqLworIyAgICBkZWZpbmUgUE5HX1JFQURfQ09NUE9TSVRFX05PRElWX1NVUFBPUlRFRCAgLyogd2VsbCB0ZXN0ZWQgb24gSW50ZWwsIFNHSSAqLwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC03MTcsMzUgKzcxOCw0NiBAQAogLyogUE5HX0FTU0VNQkxFUl9DT0RFIHdhcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdmVyc2lvbiAxLjIuMCAKICAqIGV2ZW4gd2hlbiBQTkdfVVNFX1BOR1ZDUkQgb3IgUE5HX1VTRV9QTkdHQ0NSRCBpcyBub3QgZGVmaW5lZC4KICAqCi0gKiBQTkdfTk9fQVNTRU1CTEVSX0NPREUgZGlzYWJsZXMgdXNlIG9mIGFsbCBhc3NlbWJsZXIgY29kZSBhbmQgb3B0aW1pemVkIEMsCi0gKiBhbmQgcmVtb3ZlcyBvciBpbmNsdWRlcyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiB0aGUgQVBJLgorICogUE5HX05PX0FTU0VNQkxFUl9DT0RFIGRpc2FibGVzIHVzZSBvZiBhbGwgYXNzZW1ibGVyIGNvZGUsCisgKiBhbmQgcmVtb3ZlcyBzZXZlcmFsIGZ1bmN0aW9ucyBmcm9tIHRoZSBBUEkuCiAgKgogICogUE5HX05PX01NWF9DT0RFIGRpc2FibGVzIHRoZSB1c2Ugb2YgTU1YIGNvZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgQVBJLgotICogV2hlbiBNTVggY29kZSBpcyBvZmYsIHRoZW4gb3B0aW1pemVkIEMgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGFyZSB1c2VkLgorICogV2hlbiBNTVggY29kZSBpcyBvZmYsIHRoZW4gb3B0aW1pemVkIEMgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGFyZSB1c2VkLAorICogaWYgUE5HX05PX09QVElNSVpFRF9DT0RFIGlzIG5vdCBlbmFibGVkLiAgVGhpcyB3YXMgYWRkZWQgaW4gdmVyc2lvbgorICogMS4yLjE5LgogKi8KKworI2lmIGRlZmluZWQoUE5HX1JFQURfU1VQUE9SVEVEKSAmJiAhZGVmaW5lZChQTkdfTk9fT1BUSU1JWkVEX0NPREUpCisjICBpZm5kZWYgUE5HX09QVElNSVpFRF9DT0RFX1NVUFBPUlRFRAorIyAgICBkZWZpbmUgUE5HX09QVElNSVpFRF9DT0RFX1NVUFBPUlRFRAorIyAgZW5kaWYKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9TVVBQT1JURUQpICYmICFkZWZpbmVkKFBOR19OT19BU1NFTUJMRVJfQ09ERSkKICMgIGlmbmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECiAjICAgIGRlZmluZSBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECiAjICBlbmRpZgotIyAgaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmICFkZWZpbmVkKFBOR19OT19NTVhfQ09ERSkKLSAgICAgLyogd29yayBhcm91bmQgSW50ZWwtTWFjIGNvbXBpbGVyIGJ1ZyAqLwotIyAgICBkZWZpbmUgUE5HX05PX01NWF9DT0RFCi0jICBlbmRpZgotIyAgaWYgIWRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgIWRlZmluZWQoUE5HX05PX01NWF9DT0RFKSAmJiBcCi0gICAgIGRlZmluZWQoX19NTVhfXykKKworIyAgaWYgIWRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgIWRlZmluZWQoUE5HX05PX01NWF9DT0RFKQogIyAgICBkZWZpbmUgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAogIyAgZW5kaWYKLSMgIGlmICFkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpICYmICFkZWZpbmVkKFBOR19OT19NTVhfQ09ERSkgJiYgXAotICAgICAhZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpICYmIGRlZmluZWQoX19NTVhfXykKLSMgICAgZGVmaW5lIFBOR19VU0VfUE5HR0NDUkQKLSMgIGVuZGlmCi0jZW5kaWYKIAotLyogSWYgeW91IGFyZSBzdXJlIHRoYXQgeW91IGRvbid0IG5lZWQgdGhyZWFkIHNhZmV0eSBhbmQgeW91IGFyZSBjb21waWxpbmcKLSAgIHdpdGggUE5HX1VTRV9QTkdDQ1JEIGZvciBhbiBNTVggYXBwbGljYXRpb24sIHlvdSBjYW4gZGVmaW5lIHRoaXMgZm9yCi0gICBmYXN0ZXIgZXhlY3V0aW9uLiAgU2VlIHBuZ2djY3JkLmMuCi0jZGVmaW5lIFBOR19USFJFQURfVU5TQUZFX09LCi0qLworIyAgaWYgIWRlZmluZWQoUE5HX1VTRV9QTkdWQ1JEKSAmJiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIFwKKyAgICAgZGVmaW5lZChfTVNDX1ZFUikKKyMgICAgZGVmaW5lIFBOR19VU0VfUE5HVkNSRAorIyAgZW5kaWYKKworIyAgaWYgIWRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiBcCisgICAgICFkZWZpbmVkKFBOR19VU0VfUE5HVkNSRCkKKyMgICAgZGVmaW5lIFBOR19VU0VfUE5HR0NDUkQKKyAgICAgLyogSWYgeW91IGFyZSBzdXJlIHRoYXQgeW91IGRvbid0IG5lZWQgdGhyZWFkIHNhZmV0eSBhbmQgeW91IGFyZSBjb21waWxpbmcKKyAgICAgICAgd2l0aCBQTkdfVVNFX1BOR0NDUkQgZm9yIGFuIE1NWCBhcHBsaWNhdGlvbiwgeW91IGNhbiBkZWZpbmUgdGhpcyBmb3IKKyAgICAgICAgZmFzdGVyIGV4ZWN1dGlvbi4gIFNlZSBwbmdnY2NyZC5jLgorIyAgICBkZWZpbmUgUE5HX1RIUkVBRF9VTlNBRkVfT0sKKyAgICAgKi8KKyMgIGVuZGlmCisKKyNlbmRpZgogCiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogI2lmICFkZWZpbmVkKFBOR19OT19VU0VSX01FTSkgJiYgIWRlZmluZWQoUE5HX1VTRVJfTUVNX1NVUFBPUlRFRCkKQEAgLTE0MDQsNiArMTQxNiw3IEBACiAjICBkZWZpbmUgTk9DSEVDSyAwCiAjICBkZWZpbmUgQ1ZUX1BUUihwdHIpIChwbmdfZmFyX3RvX25lYXIocG5nX3B0cixwdHIsQ0hFQ0spKQogIyAgZGVmaW5lIENWVF9QVFJfTk9DSEVDSyhwdHIpIChwbmdfZmFyX3RvX25lYXIocG5nX3B0cixwdHIsTk9DSEVDSykpCisjICBkZWZpbmUgcG5nX3NucHJpbnRmIF9mc25wcmludGYgICAvKiBBZGRlZCB0byB2IDEuMi4xOSAqLwogIyAgZGVmaW5lIHBuZ19zdHJjcHkgIF9mc3RyY3B5CiAjICBkZWZpbmUgcG5nX3N0cm5jcHkgX2ZzdHJuY3B5ICAgLyogQWRkZWQgdG8gdiAxLjIuNiAqLwogIyAgZGVmaW5lIHBuZ19zdHJsZW4gIF9mc3RybGVuCkBAIC0xNDEzLDYgKzE0MjYsMjcgQEAKICNlbHNlIC8qIHVzZSB0aGUgdXN1YWwgZnVuY3Rpb25zICovCiAjICBkZWZpbmUgQ1ZUX1BUUihwdHIpICAgICAgICAgKHB0cikKICMgIGRlZmluZSBDVlRfUFRSX05PQ0hFQ0socHRyKSAocHRyKQorIyAgaWZuZGVmIFBOR19OT19TTlBSSU5URgorIyAgICBpZmRlZiBfTVNDX1ZFUgorIyAgICAgIGRlZmluZSBwbmdfc25wcmludGYgX3NucHJpbnRmICAgLyogQWRkZWQgdG8gdiAxLjIuMTkgKi8KKyMgICAgICBkZWZpbmUgcG5nX3NucHJpbnRmMiBfc25wcmludGYKKyMgICAgICBkZWZpbmUgcG5nX3NucHJpbnRmNiBfc25wcmludGYKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBwbmdfc25wcmludGYgc25wcmludGYgICAvKiBBZGRlZCB0byB2IDEuMi4xOSAqLworIyAgICAgIGRlZmluZSBwbmdfc25wcmludGYyIHNucHJpbnRmCisjICAgICAgZGVmaW5lIHBuZ19zbnByaW50ZjYgc25wcmludGYKKyMgICAgZW5kaWYKKyMgIGVsc2UKKyAgICAgLyogWW91IGRvbid0IGhhdmUgb3IgZG9uJ3Qgd2FudCB0byB1c2Ugc25wcmludGYoKS4gIENhdXRpb246IFVzaW5nCisgICAgICAqIHNwcmludGYgaW5zdGVhZCBvZiBzbnByaW50ZiBleHBvc2VzIHlvdXIgYXBwbGljYXRpb24gdG8gYWNjaWRlbnRhbAorICAgICAgKiBvciBtYWxldm9sZW50IGJ1ZmZlciBvdmVyZmxvd3MuICBJZiB5b3UgZG9uJ3QgaGF2ZSBzbnByaW50ZigpCisgICAgICAqIGFzIGEgZ2VuZXJhbCBydWxlIHlvdSBzaG91bGQgcHJvdmlkZSBvbmUgKHlvdSBjYW4gZ2V0IG9uZSBmcm9tCisgICAgICAqIFBvcnRhYmxlIE9wZW5TU0gpLiAqLworIyAgICBkZWZpbmUgcG5nX3NucHJpbnRmKHMxLG4sZm10LHgxKSBzcHJpbnRmKHMxLGZtdCx4MSkKKyMgICAgZGVmaW5lIHBuZ19zbnByaW50ZjIoczEsbixmbXQseDEseDIpIHNwcmludGYoczEsZm10LHgxLHgyKQorIyAgICBkZWZpbmUgcG5nX3NucHJpbnRmNihzMSxuLGZtdCx4MSx4Mix4Myx4NCx4NSx4NikgXAorICAgICAgICBzcHJpbnRmKHMxLGZtdCx4MSx4Mix4Myx4NCx4NSx4NikKKyMgIGVuZGlmCiAjICBkZWZpbmUgcG5nX3N0cmNweSAgc3RyY3B5CiAjICBkZWZpbmUgcG5nX3N0cm5jcHkgc3RybmNweSAgICAgLyogQWRkZWQgdG8gdiAxLjIuNiAqLwogIyAgZGVmaW5lIHBuZ19zdHJsZW4gIHN0cmxlbgpAQCAtMTQzNCwzOSArMTQ2OCw0OCBAQAogLyogUHJpb3IgdG8gbGlicG5nLTEuMC45LCB0aGlzIGJsb2NrIHdhcyBpbiBwbmdhc21yZC5oICovCiAjaWYgZGVmaW5lZChQTkdfSU5URVJOQUwpCiAKLS8qIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCB0aHJlc2hvbGRzIGJlZm9yZSB0aGUgTU1YIGNvZGUga2lja3MgaW47IGlmIGVpdGhlcgotICogcm93Ynl0ZXMgb3IgYml0ZGVwdGggaXMgYmVsb3cgdGhlIHRocmVzaG9sZCwgcGxhaW4gQyBjb2RlIGlzIHVzZWQuICBUaGVzZQotICogY2FuIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB2aWEgdGhlIHBuZ19zZXRfbW14X3RocmVzaG9sZHMoKSBjYWxsIGluCi0gKiBsaWJwbmcgMS4yLjAgYW5kIGxhdGVyLiAgVGhlIHZhbHVlcyBiZWxvdyB3ZXJlIGNob3NlbiBieSBJbnRlbC4KLSAqLwotCi0jaWZuZGVmIFBOR19NTVhfUk9XQllURVNfVEhSRVNIT0xEX0RFRkFVTFQKLSMgIGRlZmluZSBQTkdfTU1YX1JPV0JZVEVTX1RIUkVTSE9MRF9ERUZBVUxUICAxMjggIC8qICA+PSAgKi8KLSNlbmRpZgotI2lmbmRlZiBQTkdfTU1YX0JJVERFUFRIX1RIUkVTSE9MRF9ERUZBVUxUCi0jICBkZWZpbmUgUE5HX01NWF9CSVRERVBUSF9USFJFU0hPTERfREVGQVVMVCAgOSAgICAvKiAgPj0gICovICAgCi0jZW5kaWYKLQotLyogU2V0IHRoaXMgaW4gdGhlIG1ha2VmaWxlIGZvciBWQysrIG9uIFBlbnRpdW0sIG5vdCBoZXJlLiAqLwotLyogUGxhdGZvcm0gbXVzdCBiZSBQZW50aXVtLiAgTWFrZWZpbGUgbXVzdCBhc3NlbWJsZSBhbmQgbG9hZCBwbmd2Y3JkLmMgLgotICogTU1YIHdpbGwgYmUgZGV0ZWN0ZWQgYXQgcnVuIHRpbWUgYW5kIHVzZWQgaWYgcHJlc2VudC4KLSAqLwotI2lmZGVmIFBOR19VU0VfUE5HVkNSRAotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9DT01CSU5FX1JPVwotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRQotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cKLSNlbmRpZgotCi0vKiBTZXQgdGhpcyBpbiB0aGUgbWFrZWZpbGUgZm9yIGdjYy9hcyBvbiBQZW50aXVtLCBub3QgaGVyZS4gKi8KLS8qIFBsYXRmb3JtIG11c3QgYmUgUGVudGl1bS4gIE1ha2VmaWxlIG11c3QgYXNzZW1ibGUgYW5kIGxvYWQgcG5nZ2NjcmQuYyAuCi0gKiBNTVggd2lsbCBiZSBkZXRlY3RlZCBhdCBydW4gdGltZSBhbmQgdXNlZCBpZiBwcmVzZW50LgotICovCi0jaWZkZWYgUE5HX1VTRV9QTkdHQ0NSRAotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9DT01CSU5FX1JPVwotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRQotIyAgZGVmaW5lIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cKLSNlbmRpZgotLyogLSBzZWUgcG5nZ2NjcmQuYyBmb3IgaW5mbyBhYm91dCB3aGF0IGlzIGN1cnJlbnRseSBlbmFibGVkICovCisjaWYgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKSB8fCBkZWZpbmVkKFBOR19VU0VfUE5HVkNSRCkKKyAgLyogUGxhdGZvcm0gbXVzdCBiZSBQZW50aXVtLiAgTWFrZWZpbGUgbXVzdCBhc3NlbWJsZSBhbmQgbG9hZAorICAgKiBwbmdnY2NyZC5jIG9yICBwbmd2Y3JkLmMuIE1NWCB3aWxsIGJlIGRldGVjdGVkIGF0IHJ1biB0aW1lIGFuZAorICAgKiB1c2VkIGlmIHByZXNlbnQuCisgICAqLworIyAgaWZuZGVmIFBOR19OT19NTVhfQ09NQklORV9ST1cKKyMgICAgZGVmaW5lIFBOR19IQVZFX01NWF9DT01CSU5FX1JPVworIyAgZW5kaWYKKyMgIGlmbmRlZiBQTkdfTk9fTU1YX1JFQURfSU5URVJMQUNFCisjICAgIGRlZmluZSBQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UKKyMgIGVuZGlmCisjICBpZm5kZWYgUE5HX05PX01NWF9SRUFEX0ZJTFRFUl9ST1cKKyMgICAgZGVmaW5lIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cKKyMgICAgaWZuZGVmIFBOR19OT19NTVhfRklMVEVSX1NVQgorIyAgICAgIGRlZmluZSBQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQKKyMgICAgZW5kaWYKKyMgICAgaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pICYmIChfX0dOVUNfXyA8IDQpKQorICAgICAgIC8qIHdvcmsgYXJvdW5kIDY0LWJpdCBnY2MgY29tcGlsZXIgYnVncyBpbiBnY2MtMy54ICovCisjICAgICAgaWZuZGVmIFBOR19OT19NTVhfRklMVEVSX1VQCisjICAgICAgICBkZWZpbmUgUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQKKyMgICAgICBlbmRpZgorIyAgICAgIGlmbmRlZiBQTkdfTk9fTU1YX0ZJTFRFUl9BVkcKKyMgICAgICAgIGRlZmluZSBQTkdfTU1YX1JFQURfRklMVEVSX0FWR19TVVBQT1JURUQKKyMgICAgICBlbmRpZgorIyAgICAgIGlmbmRlZiBQTkdfTk9fTU1YX0ZJTFRFUl9QQUVUSAorIyAgICAgICAgZGVmaW5lIFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVECisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYgLyogISgoX194ODZfNjRfXykgJiYgKEdOVUMgPCA0KSkgKi8KKyMgIGVuZGlmCisgIC8qIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCB0aHJlc2hvbGRzIGJlZm9yZSB0aGUgTU1YIGNvZGUga2lja3MgaW47IGlmIGVpdGhlcgorICAgKiByb3dieXRlcyBvciBiaXRkZXB0aCBpcyBiZWxvdyB0aGUgdGhyZXNob2xkLCBwbGFpbiBDIGNvZGUgaXMgdXNlZC4gIFRoZXNlCisgICAqIGNhbiBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdmlhIHRoZSBwbmdfc2V0X21teF90aHJlc2hvbGRzKCkgY2FsbCBpbgorICAgKiBsaWJwbmcgMS4yLjAgYW5kIGxhdGVyLiAgVGhlIHZhbHVlcyBiZWxvdyB3ZXJlIGNob3NlbiBieSBJbnRlbC4KKyAgICovCisjICBpZm5kZWYgUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVAorIyAgICBkZWZpbmUgUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVCAgMTI4ICAvKiAgPj0gICovCisjICBlbmRpZgorIyAgaWZuZGVmIFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQKKyMgICAgZGVmaW5lIFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQgIDkgICAgLyogID49ICAqLyAgIAorIyAgZW5kaWYKKyNlbmRpZiAvKiBQTkdfVVNFX1BOR0dDQ1JEIHx8IFBOR19VU0VfUE5HVkNSRCAqLworLyogLSBzZWUgcG5ndmNyZC5jIG9yIHBuZ2djY3JkLmMgZm9yIGluZm8gYWJvdXQgd2hhdCBpcyBjdXJyZW50bHkgZW5hYmxlZCAqLwogCiAjZW5kaWYgLyogUE5HX0lOVEVSTkFMICovCiAjZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9wbmdlcnJvci5jIGIvcG5nZXJyb3IuYwppbmRleCBmNTBmNjUzLi5iMGIzNjZiIDEwMDY0NAotLS0gYS9wbmdlcnJvci5jCisrKyBiL3BuZ2Vycm9yLmMKQEAgLTEsOSArMSw5IEBACiAKIC8qIHBuZ2Vycm9yLmMgLSBzdHViIGZ1bmN0aW9ucyBmb3IgaS9vIGFuZCBtZW1vcnkgYWxsb2NhdGlvbgogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjEzIE5vdmVtYmVyIDEzLCAyMDA2CisgKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xOSBKdWx5IDMxLCAyMDA3CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IEdsZW5uIFJhbmRlcnMtUGVocnNvbgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKICAqIChWZXJzaW9uIDAuODggQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLikKICAqCkBAIC0yMCw5ICsyMCwxMSBAQAogc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwogcG5nX2RlZmF1bHRfZXJyb3IgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLAogICBwbmdfY29uc3RfY2hhcnAgZXJyb3JfbWVzc2FnZSkpOworI2lmbmRlZiBQTkdfTk9fV0FSTklOR1MKIHN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19kZWZhdWx0X3dhcm5pbmcgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLAogICBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tZXNzYWdlKSk7CisjZW5kaWYgLyogUE5HX05PX1dBUk5JTkdTICovCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGEgZmF0YWwgZXJyb3IuICBUaGlzIGZ1bmN0aW9uCiAgKiBzaG91bGQgbm90IGJlIGNoYW5nZWQuICBJZiB0aGVyZSBpcyBhIG5lZWQgdG8gaGFuZGxlIGVycm9ycyBkaWZmZXJlbnRseSwKQEAgLTc2LDYgKzc4LDcgQEAKICAgIHBuZ19kZWZhdWx0X2Vycm9yKHBuZ19wdHIsIGVycm9yX21lc3NhZ2UpOwogfQogCisjaWZuZGVmIFBOR19OT19XQVJOSU5HUwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSBub24tZmF0YWwgZXJyb3IuICBUaGlzIGZ1bmN0aW9uCiAgKiBzaG91bGQgbm90IGJlIGNoYW5nZWQuICBJZiB0aGVyZSBpcyBhIG5lZWQgdG8gaGFuZGxlIHdhcm5pbmdzIGRpZmZlcmVudGx5LAogICogeW91IHNob3VsZCBzdXBwbHkgYSByZXBsYWNlbWVudCB3YXJuaW5nIGZ1bmN0aW9uIGFuZCB1c2UKQEAgLTEwNSw2ICsxMDgsOCBAQAogICAgZWxzZQogICAgICAgcG5nX2RlZmF1bHRfd2FybmluZyhwbmdfcHRyLCB3YXJuaW5nX21lc3NhZ2Urb2Zmc2V0KTsKIH0KKyNlbmRpZiAvKiBQTkdfTk9fV0FSTklOR1MgKi8KKwogCiAvKiBUaGVzZSB1dGlsaXRpZXMgYXJlIHVzZWQgaW50ZXJuYWxseSB0byBidWlsZCBhbiBlcnJvciBtZXNzYWdlIHRoYXQgcmVsYXRlcwogICogdG8gdGhlIGN1cnJlbnQgY2h1bmsuICBUaGUgY2h1bmsgbmFtZSBjb21lcyBmcm9tIHBuZ19wdHItPmNodW5rX25hbWUsCkBAIC0xMTMsNyArMTE4LDcgQEAKICAqIGlmIHRoZSBjaGFyYWN0ZXIgaXMgaW52YWxpZC4KICAqLwogI2RlZmluZSBpc25vbmFscGhhKGMpICgoYykgPCA2NSB8fCAoYykgPiAxMjIgfHwgKChjKSA+IDkwICYmIChjKSA8IDk3KSkKLWNvbnN0IHN0YXRpYyBQTkdfQ09OU1QgY2hhciBwbmdfZGlnaXRbMTZdID0geworc3RhdGljIFBOR19DT05TVCBjaGFyIHBuZ19kaWdpdFsxNl0gPSB7CiAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCiAgICAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnCiB9OwpAQCAtMTUxLDYgKzE1Niw3IEBACiAgICB9CiB9CiAKKyNpZmRlZiBQTkdfUkVBRF9TVVBQT1JURUQKIHZvaWQgUE5HQVBJCiBwbmdfY2h1bmtfZXJyb3IocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIGVycm9yX21lc3NhZ2UpCiB7CkBAIC0xNjQsNiArMTcwLDcgQEAKICAgIH0KIH0KIAorI2lmbmRlZiBQTkdfTk9fV0FSTklOR1MKIHZvaWQgUE5HQVBJCiBwbmdfY2h1bmtfd2FybmluZyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tZXNzYWdlKQogewpAQCAtMTc2LDYgKzE4Myw5IEBACiAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsIG1zZyk7CiAgICB9CiB9CisjZW5kaWYgLyogUE5HX05PX1dBUk5JTkdTICovCisKKyNlbmRpZiAvKiBQTkdfUkVBRF9TVVBQT1JURUQgKi8KIAogLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBlcnJvciBoYW5kbGluZyBmdW5jdGlvbi4gIE5vdGUgdGhhdCByZXBsYWNlbWVudHMgZm9yCiAgKiB0aGlzIGZ1bmN0aW9uIE1VU1QgTk9UIFJFVFVSTiwgb3IgdGhlIHByb2dyYW0gd2lsbCBsaWtlbHkgY3Jhc2guICBUaGlzCkBAIC0yMTcsNyArMjI3LDcgQEAKICMgIGlmZGVmIFVTRV9GQVJfS0VZV09SRAogICAgewogICAgICAgam1wX2J1ZiBqbXBidWY7Ci0gICAgICBwbmdfbWVtY3B5KGptcGJ1ZixwbmdfcHRyLT5qbXBidWYscG5nX3NpemVvZihqbXBfYnVmKSk7CisgICAgICBwbmdfbWVtY3B5KGptcGJ1ZiwgcG5nX3B0ci0+am1wYnVmLCBwbmdfc2l6ZW9mKGptcF9idWYpKTsKICAgICAgIGxvbmdqbXAoam1wYnVmLCAxKTsKICAgIH0KICMgIGVsc2UKQEAgLTIyOCwxMiArMjM4LDExIEBACiAgICBQTkdfQUJPUlQoKTsKICNlbmRpZgogI2lmZGVmIFBOR19OT19DT05TT0xFX0lPCi0gICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovIDsKLSAgIGlmICgmZXJyb3JfbWVzc2FnZSAhPSBOVUxMKQotICAgICAgcmV0dXJuOworICAgZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2U7IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KICNlbmRpZgogfQogCisjaWZuZGVmIFBOR19OT19XQVJOSU5HUwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIHdhcm5pbmcsIGJ1dCB0aGUgbGlicmFyeSB0aGlua3MKICAqIGl0IGNhbiBjb250aW51ZSBhbnl3YXkuICBSZXBsYWNlbWVudCBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZwogICogaGVyZSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGVtIHRvLiAgSW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgcG5nX3B0ciBpcwpAQCAtMjY3LDE0ICsyNzYsMTEgQEAKICMgIGVuZGlmCiAgICAgIGZwcmludGYoc3RkZXJyLCAibGlicG5nIHdhcm5pbmc6ICVzXG4iLCB3YXJuaW5nX21lc3NhZ2UpOwogI2Vsc2UKLSAgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8gOwotICAgaWYgKHdhcm5pbmdfbWVzc2FnZSkKLSAgICAgcmV0dXJuOworICAgd2FybmluZ19tZXNzYWdlID0gd2FybmluZ19tZXNzYWdlOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCiAjZW5kaWYKLSAgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8gOwotICAgaWYgKHBuZ19wdHIpCi0gICAgICByZXR1cm47CisgICBwbmdfcHRyID0gcG5nX3B0cjsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLwogfQorI2VuZGlmIC8qIFBOR19OT19XQVJOSU5HUyAqLwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byB1c2UgYW5vdGhlciBtZXRob2QKICAqIG9mIGhhbmRsaW5nIGVycm9ycyBhbmQgd2FybmluZ3MuICBOb3RlIHRoYXQgdGhlIGVycm9yIGZ1bmN0aW9uIE1VU1QgTk9UCmRpZmYgLS1naXQgYS9wbmdnY2NyZC5jIGIvcG5nZ2NjcmQuYwppbmRleCBmYWI1MjNjLi5hMTNlMGE1IDEwMDY0NAotLS0gYS9wbmdnY2NyZC5jCisrKyBiL3BuZ2djY3JkLmMKQEAgLTEsNTEgKzEsNTAgQEAKIAogLyogcG5nZ2NjcmQuYyAtIG1peGVkIEMvYXNzZW1ibGVyIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIEZvciBJbnRlbCB4ODYgQ1BVIChQZW50aXVtLU1NWCBvciBsYXRlcikgYW5kIEdOVSBDIGNvbXBpbGVyLgorICogRm9yIEludGVsL0FNRCB4ODYgb3IgeDg2LTY0IENQVSAoUGVudGl1bS1NTVggb3IgbGF0ZXIpIGFuZCBHTlUgQyBjb21waWxlci4KICAqCi0gKiAgICAgU2VlIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTE2LzkxNi5odG0KLSAqICAgICBhbmQgaHR0cDovL3d3dy5pbnRlbC5jb20vZHJnL3BlbnRpdW1JSS9hcHBub3Rlcy85MjMvOTIzLmh0bQotICogICAgIGZvciBJbnRlbCdzIHBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIHRoZSBNTVggdnMuIG5vbi1NTVggY29kZS4KLSAqCi0gKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xNSBKYW51YXJ5IDUsIDIwMDcKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bHkgMzEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAorICogQ29weXJpZ2h0IChjKSAxOTk4IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiwyMDA3IEdyZWcgUm9lbG9mcwogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgsIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogQmFzZWQgb24gTVNWQyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE5pcmF2IENoaGF0cmFwYXRpLCBJbnRlbCBDb3JwLiwgMTk5OC4KICAqIEludGVyZmFjZSB0byBsaWJwbmcgY29udHJpYnV0ZWQgYnkgR2lsbGVzIFZvbGxhbnQsIDE5OTkuCiAgKiBHTlUgQyBwb3J0IGJ5IEdyZWcgUm9lbG9mcywgMTk5OS0yMDAxLgogICoKLSAqIExpbmVzIDIzNTAtNDMwMCBjb252ZXJ0ZWQgaW4gcGxhY2Ugd2l0aCBpbnRlbDJnYXMgMS4zLjE6CisgKiBSZWZlcmVuY2VzOgogICoKLSAqICAgaW50ZWwyZ2FzIC1tZEkgcG5nZ2NjcmQuYy5wYXJ0aWFsbHktbXN2YyAtbyBwbmdnY2NyZC5jCisgKiAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZHJnL3BlbnRpdW1JSS9hcHBub3Rlcy85MTYvOTE2Lmh0bQorICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTIzLzkyMy5odG0KKyAqICAgICAgIFtJbnRlbCdzIHBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIHRoZSBNTVggdnMuIG5vbi1NTVggY29kZTsKKyAqICAgICAgICBtb3ZlZC9kZWxldGVkIGFzIG9mIDIwMDYsIGJ1dCB0ZXh0IGFuZCBzb21lIGdyYXBocyBzdGlsbAorICogICAgICAgIGF2YWlsYWJsZSB2aWEgV2F5QmFjayBNYWNoaW5lIGF0IGFyY2hpdmUub3JnXQorICoKKyAqICAgICBodHRwOi8vd3d3LmliaWJsaW8ub3JnL2dmZXJnL2xkcC9HQ0MtSW5saW5lLUFzc2VtYmx5LUhPV1RPLmh0bWwKKyAqICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKKyAqICAgICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvRXh0ZW5kZWQtQXNtLmh0bWwKKyAqICAgICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCisgKiAgICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL0Z1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbAorICogICAgIEFNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFsLCB2b2x1bWVzIDEgYW5kIDUKKyAqICAgICAgIFtodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vUHJvY2Vzc29ycy9UZWNobmljYWxSZXNvdXJjZXMvMCwsMzBfMTgyXzczOV83MDQ0LDAwLmh0bWxdCisgKiAgICAgSW50ZWwgNjQgYW5kIElBLTMyIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbHMKKyAqICAgICAgIFtodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscy9dCisgKgorICogcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfKigpIHdlcmUgY29udmVydGVkIGluIHBsYWNlIHdpdGggaW50ZWwyZ2FzIDEuMy4xOgorICoKKyAqICAgICBpbnRlbDJnYXMgLW1kSSBwbmdnY2NyZC5jLnBhcnRpYWxseS1tc3ZjIC1vIHBuZ2djY3JkLmMKICAqCiAgKiBhbmQgdGhlbiBjbGVhbmVkIHVwIGJ5IGhhbmQuICBTZWUgaHR0cDovL2hlcm1lcy50ZXJtaW5hbC5hdC9pbnRlbDJnYXMvIC4KICAqCiAgKiBOT1RFOiAgQSBzdWZmaWNpZW50bHkgcmVjZW50IHZlcnNpb24gb2YgR05VIGFzIChvciBhcy5leGUgdW5kZXIgRE9TL1dpbmRvd3MpCi0gKiAgICAgICAgaXMgcmVxdWlyZWQgdG8gYXNzZW1ibGUgdGhlIG5ld2VyIE1NWCBpbnN0cnVjdGlvbnMgc3VjaCBhcyBtb3ZxLgotICogICAgICAgIEZvciBkamdwcCwgc2VlCi0gKgotICogICAgICAgICAgIGZ0cDovL2Z0cC5zaW10ZWwubmV0L3B1Yi9zaW10ZWxuZXQvZ251L2RqZ3BwL3YyZ251L2JudTI4MWIuemlwCi0gKgotICogICAgICAgIChvciBhIGxhdGVyIHZlcnNpb24gaW4gdGhlIHNhbWUgZGlyZWN0b3J5KS4gIEZvciBMaW51eCwgY2hlY2sgeW91cgotICogICAgICAgIGRpc3RyaWJ1dGlvbidzIHdlYiBzaXRlKHMpIG9yIHRyeSB0aGVzZSBsaW5rczoKLSAqCi0gKiAgICAgICAgICAgaHR0cDovL3J1ZnVzLnczLm9yZy9saW51eC9SUE0vYmludXRpbHMuaHRtbAotICogICAgICAgICAgIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9QYWNrYWdlcy9zdGFibGUvZGV2ZWwvYmludXRpbHMuaHRtbAotICogICAgICAgICAgIGZ0cDovL2Z0cC5zbGFja3dhcmUuY29tL3B1Yi9saW51eC9zbGFja3dhcmUvc2xhY2t3YXJlL3NsYWt3YXJlL2QxLwotICogICAgICAgICAgICAgYmludXRpbHMudGd6Ci0gKgotICogICAgICAgIEZvciBvdGhlciBwbGF0Zm9ybXMsIHNlZSB0aGUgbWFpbiBHTlUgc2l0ZToKLSAqCi0gKiAgICAgICAgICAgZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9iaW51dGlscy8KLSAqCi0gKiAgICAgICAgVmVyc2lvbiAyLjUuMmwuMTUgaXMgZGVmaW5pdGVseSB0b28gb2xkLi4uCisgKiBpcyByZXF1aXJlZCB0byBhc3NlbWJsZSB0aGUgbmV3ZXIgYXNtIGluc3RydWN0aW9ucyBzdWNoIGFzIG1vdnEuICAoVmVyc2lvbgorICogMi41LjJsLjE1IGlzIGRlZmluaXRlbHkgdG9vIG9sZC4pICBTZWUgZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9iaW51dGlscy8gLgogICovCiAKIC8qCi0gKiBURU1QT1JBUlkgUE9SVElORyBOT1RFUyBBTkQgQ0hBTkdFTE9HIChtb3N0bHkgYnkgR3JlZyBSb2Vsb2ZzKQotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogUE9SVElORyBOT1RFUyBBTkQgQ0hBTkdFTE9HIChtb3N0bHkgYnkgR3JlZyBSb2Vsb2ZzKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogMTk5OTEwMDY6CiAgKiAgLSBmaXhlZCBzaWduIGVycm9yIGluIHBvc3QtTU1YIGNsZWFudXAgY29kZSAoMTYtICYgMzItYml0IGNhc2VzKQpAQCAtNTYsNyArNTUsNyBAQAogICogICAgIC0gd3JpdGUgTU1YIGNvZGUgZm9yIDQ4LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA2KQogICogICAgIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6CiAgKiAgICAgICAgd2h5IHN1YnRyYWN0IDggZnJvbSB3aWR0aF9tbXggaW4gdGhlIHBhc3MgNC81IGNhc2U/Ci0gKiAgICAgICAgKG9ubHkgd2lkdGhfbW14IGNhc2UpIChuZWFyIGxpbmUgMTYwNikKKyAqICAgICAgICAob25seSB3aWR0aF9tbXggY2FzZSkgKG5lYXIgbGluZSAyMzM1KQogICogICAgIHggW0RPTkVdIHJlcGxhY2UgcGl4ZWxfYnl0ZXMgd2l0aGluIGVhY2ggYmxvY2sgd2l0aCB0aGUgdHJ1ZQogICogICAgICAgIGNvbnN0YW50IHZhbHVlIChvciBhcmUgY29tcGlsZXJzIHNtYXJ0IGVub3VnaCB0byBkbyB0aGF0PykKICAqICAgICAtIHJld3JpdGUgYWxsIE1NWCBpbnRlcmxhY2luZyBjb2RlIHNvIGl0J3MgYWxpZ25lZCB3aXRoCkBAIC03NSw4ICs3NCw4IEBACiAgKiAgICAgaW5jb25zaXN0ZW50LCBhbmQgZG9uJ3QgbWF0Y2ggdGhlIE1NWCBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlCiAgKiAgICAgTWFudWFsIGNvbnZlbnRpb25zIGFueXdheS4gIFRoZXkgc2hvdWxkIGJlIGNoYW5nZWQgdG8KICAqICAgICAiYjcgYjYgYjUgYjQgYjMgYjIgYjEgYjAsIiB3aGVyZSBiMCBpbmRpY2F0ZXMgdGhlIGJ5dGUgdGhhdAotICogICAgIHdhcyBsb3dlc3QgaW4gbWVtb3J5IChlLmcuLCBjb3JyZXNwb25kaW5nIHRvIGEgbGVmdCBwaXhlbCkKLSAqICAgICBhbmQgYjcgaXMgdGhlIGJ5dGUgdGhhdCB3YXMgaGlnaGVzdCAoZS5nLiwgYSByaWdodCBwaXhlbCkuCisgKiAgICAgd2FzIGxvd2VzdCBpbiBtZW1vcnkgKGkuZS4sIGNvcnJlc3BvbmRpbmcgdG8gYSBsZWZ0IHBpeGVsKQorICogICAgIGFuZCBiNyBpcyB0aGUgYnl0ZSB0aGF0IHdhcyBoaWdoZXN0IChpLmUuLCBhIHJpZ2h0IHBpeGVsKS4KICAqCiAgKiAxOTk5MTAxNjoKICAqICAtIEJyZW5uYW4ncyBHdWlkZSBub3R3aXRoc3RhbmRpbmcsIGdjYyB1bmRlciBMaW51eCBkb2VzICpub3QqCkBAIC04OCw2ICs4NywxMCBAQAogICogICAgIGRlZmluZWQgd2l0aGluIHRoZSBzY29wZSBvZiBhIHNpbmdsZSBmdW5jdGlvbiwgYnV0IGJvdGgKICAqICAgICBzdGF0aWMgYW5kIHRydWx5IGdsb2JhbCAobXVsdGktbW9kdWxlKSB2YXJpYWJsZXMgd29yayBmaW5lLgogICoKKyAqIDE5OTkxMDE3OgorICogIC0gcmVwbGFjZWQgcGl4ZWxfYnl0ZXMgaW4gZWFjaCBwbmdfbWVtY3B5KCkgY2FsbCB3aXRoIGNvbnN0YW50IHZhbHVlIGZvcgorICogICAgIGlubGluaW5nIChwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSAibm9uLU1NWC9tb2RpZmllZCBDIGNvZGUiIGJsb2NrKQorICoKICAqIDE5OTkxMDIzOgogICogIC0gZml4ZWQgcG5nX2NvbWJpbmVfcm93KCkgbm9uLU1NWCByZXBsaWNhdGlvbiBidWcgKG9kZCBwYXNzZXMgb25seT8pCiAgKiAgLSBzd2l0Y2hlZCBmcm9tIHN0cmluZy1jb25jYXRlbmF0aW9uLXdpdGgtbWFjcm9zIHRvIGNsZWFuZXIgbWV0aG9kIG9mCkBAIC0yMjEsNDggKzIyNCwyNDkgQEAKICAqIDIwMDEwMzEwOgogICogIC0gZml4ZWQgYnVmZmVyLW92ZXJydW4gYnVnIGluIHBuZ19jb21iaW5lX3JvdygpIEMgY29kZSAobm9uLU1NWCkKICAqCisgKiAyMDAxMDgwODoKKyAqICAtIGFkZGVkIFBOR19USFJFQURfVU5TQUZFX09LIGFyb3VuZCBjb2RlIHVzaW5nIGdsb2JhbCB2YXJpYWJsZXMgW0dSLVBdCisgKgorICogMjAwMTExMjQ6CisgKiAgLSBmaXhlZCBtaXNzaW5nIHNhdmUgb2YgRWZsYWcgaW4gcG5nX21teF9zdXBwb3J0KCkgW01heGltIFNvYm9sZXZdCisgKgogICogMjAwMjAzMDQ6CiAgKiAgLSBlbGltaW5hdGVkIGluY29ycmVjdCB1c2Ugb2Ygd2lkdGhfbW14IGluIHBpeGVsX2J5dGVzID09IDggY2FzZQogICoKKyAqIDIwMDIwNDA3OgorICogIC0gZml4ZWQgaW5zdWZmaWNpZW50IHByZXNlcnZhdGlvbiBvZiBlYnggcmVnaXN0ZXIgW1NhbWkgRmFyaW5dCisgKgogICogMjAwNDA3MjQ6Ci0gKiAgIC0gbW9yZSB0aW5rZXJpbmcgd2l0aCBjbG9iYmVyIGxpc3QgYXQgbGluZXMgNDUyOSBhbmQgNTAzMywgdG8gZ2V0Ci0gKiAgICAgaXQgdG8gY29tcGlsZSBvbiBnY2MtMy40LgorICogIC0gbW9yZSB0aW5rZXJpbmcgd2l0aCBjbG9iYmVyIGxpc3QgYXQgbGluZXMgNDUyOSBhbmQgNTAzMyB0byBnZXQgaXQgdG8KKyAqICAgICBjb21waWxlIHdpdGggZ2NjIDMuNCBbR1ItUF0KKyAqCisgKiAyMDA0MDgwOToKKyAqICAtIGFkZGVkICJyaW0iIGRlZmluaXRpb25zIGZvciBDT05TVDQgYW5kIENPTlNUNiBbR1ItUF0KKyAqCisgKiAyMDA2MDMwMzoKKyAqICAtIGFkZGVkICJPUzIiIHRvIGxpc3Qgb2Ygc3lzdGVtcyB0aGF0IGRvbid0IG5lZWQgbGVhZGluZyB1bmRlcnNjb3JlcyBbR1ItUF0KKyAqCisgKiAyMDA2MDMyMDoKKyAqICAtIG1hZGUgUElDLWNvbXBsaWFudCBbQ2hyaXN0aWFuIEFpY2hpbmdlcl0KKyAqCisgKiAyMDA3MDMxMzoKKyAqICAtIGZpbmFsbHkgYXBwbGllZCBHaXVzZXBwZSBHaGli8idzIDY0LWJpdCBwYXRjaCBvZiAyMDA2MDgwMyAoY29tcGxldGVseQorICogICAgIG92ZXJsb29rZWQgRHlsYW4gQWxleCBTaW1vbidzIHNpbWlsYXIgcGF0Y2ggb2YgMjAwNjA0MTQsIG9vcHMuLi4pCisgKgorICogMjAwNzA1MjQ6CisgKiAgLSBmaXhlZCBsaW5rIGZhaWx1cmUgY2F1c2VkIGJ5IGFzbS1vbmx5IHZhcmlhYmxlcyBiZWluZyBvcHRpbWl6ZWQgb3V0CisgKiAgICAgKGlkZW50aWZpZWQgYnkgRGltaXRyaSBvZiBUcm9sbHRlY2gpIHdpdGggX19hdHRyaWJ1dGVfXygodXNlZCkpLCB3aGljaAorICogICAgIGFsc28gZ2V0cyByaWQgb2Ygd2FybmluZ3MgPT4gbnVrZWQgdWdseSBwbmdfc3F1ZWxjaF93YXJuaW5ncygpIGhhY2sKKyAqICAtIGRyb3BwZWQgcmVkdW5kYW50IGlmZGVmCisgKiAgLSBtb3ZlZCBwbmdfbW14X3N1cHBvcnQoKSBiYWNrIHVwIHdoZXJlIG9yaWdpbmFsbHkgaW50ZW5kZWQgKGFzIGluCisgKiAgICAgcG5ndmNyZC5jKSwgdXNpbmcgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBpbiBleHRyYSBwcm90b3R5cGUKKyAqCisgKiAyMDA3MDUyNzoKKyAqICAtIHJldmlzZWQgcG5nX2NvbWJpbmVfcm93KCkgdG8gcmV1c2UgbWFzayBpbiBsaWV1IG9mIGV4dGVybmFsIF91bm1hc2sKKyAqICAtIG1vdmVkIDMyLWJpdCAoUkdCQSkgY2FzZSB0byB0b3Agb2YgcG5nX2NvbWJpbmVfcm93KCk6ICBtb3N0IGNvbW1vbgorICogIC0ganVzdCBhYm91dCByZWFkeSB0byBnaXZlIHVwIG9uIHg4Ni02NCAtZlBJQyBtb2RlOyBjYW4ndCBldmVuIGFjY2VzcyAxNgorICogICAgIF9tYXNrKl8qIGNvbnN0YW50cyB3aXRob3V0IHRyaWdnZXJpbmcgbGluayBlcnJvciBvbiBzaGFyZWQgbGlicmFyeToKKyAqICAgICAgIC91c3IvYmluL2xkOiBwbmdnY2NyZC5waWMubzogcmVsb2NhdGlvbiBSX1g4Nl82NF8zMlMgYWdhaW5zdCBgYSBsb2NhbAorICogICAgICAgICBzeW1ib2wnIGNhbiBub3QgYmUgdXNlZCB3aGVuIG1ha2luZyBhIHNoYXJlZCBvYmplY3Q7IHJlY29tcGlsZSB3aXRoCisgKiAgICAgICAgIC1mUElDCisgKiAgICAgICBwbmdnY2NyZC5waWMubzogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlCisgKiAgICAgICAoIm9iamR1bXAgLXggcG5nZ2NjcmQucGljLm8gfCBncmVwIHJvZGF0YSIgdG8gdmVyaWZ5KQorICogICAgIFttaWdodCBiZSBhYmxlIHRvIHdvcmsgYXJvdW5kIGJ5IGRvaW5nIHdpdGhpbiBhc3NlbWJseSBjb2RlIHdoYXRldmVyCisgKiAgICAgLWZQSUMgZG9lcywgYnV0IGdpdmVuIHByb2JsZW1zIHRvIGRhdGUsIHNlZW1zIGxpa2UgbG9uZyBzaG90Li4uXQorICogICAgIFtyZWxldmFudCBpZmRlZnM6ICBfX3g4Nl82NF9fICYmIF9fUElDX18gPT4gQyBjb2RlIG9ubHldCisgKiAgLSBjaGFuZ2VkICNpZiAwIHRvICNpZmRlZiBQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQgaW4gY2FzZSBnY2MgZXZlcgorICogICAgIHN1cHBvcnRzIE1NWCByZWdzICglbW0wLCBldGMuKSBpbiBjbG9iYmVyIGxpc3QgKG5vdCBzdXBwb3J0ZWQgYnkgZ2NjCisgKiAgICAgMi43LjIuMywgMi45MS42NiAoZWdjcyAxLjEuMiksIDMueCwgb3IgNC4xLjIpCisgKgorICogMjAwNzA2MDM6CisgKiAgLSByZXZpc2VkIHBuZ19jb21iaW5lX3JvdygpIHRvIHVzZSBAR09UUENSRUwoJSVyaXApIGFkZHJlc3Npbmcgb24gX2M2NAorICogICAgIHN0cnVjdCBvZiBfbWFzaypfKiBjb25zdGFudHMgZm9yIHg4Ni02NCAtZlBJQzsgc2VlIHNhbS56b3kub3JnIGxpbmsKKyAqICAgICBhYm92ZSBmb3IgZGV0YWlscworICogIC0gbW92ZWQgX2NvbnN0NCBhbmQgX2NvbnN0NiBpbnRvIF9jNjQgc3RydWN0LCByZW5hbWVkIHRvIF9hbWFzazVfM18wIGFuZAorICogICAgIF9hbWFzazdfMV8wLCByZXNwZWN0aXZlbHkKKyAqICAtIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHVzZSBfYzY0Ll9tYXNrKl8qIHZhcnMgd2l0aGluIGFzbSBjb2RlLCBzbyBzdGlsbAorICogICAgIG5lZWQgc2luZ2xlIHZhcmlhYmxlcyBmb3Igbm9uLXg4Ni02NC8tZlBJQyBoYWxmIDotKAorICogIC0gcmVwbGFjZWQgdmFyaW91cyBfX1BJQ19fIGlmZGVmcyB3aXRoICpfR09UX2VieCBtYWNyb3MKKyAqICAtIG1vdmVkIF9MQkNhcnJ5TWFzayBhbmQgX0hCQ2xlYXJNYXNrIGludG8gX2M2NCBzdHJ1Y3QKKyAqICAtIGNvbmRpdGlvbmFsbHkgcmVwbGFjZWQgX3AqdGVtcCB2YXJpYWJsZXMgd2l0aCAlcjExZC0lcjEzZCAodmlhIHAqX1RFTVAKKyAqICAgICBhbmQgQ0xPQkJFUl9yMSpkIG1hY3JvcykKKyAqCisgKiAyMDA3MDYwNDoKKyAqICAtIHJlcGxhY2VkIGFsbCBfQWN0aXZlTWFzayBhbmQgX0FjdGl2ZU1hc2tFbmQgd2l0aCBuZXcgX2FtYXNrKl8qXyogY29uc3RzCisgKiAgICAgKF9hbWFzayBuYW1pbmcgY29udmVudGlvbjogIG51bWJlcnMgb2YgMDAtYnl0ZXMsIGZmLWJ5dGVzLCAwMC1ieXRlcykKKyAqICAgIC0gX0FjdGl2ZU1hc2sgICAgIC8vICgxMCkgLy8gYXZnL3BhZXRoL3N1YjsgcmVhZC1vbmx5OyBjb25zdHM7IG1vdnEvcGFuZAorICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBhdmcpICAgICAgX2FtYXNrNV8zXzAKKyAqICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZkxMIChicHAgNCwgNiwgYXZnKSAgIF9hbWFzazBfOF8wCisgKiAgICAgICAweDAwMDAwMDAwMDAwMGZmZmZMTCAoYnBwIDIsIGF2ZykgICAgICBfYW1hc2s2XzJfMAorICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBwYWV0aCkgICAgX2FtYXNrNV8zXzAKKyAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgNiwgcGFldGgpICAgIF9hbWFzazRfNF8wCisgKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDQsIHBhZXRoKSAgICBfYW1hc2s0XzRfMAorICogICAgICAgMHgwMDAwMDAwMGZmZmZmZmZmTEwgKGJwcCA4LCBwYWV0aCkgICAgX2FtYXNrNF80XzAKKyAqICAgICAgIDB4MDAwMGZmZmZmZjAwMDAwMExMIChicHAgMywgc3ViKSAgICAgIF9hbWFzazJfM18zCisgKiAgICAgICAweDAwMDAwMDAwZmZmZjAwMDBMTCAoYnBwIDIsIHN1YikgICAgICBfYW1hc2s0XzJfMgorICogICAgLSBfQWN0aXZlTWFza0VuZCAgLy8gKDEpICAvLyBwYWV0aCBvbmx5OyByZWFkLW9ubHk7IGNvbnN0OyBwYW5kCisgKiAgICAgICAweGZmZmYwMDAwMDAwMDAwMDBMTCAoYnBwIDMsIHBhZXRoKSAgICBfYW1hc2swXzJfNgorICogIC0gY2hhbmdlZCBhbGwgIiNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIGxhdGVyIC8vICYmIGRlZmluZWQoX19QSUNfXykiCisgKiAgICAgbGluZXMgdG8gIiNpZmRlZiBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCIgZm9yIGVhc2llci9zYWZlciB0ZXN0aW5nCisgKgorICogMjAwNzA2MDU6CisgKiAgLSBtZXJnZWQgUE5HX3g4Nl82NF9VU0VfR09UUENSRUwsIG5vbi1QTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCBjb2RlIHZpYQorICogICAgICpNQVNLKiBhbmQgTE9BRC9SRVNUT1JFIG1hY3JvcworICoKKyAqIDIwMDcwNjA3OgorICogIC0gcmVwbGFjZWQgYWxsIGNvbnN0YW50IGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKKyAqICAgICAoc3RpbGwgaGF2ZSB0d28gc2hhcmVkIGNhc2VzIGluIGF2Zywgc3ViIHJvdXRpbmVzKQorICoKKyAqIDIwMDcwNjA5OgorICogIC0gcmVwbGFjZWQgcmVtYWluaW5nIGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKKyAqICAgICAoc3BsaXQgc3ViIGFuZCBhdmcgNC82LWJwcCBjYXNlcyBpbnRvIHNlcGFyYXRlIGJsb2NrcykKKyAqICAtIGZpeGVkIHBhZXRoIGJ1ZyBkdWUgdG8gY2xvYmJlcmVkIHIxMS9yMTIvcjEzIHJlZ3MKKyAqCisgKiAyMDA3MDYxMDoKKyAqICAtIG1hZGUgZ2xvYmFsICJfZGlmIiB2YXJpYWJsZSAoYXZnL3BhZXRoL3N1YiByb3V0aW5lcykgbG9jYWwgYWdhaW4gKG5vdworICogICAgICJkaWZmIi0tc2VlIDE5OTkxMTIwIGVudHJ5IGFib3ZlKSwgdXNpbmcgcmVnaXN0ZXIgY29uc3RyYWludHMKKyAqICAtIG5vdGUgdGhhdCAlZWJwIGluIGNsb2JiZXIgbGlzdCBkb2Vzbid0IGFjdHVhbGx5IHdvcmssIGF0IGxlYXN0IGZvciAzMi1iaXQKKyAqICAgICB2ZXJzaW9uIGFuZCBnY2MgNC4xLjI7IG11c3Qgc2F2ZSBhbmQgcmVzdG9yZSBtYW51YWxseS4gIChTZWVtcyB0byB3b3JrCisgKiAgICAgT0sgZm9yIDY0LWJpdCB2ZXJzaW9uIGFuZCBnY2MgMy40LjMsIGJ1dCBnY2MgbWF5IG5vdCBiZSB1c2luZyBlYnAvcmJwCisgKiAgICAgaW4gdGhhdCBjYXNlLikKKyAqICAtIHN0YXJ0ZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKKyAqCisgKiAyMDA3MDYxMjoKKyAqICAtIGNvbnRpbnVlZCByZXBsYWNpbmcgZGlyZWN0IF9NTVhMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cworICoKKyAqIDIwMDcwNjEzOgorICogIC0gZmluaXNoZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHM7CisgKiAgICAgc3dpdGNoZWQgdG8gbG9jYWwgdmFyaWFibGUgKGFuZCByZW5hbWVkIGJhY2sgdG8gTU1YTGVuZ3RoKQorICoKKyAqIDIwMDcwNjE0OgorICogIC0gZml4ZWQgc3ViIGJwcCA9IDEgYnVnCisgKiAgLSBzdGFydGVkIHJlcGxhY2luZyBkaXJlY3QgX0Z1bGxMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cworICoKKyAqIDIwMDcwNjE1OgorICogIC0gZml4ZWQgNjQtYml0IHBhZXRoIGJwcCAzIGNyYXNoIGJ1ZyAobWlzcGxhY2VkIExPQURfR09UX3JicCkKKyAqICAtIGZpeGVkIDY0LWJpdCBwYWV0aCBicHAgMS8yIGFuZCBjbGVhbnVwLWJsb2NrIGNyYXNoIGJ1Z3MgKG1pc3BsYWNlZAorICogICAgIFJFU1RPUkVfcjExX3IxMl9yMTMpCisgKiAgLSBzbGlnaHRseSBvcHRpbWl6ZWQgYXZnL3BhZXRoIGNsZWFudXAgYmxvY2tzIGFuZCBwYWV0aCBicHAgMS8yIGJsb2NrCisgKiAgICAgKHNhdmUvcmVzdG9yZSBlYnggb25seSBpZiBuZWVkZWQpCisgKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCisgKgorICogMjAwNzA2MTY6CisgKiAgLSBmaW5pc2hlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKKyAqICAgICAoKnVnbHkqIGNvbmRpdGlvbmFsIGNsb2JiZXItc2VwYXJhdG9yIG1hY3JvcyBmb3IgYXZnIGFuZCBwYWV0aCwgc2lnaCkKKyAqCisgKiAyMDA3MDYxODoKKyAqICAtIGZpeGVkIG1pc3BsYWNlZCBQTkdfVEhSRUFEX1VOU0FGRV9PSyBlbmRpZiAod2FzIG1pc3NpbmcgTE9BRF9HT1RfcmJwLworICogICAgIFJFU1RPUkVfcmJwIGluIDMyLWJpdCB0aHJlYWQtc2FmZSBjYXNlKQorICogIC0gY2hhbmdlZCBhbGwgImlmZGVmICoiIHRvICJpZiBkZWZpbmVkKCopIiBbR1ItUF0KKyAqCisgKiAyMDA3MDYxOToKKyAqICAtIHJlYXJyYW5nZWQgbW9zdCBiaXRkZXB0aC1yZWxhdGVkIGNhc2Ugc3RhdGVtZW50cyB0byBwdXQgbW9zdCBmcmVxdWVudAorICogICAgIGNhc2VzIGF0IHRvcCAoMjQtYml0LCAzMi1iaXQsIDgtYml0LCByZXN0KQorICoKKyAqIDIwMDcwNjIzOgorICogIC0gY2xlYW5lZCB1cCBwbmdfZGVidWcoKSB3YXJuaW5ncy9mb3JtYXR0aW5nCisgKiAgLSByZW1vdmVkIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgaWZkZWZzIGFuZCBhZGRlZCBvdXRlciBfX0dOVUNfXyBpZmRlZgorICogICAgIChtb2R1bGUgbm8gbG9uZ2VyIHVzZWQgYnkgbm9uLXg4Ni9ub24tR0NDIGJ1aWxkcyBhcyBvZiBsaWJwbmcgMS4yLjE5KQorICogIC0gcmVtb3ZlZCBzaW5nbGUgbGlicG5nLTEuMi54IFBOR19ERUJVRyBkZXBlbmRlbmN5IG9uIDEuMC54IHBuZ19zdHJ1Y3QKKyAqICAgICBtZW1iZXIgKHJvd19idWZfc2l6ZSkKKyAqICAtIHJlYXJyYW5nZWQgcGFzcy1yZWxhdGVkIGlmLWJsb2NrcyBpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSB0byBwdXQgbW9zdAorICogICAgIGZyZXF1ZW50IGNhc2VzICg0LCA1KSBhdCB0b3AgW0dSLVAgc3VnZ2VzdGlvbl0KKyAqCisgKiAyMDA3MDYyNC0yOToKKyAqICAtIGZpeGVkIDY0LWJpdCBjcmFzaCBidWc6ICBwb2ludGVycyAtPiByc2kvcmRpLCBub3QgZXNpL2VkaSAoc3dpdGNoZWQgdG8KKyAqICAgICAlMC8lMS8lMi8lMy8lNCBub3RhdGlvbjsgZWxpbWluYXRlZCBzaXplIHN1ZmZpeGVzIGZyb20gcmVsZXZhbnQgYWRkLworICogICAgIGluYy9zdWIvbW92IGluc3RydWN0aW9uczsgY2hhbmdlZCBkdW1teSB2YXJzIHRvIHBvaW50ZXJzKQorICogICAgIC0gcG5nX2NvbWJpbmVfcm93KCkKKyAqICAgICAtIHBuZ19kb19yZWFkX2ludGVybGFjZSgpCisgKiAgICAgLSBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKQorICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKQorICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKKyAqICAgICAtIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKCkKKyAqICAtIE5PVEU6ICB0aGlzIGZpeCBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBtb2RpZnlpbmcgYSAzMi1iaXQgcmVnIChlLmcuLAorICogICAgICUlZWJ4KSBjbGVhcnMgdGhlIHRvcCBoYWxmIG9mIGl0cyBjb3JyZXNwb25kaW5nIDY0LWJpdCByZWcgKCUlcmJ4KSwgc28KKyAqICAgICBpdCdzIHNhZmUgdG8gbWl4IDMyLWJpdCBvcGVyYXRpb25zIHdpdGggNjQtYml0IGJhc2UvaW5kZXggYWRkcmVzc2luZworICogICAgIChzZWUgbmV3IFBTSS9QQVgvUEJYL1BEWC9QQlAvZXRjLiAicG9pbnRlci1yZWdpc3RlciIgbWFjcm9zKTsgYXBwbGllcworICogICAgIGFsc28gdG8gY2xvYmJlciBsaXN0cworICoKKyAqIDIwMDcwNjMwOgorICogIC0gY2xlYW5lZCB1cCBmb3JtYXR0aW5nLCBtYWNyb3MsIG1pbm9yIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIDgtYnBwCisgKiAgICAgcmVnaXN0ZXItdXNhZ2UgaW5lZmZpY2llbmN5CisgKiAgLSBmaXhlZCAzMi1iaXQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgYnVnICh3YXMgdXNpbmcgcG9pbnRlciBzaXplIGZvcgorICogICAgIDY0LWJpdCBkdW1teSB2YWx1ZXMpCisgKgorICogMjAwNzA3MDM6CisgKiAgLSBhZGRlZCBjaGVjayBmb3IgKG1hbnVhbCkgUElDIG1hY3JvIHRvIGZpeCBPcGVuQlNEIGNyYXNoIGJ1ZworICoKKyAqIDIwMDcwNzE3OgorICogIC0gZml4ZWQgNDgtYml0IHBuZ19jb21iaW5lX3JvdygpIGJ1ZyAod2FzIGFjdGluZyBsaWtlIDMyLWJpdCk6ICBjb3B5IDYKKyAqICAgICBieXRlcyBwZXIgcGl4ZWwsIG5vdCA0LCBhbmQgdXNlIHN0cmlkZSBvZiA2LCBub3QgNCwgaW4gdGhlIHNlY29uZCBsb29wCisgKiAgICAgb2YgaW50ZXJsYWNlIHByb2Nlc3Npbmcgb2YgNDgtYml0IHBpeGVscyBbR1ItUF0KKyAqCisgKiAyMDA3MDcyMjoKKyAqICAtIGZpeGVkIDY0LWJpdCBwbmdfdWludF8zMiBidWcgd2l0aCBNTVhMZW5ndGgvRnVsbExlbmd0aCB0ZW1wIHZhcnMKKyAqCisgKiBbc3RpbGwgYnJva2VuOiAgdG9wcyBvZiBhbGwgcm93LWZpbHRlciBibG9ja3MgKGlucHV0L291dHB1dCBjb25zdHJhaW50cyk7CisgKiAgc2hvd3MgdXAgb24gNjQtYml0IGR5bmFtaWMgKC1mUElDKSB2ZXJzaW9uIHdpdGggLU8yLCBlc3BlY2lhbGx5IGlmIGRlYnVnLQorICogIHByaW50ZnMgZW5hYmxlZCwgYnV0IGF0IHJpZ2h0IGVkZ2Ugb2Ygb2RkLXdpZHRoIGltYWdlcyBldmVuIGlmIGRpc2FibGVkXQorICoKICAqCiAgKiBTVElMTCBUTyBETzoKLSAqICAgICAtIHRlc3QgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgNjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDgpCi0gKiAgICAgLSB3cml0ZSBNTVggY29kZSBmb3IgNDgtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDYpCi0gKiAgICAgLSBmaWd1cmUgb3V0IHdoYXQncyB1cCB3aXRoIDI0LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSAzKToKLSAqICAgICAgICB3aHkgc3VidHJhY3QgOCBmcm9tIHdpZHRoX21teCBpbiB0aGUgcGFzcyA0LzUgY2FzZT8KLSAqICAgICAgICAob25seSB3aWR0aF9tbXggY2FzZSkgKG5lYXIgbGluZSAxNjA2KQotICogICAgIC0gcmV3cml0ZSBhbGwgTU1YIGludGVybGFjaW5nIGNvZGUgc28gaXQncyBhbGlnbmVkIHdpdGggYmVnaW5uaW5nCi0gKiAgICAgICAgb2YgdGhlIHJvdyBidWZmZXIsIG5vdCB0aGUgZW5kIChzZWUgMTk5OTEwMDcgZm9yIGRldGFpbHMpCi0gKiAgICAgeCBwaWNrIG9uZSB2ZXJzaW9uIG9mIG1teHN1cHBvcnQoKSBhbmQgZ2V0IHJpZCBvZiB0aGUgb3RoZXIKLSAqICAgICAtIGFkZCBlcnJvciBtZXNzYWdlcyB0byBhbnkgcmVtYWluaW5nIGJvZ3VzIGRlZmF1bHQgY2FzZXMKLSAqICAgICAtIGVuYWJsZSBwaXhlbF9kZXB0aCA9PSA4IGNhc2VzIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3coKT8gKHRlc3Qgc3BlZWQpCi0gKiAgICAgeCBhZGQgc3VwcG9ydCBmb3IgcnVudGltZSBlbmFibGUvZGlzYWJsZS9xdWVyeSBvZiB2YXJpb3VzIE1NWCByb3V0aW5lcworICogIC0gZml4IGZpbmFsIHRocmVhZC11bnNhZmUgY29kZSB1c2luZyBzdGFjayB2YXJzIGFuZCBwb2ludGVyPyAocGFldGggdG9wLAorICogICAgIGRlZmF1bHQsIGJvdHRvbSBvbmx5OiAgZGVmYXVsdCwgYm90dG9tIGFscmVhZHkgNSByZWcgY29uc3RyYWludHM7IGNvdWxkCisgKiAgICAgcmVwbGFjZSBicHAgd2l0aCBwb2ludGVyIGFuZCBncm91cCBicHAvcGF0ZW1wL3BidGVtcC9wY3RlbXAgaW4gYXJyYXkpCisgKiAgLSBmaXggZWJwL25vLXJlZy1jb25zdHJhaW50IGluZWZmaWNpZW5jeSAoYXZnL3BhZXRoL3N1YiB0b3ApCisgKiAgLSB0ZXN0IHBuZ19kb19yZWFkX2ludGVybGFjZSgpIDY0LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA4KQorICogIC0gd3JpdGUgTU1YIGNvZGUgZm9yIDQ4LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA2KQorICogIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6CisgKiAgICAgd2h5IHN1YnRyYWN0IDggZnJvbSB3aWR0aF9tbXggaW4gdGhlIHBhc3MgNC81IGNhc2U/ICBkdWUgdG8KKyAqICAgICBvZGQgbnVtYmVyIG9mIGJ5dGVzPyAob25seSB3aWR0aF9tbXggY2FzZSkgKG5lYXIgbGluZSAyMzM1KQorICogIC0gcmV3cml0ZSBhbGwgTU1YIGludGVybGFjaW5nIGNvZGUgc28gaXQncyBhbGlnbmVkIHdpdGggYmVnaW5uaW5nCisgKiAgICAgb2YgdGhlIHJvdyBidWZmZXIsIG5vdCB0aGUgZW5kIChzZWUgMTk5OTEwMDcgZm9yIGRldGFpbHMpCisgKiAgLSBhZGQgZXJyb3IgbWVzc2FnZXMgdG8gYW55IHJlbWFpbmluZyBib2d1cyBkZWZhdWx0IGNhc2VzCisgKiAgLSBlbmFibGUgcGl4ZWxfZGVwdGggPT0gOCBjYXNlcyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93KCk/ICh0ZXN0IHNwZWVkKQorICogIC0gdHJ5ID1yLCBldGMuLCBhcyByZWcgY29uc3RyYWludHM/ICAod291bGQgZ2NjIHVzZSA2NC1iaXQgb25lcyBvbiB4ODYtNjQ/KQorICogIC0gbmVlZCBmdWxsLCBub24tZ3JhcGhpY2FsLCBDUkMtYmFzZWQgdGVzdCBzdWl0ZS4uLiAgbWF5YmUgYXV0b2dlbmVyYXRlCisgKiAgICAgcmFuZG9tIGRhdGEgb2YgdmFyaW91cyBoZWlnaHQvd2lkdGgvZGVwdGgsIGNvbXB1dGUgQ1JDcywgd3JpdGUgKEMKKyAqICAgICBmdW5jcyksIHJlYWQgKGFzbS9NTVgpLCByZWNvbXB1dGUgQ1JDcywgYW5kIGNvbXBhcmU/CisgKiAgLSB3cml0ZSB0cnVlIHg4Ni02NCB2ZXJzaW9uIHVzaW5nIDEyOC1iaXQgIm1lZGlhIGluc3RydWN0aW9ucyIsICV4bW0wLTE1LAorICogICAgIGFuZCBleHRyYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzCiAgKi8KIAorI2lmIGRlZmluZWQoX19HTlVDX18pCisKICNkZWZpbmUgUE5HX0lOVEVSTkFMCiAjaW5jbHVkZSAicG5nLmgiCiAKKworLyogZm9yIHNvbWUgaW5leHBsaWNhYmxlIHJlYXNvbiwgZ2NjIDMuMy41IG9uIE9wZW5CU0QgKGFuZCBlbHNld2hlcmU/KSBkb2VzCisgKiAqbm90KiBkZWZpbmUgX19QSUNfXyB3aGVuIHRoZSAtZlBJQyBvcHRpb24gaXMgdXNlZCwgc28gd2UgaGF2ZSB0byByZWx5IG9uCisgKiBtYWtlZmlsZXMgYW5kIHdoYXRub3QgdG8gZGVmaW5lIHRoZSBQSUMgbWFjcm8gZXhwbGljaXRseSAqLworI2lmIGRlZmluZWQoUElDKSAmJiAhZGVmaW5lZChfX1BJQ19fKSAgIC8vICh0aGlzIGNhbi9zaG91bGQgbW92ZSB0byBwbmdjb25mLmgpCisjICBkZWZpbmUgX19QSUNfXworI2VuZGlmCisKICNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkKIAorLyogaWYgeW91IHdhbnQvbmVlZCBmdWxsIHRocmVhZC1zYWZldHkgb24geDg2LTY0IGV2ZW4gd2hlbiBsaW5raW5nIHN0YXRpY2FsbHksCisgKiBjb21tZW50IG91dCB0aGUgIiYmIGRlZmluZWQoX19QSUNfXykiIHBhcnQgaGVyZTogKi8KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykKKyMgIGRlZmluZSBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCAgICAgICAgICAgIC8vIEdPVFBDUkVMID0+IGZ1bGwgdGhyZWFkLXNhZmV0eQorIyAgZGVmaW5lIFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgorI2VuZGlmCisKIGludCBQTkdBUEkgcG5nX21teF9zdXBwb3J0KHZvaWQpOwogCi0jaWZkZWYgUE5HX1VTRV9MT0NBTF9BUlJBWVMKLWNvbnN0IHN0YXRpYyBpbnQgRkFSREFUQSBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKLWNvbnN0IHN0YXRpYyBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbN10gICA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKLWNvbnN0IHN0YXRpYyBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFs3XSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsKKyNpZiBkZWZpbmVkKFBOR19VU0VfTE9DQUxfQVJSQVlTKQorc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKK3N0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaW5jWzddICAgPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CitzdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3dpZHRoWzddID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiAvKiBkamdwcCwgV2luMzIsIEN5Z3dpbiwgYW5kIE9TMiBhZGQgdGhlaXIgb3duIHVuZGVyc2NvcmVzIHRvIGdsb2JhbCB2YXJpYWJsZXMsCiAgKiBzbyBkZWZpbmUgdGhlbSB3aXRob3V0OiAqLwogI2lmIGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IFwKICAgICBkZWZpbmVkKF9fT1MyX18pCiAjICBkZWZpbmUgX21teF9zdXBwb3J0ZWQgIG1teF9zdXBwb3J0ZWQKLSMgIGRlZmluZSBfY29uc3Q0ICAgICAgICAgY29uc3Q0Ci0jICBkZWZpbmUgX2NvbnN0NiAgICAgICAgIGNvbnN0NgogIyAgZGVmaW5lIF9tYXNrOF8wICAgICAgICBtYXNrOF8wCiAjICBkZWZpbmUgX21hc2sxNl8xICAgICAgIG1hc2sxNl8xCiAjICBkZWZpbmUgX21hc2sxNl8wICAgICAgIG1hc2sxNl8wCkBAIC0yNzksMTA5ICs0ODMsNDY2IEBACiAjICBkZWZpbmUgX21hc2s0OF8yICAgICAgIG1hc2s0OF8yCiAjICBkZWZpbmUgX21hc2s0OF8xICAgICAgIG1hc2s0OF8xCiAjICBkZWZpbmUgX21hc2s0OF8wICAgICAgIG1hc2s0OF8wCisjICBkZWZpbmUgX2FtYXNrNV8zXzAgICAgIGFtYXNrNV8zXzAKKyMgIGRlZmluZSBfYW1hc2s3XzFfMCAgICAgYW1hc2s3XzFfMAogIyAgZGVmaW5lIF9MQkNhcnJ5TWFzayAgICBMQkNhcnJ5TWFzawogIyAgZGVmaW5lIF9IQkNsZWFyTWFzayAgICBIQkNsZWFyTWFzawotIyAgZGVmaW5lIF9BY3RpdmVNYXNrICAgICBBY3RpdmVNYXNrCi0jICBkZWZpbmUgX0FjdGl2ZU1hc2syICAgIEFjdGl2ZU1hc2syCi0jICBkZWZpbmUgX0FjdGl2ZU1hc2tFbmQgIEFjdGl2ZU1hc2tFbmQKLSMgIGRlZmluZSBfU2hpZnRCcHAgICAgICAgU2hpZnRCcHAKLSMgIGRlZmluZSBfU2hpZnRSZW0gICAgICAgU2hpZnRSZW0KLSNpZmRlZiBQTkdfVEhSRUFEX1VOU0FGRV9PSwotIyAgZGVmaW5lIF91bm1hc2sgICAgICAgICB1bm1hc2sKLSMgIGRlZmluZSBfRnVsbExlbmd0aCAgICAgRnVsbExlbmd0aAotIyAgZGVmaW5lIF9NTVhMZW5ndGggICAgICBNTVhMZW5ndGgKLSMgIGRlZmluZSBfZGlmICAgICAgICAgICAgZGlmCi0jICBkZWZpbmUgX3BhdGVtcCAgICAgICAgIHBhdGVtcAotIyAgZGVmaW5lIF9wYnRlbXAgICAgICAgICBwYnRlbXAKLSMgIGRlZmluZSBfcGN0ZW1wICAgICAgICAgcGN0ZW1wCisjICBkZWZpbmUgX2FtYXNrMF84XzAgICAgIGFtYXNrMF84XzAKKyMgIGRlZmluZSBfYW1hc2s2XzJfMCAgICAgYW1hc2s2XzJfMAorIyAgZGVmaW5lIF9hbWFzazRfNF8wICAgICBhbWFzazRfNF8wCisjICBkZWZpbmUgX2FtYXNrMF8yXzYgICAgIGFtYXNrMF8yXzYKKyMgIGRlZmluZSBfYW1hc2syXzNfMyAgICAgYW1hc2syXzNfMworIyAgZGVmaW5lIF9hbWFzazRfMl8yICAgICBhbWFzazRfMl8yCisjICBpZiBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQorIyAgICBkZWZpbmUgX3BhdGVtcCAgICAgICBwYXRlbXAKKyMgICAgZGVmaW5lIF9wYnRlbXAgICAgICAgcGJ0ZW1wCisjICAgIGRlZmluZSBfcGN0ZW1wICAgICAgIHBjdGVtcAorIyAgZW5kaWYKKyNlbmRpZiAvLyBkamdwcCwgV2luMzIsIEN5Z3dpbiwgT1MyCisKKworLyogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGluIHRoZSBpbmxpbmVkIE1NWCBhc3NlbWJseSBjb2RlLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgdWxsOworCisjaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkKK3N0YXRpYyBQTkdfQ09OU1Qgc3RydWN0IHsKKyAgICAvL3VsbCBfbWFza19hcnJheVsyNl07CisKKyAgICAvLyBwbmdfY29tYmluZV9yb3coKSBjb25zdGFudHM6CisgICAgdWxsIF9tYXNrOF8wOworICAgIHVsbCBfbWFzazE2XzAsIF9tYXNrMTZfMTsKKyAgICB1bGwgX21hc2syNF8wLCBfbWFzazI0XzEsIF9tYXNrMjRfMjsKKyAgICB1bGwgX21hc2szMl8wLCBfbWFzazMyXzEsIF9tYXNrMzJfMiwgX21hc2szMl8zOworICAgIHVsbCBfbWFzazQ4XzAsIF9tYXNrNDhfMSwgX21hc2s0OF8yLCBfbWFzazQ4XzMsIF9tYXNrNDhfNCwgX21hc2s0OF81OworCisgICAgLy8gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgY29uc3RhbnRzOgorICAgIHVsbCBfYW1hc2s1XzNfMCwgX2FtYXNrN18xXzA7ICAvLyB3YXMgX2NvbnN0NCBhbmQgX2NvbnN0NiwgcmVzcGVjdGl2ZWx5CisKKyAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHMgKGFsc28gdXNlcyBfYW1hc2s1XzNfMCk6CisgICAgdWxsIF9MQkNhcnJ5TWFzaywgX0hCQ2xlYXJNYXNrOworICAgIHVsbCBfYW1hc2swXzhfMCwgX2FtYXNrNl8yXzA7ICAvLyB3YXMgQWN0aXZlTWFzayBmb3IgYnBwIDQvNiBhbmQgMiBjYXNlcworCisgICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSBjb25zdGFudHMgKGFsc28gdXNlcyBfYW1hc2s1XzNfMCk6CisgICAgdWxsIF9hbWFzazRfNF8wLCBfYW1hc2swXzJfNjsgIC8vIHdhcyBBY3RpdmVNYXNreyxFbmR9IGZvciBicHAgNi80LzggYW5kIDMKKworICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIGNvbnN0YW50czoKKyAgICB1bGwgX2FtYXNrMl8zXzMsIF9hbWFzazRfMl8yOyAgLy8gd2FzIEFjdGl2ZU1hc2sgZm9yIGJwcCAzIGFuZCAyIGNhc2VzCisKK30gX2M2NCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSB7CisKKyAgICAvLyBwbmdfY29tYmluZV9yb3coKSBjb25zdGFudHM6CisgICAgMHgwMTAyMDQwODEwMjA0MDgwTEwsIC8vIF9tYXNrOF8wICAgICAgb2Zmc2V0IDAKKworICAgIDB4MTAxMDIwMjA0MDQwODA4MExMLCAvLyBfbWFzazE2XzAgICAgIG9mZnNldCA4CisgICAgMHgwMTAxMDIwMjA0MDQwODA4TEwsIC8vIF9tYXNrMTZfMSAgICAgb2Zmc2V0IDE2CisKKyAgICAweDIwMjA0MDQwNDA4MDgwODBMTCwgLy8gX21hc2syNF8wICAgICBvZmZzZXQgMjQKKyAgICAweDA0MDgwODA4MTAxMDEwMjBMTCwgLy8gX21hc2syNF8xICAgICBvZmZzZXQgMzIKKyAgICAweDAxMDEwMTAyMDIwMjA0MDRMTCwgLy8gX21hc2syNF8yICAgICBvZmZzZXQgNDAKKworICAgIDB4NDA0MDQwNDA4MDgwODA4MExMLCAvLyBfbWFzazMyXzAgICAgIG9mZnNldCA0OAorICAgIDB4MTAxMDEwMTAyMDIwMjAyMExMLCAvLyBfbWFzazMyXzEgICAgIG9mZnNldCA1NgorICAgIDB4MDQwNDA0MDQwODA4MDgwOExMLCAvLyBfbWFzazMyXzIgICAgIG9mZnNldCA2NAorICAgIDB4MDEwMTAxMDEwMjAyMDIwMkxMLCAvLyBfbWFzazMyXzMgICAgIG9mZnNldCA3MgorCisgICAgMHg0MDQwODA4MDgwODA4MDgwTEwsIC8vIF9tYXNrNDhfMCAgICAgb2Zmc2V0IDgwCisgICAgMHgyMDIwMjAyMDQwNDA0MDQwTEwsIC8vIF9tYXNrNDhfMSAgICAgb2Zmc2V0IDg4CisgICAgMHgxMDEwMTAxMDEwMTAyMDIwTEwsIC8vIF9tYXNrNDhfMiAgICAgb2Zmc2V0IDk2CisgICAgMHgwNDA0MDgwODA4MDgwODA4TEwsIC8vIF9tYXNrNDhfMyAgICAgb2Zmc2V0IDEwNAorICAgIDB4MDIwMjAyMDIwNDA0MDQwNExMLCAvLyBfbWFzazQ4XzQgICAgIG9mZnNldCAxMTIKKyAgICAweDAxMDEwMTAxMDEwMTAyMDJMTCwgLy8gX21hc2s0OF81ICAgICBvZmZzZXQgMTIwCisKKyAgICAvLyBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBjb25zdGFudHM6CisgICAgMHgwMDAwMDAwMDAwRkZGRkZGTEwsIC8vIF9hbWFzazVfM18wICAgb2Zmc2V0IDEyOCAgKGJwcCAzLCBhdmcvcGFldGgpIGNvbnN0NAorICAgIDB4MDAwMDAwMDAwMDAwMDBGRkxMLCAvLyBfYW1hc2s3XzFfMCAgIG9mZnNldCAxMzYgICAgICAgICAgICAgICAgICAgICBjb25zdDYKKworICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpIGNvbnN0YW50czoKKyAgICAweDAxMDEwMTAxMDEwMTAxMDFMTCwgLy8gX0xCQ2FycnlNYXNrICBvZmZzZXQgMTQ0CisgICAgMHg3RjdGN0Y3RjdGN0Y3RjdGTEwsIC8vIF9IQkNsZWFyTWFzayAgb2Zmc2V0IDE1MgorICAgIDB4RkZGRkZGRkZGRkZGRkZGRkxMLCAvLyBfYW1hc2swXzhfMCAgIG9mZnNldCAxNjAgIChicHAgNC82LCBhdmcpCisgICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwsIC8vIF9hbWFzazZfMl8wICAgb2Zmc2V0IDE2OCAgKGJwcCAyLCAgIGF2ZykKKworICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgorICAgIDB4MDAwMDAwMDBGRkZGRkZGRkxMLCAvLyBfYW1hc2s0XzRfMCAgIG9mZnNldCAxNzYgIChicHAgNi80LzgsIHBhZXRoKQorICAgIDB4RkZGRjAwMDAwMDAwMDAwMExMLCAvLyBfYW1hc2swXzJfNiAgIG9mZnNldCAxODQgIChicHAgMywgcGFldGgpICAgQS5NLkVuZAorCisgICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgorICAgIDB4MDAwMEZGRkZGRjAwMDAwMExMLCAvLyBfYW1hc2syXzNfMyAgIG9mZnNldCAxOTIgIChicHAgMywgc3ViKQorICAgIDB4MDAwMDAwMDBGRkZGMDAwMExMLCAvLyBfYW1hc2s0XzJfMiAgIG9mZnNldCAyMDAgIChicHAgMiwgc3ViKQorCit9OworCisjZGVmaW5lIE1BU0s4XzAgICAgICAgICIoJSVyYnApIgorI2RlZmluZSBNQVNLMTZfMCAgICAgICAiOCglJXJicCkiCisjZGVmaW5lIE1BU0sxNl8xICAgICAgICIxNiglJXJicCkiCisjZGVmaW5lIE1BU0syNF8wICAgICAgICIyNCglJXJicCkiCisjZGVmaW5lIE1BU0syNF8xICAgICAgICIzMiglJXJicCkiCisjZGVmaW5lIE1BU0syNF8yICAgICAgICI0MCglJXJicCkiCisjZGVmaW5lIE1BU0szMl8wICAgICAgICI0OCglJXJicCkiCisjZGVmaW5lIE1BU0szMl8xICAgICAgICI1NiglJXJicCkiCisjZGVmaW5lIE1BU0szMl8yICAgICAgICI2NCglJXJicCkiCisjZGVmaW5lIE1BU0szMl8zICAgICAgICI3MiglJXJicCkiCisjZGVmaW5lIE1BU0s0OF8wICAgICAgICI4MCglJXJicCkiCisjZGVmaW5lIE1BU0s0OF8xICAgICAgICI4OCglJXJicCkiCisjZGVmaW5lIE1BU0s0OF8yICAgICAgICI5NiglJXJicCkiCisjZGVmaW5lIE1BU0s0OF8zICAgICAgICIxMDQoJSVyYnApIgorI2RlZmluZSBNQVNLNDhfNCAgICAgICAiMTEyKCUlcmJwKSIKKyNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIjEyMCglJXJicCkiCisjZGVmaW5lIEFNQVNLNV8zXzAgICAgICIxMjgoJSVyYnApIgorI2RlZmluZSBBTUFTSzdfMV8wICAgICAiMTM2KCUlcmJwKSIKKyNkZWZpbmUgTEJfQ0FSUllfTUFTSyAgIjE0NCglJXJicCkiCisjZGVmaW5lIEhCX0NMRUFSX01BU0sgICIxNTIoJSVyYnApIgorI2RlZmluZSBBTUFTSzBfOF8wICAgICAiMTYwKCUlcmJwKSIKKyNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIjE2OCglJXJicCkiCisjZGVmaW5lIEFNQVNLNF80XzAgICAgICIxNzYoJSVyYnApIgorI2RlZmluZSBBTUFTSzBfMl82ICAgICAiMTg0KCUlcmJwKSIKKyNkZWZpbmUgQU1BU0syXzNfMyAgICAgIjE5MiglJXJicCkiCisjZGVmaW5lIEFNQVNLNF8yXzIgICAgICIyMDAoJSVyYnApIgorCisjZWxzZSAvLyAhUE5HX3g4Nl82NF9VU0VfR09UUENSRUwKKworc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s4XzAgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMjA0MDgxMDIwNDA4MExMOworCitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazE2XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMTAxMDIwMjA0MDQwODA4TEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazE2XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgxMDEwMjAyMDQwNDA4MDgwTEw7CisKK3N0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAyMDIwMjA0MDRMTDsKK3N0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDA0MDgwODA4MTAxMDEwMjBMTDsKK3N0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDIwMjA0MDQwNDA4MDgwODBMTDsKKworc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8zIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDEwMjAyMDIwMkxMOworc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDQwNDA0MDQwODA4MDgwOExMOworc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDEwMTAyMDIwMjAyMExMOworc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4NDA0MDQwNDA4MDgwODA4MExMOworCitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzUgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMTAxMDEwMTAxMDEwMjAyTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzQgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMjAyMDIwMjA0MDQwNDA0TEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzMgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA0MDgwODA4MDgwODA4TEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzIgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgxMDEwMTAxMDEwMTAyMDIwTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgyMDIwMjAyMDQwNDA0MDQwTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHg0MDQwODA4MDgwODA4MDgwTEw7CisKKy8vIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGNvbnN0YW50czoKK3N0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazVfM18wICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsgIC8vIHdhcyBfY29uc3Q0CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s3XzFfMCAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMDAwMDAwMEZGTEw7ICAvLyB3YXMgX2NvbnN0NgorCisvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfTEJDYXJyeU1hc2sgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMTAxMDEwMTAxMDEwMTAxTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfSEJDbGVhck1hc2sgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHg3ZjdmN2Y3ZjdmN2Y3ZjdmTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2swXzhfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHhGRkZGRkZGRkZGRkZGRkZGTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s2XzJfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMDAwMDBGRkZGTEw7CisKKy8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgorc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrNF80XzAgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMDAwMDBGRkZGRkZGRkxMOworc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMF8yXzYgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4RkZGRjAwMDAwMDAwMDAwMExMOworCisvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKSBjb25zdGFudHM6CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2syXzNfMyAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwRkZGRkZGMDAwMDAwTEw7CitzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzJfMiAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkYwMDAwTEw7CisKKyNkZWZpbmUgTUFTSzhfMCAgICAgICAgIl9tYXNrOF8wIgorI2RlZmluZSBNQVNLMTZfMCAgICAgICAiX21hc2sxNl8wIgorI2RlZmluZSBNQVNLMTZfMSAgICAgICAiX21hc2sxNl8xIgorI2RlZmluZSBNQVNLMjRfMCAgICAgICAiX21hc2syNF8wIgorI2RlZmluZSBNQVNLMjRfMSAgICAgICAiX21hc2syNF8xIgorI2RlZmluZSBNQVNLMjRfMiAgICAgICAiX21hc2syNF8yIgorI2RlZmluZSBNQVNLMzJfMCAgICAgICAiX21hc2szMl8wIgorI2RlZmluZSBNQVNLMzJfMSAgICAgICAiX21hc2szMl8xIgorI2RlZmluZSBNQVNLMzJfMiAgICAgICAiX21hc2szMl8yIgorI2RlZmluZSBNQVNLMzJfMyAgICAgICAiX21hc2szMl8zIgorI2RlZmluZSBNQVNLNDhfMCAgICAgICAiX21hc2s0OF8wIgorI2RlZmluZSBNQVNLNDhfMSAgICAgICAiX21hc2s0OF8xIgorI2RlZmluZSBNQVNLNDhfMiAgICAgICAiX21hc2s0OF8yIgorI2RlZmluZSBNQVNLNDhfMyAgICAgICAiX21hc2s0OF8zIgorI2RlZmluZSBNQVNLNDhfNCAgICAgICAiX21hc2s0OF80IgorI2RlZmluZSBNQVNLNDhfNSAgICAgICAiX21hc2s0OF81IgorI2RlZmluZSBBTUFTSzVfM18wICAgICAiX2FtYXNrNV8zXzAiCisjZGVmaW5lIEFNQVNLN18xXzAgICAgICJfYW1hc2s3XzFfMCIKKyNkZWZpbmUgTEJfQ0FSUllfTUFTSyAgIl9MQkNhcnJ5TWFzayIKKyNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIl9IQkNsZWFyTWFzayIKKyNkZWZpbmUgQU1BU0swXzhfMCAgICAgIl9hbWFzazBfOF8wIgorI2RlZmluZSBBTUFTSzZfMl8wICAgICAiX2FtYXNrNl8yXzAiCisjZGVmaW5lIEFNQVNLNF80XzAgICAgICJfYW1hc2s0XzRfMCIKKyNkZWZpbmUgQU1BU0swXzJfNiAgICAgIl9hbWFzazBfMl82IgorI2RlZmluZSBBTUFTSzJfM18zICAgICAiX2FtYXNrMl8zXzMiCisjZGVmaW5lIEFNQVNLNF8yXzIgICAgICJfYW1hc2s0XzJfMiIKKworI2VuZGlmIC8vID9QTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTAorCisKKyNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cpIHx8IGRlZmluZWQoUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XKQorCisvLyB0aGlzIGJsb2NrIGlzIHNwZWNpZmljIHRvIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgZXhjZXB0IGZvcgorLy8gTE9BRF9HT1RfcmJwIGFuZCBSRVNUT1JFX3JicCwgd2hpY2ggYXJlIGFsc28gdXNlZCBpbiBwbmdfY29tYmluZV9yb3coKQorI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpCisjICBkZWZpbmUgcGFfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTFkIgorIyAgZGVmaW5lIHBiX1RFTVAgICAgICAgICAgICAgICAgIiUlcjEyZCIKKyMgIGRlZmluZSBwY19URU1QICAgICAgICAgICAgICAgICIlJXIxM2QiCisjICBpZiBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgIC8vIHdvcmtzIGFzIG9mIGdjYyAzLjQuMyAuLi4KKyMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMKKyMgICAgZGVmaW5lIFJFU1RPUkVfcjExX3IxMl9yMTMKKyMgICAgZGVmaW5lIF9DTE9CQkVSX3IxMV9yMTJfcjEzICwiJXIxMSIsICIlcjEyIiwgIiVyMTMiCisjICAgIGRlZmluZSBDTE9CQkVSX3IxMV9yMTJfcjEzICAiJXIxMSIsICIlcjEyIiwgIiVyMTMiCisjICBlbHNlIC8vICFQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQKKyMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMgICAgICJwdXNocSAlJXIxMSAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2hxICUlcjEyICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaHEgJSVyMTMgIFxuXHQiICAvLyAibm9ybWFsbHkgMC1leHRlbmRlZCIKKyMgICAgZGVmaW5lIFJFU1RPUkVfcjExX3IxMl9yMTMgICJwb3BxICAlJXIxMyAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHEgICUlcjEyICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAgJSVyMTEgIFxuXHQiCisjICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMworIyAgICBkZWZpbmUgQ0xPQkJFUl9yMTFfcjEyX3IxMworIyAgZW5kaWYKKyMgIGRlZmluZSBMT0FEX0dPVF9yYnAgICAgICAgICAgICJwdXNocSAlJXJicCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICBfYzY0QEdPVFBDUkVMKCUlcmlwKSwgJSVyYnAgIFxuXHQiCisjICBkZWZpbmUgUkVTVE9SRV9yYnAgICAgICAgICAgICAicG9wcSAgJSVyYnAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorI2Vsc2UgLy8gMzItYml0IGFuZC9vciBub24tUElDCisjICBpZiBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQorICAgICAvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSBhbmQgd291bGQgYmUKKyAgICAgLy8gICBsb2NhbCB2YXJpYWJsZXMgaWYgbm90IGZvciBnY2MtaW5saW5lLWFzc2VtYmx5IGFkZHJlc3NpbmcgbGltaXRhdGlvbnMKKyAgICAgLy8gICAoc29tZSBhcHBhcmVudGx5IHJlbGF0ZWQgdG8gRUxGIGZvcm1hdCwgb3RoZXJzIHRvIENQVSB0eXBlKS4KKyAgICAgLy8KKyAgICAgLy8gV0FSTklORzogVGhlaXIgcHJlc2VuY2UgZGVmZWF0cyB0aGUgdGhyZWFkLXNhZmV0eSBvZiBsaWJwbmcuCisgICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGF0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CisgICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGJ0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CisgICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGN0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CisjICAgIGRlZmluZSBwYV9URU1QICAgICAgICAgICAgICAgICJfcGF0ZW1wIgorIyAgICBkZWZpbmUgcGJfVEVNUCAgICAgICAgICAgICAgICAiX3BidGVtcCIgIC8vIHRlbXAgdmFyaWFibGVzIGZvcgorIyAgICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiX3BjdGVtcCIgIC8vICBQYWV0aCByb3V0aW5lCisjICAgIGRlZmluZSBTQVZFX3IxMV9yMTJfcjEzCisjICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzCisjICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMyAgIC8vIG5vdCB1c2luZyByZWdzID0+IG5vdCBjbG9iYmVyaW5nCisjICAgIGRlZmluZSBDTE9CQkVSX3IxMV9yMTJfcjEzCisjICBlbmRpZiAvLyBQTkdfVEhSRUFEX1VOU0FGRV9PSworIyAgZGVmaW5lIExPQURfR09UX3JicAorIyAgZGVmaW5lIFJFU1RPUkVfcmJwCiAjZW5kaWYKKworI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyMgIGRlZmluZSBTQVZFX2VicAorIyAgZGVmaW5lIFJFU1RPUkVfZWJwCisjICBkZWZpbmUgX0NMT0JCRVJfZWJwICAgICAgICAgLCIlZWJwIgorIyAgZGVmaW5lIENMT0JCRVJfZWJwICAgICAgICAgICIlZWJwIgorIyAgZGVmaW5lIFNBVkVfRnVsbExlbmd0aCAgICAgICJtb3ZsICUlZWF4LCAlJXIxNWQgIFxuXHQiCisjICBkZWZpbmUgUkVTVE9SRV9GdWxsTGVuZ3RoICAgIm1vdmwgJSVyMTVkLCAiICAgICAvLyBtYXkgZ28gaW50byBlYXggb3IgZWN4CisjICBpZiBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgICAvLyB3b3JrcyBhcyBvZiBnY2MgMy40LjMgLi4uCisjICAgIGRlZmluZSBTQVZFX3IxNQorIyAgICBkZWZpbmUgUkVTVE9SRV9yMTUKKyMgICAgZGVmaW5lIF9DTE9CQkVSX3IxNSAgICAgICAsIiVyMTUiCisjICBlbHNlCisjICAgIGRlZmluZSBTQVZFX3IxNSAgICAgICAgICAgInB1c2hxICUlcjE1ICBcblx0IgorIyAgICBkZWZpbmUgUkVTVE9SRV9yMTUgICAgICAgICJwb3BxICAlJXIxNSAgXG5cdCIKKyMgICAgZGVmaW5lIF9DTE9CQkVSX3IxNQorIyAgZW5kaWYKKyMgIGRlZmluZSBQQlAgICAgICAgICAgICAgICAgICAiJSVyYnAiICAgICAgICAgICAgIC8vIHJlZ3MgdXNlZCBmb3IgNjQtYml0CisjICBkZWZpbmUgUEFYICAgICAgICAgICAgICAgICAgIiUlcmF4IiAgICAgICAgICAgICAvLyAgcG9pbnRlcnMgb3IgaW4KKyMgIGRlZmluZSBQQlggICAgICAgICAgICAgICAgICAiJSVyYngiICAgICAgICAgICAgIC8vICBjb21iaW5hdGlvbiB3aXRoCisjICBkZWZpbmUgUENYICAgICAgICAgICAgICAgICAgIiUlcmN4IiAgICAgICAgICAgICAvLyAgNjQtYml0IHBvaW50ZXItcmVncworIyAgZGVmaW5lIFBEWCAgICAgICAgICAgICAgICAgICIlJXJkeCIgICAgICAgICAgICAgLy8gIChiYXNlL2luZGV4IHBhaXJzLAorIyAgZGVmaW5lIFBTSSAgICAgICAgICAgICAgICAgICIlJXJzaSIgICAgICAgICAgICAgLy8gIGFkZC9zdWIvbW92IHBhaXJzKQorIyAgZGVmaW5lIENMRUFSX0JPVFRPTV8zX0JJVFMgICJhbmQgICQweGZmZmZmZmZmZmZmZmZmZjgsICIKKyNlbHNlCisjICBkZWZpbmUgU0FWRV9lYnAgICAgICAgICAgICAgInB1c2hsICUlZWJwIFxuXHQiICAvLyBjbG9iYmVyIGxpc3QgZG9lc24ndCB3b3JrCisjICBkZWZpbmUgUkVTVE9SRV9lYnAgICAgICAgICAgInBvcGwgICUlZWJwIFxuXHQiICAvLyAgZm9yICVlYnAgb24gMzItYml0OyBub3QKKyMgIGRlZmluZSBfQ0xPQkJFUl9lYnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBjbGVhciB3aHkgbm90CisjICBkZWZpbmUgQ0xPQkJFUl9lYnAKKyMgIGRlZmluZSBTQVZFX0Z1bGxMZW5ndGggICAgICAicHVzaGwgJSVlYXggXG5cdCIKKyMgIGRlZmluZSBSRVNUT1JFX0Z1bGxMZW5ndGggICAicG9wbCAiICAgICAgICAgICAgIC8vIGVheCAoYXZnKSBvciBlY3ggKHBhZXRoKQorIyAgZGVmaW5lIFNBVkVfcjE1CisjICBkZWZpbmUgUkVTVE9SRV9yMTUKKyMgIGRlZmluZSBfQ0xPQkJFUl9yMTUKKyMgIGRlZmluZSBQQlAgICAgICAgICAgICAgICAgICAiJSVlYnAiICAgICAgICAgICAgIC8vIHJlZ3MgdXNlZCBmb3Igb3IgaW4KKyMgIGRlZmluZSBQQVggICAgICAgICAgICAgICAgICAiJSVlYXgiICAgICAgICAgICAgIC8vICBjb21iaW5hdGlvbiB3aXRoCisjICBkZWZpbmUgUEJYICAgICAgICAgICAgICAgICAgIiUlZWJ4IiAgICAgICAgICAgICAvLyAgIm5vcm1hbCwiIDMyLWJpdAorIyAgZGVmaW5lIFBDWCAgICAgICAgICAgICAgICAgICIlJWVjeCIgICAgICAgICAgICAgLy8gIHBvaW50ZXJzCisjICBkZWZpbmUgUERYICAgICAgICAgICAgICAgICAgIiUlZWR4IgorIyAgZGVmaW5lIFBTSSAgICAgICAgICAgICAgICAgICIlJWVzaSIKKyMgIGRlZmluZSBDTEVBUl9CT1RUT01fM19CSVRTICAiYW5kICAkMHhmZmZmZmZmOCwgIgorI2VuZGlmCisKKy8vIENMT0JfQ09NTUFfZWJ4X2VicDogIG5lZWQgY29tbWEgT05MWSBpZiBib3RoIENMT0JCRVJfZWJwIGFuZCBDTE9CQkVSX0dPVF9lYngKKy8vICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdmFsdWVzLCBpLmUuLCBvbmx5IGlmIF9feDg2XzY0X18gQU5EICFfX1BJQ19fCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChfX1BJQ19fKQorIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJ4X2VicCAgICAsIC8vIGNsb2JiZXJpbmcgYm90aCBlYnAgYW5kIGVieCA9PiBuZWVkIGNvbW1hCisjZWxzZQorIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJ4X2VicAorI2VuZGlmCisKKy8vIENMT0JfQ09NTUFfZWJYX3IxWDogIG5lZWQgY29tbWEgVU5MRVNTIGJvdGggQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieAorLy8gICAgICAgICAgICAgICAgICAgYXJlIGVtcHR5IE9SIENMT0JCRVJfcjExX3IxMl9yMTMgaXMgZW1wdHktLWkuZS4sIE5PIGNvbW1hCisvLyAgICAgICAgICAgICAgICAgICBpZiAoIV9feDg2XzY0X18gQU5EIF9fUElDX18pIE9SICEoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwKKy8vICAgICAgICAgICAgICAgICAgIEFORCBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAgKGRvdWJsZSBzaWdoLi4uKQorI2lmICghZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fUElDX18pKSB8fCBcCisgICAgIWRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IFwKKyAgICAhZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpCisjICBkZWZpbmUgQ0xPQl9DT01NQV9lYlhfcjFYCisjZWxzZQorIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJYX3IxWCAgICAsIC8vIGNsb2JiZXJpbmcgKGVicCBPUiBlYngpIEFORCByMTFfcjEyX3IxMworI2VuZGlmCisKKy8vIENMT0JfQ09MT05fZWJ4X2VicDogIG5lZWQgY29sb24gdW5sZXNzIENMT0JCRVJfZWJwIGFuZCBDTE9CQkVSX0dPVF9lYnggYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICBCT1RIIGVtcHR5LS1pLmUuLCBOTyBjb2xvbiBpZiAoIV9feDg2XzY0X18gQU5EIF9fUElDX18pCisvLyBDTE9CX0NPTE9OX2VieF9lYnBfcjFYOiAgaWYsIGluIGFkZGl0aW9uLCBDTE9CQkVSX3IxMV9yMTJfcjEzIGlzIGVtcHR5LCB0aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gY29sb24gZm9yIFBhZXRoIGJsb2NrcywgZWl0aGVyLS1pLmUuLCBOTyBjb2xvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICEoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgQU5ECisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpCisjaWYgKCFkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykpCisjICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwCisjICBpZiAhKGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpICYmIFwKKyAgICAgICAgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpKQorIyAgICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWAorIyAgZWxzZQorIyAgICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYnggT1IgcjExX3IxMl9yMTMKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYngKKyMgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgIDogLy8gY2xvYmJlcmluZyBlYnAgT1IgZWJ4IE9SIHIxMV9yMTJfcjEzCisjZW5kaWYKKworI2VuZGlmIC8vIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cKKworI2lmIGRlZmluZWQoX19QSUNfXykgIC8vIG1hY3JvcyB0byBzYXZlLCByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKKyMgIGlmIGRlZmluZWQoX194ODZfNjRfXykKKyMgICAgZGVmaW5lIFNBVkVfR09UX2VieCAgICAgInB1c2hxICUlcmJ4IFxuXHQiCisjICAgIGRlZmluZSBSRVNUT1JFX0dPVF9lYnggICJwb3BxICAlJXJieCBcblx0IgorIyAgZWxzZQorIyAgICBkZWZpbmUgU0FWRV9HT1RfZWJ4ICAgICAicHVzaGwgJSVlYnggXG5cdCIKKyMgICAgZGVmaW5lIFJFU1RPUkVfR09UX2VieCAgInBvcGwgICUlZWJ4IFxuXHQiCisjICBlbmRpZgorIyAgZGVmaW5lIF9DTE9CQkVSX0dPVF9lYnggICAvLyBleHBsaWNpdGx5IHNhdmVkLCByZXN0b3JlZCA9PiBub3QgY2xvYmJlcmVkCisjICBkZWZpbmUgQ0xPQkJFUl9HT1RfZWJ4CisjZWxzZQorIyAgZGVmaW5lIFNBVkVfR09UX2VieAorIyAgZGVmaW5lIFJFU1RPUkVfR09UX2VieAorIyAgZGVmaW5lIF9DTE9CQkVSX0dPVF9lYnggICAsIiVlYngiCisjICBkZWZpbmUgQ0xPQkJFUl9HT1RfZWJ4ICAgICIlZWJ4IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykgfHwgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UpCisjICBkZWZpbmUgQlBQMiAgMgorIyAgZGVmaW5lIEJQUDMgIDMgIC8vIGJ5dGVzIHBlciBwaXhlbCAoYS5rLmEuIHBpeGVsX2J5dGVzKQorIyAgZGVmaW5lIEJQUDQgIDQgIC8vIChkZWZpbmVkIG9ubHkgdG8gaGVscCBhdm9pZCBjdXQtYW5kLXBhc3RlIGVycm9ycykKKyMgIGRlZmluZSBCUFA2ICA2CisjICBkZWZpbmUgQlBQOCAgOAogI2VuZGlmCiAKIAotLyogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGluIHRoZSBpbmxpbmVkIE1NWCBhc3NlbWJseSBjb2RlLgotICAgSWdub3JlIGdjYydzICJBdCB0b3AgbGV2ZWw6IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5ncy4gKi8KIAotLyogR1JSIDIwMDAwNzA2OiAgb3JpZ2luYWxseSBfdW5tYXNrIHdhcyBuZWVkZWQgb25seSB3aGVuIGNvbXBpbGluZyB3aXRoIC1mUElDLAotICogIHNpbmNlIHRoYXQgY2FzZSB1c2VzIHRoZSAlZWJ4IHJlZ2lzdGVyIGZvciBpbmRleGluZyB0aGUgR2xvYmFsIE9mZnNldCBUYWJsZQotICogIGFuZCB0aGVyZSB3ZXJlIG5vIG90aGVyIHJlZ2lzdGVycyBhdmFpbGFibGUuICBCdXQgZ2NjIDIuOTUgYW5kIGxhdGVyIGVtaXQKLSAqICAibW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nIiBlcnJvcnMgd2hlbiAlZWJ4IGlzIHVzZWQgdG8gcHJlbG9hZCB1bm1hc2sKLSAqICBpbiB0aGUgbm9uLVBJQyBjYXNlLCBzbyB3ZSdsbCBqdXN0IHVzZSB0aGUgZ2xvYmFsIHVuY29uZGl0aW9uYWxseSBub3cuCi0gKi8KLSNpZmRlZiBQTkdfVEhSRUFEX1VOU0FGRV9PSwotc3RhdGljIGludCBfdW5tYXNrOwotI2VuZGlmCitzdGF0aWMgaW50IF9tbXhfc3VwcG9ydGVkID0gMjsgLy8gMDogbm8gTU1YOyAxOiBNTVggc3VwcG9ydGVkOyAyOiBub3QgdGVzdGVkCiAKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2s4XzAgID0gMHgwMTAyMDQwODEwMjA0MDgwTEw7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICBQIE4gRyBfIE0gTSBYIF8gUyBVIFAgUCBPIFIgVCAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2sxNl8xID0gMHgwMTAxMDIwMjA0MDQwODA4TEw7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9tYXNrMTZfMCA9IDB4MTAxMDIwMjA0MDQwODA4MExMOworLy8gR1JSIE5PVEVTOiAgKDEpIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIDM4NiBvciBiZXR0ZXIgKHB1c2hmbC9wb3BmbCkKKy8vICAgICAgICAgICAgICgyKSBhbGwgaW5zdHJ1Y3Rpb25zIGNvbXBpbGUgd2l0aCBnY2MgMi43LjIuMyBhbmQgbGF0ZXIKKy8vICAgICAgICAgICB4ICgzKSB0aGUgZnVuY3Rpb24gaXMgbW92ZWQgZG93biBoZXJlIHRvIHByZXZlbnQgZ2NjIGZyb20KKy8vICAgICAgICAgICB4ICAgICAgaW5saW5pbmcgaXQgaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCB0aGVuIGJhcmZpbmcgYmUtCisvLyAgICAgICAgICAgeCAgICAgIGNhdXNlIHRoZSAiLk5PVF9TVVBQT1JURUQiIGxhYmVsIGlzIG11bHRpcGx5IGRlZmluZWQKKy8vICAgICAgICAgICAgICAgICAgW25lZWQgdG8gcmV0ZXN0IHdpdGggZ2NjIDIuNy4yLjNdCiAKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2syNF8yID0gMHgwMTAxMDEwMjAyMDIwNDA0TEw7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9tYXNrMjRfMSA9IDB4MDQwODA4MDgxMDEwMTAyMExMOwotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfbWFzazI0XzAgPSAweDIwMjA0MDQwNDA4MDgwODBMTDsKKy8vIEdSUiAyMDA3MDUyNDogIFRoaXMgZGVjbGFyYXRpb24gYXBwYXJlbnRseSBpcyBjb21wYXRpYmxlIHdpdGggYnV0IHN1cGVyc2VkZXMKKy8vICAgdGhlIG9uZSBpbiBwbmcuaDsgaW4gYW55IGNhc2UsIHRoZSBnZW5lcmF0ZWQgb2JqZWN0IGZpbGUgaXMgc2xpZ2h0bHkKKy8vICAgc21hbGxlci4gIEl0IGlzIHVubmVjZXNzYXJ5IHdpdGggZ2NjIDQuMS4yLCBidXQgZ2NjIDIueCBhcHBhcmVudGx5CisvLyAgIHJlcGxpY2F0ZWQgdGhlICIuTk9UX1NVUFBPUlRFRCIgbGFiZWwgaW4gZWFjaCBsb2NhdGlvbiB0aGUgZnVuY3Rpb24gd2FzCisvLyAgIGlubGluZWQsIGxlYWRpbmcgdG8gY29tcGlsYXRpb24gZXJyb3JzIGR1ZSB0byB0aGUgIm11bHRpcGx5IGRlZmluZWQiCisvLyAgIGxhYmVsLiAgT2xkIHdvcmthcm91bmQgd2FzIHRvIGxlYXZlIHRoZSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMKKy8vICAgZmlsZTsgbmV3IG9uZSAoc3RpbGwgdGVzdGluZykgaXMgdG8gdXNlIGEgZ2NjLXNwZWNpZmljIGZ1bmN0aW9uIGF0dHJpYnV0ZQorLy8gICB0byBwcmV2ZW50IGxvY2FsIGlubGluaW5nLgoraW50IFBOR0FQSQorcG5nX21teF9zdXBwb3J0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSk7CiAKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2szMl8zID0gMHgwMTAxMDEwMTAyMDIwMjAyTEw7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9tYXNrMzJfMiA9IDB4MDQwNDA0MDQwODA4MDgwOExMOwotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfbWFzazMyXzEgPSAweDEwMTAxMDEwMjAyMDIwMjBMTDsKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2szMl8wID0gMHg0MDQwNDA0MDgwODA4MDgwTEw7Ci0KLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2s0OF81ID0gMHgwMTAxMDEwMTAxMDEwMjAyTEw7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9tYXNrNDhfNCA9IDB4MDIwMjAyMDIwNDA0MDQwNExMOwotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfbWFzazQ4XzMgPSAweDA0MDQwODA4MDgwODA4MDhMTDsKLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX21hc2s0OF8yID0gMHgxMDEwMTAxMDEwMTAyMDIwTEw7Ci1jb25zdCBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9tYXNrNDhfMSA9IDB4MjAyMDIwMjA0MDQwNDA0MExMOwotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfbWFzazQ4XzAgPSAweDQwNDA4MDgwODA4MDgwODBMTDsKLQotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfY29uc3Q0ICAgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsKLS8vY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfY29uc3Q1ID0gMHgwMDAwMDBGRkZGRkYwMDAwTEw7ICAgICAvLyBOT1QgVVNFRAotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfY29uc3Q2ICAgPSAweDAwMDAwMDAwMDAwMDAwRkZMTDsKLQotLy8gVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHJvdy1maWx0ZXIgcm91dGluZXMgYW5kIHNob3VsZC93b3VsZCBiZSBsb2NhbAotLy8gIHZhcmlhYmxlcyBpZiBub3QgZm9yIGdjYyBhZGRyZXNzaW5nIGxpbWl0YXRpb25zLgotLy8gV0FSTklORzogVGhlaXIgcHJlc2VuY2UgcHJvYmFibHkgZGVmZWF0cyB0aGUgdGhyZWFkIHNhZmV0eSBvZiBsaWJwbmcuCi0KLSNpZmRlZiBQTkdfVEhSRUFEX1VOU0FGRV9PSwotc3RhdGljIHBuZ191aW50XzMyICBfRnVsbExlbmd0aDsKLXN0YXRpYyBwbmdfdWludF8zMiAgX01NWExlbmd0aDsKLXN0YXRpYyBpbnQgICAgICAgICAgX2RpZjsKLXN0YXRpYyBpbnQgICAgICAgICAgX3BhdGVtcDsgLy8gdGVtcCB2YXJpYWJsZXMgZm9yIFBhZXRoIHJvdXRpbmUKLXN0YXRpYyBpbnQgICAgICAgICAgX3BidGVtcDsKLXN0YXRpYyBpbnQgICAgICAgICAgX3BjdGVtcDsKLSNlbmRpZgotCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19zcXVlbGNoX3dhcm5pbmdzKHZvaWQpCitpbnQgUE5HQVBJCitwbmdfbW14X3N1cHBvcnQodm9pZCkKIHsKLSNpZmRlZiBQTkdfVEhSRUFEX1VOU0FGRV9PSwotICAgX2RpZiA9IF9kaWY7Ci0gICBfcGF0ZW1wID0gX3BhdGVtcDsKLSAgIF9wYnRlbXAgPSBfcGJ0ZW1wOwotICAgX3BjdGVtcCA9IF9wY3RlbXA7Ci0gICBfTU1YTGVuZ3RoID0gX01NWExlbmd0aDsKKyNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICAvLyBzdXBlcmZsdW91cywgYnV0IHdoYXQgdGhlIGhlY2sKKyAgICBpbnQgcmVzdWx0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgICAgICJwdXNocSAlJXJieCAgICAgICAgICBcblx0IiAgLy8gcmJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCisgICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyByY3guLi4KKyAgICAgICAgInB1c2hxICUlcmR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgcmR4IChidXQgcmN4ICYgcmR4IHNhZmUgb24gTGludXgpCisgICAgICAgICJwdXNoZnEgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gcmF4CisgICAgICAgICJtb3ZxICUlcmF4LCAlJXJjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gcmN4CisgICAgICAgICJ4b3JsICQweDIwMDAwMCwgJSVlYXggXG5cdCIgLy8gdG9nZ2xlIElEIGJpdCBpbiBFZmxhZyAoaS5lLiwgYml0IDIxKQorICAgICAgICAicHVzaHEgJSVyYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjaworICAgICAgICAicG9wZnEgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCisgICAgICAgICJwdXNoZnEgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCisgICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wZnEgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgb3JpZ2luYWwgRWZsYWcKKyNlbHNlCisgICAgICAgICJwdXNobCAlJWVieCAgICAgICAgICBcblx0IiAgLy8gZWJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCisgICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyBlY3guLi4KKyAgICAgICAgInB1c2hsICUlZWR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgZWR4IChidXQgZWN4ICYgZWR4IHNhZmUgb24gTGludXgpCisgICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gZWF4CisgICAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gZWN4CisgICAgICAgICJ4b3JsICQweDIwMDAwMCwgJSVlYXggXG5cdCIgLy8gdG9nZ2xlIElEIGJpdCBpbiBFZmxhZyAoaS5lLiwgYml0IDIxKQorICAgICAgICAicHVzaGwgJSVlYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjaworICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCisgICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCisgICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjaworICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgb3JpZ2luYWwgRWZsYWcKICNlbmRpZgotICAgX2NvbnN0NCAgPSBfY29uc3Q0OwotICAgX2NvbnN0NiAgPSBfY29uc3Q2OwotICAgX21hc2s4XzAgID0gX21hc2s4XzA7Ci0gICBfbWFzazE2XzEgPSBfbWFzazE2XzE7Ci0gICBfbWFzazE2XzAgPSBfbWFzazE2XzA7Ci0gICBfbWFzazI0XzIgPSBfbWFzazI0XzI7Ci0gICBfbWFzazI0XzEgPSBfbWFzazI0XzE7Ci0gICBfbWFzazI0XzAgPSBfbWFzazI0XzA7Ci0gICBfbWFzazMyXzMgPSBfbWFzazMyXzM7Ci0gICBfbWFzazMyXzIgPSBfbWFzazMyXzI7Ci0gICBfbWFzazMyXzEgPSBfbWFzazMyXzE7Ci0gICBfbWFzazMyXzAgPSBfbWFzazMyXzA7Ci0gICBfbWFzazQ4XzUgPSBfbWFzazQ4XzU7Ci0gICBfbWFzazQ4XzQgPSBfbWFzazQ4XzQ7Ci0gICBfbWFzazQ4XzMgPSBfbWFzazQ4XzM7Ci0gICBfbWFzazQ4XzIgPSBfbWFzazQ4XzI7Ci0gICBfbWFzazQ4XzEgPSBfbWFzazQ4XzE7Ci0gICBfbWFzazQ4XzAgPSBfbWFzazQ4XzA7Ci19CisgICAgICAgICJ4b3JsICUlZWN4LCAlJWVheCAgICBcblx0IiAgLy8gY29tcGFyZSBuZXcgRWZsYWcgd2l0aCBvcmlnaW5hbCBFZmxhZworICAgICAgICAianogMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIHNhbWUsIENQVUlEIGluc3RyLiBpcyBub3Qgc3VwcG9ydGVkCisKKyAgICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgIFxuXHQiICAvLyBzZXQgZWF4IHRvIHplcm8KKy8vICAgICAgIi5ieXRlICAweDBmLCAweGEyICAgIFxuXHQiICAvLyBDUFVJRCBpbnN0cnVjdGlvbiAodHdvLWJ5dGUgb3Bjb2RlKQorICAgICAgICAiY3B1aWQgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGdldCB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGluZm8KKyAgICAgICAgImNtcGwgJDEsICUlZWF4ICAgICAgIFxuXHQiICAvLyBtYWtlIHN1cmUgZWF4IHJldHVybiBub24temVybyB2YWx1ZQorICAgICAgICAiamwgMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGlmIGVheCBpcyB6ZXJvLCBNTVggaXMgbm90IHN1cHBvcnRlZAorCisgICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICBcblx0IiAgLy8gc2V0IGVheCB0byB6ZXJvIGFuZC4uLgorICAgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIC4uLmluY3JlbWVudCBlYXggdG8gMS4gIFRoaXMgcGFpciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhc3RlciB0aGFuIHRoZSBpbnN0cnVjdGlvbiAibW92IGVheCwgMSIKKyAgICAgICAgImNwdWlkICAgICAgICAgICAgICAgIFxuXHQiICAvLyBnZXQgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBpbmZvIGFnYWluCisgICAgICAgICJhbmRsICQweDgwMDAwMCwgJSVlZHggXG5cdCIgLy8gbWFzayBvdXQgYWxsIGJpdHMgYnV0IE1NWCBiaXQgKDIzKQorICAgICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgXG5cdCIgIC8vIDAgPSBNTVggbm90IHN1cHBvcnRlZAorICAgICAgICAianogMGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIG5vbi16ZXJvID0geWVzLCBNTVggSVMgc3VwcG9ydGVkCisKKyAgICAgICAgIm1vdmwgJDEsICUlZWF4ICAgICAgIFxuXHQiICAvLyBzZXQgcmV0dXJuIHZhbHVlIHRvIDEKKyAgICAgICAgImptcCAgMWYgICAgICAgICAgICAgIFxuXHQiICAvLyBET05FOiAgaGF2ZSBNTVggc3VwcG9ydAorCisgICAgIjA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gLk5PVF9TVVBQT1JURUQ6IHRhcmdldCBsYWJlbCBmb3IganVtcCBpbnN0cnVjdGlvbnMKKyAgICAgICAgIm1vdmwgJDAsICUlZWF4ICAgICAgIFxuXHQiICAvLyBzZXQgcmV0dXJuIHZhbHVlIHRvIDAKKyAgICAiMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyAuUkVUVVJOOiB0YXJnZXQgbGFiZWwgZm9yIGp1bXAgaW5zdHJ1Y3Rpb25zCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgICAgICAicG9wcSAlJXJkeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgcmR4CisgICAgICAgICJwb3BxICUlcmN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSByY3gKKyAgICAgICAgInBvcHEgJSVyYnggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIHJieAorI2Vsc2UKKyAgICAgICAgInBvcGwgJSVlZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVkeAorICAgICAgICAicG9wbCAlJWVjeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWN4CisgICAgICAgICJwb3BsICUlZWJ4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlYngKKyNlbmRpZgorCisvLyAgICAgICJyZXQgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIG5vIE1NWCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBDICJyZXQiKQorCisgICAgICAgIDogIj1hIiAocmVzdWx0KSAgICAgICAgICAgICAgLy8gb3V0cHV0IGxpc3QKKworICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSB2YXJpYWJsZXMgdXNlZCBvbiBpbnB1dCAobm9uZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNsb2JiZXIgbGlzdAorLy8gICAgICAsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIgICAgIC8vIEdSUjogIHdlIGhhbmRsZSB0aGVzZSBtYW51YWxseQorLy8gICAgICAsICJtZW1vcnkiICAgLy8gaWYgd3JpdGUgdG8gYSB2YXJpYWJsZSBnY2MgdGhvdWdodCB3YXMgaW4gYSByZWcKKy8vICAgICAgLCAiY2MiICAgICAgIC8vICJjb25kaXRpb24gY29kZXMiIChmbGFnIGJpdHMpCisgICAgKTsKKyAgICBfbW14X3N1cHBvcnRlZCA9IHJlc3VsdDsKKyNlbHNlCisgICAgX21teF9zdXBwb3J0ZWQgPSAwOwogI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KIAorICAgIHJldHVybiBfbW14X3N1cHBvcnRlZDsKK30KIAotc3RhdGljIGludCBfbW14X3N1cHBvcnRlZCA9IDI7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM5MSwxMiArOTUyLDYgQEAKIAogI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XKQogCi0jZGVmaW5lIEJQUDIgIDIKLSNkZWZpbmUgQlBQMyAgMyAvKiBieXRlcyBwZXIgcGl4ZWwgKGEuay5hLiBwaXhlbF9ieXRlcykgKi8KLSNkZWZpbmUgQlBQNCAgNAotI2RlZmluZSBCUFA2ICA2IC8qIChkZWZpbmVkIG9ubHkgdG8gaGVscCBhdm9pZCBjdXQtYW5kLXBhc3RlIGVycm9ycykgKi8KLSNkZWZpbmUgQlBQOCAgOAotCiAvKiBDb21iaW5lcyB0aGUgcm93IHJlY2VudGx5IHJlYWQgaW4gd2l0aCB0aGUgcHJldmlvdXMgcm93LgogICAgVGhpcyByb3V0aW5lIHRha2VzIGNhcmUgb2YgYWxwaGEgYW5kIHRyYW5zcGFyZW5jeSBpZiByZXF1ZXN0ZWQuCiAgICBUaGlzIHJvdXRpbmUgYWxzbyBoYW5kbGVzIHRoZSB0d28gbWV0aG9kcyBvZiBwcm9ncmVzc2l2ZSBkaXNwbGF5CkBAIC00MTQsOSArOTY5LDE0IEBACiB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKIHsKKyAgIGludCBkdW1teV92YWx1ZV9hOyAgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyBlcnJvcgorICAgaW50IGR1bW15X3ZhbHVlX2M7CisgICBpbnQgZHVtbXlfdmFsdWVfZDsKKyAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOworICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CisKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NvbWJpbmVfcm93IChwbmdnY2NyZC5jKVxuIik7CiAKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiAgICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KQEAgLTQyNCw3ICs5ODQsNiBAQAogI2VuZGlmCiAgICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgICB9Ci0jZW5kaWYKIAogICAgaWYgKG1hc2sgPT0gMHhmZikKICAgIHsKQEAgLTQzNiw2ICs5OTUsNDc4IEBACiAgICB7CiAgICAgICBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKQogICAgICAgeworICAgICAgICAgY2FzZSAyNDogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQorICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyNlbHNlCisgICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKKyAgICAgICAgICAgICAgIGludCBkaWZmOworCisgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKKyAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAorICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CisKKyAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzaworICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgorICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKKworICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzI0XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2syNF8wIC0+IG1tMAorICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0syNF8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMjRfMSAtPiBtbTEKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMjRfMiAiLCAlJW1tMiBcblx0IiAvLyBfbWFzazI0XzIgLT4gbW0yCisgICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAorCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKKworLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQorLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAorCisgICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AyNGVuZCAgICBcblx0IgorCisgICAgICAgICAgICAgICAgIm1haW5sb29wMjQ6ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCU0KSwgJSVtbTcgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglNCkgICAgICBcblx0IgorCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNSAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTQpLCAlJW1tNiAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCU0KSAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglMyksICUlbW02ICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW00ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJTQpICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDI0LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMjQgYnl0ZXMgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyNCwgJTQgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCisKKyAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3AyNCAgICAgICBcblx0IgorCisgICAgICAgICAgICAgICAgIm1haW5sb29wMjRlbmQ6ICAgICAgICAgICAgICAgXG5cdCIKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCisgICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQyNCAgICAgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKKworICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMjQ6ICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgorICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwMjQgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAorICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJTMpLCAlJWF4ICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92dyAgICAgICUlYXgsICglNCkgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJ4b3JsICAgICAgJSVlYXgsICUlZWF4ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAyKCUzKSwgJSVhbCAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsIDIoJTQpICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICJza2lwMjQ6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzLCAlMyAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDMsICU0ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3AyNCAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICJlbmQyNDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQorCisgICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKKyAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAorICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorCisgICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CisgICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKKy8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAorICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQorCisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisgICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgorI2VuZGlmCisgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAzICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFAzICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDMgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KKyAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFAzICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KKworICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKKyAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOworCisgICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFAzOworICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKKyAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0gICAgICAgLyogZW5kIDI0IGJwcCAqLworCisgICAgICAgICAvLyBmb3JtZXJseSBjbGFpbWVkIHRvIGJlIG1vc3QgY29tbW9uIGNhc2UgKGNvbWJpbmluZyAzMi1iaXQgUkdCQSksCisgICAgICAgICAvLyBidXQgYWxtb3N0IGNlcnRhaW5seSBsZXNzIGNvbW1vbiB0aGFuIDI0LWJpdCBSR0IgY2FzZQorICAgICAgICAgY2FzZSAzMjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQorICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyNlbHNlCisgICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKKyAgICAgICAgICAgICAgIGludCBkaWZmOworCisgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKKyAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAorICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CisKKyAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzaworICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgorICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKKworICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2szMl8wCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzEgIiwgJSVtbTEgXG5cdCIgLy8gX21hc2szMl8xCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2szMl8yCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzMgIiwgJSVtbTMgXG5cdCIgLy8gX21hc2szMl8zCisgICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAorCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMyAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0yICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTMgICAgIFxuXHQiCisKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCisvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKKworICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxjcgorICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDMyZW5kICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAibWFpbmxvb3AzMjogICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNCAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTQpLCAlJW1tNyAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCU0KSAgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglMyksICUlbW01ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTUgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglNCksICUlbW02ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJTQpICAgICBcblx0IgorCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUzKSwgJSVtbTYgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMiwgJSVtbTQgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCU0KSwgJSVtbTcgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNCwgJSVtbTYgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAxNiglNCkgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglMyksICUlbW03ICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0zLCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW01ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglNCksICUlbW00ICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW00LCAlJW1tNSAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTUsICUlbW03ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgMjQoJTQpICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDMyLCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMzIgYnl0ZXMgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzMiwgJTQgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMzIgICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICJtYWlubG9vcDMyZW5kOiAgICAgICAgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQorICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMzIgICAgICAgICAgICBcblx0IgorLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbG93IGJ5dGUgPT4gaGlnaCBieXRlCisKKyAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDMyOiAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKKyAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDMyICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKKyAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgKCUzKSwgJSVlYXggICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCU0KSAgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAic2tpcDMyOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNCwgJTMgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0LCAlNCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMzIgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAiZW5kMzI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKKworICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCisgICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAorICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKKyAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKKworICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAorICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4CisvLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKKyAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKKworI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgIC8vIGNsb2JiZXIgbGlzdAorICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKKyNlbmRpZgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKKyAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQNCAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCisgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQNCAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFA0ICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KKyAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCisgICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQNCAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCisKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKKworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLworICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQNDsKKyAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8qIGVuZCAzMiBicHAgKi8KKworICAgICAgICAgY2FzZSA4OiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQorICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyNlbHNlCisgICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKKyAgICAgICAgICAgICAgIGludCBkaWZmOworCisgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKKyAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAorICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CisKKyAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzaworICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgorICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKKworICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzhfMCAiLCAlJW1tMCAgXG5cdCIgLy8gX21hc2s4XzAgLT4gbW0wCisgICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAorCisgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIgLy8gbm9uemVybyBpZiBrZWVwIGJ5dGUKKyAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IiAvLyB6ZXJvcy0+MXMsIHYgdmVyc2EKKworLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQorLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAorCisgICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIgLy8gbGVuID09IDAgPworICAgICAgICAgICAgICAgICAgImplICAgICAgICBtYWlubG9vcDhlbmQgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAibWFpbmxvb3A4OiAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNCAgICAgIFxuXHQiIC8vICpzcmNwdHIKKyAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglNCksICUlbW02ICAgICAgXG5cdCIgLy8gKmRzdHB0cgorICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDgsICUzICAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgOCBieXRlcyBwcm9jZXNzZWQKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDgsICU0ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgInN1YmwgICAgICAkOCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKKyAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3A4ICAgICAgICBcblx0IgorCisgICAgICAgICAgICAgICAgIm1haW5sb29wOGVuZDogICAgICAgICAgICAgICAgXG5cdCIKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCisgICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQ4ICAgICAgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKKworICAgICAgICAgICAgICAgICJzZWNvbmRsb29wODogICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgorICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwOCAgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAorICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAoJTMpLCAlJWFsICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsICglNCkgICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICJza2lwODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiaW5jICAgICAgICUzICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJpbmMgICAgICAgJTQgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3A4ICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICJlbmQ4OiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQorCisgICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKKyAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAorICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorCisgICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CisgICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKKy8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAorICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQorCisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTQiLCAiJW1tNiIsICIlbW03IiAgLy8gY2xvYmJlciBsaXN0CisjZW5kaWYKKyAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CisgICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCisgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCisgICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLworICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IGxlbjsgIC8qIEdSUiBidWdmaXggKi8KKworICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKKyAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOworCisgICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZiAvKiAqQlBQMSAqLyA7CisgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8qIGVuZCA4IGJwcCAqLworCiAgICAgICAgICBjYXNlIDE6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICAgewogICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwpAQCAtNDUxLDE2ICsxNDgyLDE2IEBACiAjaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgIHNfZW5kID0gNzsKLSAgICAgICAgICAgICAgICBzX2luYyA9IDE7CisgICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgIHNfZW5kID0gNzsKKyAgICAgICAgICAgICAgIHNfaW5jID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwotICAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgICBzX2luYyA9IC0xOworICAgICAgICAgICAgICAgc19zdGFydCA9IDc7CisgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICBzX2luYyA9IC0xOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CkBAIC00OTEsNyArMTUyMiw3IEBACiAgICAgICAgICAgICAgICAgICBtID4+PSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9CisgICAgICAgICB9ICAgICAgIC8qIGVuZCAxIGJwcCAqLwogCiAgICAgICAgICBjYXNlIDI6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICAgewpAQCAtNTQ2LDcgKzE1NzcsNyBAQAogICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQorICAgICAgICAgfSAgICAgICAvKiBlbmQgMiBicHAgKi8KIAogICAgICAgICAgY2FzZSA0OiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgIHsKQEAgLTU3NSw2ICsxNjA2LDcgQEAKICAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKIAogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCkBAIC02MDAsMTgxICsxNjMyLDQwIEBACiAgICAgICAgICAgICAgICAgICBtID4+PSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGNhc2UgODogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9hOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnIGVycm9yCi0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfZDsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLSAgICAgICAgICAgICAgIF91bm1hc2sgPSB+bWFzazsgICAgICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGUgZm9yIC1mUElDIHZlcnNpb24KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwotICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4Ci0gICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAvLyBhbW91bnQgbG9zdAotCi0gICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibW92ZCAgICAgIF91bm1hc2ssICUlbW03ICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICBcblx0IiAvLyB6ZXJvIG1tNgotICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICBfbWFzazhfMCwgJSVtbTAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgIFxuXHQiIC8vIG5vbnplcm8gaWYga2VlcCBieXRlCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICBcblx0IiAvLyB6ZXJvcy0+MXMsIHYgdmVyc2EKLQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUlZXNpICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlJWVkaSAgIFxuXHQiIC8vIGxvYWQgZGVzdAotCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICBcblx0IiAvLyBsZW4gPT0gMCA/Ci0gICAgICAgICAgICAgICAgICAiamUgICAgICAgIG1haW5sb29wOGVuZCAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgIm1haW5sb29wODogICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlc2kpLCAlJW1tNCAgXG5cdCIgLy8gKnNyY3B0cgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglJWVkaSksICUlbW02ICBcblx0IiAvLyAqZHN0cHRyCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCUlZWRpKSAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDgsICUlZXNpICAgICAgIFxuXHQiIC8vIGluYyBieSA4IGJ5dGVzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkOCwgJSVlZGkgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3A4ICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAibWFpbmxvb3A4ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCi0gICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kOCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDg6ICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCi0gICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXA4ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgKCUlZXNpKSwgJSVhbCAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsICglJWVkaSkgICBcblx0IgotCi0gICAgICAgICAgICAgICAgInNraXA4OiAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImluY2wgICAgICAlJWVzaSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJpbmNsICAgICAgJSVlZGkgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wOCAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJlbmQ4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAotICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKLSAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgIDogIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaSAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSwgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgIjAiIChkaWZmKSwgICAgICAgIC8vIGVheAotLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4Ci0gICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKLSAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSAgICAgICAgIC8vIGVkeAotCi0jaWYgMCAgLyogTU1YIHJlZ3MgKCVtbTAsIGV0Yy4pIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tNCIsICIlbW02IiwgIiVtbTciICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgLyogbW14IF9ub3Qgc3VwcG9ydGVkIC0gVXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IGxlbjsgIC8qIEdSUiBidWdmaXggKi8KLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwotCi0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwrPWRpZmYgLyogKkJQUDEgKi8gOwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgOCBicHAgKi8KKyAgICAgICAgIH0gICAgICAgLyogZW5kIDQgYnBwICovCiAKICAgICAgICAgIGNhc2UgMTY6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKIAotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKICNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCisgICAgICAgICAgICBpZiAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQogI2Vsc2UKICAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKICNlbmRpZgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICAgaW50IGRpZmY7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYTsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJyBlcnJvcgotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2Q7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7Ci0gICAgICAgICAgICAgICBfdW5tYXNrID0gfm1hc2s7ICAgICAgICAgICAgLy8gZ2xvYmFsIHZhcmlhYmxlIGZvciAtZlBJQyB2ZXJzaW9uCisKICAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwotICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4Ci0gICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8vIGFtb3VudCBsb3N0IC8vCisgICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKKyAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAogCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibW92ZCAgICAgIF91bm1hc2ssICUlbW03ICAgXG5cdCIgLy8gbG9hZCBiaXQgcGF0dGVybgorICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCisgICAgICAgICAgICAgICAgICAibW92ZCAgICAgICUlZWR4LCAlJW1tNyAgICAgXG5cdCIgLy8gbG9hZCBiaXQgcGF0dGVybgorICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwogCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIF9tYXNrMTZfMCwgJSVtbTAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2sxNl8xLCAlJW1tMSBcblx0IgorICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzE2XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2sxNl8wIC0+IG1tMAorICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMTZfMSAtPiBtbTEKKyAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCiAKICAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTEgICAgIFxuXHQiCkBAIC03ODMsMzEgKzE2NzQsMzEgQEAKICAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgogCiAvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUlZXNpICAgIFxuXHQiIC8vIGxvYWQgc291cmNlCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJSVlZGkgICAgXG5cdCIgLy8gbG9hZCBkZXN0CisvLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKIAogICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMTZlbmQgICAgXG5cdCIKIAogICAgICAgICAgICAgICAgICJtYWlubG9vcDE2OiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglJWVzaSksICUlbW00ICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUlZWRpKSwgJSVtbTcgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTQpLCAlJW1tNyAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCUlZWRpKSAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKIAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUlZXNpKSwgJSVtbTUgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJSVlZGkpLCAlJW1tNiAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglNCksICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJSVlZGkpICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCiAKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDE2LCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgMTYgYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQxNiwgJSVlZGkgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMTYgYnl0ZXMgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQxNiwgJTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMTYgICAgICAgXG5cdCIKIApAQCAtODIyLDEyICsxNzEzLDEyIEBACiAgICAgICAgICAgICAgICAgInNlY29uZGxvb3AxNjogICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXAxNiAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCi0gICAgICAgICAgICAgICAgICAibW92dyAgICAgICglJWVzaSksICUlYXggICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgKCUlZWRpKSAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJTMpLCAlJWF4ICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92dyAgICAgICUlYXgsICglNCkgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgICAgICJza2lwMTY6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQyLCAlJWVzaSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDIsICUlZWRpICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMiwgJTMgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyLCAlNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMTYgICAgIFxuXHQiCiAKQEAgLTgzNSwyNiArMTcyNiwyNSBAQAogICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKIAogICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAorICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCiAKICAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCi0vLyB3YXMgKHVubWFzaykgICAgICIgIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKLSAgICAgICAgICAgICAgICAgICAgIjEiIChsZW4pLCAgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAgICAgICAiMiIgKG1hc2spLCAgICAgICAgLy8gZWR4Ci0gICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaQorICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CisgICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKKy8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAorICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQogCi0jaWYgMCAgLyogTU1YIHJlZ3MgKCVtbTAsIGV0Yy4pIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KKyNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW00IiAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgICwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgogI2VuZGlmCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0jZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLworICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAyICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CkBAIC04NzgsNyArMTc2OCw3IEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwrPWRpZmYqQlBQMjsKKyAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDI7CiAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQpAQCAtODkzLDM4OCArMTc4Myw0MiBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9ICAgICAgIC8qIGVuZCAxNiBicHAgKi8KIAotICAgICAgICAgY2FzZSAyNDogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotCi0jaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQotICAgICAgICAgICAgICAgIC8qICYmIF9tbXhfc3VwcG9ydGVkICovICkKLSNlbHNlCi0gICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKLSAgICAgICAgICAgICAgIGludCBkaWZmOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2E7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcgZXJyb3IKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9kOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwotICAgICAgICAgICAgICAgX3VubWFzayA9IH5tYXNrOyAgICAgICAgICAgIC8vIGdsb2JhbCB2YXJpYWJsZSBmb3IgLWZQSUMgdmVyc2lvbgotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKLSAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLy8gYW1vdW50IGxvc3QgLy8KLQotICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICBfdW5tYXNrLCAlJW1tNyAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgotICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICBfbWFzazI0XzAsICUlbW0wIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIF9tYXNrMjRfMSwgJSVtbTEgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2syNF8yLCAlJW1tMiBcblx0IgotCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKLQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlJWVzaSAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICUlZWRpICAgIFxuXHQiIC8vIGxvYWQgZGVzdAotCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AyNGVuZCAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgIm1haW5sb29wMjQ6ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUlZXNpKSwgJSVtbTQgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUlZWRpKSwgJSVtbTcgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglJWVkaSkgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJSVlc2kpLCAlJW1tNSAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJSVlZGkpLCAlJW1tNiAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCUlZWRpKSAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVzaSksICUlbW02IFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglJWVkaSksICUlbW03IFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJSVlZGkpIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDI0LCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgMjQgYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQyNCwgJSVlZGkgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCi0KLSAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3AyNCAgICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgIm1haW5sb29wMjRlbmQ6ICAgICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCi0gICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQyNCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKLQotICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMjQ6ICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgotICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwMjQgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAotICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAoJSVlc2kpLCAlJWF4ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92dyAgICAgICUlYXgsICglJWVkaSkgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJ4b3JsICAgICAgJSVlYXgsICUlZWF4ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAyKCUlZXNpKSwgJSVhbCAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsIDIoJSVlZGkpICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJza2lwMjQ6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQzLCAlJWVzaSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDMsICUlZWRpICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3AyNCAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJlbmQyNDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKLSAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCi0gICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICAgICAgICA6ICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0ciksICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICAgICAgICIwIiAoZGlmZiksICAgICAgICAvLyBlYXgKLS8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAotICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci0gICAgICAgICAgICAgICAgICAgICIxIiAobWFzaykgICAgICAgICAvLyBlZHgKLQotI2lmIDAgIC8qIE1NWCByZWdzICglbW0wLCBldGMuKSBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0gICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgotI2VuZGlmCi0gICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0jZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQMyAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQMyAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFAzICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCi0gICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMyAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCi0KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKLQotICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZmluYWxfdmFsKz1kaWZmKkJQUDM7Ci0gICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgMjQgYnBwICovCi0KLSAgICAgICAgIGNhc2UgMzI6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9hOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnIGVycm9yCi0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfZDsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLSAgICAgICAgICAgICAgIF91bm1hc2sgPSB+bWFzazsgICAgICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGUgZm9yIC1mUElDIHZlcnNpb24KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwotICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4Ci0gICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8vIGFtb3VudCBsb3N0IC8vCi0KLSAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgX3VubWFzaywgJSVtbTcgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2szMl8wLCAlJW1tMCBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICBfbWFzazMyXzEsICUlbW0xIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIF9tYXNrMzJfMiwgJSVtbTIgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2szMl8zLCAlJW1tMyBcblx0IgotCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMyAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0yICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTMgICAgIFxuXHQiCi0KLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJSVlc2kgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlJWVkaSAgICBcblx0IiAvLyBsb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxjcgotICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBtYWlubG9vcDMyZW5kICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAibWFpbmxvb3AzMjogICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlc2kpLCAlJW1tNCAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJSVlZGkpLCAlJW1tNyAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCUlZWRpKSAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVzaSksICUlbW01ICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglJWVkaSksICUlbW02ICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJSVlZGkpICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUlZXNpKSwgJSVtbTYgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMiwgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUlZWRpKSwgJSVtbTcgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNCwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAxNiglJWVkaSkgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglJWVzaSksICUlbW03IFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0zLCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW01ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglJWVkaSksICUlbW00IFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW00LCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTUsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgMjQoJSVlZGkpIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDMyLCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgMzIgYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQzMiwgJSVlZGkgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMzIgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDMyZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMzIgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbG93IGJ5dGUgPT4gaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDMyOiAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDMyICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgKCUlZXNpKSwgJSVlYXggICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCUlZWRpKSAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAic2tpcDMyOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkNCwgJSVlc2kgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQ0LCAlJWVkaSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMzIgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAiZW5kMzI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCi0gICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgOiAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpLCAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4Ci0vLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKLSAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spICAgICAgICAgLy8gZWR4Ci0KLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKLSNlbmRpZgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgLyogbW14IF9ub3Qgc3VwcG9ydGVkIC0gVXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDQgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDQgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDQgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwotCi0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7Ci0KLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCs9ZGlmZipCUFA0OwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLyogZW5kIDMyIGJwcCAqLwotCiAgICAgICAgICBjYXNlIDQ4OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICAgewogICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CiAKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0gICAgICAgICAgICAgICAgLyogJiYgX21teF9zdXBwb3J0ZWQgKi8gKQorICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKICNlbHNlCiAgICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiAjZW5kaWYKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgIGludCBkaWZmOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2E7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcgZXJyb3IKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9kOwotICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7Ci0gICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwotICAgICAgICAgICAgICAgX3VubWFzayA9IH5tYXNrOyAgICAgICAgICAgIC8vIGdsb2JhbCB2YXJpYWJsZSBmb3IgLWZQSUMgdmVyc2lvbgorCiAgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLSAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAotICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvLyBhbW91bnQgbG9zdCAvLworICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CisgICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKIAogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICBfdW5tYXNrLCAlJW1tNyAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzaworICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgogICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKIAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICBfbWFzazQ4XzAsICUlbW0wIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIF9tYXNrNDhfMSwgJSVtbTEgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2s0OF8yLCAlJW1tMiBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICBfbWFzazQ4XzMsICUlbW0zIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIF9tYXNrNDhfNCwgJSVtbTQgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgX21hc2s0OF81LCAlJW1tNSBcblx0IgorICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2s0OF8wIC0+IG1tMAorICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrNDhfMSAtPiBtbTEKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMiAiLCAlJW1tMiBcblx0IiAvLyBfbWFzazQ4XzIgLT4gbW0yCisgICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzMgIiwgJSVtbTMgXG5cdCIgLy8gX21hc2s0OF8zIC0+IG1tMworICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF80ICIsICUlbW00IFxuXHQiIC8vIF9tYXNrNDhfNCAtPiBtbTQKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfNSAiLCAlJW1tNSBcblx0IiAvLyBfbWFzazQ4XzUgLT4gbW01CisgICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAogCiAgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgpAQCAtMTI5MSw1NyArMTgzNSw1NyBAQAogICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTUgICAgIFxuXHQiCiAKIC8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJSVlc2kgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlJWVkaSAgICBcblx0IiAvLyBsb2FkIGRlc3QKKy8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgc3JjcHRyLCAlMyAgICAgICBcblx0IiAvLyBsb2FkIHNvdXJjZQorLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAogCiAgICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3A0OGVuZCAgICBcblx0IgogCiAgICAgICAgICAgICAgICAgIm1haW5sb29wNDg6ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUlZXNpKSwgJSVtbTcgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNyAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAoJSVlZGkpLCAlJW1tNiAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglNCksICUlbW02ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgKCUlZWRpKSAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAoJTQpICAgICAgXG5cdCIKIAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUlZXNpKSwgJSVtbTYgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDgoJSVlZGkpLCAlJW1tNyAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgOCglNCksICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCA4KCUlZWRpKSAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDgoJTQpICAgICBcblx0IgogCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUlZXNpKSwgJSVtbTYgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTMpLCAlJW1tNiAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMiwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMTYoJSVlZGkpLCAlJW1tNyBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDE2KCUlZWRpKSBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJTQpICAgIFxuXHQiCiAKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJSVlc2kpLCAlJW1tNyBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAyNCglMyksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0zLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAyNCglJWVkaSksICUlbW02IFxuXHQiCisgICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDI0KCU0KSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgMjQoJSVlZGkpIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAyNCglNCkgICAgXG5cdCIKIAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAzMiglJWVzaSksICUlbW02IFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92cSAgICAgIDMyKCUzKSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDMyKCUlZWRpKSwgJSVtbTcgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMzIoJTQpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAzMiglJWVkaSkgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDMyKCU0KSAgICBcblx0IgogCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDQwKCUlZXNpKSwgJSVtbTcgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgNDAoJTMpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgNDAoJSVlZGkpLCAlJW1tNiBcblx0IgorICAgICAgICAgICAgICAgICAgInBhbmRuICAgICA0MCglNCksICUlbW02ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDQwKCUlZWRpKSBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgNDAoJTQpICAgIFxuXHQiCiAKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDQ4LCAlJWVzaSAgICAgICBcblx0IiAvLyBpbmMgYnkgNDggYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkbCAgICAgICQ0OCwgJSVlZGkgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQ4LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgNDggYnl0ZXMgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0OCwgJTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCiAKICAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3A0OCAgICAgICBcblx0IgpAQCAtMTM1NywxMiArMTkwMSwxNCBAQAogICAgICAgICAgICAgICAgICJzZWNvbmRsb29wNDg6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgogICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwNDggICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAoJSVlc2kpLCAlJWVheCAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAoJSVlZGkpICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgKCUzKSwgJSVlYXggICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCU0KSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAibW92dyAgICAgIDQoJTMpLCAlJWF4ICAgICAgXG5cdCIgLy8gR1ItUCBidWdmaXggMjAwNzA3MTcKKyAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgNCglNCkgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwogCiAgICAgICAgICAgICAgICAgInNraXA0ODogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGRsICAgICAgJDQsICUlZXNpICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImFkZGwgICAgICAkNCwgJSVlZGkgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ2LCAlMyAgICAgICAgICAgXG5cdCIgLy8gR1ItUCBidWdmaXggMjAwNzA3MTcKKyAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDYsICU0ICAgICAgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwogICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3A0OCAgICAgXG5cdCIKIApAQCAtMTM3NSwyMSArMTkyMSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKIAotICAgICAgICAgICAgICAgICAgOiAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpLCAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4Ci0vLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKKyAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spICAgICAgICAgLy8gZWR4CisvLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKKyAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKIAotI2lmIDAgIC8qIE1NWCByZWdzICglbW0wLCBldGMuKSBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgogI2VuZGlmCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0jZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLworICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA2ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CkBAIC0xNDEzLDcgKzE5NTgsNyBAQAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZmluYWxfdmFsKz1kaWZmKkJQUDY7CisgICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA2OwogICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKQEAgLTE0NTQsNyArMTk5OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBmaW5hbF92YWwrPWRpZmYqQlBQODsKKyAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDg7CiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQpAQCAtMTQ3MCw4ICsyMDE1LDExIEBACiAKICAgICAgICAgIGRlZmF1bHQ6IC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICE9IDEsMiw0LDgsMTYsMjQsMzIsNDgsNjQgKi8KICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotICAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkludmFsaWQgcm93X2luZm8ucGl4ZWxfZGVwdGggaW4gcG5nZ2NjcmQiKTsKKyAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKKyNpZiBkZWZpbmVkKFBOR19ERUJVRykKKyAgICAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgorICAgICAgICAgICAgICAicG5nX2NvbWJpbmVfcm93KCkgcGl4ZWxfZGVwdGgpXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICB9IC8qIGVuZCBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKSAqLwpAQCAtMTUxMCw3ICsyMDU4LDYgQEAKIAogICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UgKHBuZ2djY3JkLmMpXG4iKTsKIAotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKICAgIGlmIChfbW14X3N1cHBvcnRlZCA9PSAyKSB7CiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLwpAQCAtMTUxOCw3ICsyMDY1LDYgQEAKICNlbmRpZgogICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwogICAgfQotI2VuZGlmCiAKICAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQogICAgewpAQCAtMTcwMiwxMiArMjI0OCw2IEBACiAKICAgICAgICAgIGRlZmF1bHQ6IC8qIDgtYml0IG9yIGxhcmdlciAodGhpcyBpcyB3aGVyZSB0aGUgcm91dGluZSBpcyBtb2RpZmllZCkgKi8KICAgICAgICAgIHsKLSNpZiAwCi0vLyAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9jb25zdDQgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsgIG5vIGdvb2QKLS8vICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3Q0ID0gMHgwMDAwMDAwMDAwRkZGRkZGTEw7ICAgbm8gZ29vZAotLy8gICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9jb25zdDQgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsgICAgICAgICBubyBnb29kCi0vLyAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3Q0ID0gMHgwMDAwMDAwMDAwRkZGRkZGTEw7ICAgICAgICAgIG5vIGdvb2QKLSNlbmRpZgogICAgICAgICAgICAgcG5nX2J5dGVwIHNwdHIsIGRwOwogICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7CkBAIC0xNzIzLDMwICsyMjYzLDE1MCBAQAogCiAgICAgICAgICAgICAvKiBOZXcgY29kZSBieSBOaXJhdiBDaGhhdHJhcGF0aSAtIEludGVsIENvcnBvcmF0aW9uICovCiAKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFKQotICAgICAgICAgICAgICAgIC8qICYmIF9tbXhfc3VwcG9ydGVkICovICkKKyAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFKQogI2Vsc2UKICAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKICNlbmRpZgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IDMpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCi0gICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwotICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2E7CisgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgICAgICAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCisgICAgICAgICAgICAgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfUzsKKyAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOworICAgICAgICAgICAgICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX2E7CisgICAgICAgICAgICAgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfZDsKIAorICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IEJQUDMpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIC0gODsgICAvLyBHUlI6ICBodWg/CisgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aF9tbXggPSAwOworICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gOCBvciA5IHBpeCwgMjQgb3IgMjcgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwdHIgcG9pbnRzIGF0IGxhc3QgcGl4ZWwgaW4gcHJlLWV4cGFuZGVkIHJvdworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHAgcG9pbnRzIGF0IGxhc3QgcGl4ZWwgcG9zaXRpb24gaW4gZXhwYW5kZWQgcm93CisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ5LCAlMiAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gKyAxKSpwaXhlbF9ieXRlcworCisgICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AzX3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0wICAgICAgICBcblx0IiAvLyA0IDMgMiAxIDAgeiB6IHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0xICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMjQsICUlbW0yICAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyA0IDMgMiAxIDAgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tMyAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkOCwgJSVtbTIgICAgICAgICBcblx0IiAvLyB6IHogeCB4IDUgNCAzIHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB4IHggNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCU0KSwgJSVtbTMgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB6IHogNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMywgJSVtbTIgICAgICAgIFxuXHQiIC8vIHogeiB4IHggNSA0IDMgNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDYsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMiwgOCglMikgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzNCAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAgICAgLy8gZWRpL3JkaQorI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpICAgICAvLyBmb3JtZXJseSBfY29uc3Q0IGFuZCBfY29uc3Q2OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSwgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfYzY0Ll9hbWFzazdfMV8wKSAgLy8gKDB4MDAwMDAwMDAwMDAwMDBGRkxMKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2FtYXNrNV8zXzApLCAgLy8gZWF4ICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiICgmX2FtYXNrN18xXzApICAgLy8gZWR4ICgweDAwMDAwMDAwMDAwMDAwRkZMTCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0yIiwgIiVtbTMiCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14KkJQUDM7CisgICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMipCUFAzOworICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKKworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMzsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCisgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMjEsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ5LCAlMiAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcworCisgICAgICAgICAgICAgICAgICAgICAiLmxvb3AzX3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IHggMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKKyAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCB6IHogeiB6IHoKKyAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkOCwgJSVtbTEgICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeiAyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTIsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCB6IHoKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCAyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0KCUyKSAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiAyIDEgMCAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzMiAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCisKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKKworICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCisjaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jNjQuX2FtYXNrNV8zXzApICAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCkgICAvLyBlYXggKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjEsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKIAogICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzMDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTMpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6CkBAIC0xNzU5LDEzICsyNDE5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTQgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0wLCAlJW1tMyAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgMCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tNCwgMTYoJSVlZGkpICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW00LCAxNiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogMCAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDgoJSVlZGkpICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTQsICUlbW0wICBcblx0IiAvLyAxIDAgMiAxIDAgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzLCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMjQsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjQsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQpAQCAtMTc3NSwxNjIgKzI0MzUsMzA4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQogCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCisgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgICAgIC8vIGVkaS9yZGkKKyNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAgICAgICAgICAgLy8gZm9ybWVybHkgX2NvbnN0NDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2M2NC5fYW1hc2s1XzNfMCkgIC8vICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9hbWFzazVfM18wKSAgIC8vIGVheCAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCisjZW5kaWYKIAotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aCksICAgICAvLyBlY3gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2NvbnN0NCkgIC8vICUxKD8pICAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCi0KLSNpZiAwICAvKiAlbW0wLCAuLi4sICVtbTQgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLworI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDMgKi8KKworICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKLSAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwotICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYTsKLQotICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDksICUlZWRpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHBuZ19wYXNzX2luY1twYXNzXSAtIDEpKnBpeGVsX2J5dGVzCi0KLSAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczI6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIHggeCB4IHggeCAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCUzKSwgJSVtbTAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IDIgMSAwIHogegotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIHogeiB6IDIgMSAwIHogegotICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIHogeiB6IHogegotICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQ4LCAlJW1tMSAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB6IDIgMQotICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIHogegotICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQoJSVlZGkpICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IDIgMSAwIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMywgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDEyLCAlJWVkaSAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AzX3Bhc3MyICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoKSwgICAgIC8vIGVjeAotICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfY29uc3Q0KSAgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQotCi0jaWYgMCAgLyogJW1tMCwgLi4uLCAlbW0yIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICovCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSAtIDg7ICAgLy8gR1JSOiAgaHVoPwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhfbW14ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDggb3IgOSBwaXgsIDI0IG9yIDI3IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CisgICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3B0ciBwb2ludHMgYXQgbGFzdCBwaXhlbCBpbiBwcmUtZXhwYW5kZWQgcm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkcCBwb2ludHMgYXQgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiBleHBhbmRlZCByb3cKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9kOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMywgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ5LCAlJWVkaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gKyAxKSpwaXhlbF9ieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTIsICUyICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNCAzIDIgMSAwIHogeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTMpLCAlJW1tMSAgICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMjQsICUlbW0yICAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyA0IDMgMiAxIDAgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tMyAgICAgICBcblx0IiAvLyB6IHogeiB4IHggNSA0IDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkOCwgJSVtbTIgICAgICAgICBcblx0IiAvLyB6IHogeCB4IDUgNCAzIHoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB4IHggNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCU0KSwgJSVtbTMgICAgIFxuXHQiIC8vIHogeiB6IHogeiB6IHogNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMywgJSVtbTIgICAgICAgIFxuXHQiIC8vIHogeiB4IHggNSA0IDMgNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDYsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMiwgOCglJWVkaSkgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQxMiwgJSVlZGkgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczQgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wNF9wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSwgLy8gZWN4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jb25zdDQpLCAvLyAweDAwMDAwMDAwMDBGRkZGRkZMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfY29uc3Q2KSAgLy8gMHgwMDAwMDAwMDAwMDAwMEZGTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQogCi0jaWYgMCAgLyogJW1tMCwgLi4uLCAlbW0zIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiJW1tMiIsICIlbW0zIgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teCozOwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjY7CisgICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqQlBQNCAtIEJQUDQpOyAvLyBzaWduIGZpeGVkCisgICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjIqQlBQNCAtIEJQUDQpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA0OworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gMzsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDMgKi8KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCw0IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjgsICUyICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDE2KCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMjQoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MyICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQorCisjaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDQpOyAgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOworICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ2MCwgJTIgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMTYoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAyNCglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDMyKCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNDAoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA0OCglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNTYoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ2NCwgJTIgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wNF9wYXNzMCAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKKworI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAvLyBzaWduIGZpeGVkCisgICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjMyIC0gNCk7ICAvLyBzaWduIGZpeGVkCisgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDQgKi8KIAogICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMSkKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpICYmIHdpZHRoKQorICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAzKSA8PCAzKTsKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDcsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTUsICUyICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA3IDYgNiA1IDUgNCA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVjeCAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczQgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCisKKyNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXg7CisgICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMjsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQogICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMzEsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE1LCAlMiAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczI6ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2h3ZCAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDMgMyAzIDMgMiAyIDIgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUyKSAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE2LCAlMiAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlY3ggICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AxX3Bhc3MyICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQorCisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OworICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjQ7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDIpIDw8IDIpOworICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMC0zIHBpeGVscyA9PiAwLTMgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMSwgJTIgICAgICAgICAgICBcblx0IgogCiAgICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AxX3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglJWVzaSksICUlbW0wICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKQEAgLTE5MzgsMTYgKzI3NDQsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMyAgICAgICBcblx0IiAvLyAxIDEgMSAxIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAwIDAgMCAwIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTMsICUlbW0zICBcblx0IiAvLyAxIDEgMSAxIDEgMSAxIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraHdkICUlbW0yLCAlJW1tMiAgXG5cdCIgLy8gMyAzIDMgMyAyIDIgMiAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgOCglJWVkaSkgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0zLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgIFxuXHQiIC8vIDMgMyAzIDMgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMiwgJSVtbTIgIFxuXHQiIC8vIDIgMiAyIDIgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tNCwgJSVtbTQgIFxuXHQiIC8vIDMgMyAzIDMgMyAzIDMgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW00LCAyNCglJWVkaSkgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMyLCAlJWVkaSAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMiwgMTYoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDI0KCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzIsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQpAQCAtMTk1NiwxMSArMjc2MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQogCi0jaWYgMCAgLyogJW1tMCwgLi4uLCAlbW00IG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KKyNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIKICNlbmRpZgpAQCAtMTk5OCwxNzYgKzI4MDQsNTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTUsICUlZWRpICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAxIDEgMSAwIDAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraHdkICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAzIDMgMyAyIDIgMiAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJSVlZGkpICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczIgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKLQotI2lmIDAgIC8qICVtbTAsICVtbTEgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09IHdpZHRoX21teCo0OwotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLS1zcHRyOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvKiAmJiAoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICovCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAzKSA8PCAzKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDcsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTUsICUlZWRpICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA3IDYgNiA1IDUgNCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglJWVkaSkgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczQgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKG5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoX21teCkgIC8vIGVjeAotCi0jaWYgMCAgLyogJW1tMCwgJW1tMSBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjI7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAxICovCiAKICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDIpCisgICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFAyKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkgJiYgd2lkdGgpCisgICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOworICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwogICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzMCwgJSVlZGkgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNiwgJTIgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AyX3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDAgMSAwIDEgMCAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyAzIDIgMyAyIDMgMiAzIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJSVlZGkpICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMTYoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDI0KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMzIsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTIgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMl9wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoX21teCkgIC8vIGVjeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCiAKLSNpZiAwICAvKiAlbW0wLCAlbW0xIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDIpOyAgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KkJQUDIgLSBCUFAyKTsgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoyKkJQUDIgLSBCUFAyKTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDI7CisgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQpAQCAtMjE3NywyNCArMjg2NCwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQxNCwgJSVlZGkgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTQsICUyICAgICAgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAwIDEgMCAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAyIDMgMiAzIDIgMyAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJSVlZGkpICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMl9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCkBAIC0yMjAzLDExICsyODg2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiAoc3B0ciksICAgICAgLy8gZXNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgKHdpZHRoX21teCkgIC8vIGVjeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCiAKLSNpZiAwICAvKiAlbW0wLCAlbW0xIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICApOwpAQCAtMjIyOCw0NiArMjkxMSw0OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyBwYXNzID09IDQgb3IgNQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CisgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQogICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNiwgJSVlZGkgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyLCAlMSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMwLCAlMiAgICAgICAgICAgIFxuXHQiCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDJfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJSVlZGkpICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZWRpICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAwIDEgMCAxIDAgMSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAyIDMgMiAzIDIgMyAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDE2KCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAyNCglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AyX3Bhc3M0ICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQogCi0jaWYgMCAgLyogJW1tMCBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisjaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCo0IC0gMik7ICAgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDIpOyAgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CkBAIC0yMjg0LDIyNyArMjk2OSwzNiBAQAogICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMiAqLwogCiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCw0IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNjAsICUlZWRpICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUlZWRpKSAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAzMiglJWVkaSkgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDQwKCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNDgoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDU2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNjQsICUlZWRpICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDRfcGFzczAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aF9tbXgpICAvLyBlY3gKLQotI2lmIDAgIC8qICVtbTAsICVtbTEgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjMyIC0gNCk7ICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCw0IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMjgsICUlZWRpICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUlZWRpKSAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDE2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMjQoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDMyLCAlJWVkaSAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MyICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4Ci0KLSNpZiAwICAvKiAlbW0wLCAlbW0xIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDQpOyAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vIHBhc3MgPT0gNCBvciA1Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9TOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX0Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDEyLCAlJWVkaSAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDRfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAxIDAgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkOCwgJSVlc2kgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUlZWRpKSAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDE2LCAlJWVkaSAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3M0ICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGhfbW14KSAgLy8gZWN4Ci0KLSNpZiAwICAvKiAlbW0wLCAlbW0xIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCo4IC0gNCk7ICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA0ICovCi0KLSAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDgpCisgICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFA4KQogICAgICAgICAgICAgICAgewogLy8gR1JSIFRFU1Q6ICBzaG91bGQgd29yaywgYnV0IG5lZWRzIHRlc3RpbmcgKHNwZWNpYWwgNjQtYml0IHZlcnNpb24gb2YgcnBuZzI/KQogICAgICAgICAgICAgICAgICAgLy8gR1JSIE5PVEU6ICBubyBuZWVkIHRvIGNvbWJpbmUgcGFzc2VzIGhlcmUhCi0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX2M7ICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciBzcGlsbGVkJwotICAgICAgICAgICAgICAgICAgICAgaW50IGR1bW15X3ZhbHVlX1M7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfRDsKLQogICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIGlzIDgtYnl0ZSBSUkdHQkJBQQotICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyA2NC1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIC4uLgorICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAxNi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNTYsICUlZWRpICAgICAgICAgXG5cdCIgLy8gc3RhcnQgb2YgbGFzdCBibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUyICAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKIAotICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUlZWRpKSAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAzMiglJWVkaSkgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQwKCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNDgoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDU2KCUlZWRpKSAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNjQsICUlZWRpICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE2LCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3MwICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQogCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKIAotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aCkgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQogCi0jaWYgMCAgLyogJW1tMCBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCisjaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgKTsKQEAgLTI1MTUsMTIyICszMDA5LDE0MyBAQAogICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAzMi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgICAvLyAocmVjYWxsIHRoYXQgZXhwYW5zaW9uIGlzIF9pbiBwbGFjZV86ICBzcHRyIGFuZCBkcAogICAgICAgICAgICAgICAgICAgICAgLy8gIGJvdGggcG9pbnQgYXQgbG9jYXRpb25zIHdpdGhpbiBzYW1lIHJvdyBidWZmZXIpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOworICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDI0LCAlMiAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKIAotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDI0LCAlJWVkaSAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczI6ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzMiAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczI6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUlZXNpKSwgJSVtbTAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSkgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglJWVkaSkgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglJWVkaSkgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZXNpICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJSVlZGkpICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQzMiwgJSVlZGkgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzMiAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCisgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCisgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKHNwdHIpLCAgICAgIC8vIGVzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCksICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiICh3aWR0aCkgICAgICAvLyBlY3gKLQotI2lmIDAgIC8qICVtbTAgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gcGFzcyA9PSA0IG9yIDUKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIGlzIDgtYnl0ZSBSUkdHQkJBQQotICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyAxNi1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfYzsgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIHNwaWxsZWQnCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9EOworICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdCBpcyA2NC1ieXRlIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIFJSR0dCQkFBIC4uLgorICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDU2LCAlMiAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKIAotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDgsICUlZWRpICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczA6ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMzIoJTIpICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0MCglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQ4KCUyKSAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA1NiglMikgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDY0LCAlMiAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3MwICAgICAgICBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKIAotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJSVlc2kpLCAlJW1tMCAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUlZWRpKSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVzaSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJSVlZGkpICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMTYsICUlZWRpICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczQgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiIChzcHRyKSwgICAgICAvLyBlc2kgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiAod2lkdGgpICAgICAgLy8gZWN4Ci0KLSNpZiAwICAvKiAlbW0wIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDggKi8KIAogICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNikKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDYpICAgLy8gd2h5IG5vIE1NWCBmb3IgdGhpcyBjYXNlPwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNik7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDYpOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA2OworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQNik7CisgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA2OwogICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA2OworICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA2OwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gNiAqLwogCiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBwaXhlbF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBwaXhlbF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHItPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKKyNpZiBkZWZpbmVkKFBOR19ERUJVRykKKyAgICAgICAgICAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgorICAgICAgICAgICAgICAgICAgICAicG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgX21teF9zdXBwb3J0ZWQpXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB9IC8vIGVuZCBvZiBfbW14X3N1cHBvcnRlZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICAgICAgICAgIGVsc2UgLyogTU1YIG5vdCBzdXBwb3J0ZWQ6ICB1c2UgbW9kaWZpZWQgQyBjb2RlIC0gdGFrZXMgYWR2YW50YWdlCiAgICAgICAgICAgICAgICAgICAqICAgb2YgaW5saW5pbmcgb2YgcG5nX21lbWNweSBmb3IgYSBjb25zdGFudCAqLwotICAgICAgICAgICAgICAgICAvKiBHUlIgMTk5OTEwMDc6ICBkb2VzIGl0PyAgb3Igc2hvdWxkIHBpeGVsX2J5dGVzIGluIGVhY2gKLSAgICAgICAgICAgICAgICAgICogICBibG9jayBiZSByZXBsYWNlZCB3aXRoIGltbWVkaWF0ZSB2YWx1ZSAoZS5nLiwgMSk/ICovCi0gICAgICAgICAgICAgICAgIC8qIEdSUiAxOTk5MTAxNzogIHJlcGxhY2VkIHdpdGggY29uc3RhbnRzIGluIGVhY2ggY2FzZSAqLwotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA9PSAxKQorICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IEJQUDMpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAzKTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDMpOworICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMzsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDQpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA0KTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKFBOR19ERUJVRykgJiYgZGVmaW5lZChQTkdfMV8wX1gpICAvLyByb3dfYnVmX3NpemUgZ29uZSBpbiAxLjIueAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwIDwgcm93IHx8IGRwKzMgPiByb3crcG5nX3B0ci0+cm93X2J1Zl9zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkcCBvdXQgb2YgYm91bmRzOiByb3c9JTEwcCwgZHA9JTEwcCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnA9JTEwcFxuIiwgcm93LCBkcCwgcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJvd19idWZfc2l6ZT0lbHVcbiIsIHBuZ19wdHItPnJvd19idWZfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDQpOworICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQNDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQNDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgewpAQCAtMjY0MiwxMDggKzMxNTcsNjMgQEAKICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDMpCisgICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFAyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMyk7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQMik7CisgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAyOwogICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAzOworICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFAyOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMikKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQNik7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDY7CiAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7CisgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDY7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQorICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQOCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA4KTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgIHsKLSNpZmRlZiBQTkdfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcCA8IHJvdyB8fCBkcCszID4gcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZHAgb3V0IG9mIGJvdW5kczogcm93PSVkLCBkcD0lZCwgcnA9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdywgZHAsIHJvdytwbmdfcHRyLT5yb3dfYnVmX3NpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyb3dfYnVmPSVkXG4iLHBuZ19wdHItPnJvd19idWZfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDg7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDg7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECisjaWYgZGVmaW5lZChQTkdfREVCVUcpCisgICAgICAgICAgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKKyAgICAgICAgICAgICAgICAgICAgInBuZ19kb19yZWFkX2ludGVybGFjZSgpICFfbW14X3N1cHBvcnRlZClcbiIpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA2KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNik7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDY7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDY7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA4KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgOCk7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDg7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDg7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlICAgICAvKiBHUlI6ICBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCAqLwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9IC8qIGVuZCBpZiAoTU1YIG5vdCBzdXBwb3J0ZWQpICovCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KKyAgICAgICAgIH0gLyogZW5kIGRlZmF1bHQgKDgtYml0IG9yIGxhcmdlcikgKi8KICAgICAgIH0gLyogZW5kIHN3aXRjaCAocm93X2luZm8tPnBpeGVsX2RlcHRoKSAqLwogCiAgICAgICByb3dfaW5mby0+d2lkdGggPSBmaW5hbF93aWR0aDsKQEAgLTI3NTksMTkgKzMyMjksOCBAQAogCiAKICNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cpCi0jaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVEKQogCi0vLyBUaGVzZSB2YXJpYWJsZXMgYXJlIHV0aWxpemVkIGluIHRoZSBmdW5jdGlvbnMgYmVsb3cuICBUaGV5IGFyZSBkZWNsYXJlZAotLy8gZ2xvYmFsbHkgaGVyZSB0byBlbnN1cmUgYWxpZ25tZW50IG9uIDgtYnl0ZSBib3VuZGFyaWVzLgotCi11bmlvbiB1QWxsIHsKLSAgIGxvbmcgbG9uZyB1c2U7Ci0gICBkb3VibGUgIGFsaWduOwotfSBfTEJDYXJyeU1hc2sgPSB7MHgwMTAxMDEwMTAxMDEwMTAxTEx9LAotICBfSEJDbGVhck1hc2sgPSB7MHg3ZjdmN2Y3ZjdmN2Y3ZjdmTEx9LAotICBfQWN0aXZlTWFzaywgX0FjdGl2ZU1hc2syLCBfQWN0aXZlTWFza0VuZCwgX1NoaWZ0QnBwLCBfU2hpZnRSZW07Ci0KLSNpZmRlZiBQTkdfVEhSRUFEX1VOU0FGRV9PSwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy8gICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIEEgViBHICAgICAgICAgICAvLwpAQCAtMjc4NCw5MCArMzI0MywxMTcgQEAKIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2Zyhwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwcmV2X3JvdykKIHsKKyAgIHVuc2lnbmVkIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsgIC8vIHBuZ191aW50XzMyIGlzIGFjdHVhbGx5IDY0LWJpdCBvbiB4ODYtNjQKICAgIGludCBicHA7CisgICBpbnQgZHVtbXlfdmFsdWVfYTsKICAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIDIgKGN4KSB3YXMgc3BpbGxlZCcgZXJyb3IKLSAgIGludCBkdW1teV92YWx1ZV9TOwotICAgaW50IGR1bW15X3ZhbHVlX0Q7CisgICBpbnQgZHVtbXlfdmFsdWVfZDsKKyAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOworICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CisgICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKIAotICAgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7ICAvLyBnZXQgIyBieXRlcyBwZXIgcGl4ZWwKLSAgIF9GdWxsTGVuZ3RoICA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgLy8gIyBvZiBieXRlcyB0byBmaWx0ZXIKKyAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCisgICBGdWxsTGVuZ3RoID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKIAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgImF2Z190b3A6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgU0FWRV9HT1RfZWJ4CisgICAgICBTQVZFX3IxNQorICAgICAgU0FWRV9lYnAKICAgICAgIC8vIGluaXRpYWxpemUgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0jaWZkZWYgX19QSUNfXwotICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgICAgICAgICBcblx0IiAvLyBzYXZlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgotLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKKy8vcHJlICJtb3ZsIHJvdywgJTUgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaTogIHB0ciB0byBBdmcoeCkKICAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeAotICAgICAgIm1vdmwgJSVlZGksICUlZWR4ICAgICAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQotLy9wcmUgInN1YmwgYnBwLCAlJWVkeCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKLSAgICAgICJzdWJsICUlZWN4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gZWR4OiAgUmF3KHgtYnBwKQotCi0gICAgICAieG9ybCAlJWVheCwlJWVheCAgICAgICAgICAgIFxuXHQiCisvL3ByZSAibW92bCBwcmV2X3JvdywgJTQgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2k6ICBwdHIgdG8gUHJpb3IoeCkKKyAgICAgICJtb3YgICU1LCAiIFBEWCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcHRyLi4uCisvL3ByZSAic3VibCBicHAsICIgUERYICIgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQorICAgICAgInN1YiAgIiBQQ1ggIiwiIFBEWCAiICAgICAgICBcblx0IiAvLyBlZHgvcmR4OiAgcHRyIHRvIFJhdyh4LWJwcCkKKy8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgorICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQorICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgogCiAgICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKICAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArIChQcmlvcih4KS8yKQogICAgImF2Z19ybHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksJSVhbCAgICBcblx0IiAvLyBsb2FkIGFsIHdpdGggUHJpb3IoeCkKKyAgICAgICJtb3ZiICglNCwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIgLy8gbG9hZCBhbCB3aXRoIFByaW9yKHgpCiAgICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAic2hyYiAlJWFsICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCi0gICAgICAiYWRkYiAtMSglJWVkaSwlJWVieCwpLCUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CisgICAgICAiYWRkYiAtMSglNSwiIFBCWCAiLCksICUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAvL3ByZSAiY21wbCBicHAsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQogICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmIgJSVhbCwtMSglJWVkaSwlJWVieCwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CisgICAgICAibW92YiAlJWFsLCAtMSglNSwiIFBCWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKICAgICAgICJqYiBhdmdfcmxwICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFncwogCi0gICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQKLSAgICAgICJtb3ZsICUlZWRpLCBfZGlmICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKLSAgICAgICJhZGRsICUlZWJ4LCBfZGlmICAgICAgICAgICAgXG5cdCIgLy8gYWRkIGJwcAotICAgICAgImFkZGwgJDB4ZiwgX2RpZiAgICAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQotICAgICAgImFuZGwgJDB4ZmZmZmZmZjgsIF9kaWYgICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgInN1YmwgJSVlZGksIF9kaWYgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBmcm9tIHN0YXJ0ID0+IHZhbHVlIGVieCBhdAotICAgICAgImp6IGF2Z19nbyAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgYWxpZ25tZW50CisgICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQgKDMyLWJpdCBtYXNrIF93b3VsZF8gYmUgZ29vZCBlbm91Z2gKKyAgICAgIC8vIFtjb21wdXRpbmcgZGVsdGFdLCBidXQgMzItYml0IG9wcyBhcmUgemVyby1leHRlbmRlZCBvbiA2NC1iaXQsIGFyZ2gpCisgICAgICAvLyAoaWYgc3dhcHBlZCBlZHggYW5kIGVicCwgY291bGQgZG8gOC1iaXQgb3IgMTYtYml0IG1hc2suLi5GSVhNRT8pCisgICAgICAibW92ICAlNSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHRha2Ugc3RhcnQgb2Ygcm93CisgICAgICAiYWRkICAiIFBCWCAiLCIgUEJQICIgICAgICAgIFxuXHQiIC8vIGFkZCBicHAKKyAgICAgICJhZGQgICQweGYsICIgUEJQICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKKy8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCisgICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CisgICAgICAic3ViICAlNSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KKyAgICAgICJqeiBhdmdfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYnggYXQgYWxpZ25tZW50CisKKyAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKIAogICAgICAgLy8gZml4IGFsaWdubWVudAogICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgYnl0ZXMgdXAgdG8gdGhlIGFsaWdubWVudCBib3VuZGFyeQogICAgICAgLy8gICAgUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCi0gICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCi0KICAgICJhdmdfbHAxOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZiICglJWVzaSwlJWVieCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCi0gICAgICAibW92YiAoJSVlZHgsJSVlYngsKSwgJSVhbCAgIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCisgICAgICAibW92YiAoJTQsIiBQQlggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQorICAgICAgIm1vdmIgKCIgUERYICIsIiBQQlggIiwpLCAlJWFsIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCiAgICAgICAiYWRkdyAlJWN4LCAlJWF4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAic2hydyAlJWF4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCi0gICAgICAiYWRkYiAtMSglJWVkaSwlJWVieCwpLCAlJWFsIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAiY21wbCBfZGlmLCAlJWVieCAgICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGFsaWdubWVudCBib3VuZGFyeQotICAgICAgIm1vdmIgJSVhbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CisgICAgICAiYWRkYiAtMSglNSwiIFBCWCAiLCksICUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CisgICAgICAiY21wbCAlJWVicCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGFsaWdubWVudCBib3VuZGFyeQorICAgICAgIm1vdmIgJSVhbCwgLTEoJTUsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICAiamIgYXZnX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJlcGVhdCB1bnRpbCBhdCBhbGlnbm1lbnQgYm91bmRhcnkKIAogICAgImF2Z19nbzogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmwgX0Z1bGxMZW5ndGgsICUlZWF4ICAgICBcblx0IgotICAgICAgIm1vdmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IgorICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVheCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVheAorICAgICAgIm1vdmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBjb3B5IC0+IGVjeAogICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICJzdWJsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi0gICAgICAibW92bCAlJWVjeCwgX01NWExlbmd0aCAgICAgIFxuXHQiCi0jaWZkZWYgX19QSUNfXwotICAgICAgInBvcGwgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgorICAgICAgInN1YmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBzdWIgb3Zlci1ieXRlcyBmcm9tIG9yaWdpbmFsIGxlbmd0aAorLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgorICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKKyAgICAgIFJFU1RPUkVfZWJwICAgICAgICAgICAgICAgICAgICAgICAgLy8gIChjb3VsZCBzd2FwIGVicCBhbmQgZWR4IGZ1bmN0aW9ucykKKyAgICAgIFJFU1RPUkVfcjE1CisgICAgICBSRVNUT1JFX0dPVF9lYngKIAotICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorLy8gIlRoZXJlIGlzIG5vIHdheSBmb3IgeW91IHRvIHNwZWNpZnkgdGhhdCBhbiBpbnB1dCBvcGVyYW5kIGlzIG1vZGlmaWVkCisvLyB3aXRob3V0IGFsc28gc3BlY2lmeWluZyBpdCBhcyBhbiBvdXRwdXQgb3BlcmFuZC4iICBbbWFrZXMgc2Vuc2VdCiAKLSAgICAgIDogIjAiIChicHApLCAgICAgICAvLyBlY3ggICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAiMSIgKHByZXZfcm93KSwgIC8vIGVzaQotICAgICAgICAiMiIgKHJvdykgICAgICAgIC8vIGVkaQorLy8gIlVubGVzcyBhbiBvdXRwdXQgb3BlcmFuZCBoYXMgdGhlIGAmJyBjb25zdHJhaW50IG1vZGlmaWVyLCBHQ0MgbWF5CisvLyBhbGxvY2F0ZSBpdCBpbiB0aGUgc2FtZSByZWdpc3RlciBhcyBhbiB1bnJlbGF0ZWQgaW5wdXQgb3BlcmFuZCwgb24gdGhlCisvLyBhc3N1bXB0aW9uIHRoZSBpbnB1dHMgYXJlIGNvbnN1bWVkIGJlZm9yZSB0aGUgb3V0cHV0cyBhcmUgcHJvZHVjZWQuIgorLy8gW3RyeWluZyB0byBfZm9yY2VfIHRoaXNdCiAKLSAgICAgIDogIiVlYXgiLCAiJWVkeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWZuZGVmIF9fUElDX18KLSAgICAgICwgIiVlYngiCi0jZW5kaWYKLSAgICAgIC8vIEdSUjogSU5DTFVERSAibWVtb3J5IiBhcyBjbG9iYmVyZWQ/IChfZGlmLCBfTU1YTGVuZ3RoKQotICAgICAgLy8gKHNlZW1zIHRvIHdvcmsgZmluZSB3aXRob3V0Li4uKQorLy8gImA9JyAgIE1lYW5zIHRoYXQgdGhpcyBvcGVyYW5kIGlzIHdyaXRlLW9ubHkgZm9yIHRoaXMgaW5zdHJ1Y3Rpb246CisvLyAgICAgICAgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgYnkgb3V0cHV0IGRhdGEuIgorLy8gICAgICAgIFtvcGVyYW5kID09IHZhcmlhYmxlIG5hbWUsIHByZXN1bWFibHldCisKKyAgICAgIC8vIG91dHB1dCByZWdzCisgICAgICAvLyB0aGVzZSBhcmUgb3BlcmFuZHMgMC0xIChvcmlnaW5hbGx5IDAtMyk6CisgICAgICA6ICI9YyIgKE1NWExlbmd0aCksICAgICAgLy8gJTAgLT4gJTAKKyAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAvLyAlMyAtPiAlMQorLy8gICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwgIC8vICUxIC0+IEdPTkUKKy8vICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAvLyAlMiAtPiBHT05FCisKKyAgICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgIC8vIHRoZXNlIGFyZSBvcGVyYW5kcyAyLTUgKG9yaWdpbmFsbHkgNC03KTsgdHdvIG9mIHRoZWlyIGNvbnN0cmFpbnRzIHNheQorICAgICAgLy8gdGhleSBtdXN0IGdvIGluIHNhbWUgcGxhY2VzIGFzIG9wZXJhbmRzIDAtMSAob3JpZ2luYWxseSAwLTMpIGFib3ZlOgorICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gJTQgLT4gJTIgZWN4CisgICAgICAgICIxIiAoRnVsbExlbmd0aCksICAvLyAlNyAtPiAlMyBlYXgKKyAgICAgICAgIlMiIChwcmV2X3JvdyksICAgIC8vICU1IC0+ICU0IGVzaS9yc2kKKyAgICAgICAgIkQiIChyb3cpICAgICAgICAgIC8vICU2IC0+ICU1IGVkaS9yZGkKKworICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyAgICAgICAgX0NMT0JCRVJfcjE1CisgICAgICAgIF9DTE9CQkVSX2VicAorICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CiAgICApOwogCiAgICAvLyBub3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKQEAgLTI4NzUsMTUyICszMzYxLDE0OSBAQAogICAgewogICAgICAgY2FzZSAzOgogICAgICAgewotICAgICAgICAgX0FjdGl2ZU1hc2sudXNlICA9IDB4MDAwMDAwMDAwMGZmZmZmZkxMOwotICAgICAgICAgX1NoaWZ0QnBwLnVzZSA9IDI0OyAgICAvLyA9PSAzICogOAotICAgICAgICAgX1NoaWZ0UmVtLnVzZSA9IDQwOyAgICAvLyA9PSA2NCAtIDI0CisvLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gMyAqIDgKKy8vICAgICAgIF9TaGlmdFJlbSA9IDQwOyAgICAvLyA9PSA2NCAtIDI0CiAKICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0gICAgICAgICAgICAibW92cSBfQWN0aXZlTWFzaywgJSVtbTcgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgX2RpZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwotICAgICAgICAgICAgIm1vdnEgX0xCQ2FycnlNYXNrLCAlJW1tNSAgICAgXG5cdCIgLy8gIGFsaWdubWVudCBib3VuZGFyeQotLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi0gICAgICAgICAgICAibW92cSBfSEJDbGVhck1hc2ssICUlbW00ICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKKyAgICAgICAgICAgIExPQURfR09UX3JicAorICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzVfM18wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazVfM18wIC0+IG1tNworLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYWxpZ25tZW50IGJvdW5kYXJ5CisgICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gW2ludGVybGVhdmUgZm9yIHBhcmFsbGVsLj9dCisvLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCisgICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAorLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCisgICAgICAgICAgICBSRVNUT1JFX3JicAogCiAgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWN4LCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCisgICAgICAgICAgICAibW92cSAgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0Ii8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKICAgICAgICAgICJhdmdfM2xwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJSVlZGksJSVlY3gsKSwgJSVtbTAgICBcblx0IiAvLyBsb2FkIG1tMCB3aXRoIEF2Zyh4KQotICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0yICAgICAgIFxuXHQiIC8vIGNvcnJlY3QgcG9zaXRpb24gUmF3KHgtYnBwKQorICAgICAgICAgICAgIm1vdnEgICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIgLy8gbG9hZCBtbTAgd2l0aCBBdmcoeCkKKyAgICAgICAgICAgICJtb3ZxICAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBjb3JyZWN0IHBvc2l0aW9uIFJhdyh4LWJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEKLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgbW0xIHdpdGggUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKKyAgICAgICAgICAgICJtb3ZxICAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgbW0xIHdpdGggUHJpb3IoeCkKKyAgICAgICAgICAgICJtb3ZxICAlJW1tNywgJSVtbTYgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZCAgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZyb3cgYnl0ZQogICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKICAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBMQkNhcnJ5Ci0gICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZworICAgICAgICAgICAgIm1vdnEgICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCi0gICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQorICAgICAgICAgICAgInBhbmQgICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodmFsaWQgb25seSBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIFJhdyh4LWJwcCkvMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQorICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKICAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTYgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCisgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDMtNQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW0yICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKLSAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCisgICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgorICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQorICAgICAgICAgICAgIm1vdnEgICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCi0gICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQorICAgICAgICAgICAgInBhbmQgICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodmFsaWQgb25seSBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIFJhdyh4LWJwcCkvMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgorICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKIAogICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5Ci0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tNiAgICAgICBcblx0IiAvLyBzaGlmdCBtbTYgbWFzayB0byBjb3ZlciBsYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0d28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTIgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBvbmx5IG5lZWRzIHRvIGJlIHNoaWZ0ZWQgb25jZSBoZXJlIHRvCisgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBtbTYgbWFzayB0byBjb3ZlciBsYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0d28gYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCisgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIG5lZWQgYmUgc2hpZnRlZCBvbmx5IG9uY2UgaGVyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBjb3JyZWN0IHgtYnBwIG9mZnNldC4KLSAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCisgICAgICAgICAgICAibW92cSAgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKLSAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCisgICAgICAgICAgICAicGFuZCAgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCisgICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCisgICAgICAgICAgICAicGFuZCAgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImFkZGwgICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5Ci0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJSVlZGksJSVlY3gsKSBcblx0IgorICAgICAgICAgICAgIm1vdnEgICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgIC8vIG1vdmUgdXBkYXRlZCBSYXcoeCkgdG8gdXNlIGFzIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlY3ggICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhdyh4KSB0byBtbTIKKyAgICAgICAgICAgICJjbXBsICAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAorICAgICAgICAgICAgIm1vdnEgICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3KHgpIHRvIG1tMgogICAgICAgICAgICAgImpiIGF2Z18zbHAgICAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKIAotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCisgICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiAlbW0wLCAuLi4sICVtbTcgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9CiAgICAgICBicmVhazsgIC8vIGVuZCAzIGJwcAogCi0gICAgICBjYXNlIDY6Ci0gICAgICBjYXNlIDQ6Ci0gICAgICAvL2Nhc2UgNzogICAvLyB3aG8gd3JvdGUgdGhpcz8gIFBORyBkb2Vzbid0IHN1cHBvcnQgNSBvciA3IGJ5dGVzL3BpeGVsCi0gICAgICAvL2Nhc2UgNTogICAvLyBHUlIgQk9HVVMKLSAgICAgIHsKLSAgICAgICAgIF9BY3RpdmVNYXNrLnVzZSAgPSAweGZmZmZmZmZmZmZmZmZmZmZMTDsgLy8gdXNlIHNoaWZ0IGJlbG93IHRvIGNsZWFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlIGluYWN0aXZlIGJ5dGVzCi0gICAgICAgICBfU2hpZnRCcHAudXNlID0gYnBwIDw8IDM7Ci0gICAgICAgICBfU2hpZnRSZW0udXNlID0gNjQgLSBfU2hpZnRCcHAudXNlOworICAgICAgY2FzZSA0OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDYgYnBwIGNhc2UgdmlhIF9TaGlmdEJwcCBhbmQgX1NoaWZ0UmVtLAorICAgICAgeyAgICAgICAgIC8vIGJ1dCBsb29wIHVzZXMgYWxsIDggTU1YIHJlZ3MsIGFuZCBwc3JscS9wc2xscSByZXF1aXJlIDY0LWJpdAorICAgICAgICAgICAgICAgIC8vIG1lbSAoUElDLy5zbyBwcm9ibGVtcyksIE1NWCByZWcgKG5vbmUgbGVmdCksIG9yIGltbWVkaWF0ZQorLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyAzMiAocHNsbHEpCisvLyAgICAgICBfU2hpZnRSZW0gPSA2NCAtIF9TaGlmdEJwcDsgIC8vIDMyIChwc3JscSkKIAogICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgIm1vdnEgX0hCQ2xlYXJNYXNrLCAlJW1tNCAgICBcblx0IgotCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00CisgICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQogICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLSAgICAgICAgICAgICJtb3ZsIF9kaWYsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKKy8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CisgICAgICAgICAgICAibW92cSAiIEFNQVNLMF84XzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrMF84XzAgLT4gbW03CisgICAgICAgICAgICBSRVNUT1JFX3JicAogCi0gICAgICAgICAgICAvLyBsb2FkIF9BY3RpdmVNYXNrIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAibW92cSBfQWN0aXZlTWFzaywgJSVtbTcgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTcgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgX0xCQ2FycnlNYXNrLCAlJW1tNSAgICBcblx0IgotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTYgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBmb3IgMm5kIGFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBncm91cAorICAgICAgICAgICAgLy8gLi4uIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCisvLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQorICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCisvLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUwICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCisgICAgICAgICAgICAibW92cSAgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgZm9yIDJuZCBhY3RpdmUgZ3JvdXAKIAogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQogICAgICAgICAgImF2Z180bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWN4LCksICUlbW0wICBcblx0IgotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTIgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlY3gsKSwgJSVtbTEgIFxuXHQiCisgICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCisgICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgICAgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gYXZlcmFnZQogICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKQEAgLTMwNDcsNyArMzUzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW0yICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQorICAgICAgICAgICAgInBzbGxxICQzMiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCkBAIC0zMDYyLDU0ICszNTQ1LDExNCBAQAogICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAiY21wbCBfTU1YTGVuZ3RoLCAlJWVjeCAgICAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgIC8vIHByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICAiamIgYXZnXzRscCAgICAgICAgICAgICAgICAgIFxuXHQiCiAKICAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCiAKLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCisgICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2lmIDAgIC8qICVtbTAsIC4uLiwgJW1tNyBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAsICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIgorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKICNlbmRpZgogICAgICAgICAgKTsKICAgICAgIH0KLSAgICAgIGJyZWFrOyAgLy8gZW5kIDQsNiBicHAKKyAgICAgIGJyZWFrOyAgLy8gZW5kIDQgYnBwCisKKyAgICAgIGNhc2UgMToKKyAgICAgIHsKKyAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0CisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogeCA9IG9mZnNldCB0byBhbGlnbi4gYmRyeQorLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpOiAgQXZnKHgpCisvLyBwcmVsb2FkICAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiCisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQorICAgICAgICAgICAgImpuYiBhdmdfMWVuZCAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAgICBTQVZFX2VicAorCisgICAgICAgICAgICAvLyBkbyBBdmcgZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKKy8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaTogIFByaW9yKHgpCisgICAgICAgICAgICAibW92ICAlMSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgb2Ygcm93IHBvaW50ZXIuLi4KKyAgICAgICAgICAgICJkZWMgICIgUEJQICIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWJwL3JicDogIFJhdyh4LWJwcCkKKyAgICAgICAgICAgICJ4b3JsICUlZWR4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlZHggYmVmb3JlIHVzaW5nIGRsICYgZHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGluIGxvb3AgYmVsb3cKKyAgICAgICAgICAgIFNBVkVfR09UX2VieAorCisgICAgICAgICAiYXZnXzFscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKKyAgICAgICAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJtb3ZiICglMCwiIFBDWCAiLCksICUlZGwgICAgXG5cdCIgLy8gbG9hZCBkbCB3aXRoIFByaW9yKHgpCisgICAgICAgICAgICAibW92YiAoIiBQQlAgIiwiIFBDWCAiLCksICUlYmwgXG5cdCIgLy8gbG9hZCBibCB3aXRoIFJhdyh4LWJwcCkKKyAgICAgICAgICAgICJhZGR3ICUlZHgsICUlYnggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJpbmNsICUlZWN4ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJzaHJ3ICUlYnggICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIGJ5IDIKKyAgICAgICAgICAgICJhZGRiIC0xKCUxLCIgUENYICIsKSwgJSVibCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluYyBlY3gKKyAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgaWYgYXQgZW5kIG9mIGFycmF5CisgICAgICAgICAgICAibW92YiAlJWJsLCAtMSglMSwiIFBDWCAiLCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgUmF3KHgpOworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWN4CisgICAgICAgICAgICAiamIgYXZnXzFscCAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICAgIFJFU1RPUkVfR09UX2VieAorICAgICAgICAgICAgUkVTVE9SRV9lYnAKKworICAgICAgICAgImF2Z18xZW5kOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCisgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAorICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQorCisgICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAorICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgLy8gZWF4CisKKyAgICAgICAgICAgIDogIiVlZHgiICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisgICAgICAgICAgICAgIF9DTE9CQkVSX0dPVF9lYngKKyAgICAgICAgICAgICAgX0NMT0JCRVJfZWJwCisgICAgICAgICApOworICAgICAgfQorICAgICAgcmV0dXJuOyAgLy8gZW5kIDEgYnBwCiAKICAgICAgIGNhc2UgMjoKICAgICAgIHsKLSAgICAgICAgIF9BY3RpdmVNYXNrLnVzZSAgPSAweDAwMDAwMDAwMDAwMGZmZmZMTDsKLSAgICAgICAgIF9TaGlmdEJwcC51c2UgPSAxNjsgICAvLyA9PSAyICogOAotICAgICAgICAgX1NoaWZ0UmVtLnVzZSA9IDQ4OyAgIC8vID09IDY0IC0gMTYKKy8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgIC8vID09IDIgKiA4CisvLyAgICAgICBfU2hpZnRSZW0gPSA0ODsgICAvLyA9PSA2NCAtIF9TaGlmdEJwcAogCiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAvLyBsb2FkIF9BY3RpdmVNYXNrCi0gICAgICAgICAgICAibW92cSBfQWN0aXZlTWFzaywgJSVtbTcgICAgIFxuXHQiCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgIC8vIGxvYWQgKGZvcm1lcikgX0FjdGl2ZU1hc2sKKyAgICAgICAgICAgICJtb3ZxICIgQU1BU0s2XzJfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2s2XzJfMCAtPiBtbTcKICAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8gYWxpZ25tZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kYXJ5Ci0gICAgICAgICAgICAibW92cSBfTEJDYXJyeU1hc2ssICUlbW01ICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgIm1vdnEgX0hCQ2xlYXJNYXNrLCAlJW1tNCAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQorLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKKyAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBfTEJDYXJyeU1hc2sgLT4gbW01CisvLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCisgICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAorLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCisgICAgICAgICAgICBSRVNUT1JFX3JicAogCiAgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWN4LCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCisgICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCiAgICAgICAgICAiYXZnXzJscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJSVlZGksJSVlY3gsKSwgJSVtbTAgIFxuXHQiCi0gICAgICAgICAgICAicHNybHEgX1NoaWZ0UmVtLCAlJW1tMiAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMSAgXG5cdCIgLy8gIChHUlIgQlVHRklYOiAgd2FzIHBzbGxxKQorICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgorICAgICAgICAgICAgInBzcmxxICQ0OCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiIC8vICAoR1JSIEJVR0ZJWDogIHdhcyBwc2xscSkKICAgICAgICAgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gYXZlcmFnZQogICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKQEAgLTMxMzgsMTAgKzM2ODEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggQWN0aXZlIGJ5dGUKIAogICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5Ci0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tNiAgICAgIFxuXHQiIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlcgorICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgMiAmIDMKICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW0yICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQorICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCkBAIC0zMTU5LDEwICszNzAyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogCiAgICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW02ICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCisgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyA0ICYgNQogICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTIgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKQEAgLTMxNzksMTAgKzM3MjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAKICAgICAgICAgICAgIC8vIGFkZCA0dGggYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTYgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKKyAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDYgJiA3CiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tMiAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKKyAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwpAQCAtMzE5OSwxMDIgKzM3NDIsMTQ4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLQotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlY3ggICAgICBcblx0IgorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgIC8vIHByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICAiamIgYXZnXzJscCAgICAgICAgICAgICAgICAgIFxuXHQiCiAKICAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCiAKLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCisgICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2lmIDAgIC8qICVtbTAsIC4uLiwgJW1tNyBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAsICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIgorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKICNlbmRpZgogICAgICAgICAgKTsKICAgICAgIH0KICAgICAgIGJyZWFrOyAgLy8gZW5kIDIgYnBwCiAKLSAgICAgIGNhc2UgMToKKyAgICAgIGNhc2UgNjogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA0IGJwcCBjYXNlIChzZWUgY29tbWVudHMgdGhlcmUpCiAgICAgICB7CisvLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKKy8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMTYgKHBzcmxxKQorCiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00CisgICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQogICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLSNpZmRlZiBfX1BJQ19fCi0gICAgICAgICAgICAicHVzaGwgJSVlYnggICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNhdmUgR2xvYmFsIE9mZnNldCBUYWJsZSBpbmRleAotI2VuZGlmCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVieCAgICAgICAgICAgIFxuXHQiIC8vIGVieDogIHggPSBvZmZzZXQgdG8gYWxpZ25tZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kYXJ5Ci0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgImNtcGwgX0Z1bGxMZW5ndGgsICUlZWJ4ICAgICBcblx0IiAvLyB0ZXN0IGlmIG9mZnNldCBhdCBlbmQgb2YgYXJyYXkKLSAgICAgICAgICAgICJqbmIgYXZnXzFlbmQgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIGRvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0vLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCi0gICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlZHggICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAic3VibCBicHAsICUlZWR4ICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQotICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBlZHg6ICBSYXcoeC1icHApCi0gICAgICAgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBpbiBsb29wIGJlbG93Ci0gICAgICAgICAiYXZnXzFscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKLSAgICAgICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVieCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCi0gICAgICAgICAgICAibW92YiAoJSVlZHgsJSVlYngsKSwgJSVhbCAgIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCi0gICAgICAgICAgICAiYWRkdyAlJWN4LCAlJWF4ICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAic2hydyAlJWF4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCi0gICAgICAgICAgICAiYWRkYiAtMSglJWVkaSwlJWVieCwpLCAlJWFsIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmMgZWJ4Ci0gICAgICAgICAgICAiY21wbCBfRnVsbExlbmd0aCwgJSVlYnggICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGVuZCBvZiBhcnJheQotICAgICAgICAgICAgIm1vdmIgJSVhbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IiAvLyB3cml0ZSBiYWNrIFJhdyh4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVieAotICAgICAgICAgICAgImpiIGF2Z18xbHAgICAgICAgICAgICAgICAgICBcblx0IgorLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKKyAgICAgICAgICAgICJtb3ZxICIgQU1BU0swXzhfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2swXzhfMCAtPiBtbTcKKyAgICAgICAgICAgIFJFU1RPUkVfcmJwCiAKLSAgICAgICAgICJhdmdfMWVuZDogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSNpZmRlZiBfX1BJQ19fCi0gICAgICAgICAgICAicG9wbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaW5kZXgKLSNlbmRpZgorICAgICAgICAgICAgLy8gLi4uIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCisvLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQorICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTcgICAgICAgICAgICBcblx0IgorLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQorICAgICAgICAgICAgIm1vdnEgICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBtYXNrIGZvciAybmQgYWN0aXZlIGdyb3VwCiAKLSAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKKyAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQorICAgICAgICAgImF2Z182bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgorICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiCisgICAgICAgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIGF2ZXJhZ2UKKyAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCisgICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCisgICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCisgICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKKyAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQorICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cworICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKKyAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCisgICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCisgICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCisgICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZworICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKKyAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQorICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgorICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCisgICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQorICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKKyAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKKyAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKKyAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCisgICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAorICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5CisgICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCisgICAgICAgICAgICAvLyBwcmVwIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAorICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgorICAgICAgICAgICAgImpiIGF2Z182bHAgICAgICAgICAgICAgICAgICBcblx0IgogCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgLy8gZWN4ICAgICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChwcmV2X3JvdyksICAvLyBlc2kKLSAgICAgICAgICAgICAgIjIiIChyb3cpICAgICAgICAvLyBlZGkKKyAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCiAKLSAgICAgICAgICAgIDogIiVlYXgiLCAiJWVkeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWZuZGVmIF9fUElDX18KLSAgICAgICAgICAgICwgIiVlYngiCisgICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAorICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4CisKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKKyAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9Ci0gICAgICByZXR1cm47ICAvLyBlbmQgMSBicHAKKyAgICAgIGJyZWFrOyAgLy8gZW5kIDYgYnBwCiAKICAgICAgIGNhc2UgODoKICAgICAgIHsKICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPT0gb2Zmc2V0IHRvIGFsaWdubWVudAotICAgICAgICAgICAgIm1vdnEgX0xCQ2FycnlNYXNrLCAlJW1tNSAgICBcblx0IiAvLyAgICAgICAgICAgIGJvdW5kYXJ5Ci0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgIm1vdnEgX0hCQ2xlYXJNYXNrLCAlJW1tNCAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQorLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKKyAgICAgICAgICAgIExPQURfR09UX3JicAorICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIFtpbnRlcmxlYXZlIGZvciBwYXJhbGxlbC4/XQorLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQorICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKKy8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQorICAgICAgICAgICAgUkVTVE9SRV9yYnAKIAogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcworICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoTk8gTkVFRCB0byBjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKIAogICAgICAgICAgImF2Z184bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWN4LCksICUlbW0wICBcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW0zICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0xICBcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTEgICBcblx0IgogICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKICAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKQEAgLTMzMDYsNzggKzM4OTUsMzYgQEAKICAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNywgZWFjaCBieXRlCiAgICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnLCBlYWNoCiAgICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpIHRvIEF2ZyBmb3IgZWFjaAotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlY3ggICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWN4LCkgXG5cdCIKKyAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCisgICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIHJldXNlIGFzIFJhdyh4LWJwcCkKICAgICAgICAgICAgICJqYiBhdmdfOGxwICAgICAgICAgICAgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKIAotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSAgICAgICAgLy8gZWRpCisgICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAorICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4CiAKLSAgICAgICAgICAgIDogIiVlY3giICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWYgMCAgLyogJW1tMCwgLi4uLCAlbW01IG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIgorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IiwgIiVtbTUiCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9CiAgICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAogCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIC8vIGJwcCBncmVhdGVyIHRoYW4gOCAoIT0gMSwyLDMsNCxbNV0sNixbN10sOCkKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8vIGJwcCAhPSAxLDIsMyw0LDYsODogIGRvZXNuJ3QgZXhpc3QKICAgICAgIHsKLQotI2lmZGVmIFBOR19ERUJVRwotICAgICAgICAgLy8gR1JSOiAgUFJJTlQgRVJST1IgSEVSRTogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECi0gICAgICAgIHBuZ19kZWJ1ZygxLAotICAgICAgICAiSW50ZXJuYWwgbG9naWMgZXJyb3IgaW4gcG5nZ2NjcmQgKHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpKVxuIik7CisgICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECisjaWYgZGVmaW5lZChQTkdfREVCVUcpCisgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKKyAgICAgICAgICAgInBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpKVxuIik7CiAjZW5kaWYKLQotI2lmIDAKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgIm1vdnEgX0xCQ2FycnlNYXNrLCAlJW1tNSAgICBcblx0IgotICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLSAgICAgICAgICAgICJtb3ZsIF9kaWYsICUlZWJ4ICAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeCA9IG9mZnNldCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgICAgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi0gICAgICAgICAgICAibW92cSBfSEJDbGVhck1hc2ssICUlbW00ICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlZHggICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCi0gICAgICAgICAgICAic3VibCBicHAsICUlZWR4ICAgICAgICAgICAgIFxuXHQiIC8vIGVkeDogIFJhdyh4LWJwcCkKLSAgICAgICAgICJhdmdfQWxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVieCwpLCAlJW1tMCAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVieCwpLCAlJW1tMSAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCi0gICAgICAgICAgICAibW92cSAoJSVlZHgsJSVlYngsKSwgJSVtbTIgIFxuXHQiCi0gICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCi0gICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0zLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gQXZnIGZvciBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggYnl0ZQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWJ4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSB0byBBdmcgZm9yIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlYnggICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWJ4LCkgXG5cdCIKLSAgICAgICAgICAgICJqYiBhdmdfQWxwICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgOiAvLyBGSVhBU006IG91dHB1dCByZWdzL3ZhcnMgZ28gaGVyZSwgZS5nLjogICI9bSIgKG1lbW9yeV92YXIpCi0KLSAgICAgICAgICAgIDogLy8gRklYQVNNOiBpbnB1dCByZWdzLCBlLmcuOiAgImMiIChjb3VudCksICJTIiAoc3JjKSwgIkQiIChkZXN0KQotCi0gICAgICAgICAgICA6ICIlZWJ4IiwgIiVlZHgiLCAiJWVkaSIsICIlZXNpIiAvLyBDSEVDS0FTTTogY2xvYmJlciBsaXN0Ci0gICAgICAgICApOwotI2VuZGlmIC8qIDAgLSBORVZFUiBSRUFDSEVEICovCiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMzM4Niw2MCArMzkzMyw2OSBAQAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgLy8gTU1YIGFjY2VsZXJhdGlvbiBjb21wbGV0ZTsgbm93IGRvIGNsZWFuLXVwCiAgICAgICAvLyBjaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi0jaWZkZWYgX19QSUNfXwotICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgICAgICAgICBcblx0IiAvLyBzYXZlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgotICAgICAgIm1vdmwgX01NWExlbmd0aCwgJSVlYnggICAgICBcblx0IiAvLyBlYng6ICB4ID09IG9mZnNldCBieXRlcyBhZnRlciBNTVgKLS8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi0gICAgICAiY21wbCBfRnVsbExlbmd0aCwgJSVlYnggICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQorLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgorLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IiAvLyBlYXg6ICB4ID09IG9mZnNldCBieXRlcyBhZnRlciBNTVgKKy8vcHJlICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCisgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQogICAgICAgImpuYiBhdmdfZW5kICAgICAgICAgICAgICAgICBcblx0IgogCisgICAgICBTQVZFX2VicAorCiAgICAgICAvLyBkbyBBdmcgZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLS8vcHJlICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKLSAgICAgICJtb3ZsICUlZWRpLCAlJWVkeCAgICAgICAgICAgXG5cdCIKLS8vcHJlICJzdWJsIGJwcCwgJSVlZHggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCi0gICAgICAic3VibCAlJWVjeCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIGVkeDogIFJhdyh4LWJwcCkKKy8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKKyAgICAgICJtb3YgICUyLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcG9pbnRlci4uLgorLy9wcmUgInN1YmwgYnBwLCAiIFBCUCAiICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKKyAgICAgICJzdWIgICIgUENYICIsIiBQQlAgIiAgICAgICAgXG5cdCIgLy8gZWJwOiAgUmF3KHgtYnBwKQogICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeCBiZWxvdwogCisgICAgICBTQVZFX0dPVF9lYngKKwogICAgImF2Z19scDI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgLy8gUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAoJSVlc2ksJSVlYngsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQotICAgICAgIm1vdmIgKCUlZWR4LCUlZWJ4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIGFsIHdpdGggUmF3KHgtYnBwKQotICAgICAgImFkZHcgJSVjeCwgJSVheCAgICAgICAgICAgICBcblx0IgotICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgInNocncgJSVheCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgotICAgICAgImFkZGIgLTEoJSVlZGksJSVlYngsKSwgJSVhbCBcblx0IiAvLyBhZGQgQXZnKHgpOyAtMSB0byBvZmZzZXQgaW5jIGVieAotICAgICAgImNtcGwgX0Z1bGxMZW5ndGgsICUlZWJ4ICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKLSAgICAgICJtb3ZiICUlYWwsIC0xKCUlZWRpLCUlZWJ4LCkgXG5cdCIgLy8gd3JpdGUgYmFjayBSYXcoeCkgW21vdiBkb2VzIG5vdAotICAgICAgImpiIGF2Z19scDIgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVieF0KKyAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKKyAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCisgICAgICAibW92YiAoIiBQQlAgIiwiIFBBWCAiLCksICUlYmwgXG5cdCIgLy8gbG9hZCBibCB3aXRoIFJhdyh4LWJwcCkKKyAgICAgICJhZGR3ICUlY3gsICUlYnggICAgICAgICAgICAgXG5cdCIKKyAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJzaHJ3ICUlYnggICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIGJ5IDIKKyAgICAgICJhZGRiIC0xKCUyLCIgUEFYICIsKSwgJSVibCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYXgKKyAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgaWYgYXQgZW5kIG9mIGFycmF5CisgICAgICAibW92YiAlJWJsLCAtMSglMiwiIFBBWCAiLCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgUmF3KHgpIFttb3YgZG9lcyBub3QKKyAgICAgICJqYiBhdmdfbHAyICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIGFmZmVjdCBmbGFnczsgLTEgdG8gb2Zmc2V0IGluYyBlYXhdCisKKyAgICAgIFJFU1RPUkVfR09UX2VieAorICAgICAgUkVTVE9SRV9lYnAKIAogICAgImF2Z19lbmQ6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlbmQgTU1YOyBwcmVwIGZvciBwb3NzLiBGUCBpbnN0cnMuCi0jaWZkZWYgX19QSUNfXwotICAgICAgInBvcGwgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgogCiAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCisgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKKyAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKIAotICAgICAgOiAiMCIgKGJwcCksICAgICAgIC8vIGVjeCAgICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocHJldl9yb3cpLCAgLy8gZXNpCi0gICAgICAgICIyIiAocm93KSAgICAgICAgLy8gZWRpCisgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKKyAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgIjMiIChNTVhMZW5ndGgpLCAgIC8vIGVheAorICAgICAgICAiNCIgKEZ1bGxMZW5ndGgpICAgLy8gZWR4CiAKLSAgICAgIDogIiVlYXgiLCAiJWVkeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWZuZGVmIF9fUElDX18KLSAgICAgICwgIiVlYngiCi0jZW5kaWYKKyAgICAgIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisgICAgICAgIENMT0JCRVJfR09UX2VieAorICAgICAgICBDTE9CX0NPTU1BX2VieF9lYnAKKyAgICAgICAgQ0xPQkJFUl9lYnAKICAgICk7CiAKIH0gLyogZW5kIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpICovCi0jZW5kaWYKKworI2VuZGlmIC8qIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRCAqLwogCiAKIAotI2lmZGVmIFBOR19USFJFQURfVU5TQUZFX09LCisjaWYgZGVmaW5lZChQTkdfTU1YX1JFQURfRklMVEVSX1BBRVRIX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQorCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLyAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFAgQSBFIFQgSCAgICAgICAgIC8vCkBAIC0zNDUyLDE0MSArNDAwOCwxNTcgQEAKIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCiB7CisgICB1bnNpZ25lZCBGdWxsTGVuZ3RoLCBNTVhMZW5ndGg7ICAvLyBwbmdfdWludF8zMiBpcyBhY3R1YWxseSA2NC1iaXQgb24geDg2LTY0CiAgICBpbnQgYnBwOworICAgaW50IGR1bW15X3ZhbHVlX2E7CiAgICBpbnQgZHVtbXlfdmFsdWVfYzsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciAyIChjeCkgd2FzIHNwaWxsZWQnIGVycm9yCi0gICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgIGludCBkdW1teV92YWx1ZV9EOworICAgaW50IGR1bW15X3ZhbHVlX2Q7CisgICBwbmdfY2hhcnAgZHVtbXlfdmFsdWVfUzsKKyAgIHBuZ19jaGFycCBkdW1teV92YWx1ZV9EOworICAgaW50IGRpZmY7IC8vICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CiAKLSAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAvLyBHZXQgIyBieXRlcyBwZXIgcGl4ZWwKLSAgIF9GdWxsTGVuZ3RoICA9IHJvd19pbmZvLT5yb3dieXRlczsgLy8gIyBvZiBieXRlcyB0byBmaWx0ZXIKKyAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCisgICBGdWxsTGVuZ3RoID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKIAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotI2lmZGVmIF9fUElDX18KLSAgICAgICJwdXNobCAlJWVieCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2F2ZSBpbmRleCB0byBHbG9iYWwgT2Zmc2V0IFRhYmxlCi0jZW5kaWYKKyAgICAgIFNBVkVfR09UX2VieAorICAgICAgU0FWRV9yMTUKKyAgICAgIFNBVkVfZWJwCisvL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKICAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeCBvZmZzZXQKLS8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKKy8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAgInhvcmwgJSVlZHgsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBlZHg6ICB4LWJwcCBvZmZzZXQKLS8vcHJlICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKKy8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgorICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQogICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgogCiAgICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKICAgICAgIC8vIE5vdGU6IHRoZSBmb3JtdWxhIHdvcmtzIG91dCB0byBiZSBhbHdheXMKICAgICAgIC8vICAgUGFldGgoeCkgPSBSYXcoeCkgKyBQcmlvcih4KSAgICAgIHdoZXJlIHggPCBicHAKICAgICJwYWV0aF9ybHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZiICglJWVkaSwlJWVieCwpLCAlJWFsICAgXG5cdCIKLSAgICAgICJhZGRiICglJWVzaSwlJWVieCwpLCAlJWFsICAgXG5cdCIKKyAgICAgICJtb3ZiICglMiwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKKyAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKICAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKIC8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglJWVkaSwlJWVieCwpIFxuXHQiCisgICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiCiAgICAgICAiamIgcGFldGhfcmxwICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQKLSAgICAgICJtb3ZsICUlZWRpLCBfZGlmICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKLSAgICAgICJhZGRsICUlZWJ4LCBfZGlmICAgICAgICAgICAgXG5cdCIgLy8gYWRkIGJwcAotICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgImFkZGwgJDB4ZiwgX2RpZiAgICAgICAgICAgICBcblx0IiAvLyBhZGQgNyArIDggdG8gaW5jciBwYXN0IGFsaWdubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib3VuZGFyeQotICAgICAgImFuZGwgJDB4ZmZmZmZmZjgsIF9kaWYgICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgInN1YmwgJSVlZGksIF9kaWYgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBmcm9tIHN0YXJ0ID09PiB2YWx1ZSBlYngKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgYWxpZ25tZW50Ci0gICAgICAianogcGFldGhfZ28gICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBmaXggYWxpZ25tZW50CiAKKyAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudCAobm90ZTogIGNvbXB1dGluZyBfZGVsdGFfIG9mIHR3byBwb2ludGVycywKKyAgICAgIC8vIHNvIGhlcmVhZnRlciAlJWVicCBpcyBzdWZmaWNpZW50IGV2ZW4gb24gNjQtYml0KQorICAgICAgIm1vdiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdworICAgICAgImFkZCAgIiBQQlggIiwiIFBCUCAiICAgICAgICBcblx0IiAvLyBhZGQgYnBwCisgICAgICAiYWRkICAkMHhmLCAiIFBCUCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3KzggdG8gaW5jciBwYXN0IGFsaWdubWVudCBiZHJ5CisvLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQorICAgICAgQ0xFQVJfQk9UVE9NXzNfQklUUyAgUEJQICAgICJcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQorICAgICAgInN1YiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCByb3cgcHRyIGFnYWluID0+IGVicCA9CisgICAgICAianogcGFldGhfZ28gICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWJ4IGF0IGFsaWdubWVudAorCisgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCisKKyAgICAgIFNBVkVfcjExX3IxMl9yMTMKKworICAgICAgLy8gZml4IGFsaWdubWVudAogICAgInBhZXRoX2xwMTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKLSAgICAgICJtb3ZiICglJWVzaSwlJWVkeCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAorICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKKyAgICAgICJtb3ZiICglMSwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZsICUlZWF4LCBfcGF0ZW1wICAgICAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQorICAgICAgIm1vdmwgJSVlYXgsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCiAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAibW92YiAoJSVlZGksJSVlZHgsKSwgJSVhbCAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGFsCisgICAgICAibW92YiAoJTIsIiBQRFggIiwpLCAlJWFsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGFsCiAgICAgICAic3VibCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAgIm1vdmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAiYWRkbCBfcGF0ZW1wLCAlJWVheCAgICAgICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgorICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtIGMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgorICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgIC8vIHBjID0gYWJzKHBjdikKICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKICAgICAgICJqeiBwYWV0aF9wY2EgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICJuZWdsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKIAogICAgInBhZXRoX3BjYTogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmwgJSVlYXgsIF9wY3RlbXAgICAgICAgICBcblx0IiAvLyBzYXZlIHBjIGZvciBsYXRlciB1c2UKKyAgICAgICJtb3ZsICUlZWF4LCAiIHBjX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCiAgICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWN4ICAgIFxuXHQiCiAgICAgICAianogcGFldGhfcGJhICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCiAKICAgICJwYWV0aF9wYmE6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWN4LCBfcGJ0ZW1wICAgICAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCisgICAgICAibW92bCAlJWVjeCwgIiBwYl9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQogICAgICAgLy8gcGEgPSBhYnMocGF2KQotICAgICAgIm1vdmwgX3BhdGVtcCwgJSVlYXggICAgICAgICBcblx0IgorICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IgogICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVheCAgICBcblx0IgogICAgICAgImp6IHBhZXRoX3BhYSAgICAgICAgICAgICAgICBcblx0IgogICAgICAgIm5lZ2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwogCiAgICAicGFldGhfcGFhOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92bCAlJWVheCwgX3BhdGVtcCAgICAgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQorICAgICAgIm1vdmwgJSVlYXgsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBhIGZvciBsYXRlciB1c2UKICAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKICAgICAgICJjbXBsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgICJqbmEgcGFldGhfYWJiICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCi0gICAgICAiY21wbCBfcGN0ZW1wLCAlJWVjeCAgICAgICAgIFxuXHQiCisgICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAiam5hIHBhZXRoX2JiYyAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCisgICAgICAibW92YiAoJTEsIiBQRFggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgICJqbXAgcGFldGhfcGFldGggICAgICAgICAgICAgXG5cdCIKIAogICAgInBhZXRoX2JiYzogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKLSAgICAgICJtb3ZiICglJWVzaSwlJWVieCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCisgICAgICAibW92YiAoJTEsIiBQQlggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAogICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgogCiAgICAicGFldGhfYWJiOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKLSAgICAgICJjbXBsIF9wY3RlbXAsICUlZWF4ICAgICAgICAgXG5cdCIKKyAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVheCAgICAgXG5cdCIKICAgICAgICJqbmEgcGFldGhfYWJjICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAibW92YiAoJSVlc2ksJSVlZHgsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKKyAgICAgICJtb3ZiICglMSwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgogCiAgICAicGFldGhfYWJjOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCi0gICAgICAibW92YiAoJSVlZGksJSVlZHgsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCisgICAgICAibW92YiAoJTIsIiBQRFggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCiAKICAgICJwYWV0aF9wYWV0aDogICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2Ci0gICAgICAiYWRkYiAlJWNsLCAtMSglJWVkaSwlJWVieCwpIFxuXHQiCi0gICAgICAiY21wbCBfZGlmLCAlJWVieCAgICAgICAgICAgIFxuXHQiCisgICAgICAiYWRkYiAlJWNsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiCisgICAgICAiY21wbCAlJWVicCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAiamIgcGFldGhfbHAxICAgICAgICAgICAgICAgIFxuXHQiCiAKKyAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKKwogICAgInBhZXRoX2dvOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmwgX0Z1bGxMZW5ndGgsICUlZWN4ICAgICBcblx0IgorICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAogICAgICAgIm1vdmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgICJzdWJsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi0gICAgICAibW92bCAlJWVjeCwgX01NWExlbmd0aCAgICAgIFxuXHQiCi0jaWZkZWYgX19QSUNfXwotICAgICAgInBvcGwgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgorLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgorICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKKyAgICAgIFJFU1RPUkVfZWJwICAgICAgICAgICAgICAgICAgICAgICAgLy8gIChjb3VsZCBzd2FwIGVicCBhbmQgZWR4IGZ1bmN0aW9ucykKKyAgICAgIFJFU1RPUkVfcjE1CisgICAgICBSRVNUT1JFX0dPVF9lYngKIAotICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICA6ICI9YyIgKE1NWExlbmd0aCksICAgICAgICAgICAgICAgIC8vIG91dHB1dCByZWdzCiAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgIj1hIiAoZGlmZikKIAotICAgICAgOiAiMCIgKGJwcCksICAgICAgIC8vIGVjeCAgICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocHJldl9yb3cpLCAgLy8gZXNpCi0gICAgICAgICIyIiAocm93KSAgICAgICAgLy8gZWRpCisgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKKyAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgIC8vIGVheAogCi0gICAgICA6ICIlZWF4IiwgIiVlZHgiICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2lmbmRlZiBfX1BJQ19fCi0gICAgICAsICIlZWJ4IgotI2VuZGlmCisgICAgICA6ICIlZWR4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorICAgICAgICBfQ0xPQkJFUl9yMTFfcjEyX3IxMworICAgICAgICBfQ0xPQkJFUl9yMTUKKyAgICAgICAgX0NMT0JCRVJfZWJwCisgICAgICAgIF9DTE9CQkVSX0dPVF9lYngKICAgICk7CiAKICAgIC8vIG5vdyBkbyB0aGUgbWF0aCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJvdwpAQCAtMzU5NCwyNiArNDE2NiwyNiBAQAogICAgewogICAgICAgY2FzZSAzOgogICAgICAgewotICAgICAgICAgX0FjdGl2ZU1hc2sudXNlID0gMHgwMDAwMDAwMDAwZmZmZmZmTEw7Ci0gICAgICAgICBfQWN0aXZlTWFza0VuZC51c2UgPSAweGZmZmYwMDAwMDAwMDAwMDBMTDsKLSAgICAgICAgIF9TaGlmdEJwcC51c2UgPSAyNDsgICAgLy8gPT0gYnBwKDMpICogOAotICAgICAgICAgX1NoaWZ0UmVtLnVzZSA9IDQwOyAgICAvLyA9PSA2NCAtIDI0CisvLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gYnBwICogOAorLy8gICAgICAgX1NoaWZ0UmVtID0gNDA7ICAgIC8vID09IDY0IC0gX1NoaWZ0QnBwCiAKICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICJtb3ZsIF9kaWYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIExPQURfR09UX3JicAorLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgorLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisvLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKwogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IgorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgogICAgICAgICAgInBhZXRoXzNscDogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTEgICAgICBcblx0IiAvLyBzaGlmdCBsYXN0IDMgYnl0ZXMgdG8gMXN0CisgICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGxhc3QgMyBieXRlcyB0byAxc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGEKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZXNpLCUlZWN4LCksICUlbW0zIFxuXHQiIC8vIHByZXAgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcHJlcCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCi0gICAgICAgICAgICAicHNybHEgX1NoaWZ0UmVtLCAlJW1tMyAgICAgIFxuXHQiIC8vIHNoaWZ0IGxhc3QgMyBieXRlcyB0byAxc3QKKyAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgbGFzdCAzIGJ5dGVzIHRvIDFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGJ5dGVzCiAgICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCkBAIC0zNjYzLDE2ICs0MjM1LDE2IEBACiAgICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlY3gsKSwgJSVtbTMgIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKLSAgICAgICAgICAgICJwYW5kIF9BY3RpdmVNYXNrLCAlJW1tNyAgICAgXG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0zICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQorICAgICAgICAgICAgInBhbmQgIiBBTUFTSzVfM18wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s1XzNfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCi0gICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKKyAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCi0gICAgICAgICAgICAibW92cSAlJW1tNywgKCUlZWRpLCUlZWN4LCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQorICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQogICAgICAgICAgICAgLy8gbm93IGRvIFBhZXRoIGZvciAybmQgc2V0IG9mIGJ5dGVzICgzLTUpCi0gICAgICAgICAgICAicHNybHEgX1NoaWZ0QnBwLCAlJW1tMiAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDIKKyAgICAgICAgICAgICJwc3JscSAkMjQsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMgogICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKQEAgLTM3MTcsNyArNDI4OSw3IEBACiAgICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMiAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCisgICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQogICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgpAQCAtMzcyNSwxOCArNDI5NywxOCBAQAogICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgogICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMQotICAgICAgICAgICAgInBhbmQgX0FjdGl2ZU1hc2ssICUlbW03ICAgICBcblx0IgorICAgICAgICAgICAgInBhbmQgIiBBTUFTSzVfM18wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s1XzNfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tNyAgICAgIFxuXHQiIC8vIHNoaWZ0IGJ5dGVzIHRvIDJuZCBncm91cCBvZgorICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyB0byAybmQgZ3JvdXAgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwogICAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAoJSVlZGksJSVlY3gsKSwgJSVtbTcgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTMgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMgotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglJWVkaSwlJWVjeCwpICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKKyAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQorICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMgorICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTEgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcworICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyAod2FzIF9TaGlmdEJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkKICAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgM3JkLCBhbmQgZmluYWwsIHNldCBvZiBieXRlcyAoNi03KQogICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgpAQCAtMzc4Nyw1OSArNDM1OSwzMjggQEAKICAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgIC8vIHN0ZXAgZWN4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCiAgICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCBfQWN0aXZlTWFza0VuZCwgJSVtbTEgIFxuXHQiCi0gICAgICAgICAgICAicGFkZGIgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgpCi0KLSAgICAgICAgICAgICJjbXBsIF9NTVhMZW5ndGgsICUlZWN4ICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYW5kICIgQU1BU0swXzJfNiAiLCAlJW1tMSAgXG5cdCIgLy8gX2FtYXNrMF8yXzYgKF9BY3RpdmVNYXNrRW5kKQorICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gcHhvciBkb2VzIG5vdCBhZmZlY3QgZmxhZ3MKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQorICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMyByZWFkeSB0byBiZSB1c2VkIGFzIFByaW9yKHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICJqYiBwYWV0aF8zbHAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIFJFU1RPUkVfcmJwCiAKLSAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKKyAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCiAKLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kgICAgICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpICAgICAgICAvLyBlZGkKKyAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKIAotICAgICAgICAgICAgOiAiJWVjeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWYgMCAgLyogJW1tMCwgLi4uLCAlbW03IG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiCisjaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKKyAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgogI2VuZGlmCiAgICAgICAgICApOwogICAgICAgfQogICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKIAotICAgICAgY2FzZSA2OgotICAgICAgLy9jYXNlIDc6ICAgLy8gR1JSIEJPR1VTCi0gICAgICAvL2Nhc2UgNTogICAvLyBHUlIgQk9HVVMKKyAgICAgIGNhc2UgNDoKICAgICAgIHsKLSAgICAgICAgIF9BY3RpdmVNYXNrLnVzZSAgPSAweDAwMDAwMDAwZmZmZmZmZmZMTDsKLSAgICAgICAgIF9BY3RpdmVNYXNrMi51c2UgPSAweGZmZmZmZmZmMDAwMDAwMDBMTDsKLSAgICAgICAgIF9TaGlmdEJwcC51c2UgPSBicHAgPDwgMzsgICAgLy8gPT0gYnBwICogOAotICAgICAgICAgX1NoaWZ0UmVtLnVzZSA9IDY0IC0gX1NoaWZ0QnBwLnVzZTsKKyAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKy8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKKy8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQorLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCisgICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKKyAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGE9UmF3KHgtYnBwKSBieXRlcworICAgICAgICAgInBhZXRoXzRscDogICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gZG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcworICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCisgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKKyAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKKyAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYworICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYworICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CisgICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKKyAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQorICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCisgICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKKyAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNworICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCisgICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKKyAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAorICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CisgICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgorICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPworICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKKyAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCisgICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYworICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KKyAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0zICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQorICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazRfNF8wICh3YXMgX0FjdGl2ZU1hc2spCisgICAgICAgICAgICBSRVNUT1JFX3JicAorICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCisgICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKKyAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYworICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKKyAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQorICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCisgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgorICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKKyAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKKyAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKKyAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgorICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCisgICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKKyAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQorICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCisgICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKKyAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAorICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCisgICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKKyAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNworICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKKyAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KKyAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCisgICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgorICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKKyAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CisgICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQorICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgorICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIHByZWRpY3RvciB3aXRoIFJhdyh4KQorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKKyAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCisgICAgICAgICAgICAiamIgcGFldGhfNGxwICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKKyAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCisKKyAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKKworI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAorICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKKyNlbmRpZgorICAgICAgICAgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOyAgLy8gZW5kIDQgYnBwCisKKyAgICAgIGNhc2UgMToKKyAgICAgIGNhc2UgMjoKKyAgICAgIHsKKyAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKy8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWF4ICAgICAgICAgICAgXG5cdCIgLy8gZWF4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5CisvLyBwcmVsb2FkICAibW92bCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCisgICAgICAgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAiam5iIHBhZXRoX2RlbmQgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICAgIFNBVkVfZWJwCisKKy8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQorICAgICAgICAgICAgLy8gZG8gUGFldGggZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKKy8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQorICAgICAgICAgICAgIm1vdmwgJSVlYXgsICUlZWJwICAgICAgICAgICBcblx0IgorLy8gcHJlbG9hZCAgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKKyAgICAgICAgICAgICJzdWJsICUlZWN4LCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZWF4IC0gYnBwCisgICAgICAgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4CisKKyAgICAgICAgICAgIFNBVkVfR09UX2VieAorICAgICAgICAgICAgU0FWRV9yMTFfcjEyX3IxMworCisgICAgICAgICAicGFldGhfZGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCisgICAgICAgICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBibAorICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCisgICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQorICAgICAgICAgICAgIm1vdmwgJSVlYngsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCisgICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCisgICAgICAgICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGJsCisgICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQorICAgICAgICAgICAgIm1vdmwgJSVlYngsICUlZWN4ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CisgICAgICAgICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgorICAgICAgICAgICAgLy8gcGMgPSBhYnMocGN2KQorICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgorICAgICAgICAgICAgImp6IHBhZXRoX2RwY2EgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcworCisgICAgICAgICAicGFldGhfZHBjYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQorICAgICAgICAgICAgLy8gcGIgPSBhYnMocGJ2KQorICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgorICAgICAgICAgICAgImp6IHBhZXRoX2RwYmEgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIm5lZ2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcworCisgICAgICAgICAicGFldGhfZHBiYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92bCAlJWVjeCwgIiBwYl9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQorICAgICAgICAgICAgLy8gcGEgPSBhYnMocGF2KQorICAgICAgICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgorICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgorICAgICAgICAgICAgImp6IHBhZXRoX2RwYWEgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcworCisgICAgICAgICAicGFldGhfZHBhYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQorICAgICAgICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgorICAgICAgICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJiICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGEgPiBwYjsgbm93IHRlc3QgaWYgcGIgPD0gcGMKKyAgICAgICAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKKyAgICAgICAgICAgICJqbmEgcGFldGhfZGJiYyAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHBiID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCisgICAgICAgICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKKyAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgInBhZXRoX2RiYmM6ICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKKyAgICAgICAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCisgICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICJwYWV0aF9kYWJiOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYworICAgICAgICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgorICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJjICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKKyAgICAgICAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCisgICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICJwYWV0aF9kYWJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKKyAgICAgICAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gY2wKKworICAgICAgICAgInBhZXRoX2RwYWV0aDogICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImluY2wgJSVlYnAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKKyAgICAgICAgICAgICJhZGRiICUlY2wsIC0xKCUyLCIgUEFYICIsKSAgXG5cdCIKKyAgICAgICAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgYWdhaW5zdCBGdWxsTGVuZ3RoCisgICAgICAgICAgICAiamIgcGFldGhfZGxwICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKKyAgICAgICAgICAgIFJFU1RPUkVfR09UX2VieAorICAgICAgICAgICAgUkVTVE9SRV9lYnAKKworICAgICAgICAgInBhZXRoX2RlbmQ6ICAgICAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKKyAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKKworICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCisgICAgICAgICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCisgICAgICAgICAgICAgICIzIiAoZGlmZiksICAgICAgICAvLyBlYXgKKyAgICAgICAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAorCisgICAgICAgICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorICAgICAgICAgICAgICBDTE9CQkVSX0dPVF9lYngKKyAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCisgICAgICAgICAgICAgIENMT0JCRVJfZWJwCisgICAgICAgICAgICAgIENMT0JfQ09NTUFfZWJYX3IxWAorICAgICAgICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCisgICAgICAgICApOworICAgICAgfQorICAgICAgcmV0dXJuOyAvLyBlbmQgMSBvciAyIGJwcCAobm8gbmVlZCB0byBnbyBmdXJ0aGVyIHdpdGggdGhpcyBvbmUpCisKKyAgICAgIGNhc2UgNjoKKyAgICAgIHsKKy8vICAgICAgIF9BY3RpdmVNYXNrMiA9IDB4ZmZmZmZmZmYwMDAwMDAwMExMOyAgLy8gTk9UIFVTRUQgKCJfYW1hc2tfMF80XzQiKQorLy8gICAgICAgX1NoaWZ0QnBwID0gNDg7ICAgICAgIC8vIGJwcCA8PCAzID09IGJwcCAqIDgKKy8vICAgICAgIF9TaGlmdFJlbSA9IDE2OyAgICAgICAvLyA2NCAtIF9TaGlmdEJwcAogCiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKKy8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IgorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgogICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogCiAgICAgICAgICAicGFldGhfNmxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAvLyBtdXN0IHNoaWZ0IHRvIHBvc2l0aW9uIFJhdyh4LWJwcCkgZGF0YQotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTEgICAgICBcblx0IgorICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCiAgICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwotICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcworICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYQotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgogICAgICAgICAgICAgLy8gbXVzdCBzaGlmdCB0byBwb3NpdGlvbiBQcmlvcih4LWJwcCkgZGF0YQotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTMgICAgICBcblx0IgorICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCiAgICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYwpAQCAtMzg4NywxOSArNDcyOCwyMSBAQAogICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgInBhbmQgX0FjdGl2ZU1hc2ssICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTMgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCi0gICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgYW5kIFJhdyh4KQorICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgICJwYW5kICIgQU1BU0s0XzRfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNF80XzAgKHdhcyBfQWN0aXZlTWFzaykKKyAgICAgICAgICAgIFJFU1RPUkVfcmJwCisgICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMyAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKKyAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQogICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglJWVkaSwlJWVjeCwpICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tNiAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgorICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBicHAgKiA4ID0gYml0cyBwZXIgcGl4ZWwKICAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0xICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gNjQgLSAoYnBwICogOCkgPSByZW1haW5kZXIKICAgICAgICAgICAgICJwb3IgJSVtbTYsICUlbW0zICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW01ICAgICAgXG5cdCIKKyAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW01ICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdEJwcAogICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICAicG9yICUlbW01LCAlJW1tMSAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKQEAgLTM5NTQsMTg5ICs0Nzk3LDQ1IEBACiAgICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQogICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgICJjbXBsIF9NTVhMZW5ndGgsICUlZWN4ICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCisgICAgICAgICAgICAicGFkZGIgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAorICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICJqYiBwYWV0aF82bHAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKIAotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaS9yc2kgICAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpL3JkaQorICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAorICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiAlbW0wLCAuLi4sICVtbTcgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9CiAgICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAogCi0gICAgICBjYXNlIDQ6Ci0gICAgICB7Ci0gICAgICAgICBfQWN0aXZlTWFzay51c2UgID0gMHgwMDAwMDAwMGZmZmZmZmZmTEw7Ci0KLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICJtb3ZsIF9kaWYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgIm1vdnEgLTgoJSVlZGksJSVlY3gsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCi0gICAgICAgICAicGFldGhfNGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwotICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMiAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglJWVzaSwlJWVjeCwpLCAlJW1tMyAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgInBhbmQgX0FjdGl2ZU1hc2ssICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCi0gICAgICAgICAgICAicGFkZGIgKCUlZWRpLCUlZWN4LCksICUlbW03IFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglJWVkaSwlJWVjeCwpICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKQotICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgotICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKLSAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiIC04KCUlZWRpLCUlZWN4LCksICUlbW0xIFxuXHQiIC8vIGFkZCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgICJjbXBsIF9NTVhMZW5ndGgsICUlZWN4ICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglJWVkaSwlJWVjeCwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCi0gICAgICAgICAgICAiamIgcGFldGhfNGxwICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQotCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiAlbW0wLCAuLi4sICVtbTcgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA0IGJwcAotCiAgICAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBicHAgPT0gOAogICAgICAgewotICAgICAgICAgX0FjdGl2ZU1hc2sudXNlICA9IDB4MDAwMDAwMDBmZmZmZmZmZkxMOwotCiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKKy8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IiAvLyBvbmx5IHRpbWUgc2hvdWxkIG5lZWQgdG8gcmVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGE9UmF3KHgtYnBwKSBieXRlcworICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBvbmx5IHRpbWUgc2hvdWxkIG5lZWQgdG8gcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCiAgICAgICAgICAicGFldGhfOGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwotICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcworICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYQotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKKyAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgogICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgpAQCAtNDE4NSwxMyArNDg4NCwxNSBAQAogICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgLTgoJSVlc2ksJSVlY3gsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgInBhbmQgX0FjdGl2ZU1hc2ssICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUlZXNpLCUlZWN4LCksICUlbW0yICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgICJwYWRkYiAoJSVlZGksJSVlY3gsKSwgJSVtbTcgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQorICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgICJwYW5kICIgQU1BU0s0XzRfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNF80XzAgKHdhcyBfQWN0aXZlTWFzaykKKyAgICAgICAgICAgIFJFU1RPUkVfcmJwCisgICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQorICAgICAgICAgICAgInBhZGRiICglMSwiIFBDWCAiLCksICUlbW03ICBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJSVlZGksJSVlY3gsKSAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCi0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IiAvLyByZWFkIGE9UmF3KHgtYnBwKSBieXRlcworICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKKyAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gcmVhZCBhPVJhdyh4LWJwcCkgYnl0ZXMKIAogICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKQEAgLTQyNDUsMjU2ICs0OTQ2LDE3MSBAQAogICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAtOCglJWVkaSwlJWVjeCwpLCAlJW1tMSBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yIHdpdGggUmF3KHgpCi0gICAgICAgICAgICAiY21wbCBfTU1YTGVuZ3RoLCAlJWVjeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJSVlZGksJSVlY3gsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCisgICAgICAgICAgICAicGFkZGIgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAorICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgICJqYiBwYWV0aF84bHAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQorICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAorICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKIAotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaSAgICAgICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaS9yc2kgICAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpL3JkaQorICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAorICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWN4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiAlbW0wLCAuLi4sICVtbTcgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9CiAgICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAogCi0gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgIC8vIGJwcCA9IDEKLSAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgLy8gYnBwID0gMgotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvLyBicHAgPiA4CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgICB7Ci0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0jaWZkZWYgX19QSUNfXwotICAgICAgICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgICAgICAgICBcblx0IiAvLyBzYXZlIEdsb2JhbCBPZmZzZXQgVGFibGUgaW5kZXgKKyAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKKyNpZiBkZWZpbmVkKFBOR19ERUJVRykKKyAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgorICAgICAgICAgICAicG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSlcbiIpOwogI2VuZGlmCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVieCAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCBfRnVsbExlbmd0aCwgJSVlYnggICAgIFxuXHQiCi0gICAgICAgICAgICAiam5iIHBhZXRoX2RlbmQgICAgICAgICAgICAgIFxuXHQiCi0KLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlJWVzaSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIGRvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAgICAgICAibW92bCAlJWVieCwgJSVlZHggICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAic3VibCBicHAsICUlZWR4ICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQotICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBlZHggPSBlYnggLSBicHAKLSAgICAgICAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3gKLQotICAgICAgICAgInBhZXRoX2RscDogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgICAgICAgIm1vdmIgKCUlZXNpLCUlZWJ4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKLSAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVkeCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICAgICAgICJtb3ZsICUlZWF4LCBfcGF0ZW1wICAgICAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQotICAgICAgICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgIm1vdmIgKCUlZWRpLCUlZWR4LCksICUlYWwgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBhbAotICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgImFkZGwgX3BhdGVtcCwgJSVlYXggICAgICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHBjdikKLSAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKLSAgICAgICAgICAgICJqeiBwYWV0aF9kcGNhICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJuZWdsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKLQotICAgICAgICAgInBhZXRoX2RwY2E6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgJSVlYXgsIF9wY3RlbXAgICAgICAgICBcblx0IiAvLyBzYXZlIHBjIGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHBidikKLSAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKLSAgICAgICAgICAgICJqeiBwYWV0aF9kcGJhICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJuZWdsICUlZWN4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKLQotICAgICAgICAgInBhZXRoX2RwYmE6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgJSVlY3gsIF9wYnRlbXAgICAgICAgICBcblx0IiAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHBhdikKLSAgICAgICAgICAgICJtb3ZsIF9wYXRlbXAsICUlZWF4ICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKLSAgICAgICAgICAgICJqeiBwYWV0aF9kcGFhICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJuZWdsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKLQotICAgICAgICAgInBhZXRoX2RwYWE6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgJSVlYXgsIF9wYXRlbXAgICAgICAgICBcblx0IiAvLyBzYXZlIHBhIGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKLSAgICAgICAgICAgICJjbXBsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJqbmEgcGFldGhfZGFiYiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCi0gICAgICAgICAgICAiY21wbCBfcGN0ZW1wLCAlJWVjeCAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiam5hIHBhZXRoX2RiYmMgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICJwYWV0aF9kYmJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCi0gICAgICAgICAgICAibW92YiAoJSVlc2ksJSVlYngsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAotICAgICAgICAgICAgImptcCBwYWV0aF9kcGFldGggICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAicGFldGhfZGFiYjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKLSAgICAgICAgICAgICJjbXBsIF9wY3RlbXAsICUlZWF4ICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJqbmEgcGFldGhfZGFiYyAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAgICAgICAibW92YiAoJSVlc2ksJSVlZHgsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgInBhZXRoX2RhYmM6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUmF3KHgtYnBwKQotICAgICAgICAgICAgIm1vdmIgKCUlZWRpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAotCi0gICAgICAgICAicGFldGhfZHBhZXRoOiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiaW5jbCAlJWVkeCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgotICAgICAgICAgICAgImFkZGIgJSVjbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IgotICAgICAgICAgICAgImNtcGwgX0Z1bGxMZW5ndGgsICUlZWJ4ICAgICBcblx0IgotICAgICAgICAgICAgImpiIHBhZXRoX2RscCAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAicGFldGhfZGVuZDogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0jaWZkZWYgX19QSUNfXwotICAgICAgICAgICAgInBvcGwgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyBpbmRleCB0byBHbG9iYWwgT2Zmc2V0IFRhYmxlCi0jZW5kaWYKLQotICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgLy8gZWN4ICAgICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChwcmV2X3JvdyksICAvLyBlc2kKLSAgICAgICAgICAgICAgIjIiIChyb3cpICAgICAgICAvLyBlZGkKLQotICAgICAgICAgICAgOiAiJWVheCIsICIlZWR4IiAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZm5kZWYgX19QSUNfXwotICAgICAgICAgICAgLCAiJWVieCIKLSNlbmRpZgotICAgICAgICAgKTsKICAgICAgIH0KLSAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBnbyBmdXJ0aGVyIHdpdGggdGhpcyBvbmUKKyAgICAgIGJyZWFrOwogCiAgICB9IC8vIGVuZCBzd2l0Y2ggKGJwcCkKIAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgLy8gTU1YIGFjY2VsZXJhdGlvbiBjb21wbGV0ZTsgbm93IGRvIGNsZWFuLXVwCiAgICAgICAvLyBjaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi0jaWZkZWYgX19QSUNfXwotICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgICAgICAgICBcblx0IiAvLyBzYXZlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKLSNlbmRpZgotICAgICAgIm1vdmwgX01NWExlbmd0aCwgJSVlYnggICAgICBcblx0IgotICAgICAgImNtcGwgX0Z1bGxMZW5ndGgsICUlZWJ4ICAgICBcblx0IgorLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgorLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IgorICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAgImpuYiBwYWV0aF9lbmQgICAgICAgICAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgcHJldl9yb3csICUlZXNpICAgICAgICBcblx0IgorCisgICAgICBTQVZFX2VicAorCisvL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKKy8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAgLy8gZG8gUGFldGggZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLSAgICAgICJtb3ZsICUlZWJ4LCAlJWVkeCAgICAgICAgICAgXG5cdCIKLS8vcHJlICJzdWJsIGJwcCwgJSVlZHggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCi0gICAgICAic3VibCAlJWVjeCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIGVkeCA9IGVieCAtIGJwcAorICAgICAgIm1vdmwgJSVlYXgsICUlZWJwICAgICAgICAgICBcblx0IgorLy9wcmUgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKKyAgICAgICJzdWJsICUlZWN4LCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZWF4IC0gYnBwCiAgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4IGJlbG93CiAKKyAgICAgIFNBVkVfR09UX2VieAorICAgICAgU0FWRV9yMTFfcjEyX3IxMworCiAgICAicGFldGhfbHAyOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAibW92YiAoJSVlc2ksJSVlYngsKSwgJSVhbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBhbAotICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAic3VibCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQotICAgICAgIm1vdmwgJSVlYXgsIF9wYXRlbXAgICAgICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBibAorICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCisgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQorICAgICAgIm1vdmwgJSVlYngsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCisgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAibW92YiAoJSVlZGksJSVlZHgsKSwgJSVhbCAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGFsCi0gICAgICAic3VibCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQotICAgICAgIm1vdmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAiYWRkbCBfcGF0ZW1wLCAlJWVheCAgICAgICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgorICAgICAgIm1vdmIgKCUyLCIgUEJQICIsKSwgJSVibCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBibAorICAgICAgInN1YmwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKKyAgICAgICJtb3ZsICUlZWJ4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKKyAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLSBjID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKKyAgICAgICJhZGRsICIgcGFfVEVNUCAiLCAlJWVieCAgICAgXG5cdCIgLy8gcGN2ID0gcGF2ICsgcGJ2CiAgICAgICAvLyBwYyA9IGFicyhwY3YpCi0gICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCisgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICAianogcGFldGhfcGNhMiAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibmVnbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCisgICAgICAibmVnbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCiAKICAgICJwYWV0aF9wY2EyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWF4LCBfcGN0ZW1wICAgICAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCisgICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAgLy8gcGIgPSBhYnMocGJ2KQogICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgogICAgICAgImp6IHBhZXRoX3BiYTIgICAgICAgICAgICAgICBcblx0IgogICAgICAgIm5lZ2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwogCiAgICAicGFldGhfcGJhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92bCAlJWVjeCwgX3BidGVtcCAgICAgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQorICAgICAgIm1vdmwgJSVlY3gsICIgcGJfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKICAgICAgIC8vIHBhID0gYWJzKHBhdikKLSAgICAgICJtb3ZsIF9wYXRlbXAsICUlZWF4ICAgICAgICAgXG5cdCIKLSAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYXggICAgXG5cdCIKKyAgICAgICJtb3ZsICIgcGFfVEVNUCAiLCAlJWVieCAgICAgXG5cdCIKKyAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYnggICAgXG5cdCIKICAgICAgICJqeiBwYWV0aF9wYWEyICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJuZWdsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKKyAgICAgICJuZWdsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKIAogICAgInBhZXRoX3BhYTI6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmwgJSVlYXgsIF9wYXRlbXAgICAgICAgICBcblx0IiAvLyBzYXZlIHBhIGZvciBsYXRlciB1c2UKKyAgICAgICJtb3ZsICUlZWJ4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYSBmb3IgbGF0ZXIgdXNlCiAgICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICAiam5hIHBhZXRoX2FiYjIgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwotICAgICAgImNtcGwgX3BjdGVtcCwgJSVlY3ggICAgICAgICBcblx0IgorICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWN4ICAgICBcblx0IgogICAgICAgImpuYSBwYWV0aF9iYmMyICAgICAgICAgICAgICBcblx0IgogICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZiICglJWVzaSwlJWVkeCwpLCAlJWNsICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAorICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICAiam1wIHBhZXRoX3BhZXRoMiAgICAgICAgICAgIFxuXHQiCiAKICAgICJwYWV0aF9iYmMyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCi0gICAgICAibW92YiAoJSVlc2ksJSVlYngsKSwgJSVjbCAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAorICAgICAgIm1vdmIgKCUxLCIgUEFYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKIAogICAgInBhZXRoX2FiYjI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgLy8gcGEgPD0gcGI7IG5vdyB0ZXN0IGlmIHBhIDw9IHBjCi0gICAgICAiY21wbCBfcGN0ZW1wLCAlJWVheCAgICAgICAgIFxuXHQiCisgICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiCiAgICAgICAiam5hIHBhZXRoX2FiYzIgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBwYSA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgIm1vdmIgKCUlZXNpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCisgICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKIAogICAgInBhZXRoX2FiYzI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgLy8gcGEgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUmF3KHgtYnBwKQotICAgICAgIm1vdmIgKCUlZWRpLCUlZWR4LCksICUlY2wgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAorICAgICAgIm1vdmIgKCUyLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAogCiAgICAicGFldGhfcGFldGgyOiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVkeCAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAiaW5jbCAlJWVicCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgotICAgICAgImFkZGIgJSVjbCwgLTEoJSVlZGksJSVlYngsKSBcblx0IgotICAgICAgImNtcGwgX0Z1bGxMZW5ndGgsICUlZWJ4ICAgICBcblx0IgorICAgICAgImFkZGIgJSVjbCwgLTEoJTIsIiBQQVggIiwpICBcblx0IgorICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBhZ2FpbnN0IEZ1bGxMZW5ndGgKICAgICAgICJqYiBwYWV0aF9scDIgICAgICAgICAgICAgICAgXG5cdCIKIAorICAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMworICAgICAgUkVTVE9SRV9HT1RfZWJ4CisgICAgICBSRVNUT1JFX2VicAorCiAgICAicGFldGhfZW5kOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVg7IHByZXAgZm9yIHBvc3MuIEZQIGluc3Rycy4KLSNpZmRlZiBfX1BJQ19fCi0gICAgICAicG9wbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJlc3RvcmUgaW5kZXggdG8gR2xvYmFsIE9mZnNldCBUYWJsZQotI2VuZGlmCiAKICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKKyAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCisgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLAorICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQogCi0gICAgICA6ICIwIiAoYnBwKSwgICAgICAgLy8gZWN4ICAgICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgIjEiIChwcmV2X3JvdyksICAvLyBlc2kKLSAgICAgICAgIjIiIChyb3cpICAgICAgICAvLyBlZGkKKyAgICAgIDogIjAiIChicHApLCAgICAgICAgIC8vIGVjeCAgICAgICAgLy8gaW5wdXQgcmVncworICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaQorICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQorICAgICAgICAiMyIgKE1NWExlbmd0aCksICAgLy8gZWF4CisgICAgICAgICI0IiAoRnVsbExlbmd0aCkgICAvLyBlZHgKIAotICAgICAgOiAiJWVheCIsICIlZWR4IiAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QgKG5vIGlucHV0IHJlZ3MhKQotI2lmbmRlZiBfX1BJQ19fCi0gICAgICAsICIlZWJ4IgotI2VuZGlmCisgICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorICAgICAgICBDTE9CQkVSX0dPVF9lYngKKyAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCisgICAgICAgIENMT0JCRVJfZWJwCisgICAgICAgIENMT0JfQ09NTUFfZWJYX3IxWAorICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCiAgICApOwogCiB9IC8qIGVuZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpICovCi0jZW5kaWYKKworI2VuZGlmIC8vIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LCisjZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQgKi8KIAogCiAKIAotI2lmZGVmIFBOR19USFJFQURfVU5TQUZFX09LCisjaWYgZGVmaW5lZChQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQpCisKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBTIFUgQiAgICAgICAgICAgLy8KQEAgLTQ1MDYsNTUgKzUxMjIsNjggQEAKIHN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93KQogeworICAgdW5zaWduZWQgRnVsbExlbmd0aCwgTU1YTGVuZ3RoOyAgLy8gcG5nX3VpbnRfMzIgaXMgYWN0dWFsbHkgNjQtYml0IG9uIHg4Ni02NAogICAgaW50IGJwcDsKICAgIGludCBkdW1teV92YWx1ZV9hOwotICAgaW50IGR1bW15X3ZhbHVlX0Q7CisgICBpbnQgZHVtbXlfdmFsdWVfYzsKKyAgIGludCBkdW1teV92YWx1ZV9kOworICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CisgICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKIAotICAgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7ICAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCi0gICBfRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCisgICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAorICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCisgICAgIC8vICh3aHkgZG8gd2Ugc3VidHJhY3Qgb2ZmIGJwcD8gIG5vdCBzbyBpbiBhdmcgb3IgcGFldGguLi4pCiAKICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLS8vcHJlICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWRpLCAlJWVzaSAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vcHJlICJtb3ZsIGJwcCwgJSVlYXggICAgICAgICAgICAgXG5cdCIKLSAgICAgICJhZGRsICUlZWF4LCAlJWVkaSAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLS8vaXJyICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudAotICAgICAgIm1vdmwgJSVlZGksIF9kaWYgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwotICAgICAgImFkZGwgJDB4ZiwgX2RpZiAgICAgICAgICAgICBcblx0IiAvLyBhZGQgNyArIDggdG8gaW5jciBwYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKLSAgICAgICJhbmRsICQweGZmZmZmZmY4LCBfZGlmICAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICJzdWJsICUlZWRpLCBfZGlmICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgZnJvbSBzdGFydCA9PT4gdmFsdWUKLSAgICAgICJqeiBzdWJfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIGVjeCBhdCBhbGlnbm1lbnQKKyAgICAgIFNBVkVfcjE1CisgICAgICBTQVZFX2VicAorLy9wcmUgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisgICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93CisvL3ByZSAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCisvL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KKyAgICAgIFNBVkVfRnVsbExlbmd0aCAgICAgICAgICAgICAgICAgICAgLy8gLi4uYnV0IHN0b3JlIGZvciBsYXRlciB1c2UKKworICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgorCisgICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQgKG5vdGU6ICBjb21wdXRpbmcgX2RlbHRhXyBvZiB0d28gcG9pbnRlcnMsCisgICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlYnAgaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKKyAgICAgICJtb3YgICUxLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKKyAgICAgICJhZGQgICQweGYsICIgUEJQICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKKy8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCisgICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CisgICAgICAic3ViICAlMSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KKyAgICAgICJqeiBzdWJfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYXggYXQgYWxpZ25tZW50CiAKICAgICJzdWJfbHAxOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZml4IGFsaWdubWVudAotICAgICAgIm1vdmIgKCUlZXNpLCUlZWN4LCksICUlYWwgICBcblx0IgotICAgICAgImFkZGIgJSVhbCwgKCUlZWRpLCUlZWN4LCkgICBcblx0IgotICAgICAgImluY2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgImNtcGwgX2RpZiwgJSVlY3ggICAgICAgICAgICBcblx0IgorICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCisgICAgICAiYWRkYiAlJWNsLCAoJTEsIiBQQVggIiwpICAgIFxuXHQiCisgICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAiY21wbCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICAiamIgc3ViX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiCiAKICAgICJzdWJfZ286ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsIF9GdWxsTGVuZ3RoLCAlJWVheCAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWF4LCAlJWVkeCAgICAgICAgICAgXG5cdCIKLSAgICAgICJzdWJsICUlZWN4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAorICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAorICAgICAgIm1vdmwgJSVlY3gsICUlZWR4ICAgICAgICAgICBcblx0IgorICAgICAgInN1YmwgJSVlYXgsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICJzdWJsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gbGVuZ3RoCi0gICAgICAibW92bCAlJWVheCwgX01NWExlbmd0aCAgICAgIFxuXHQiCisgICAgICAic3VibCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAorLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgorICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKKyAgICAgIFJFU1RPUkVfZWJwICAgICAgICAgICAgICAgICAgICAgICAgLy8gIChjb3VsZCBzd2FwIGVicCBhbmQgZWN4IGZ1bmN0aW9ucywKKyAgICAgIFJFU1RPUkVfcjE1ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ1dCAlJWNsIGlzc3Vlcy4uLikKIAotICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSAgICAvLyAxCisgICAgICA6ICI9YyIgKE1NWExlbmd0aCksICAgICAgIC8vIDAgICAgIC8vIG91dHB1dCByZWdzCisgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKKyAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAgLy8gMgogCi0gICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAvLyBpbnB1dCByZWdzCisgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAiMiIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKIAotICAgICAgOiAiJWVzaSIsICIlZWN4IiwgIiVlZHgiICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0KLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKLSAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKKyAgICAgIDogIiVlc2kiLCAiJWVkeCIgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisgICAgICAgIF9DTE9CQkVSX3IxNQorICAgICAgICBfQ0xPQkJFUl9lYnAKICAgICk7CiAKICAgIC8vIG5vdyBkbyB0aGUgbWF0aCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJvdwpAQCAtNDU2MiwyMzAgKzUxOTEsMjk2IEBACiAgICB7CiAgICAgICBjYXNlIDM6CiAgICAgICB7Ci0gICAgICAgICBfQWN0aXZlTWFzay51c2UgID0gMHgwMDAwZmZmZmZmMDAwMDAwTEw7Ci0gICAgICAgICBfU2hpZnRCcHAudXNlID0gMjQ7ICAgICAgIC8vID09IDMgKiA4Ci0gICAgICAgICBfU2hpZnRSZW0udXNlICA9IDQwOyAgICAgIC8vID09IDY0IC0gMjQKKy8vICAgICAgIF9TaGlmdEJwcCA9IDI0OyAgICAgICAvLyA9PSAzICogOAorLy8gICAgICAgX1NoaWZ0UmVtICA9IDQwOyAgICAgIC8vID09IDY0IC0gMjQKIAogICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIF9BY3RpdmVNYXNrLCAlJW1tNyAgICAgICBcblx0IiAvLyBsb2FkIF9BY3RpdmVNYXNrIGZvciAybmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhY3RpdmUgYnl0ZSBncm91cAotICAgICAgICAgICAgIm1vdmwgJSVlZGksICUlZXNpICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlYXggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkbCAlJWVheCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQorICAgICAgICAgICAgTE9BRF9HT1RfcmJwCisgICAgICAgICAgICAvLyBsb2FkIChmb3JtZXIpIF9BY3RpdmVNYXNrIGZvciAybmQgYWN0aXZlIGJ5dGUgZ3JvdXAKKyAgICAgICAgICAgICJtb3ZxICIgQU1BU0syXzNfMyAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazJfM18zCisgICAgICAgICAgICBSRVNUT1JFX3JicAorCisvLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdworLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCiAgICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTYgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgX2RpZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW02ICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTYgdG8gY292ZXIKKy8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWR4LCksICUlbW0xIFxuXHQiCisgICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgogCiAgICAgICAgICAic3ViXzNscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKLSAgICAgICAgICAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0xICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CisgICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyAgYnBwIGJ5dGVzIChubyBuZWVkIGZvciBtYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAibW92cSAoJSVlZGksJSVlZHgsKSwgJSVtbTAgICBcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIKICAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAKICAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTEgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQorICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tMSAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlZHggICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIHVwZGF0ZWQgUmF3cyB0byBhcnJheQorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCisgICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAgImpiIHN1Yl8zbHAgICAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSAgICAvLyAxCisgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKKyAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgorICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCiAKLSAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWF4ICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpICAgICAgICAgICAgICAgLy8gZWRpCisgICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CiAKLSAgICAgICAgICAgIDogIiVlZHgiLCAiJWVzaSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2lmIDAgIC8qIE1NWCByZWdzICglbW0wLCBldGMuKSBub3Qgc3VwcG9ydGVkIGJ5IGdjYyAyLjcuMi4zIG9yIGVnY3MgMS4xICovCi0gICAgICAgICAgICAsICIlbW0wIiwgIiVtbTEiLCAiJW1tNiIsICIlbW03IgorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tNiIsICIlbW03IiAgICAvLyBjbG9iYmVyIGxpc3QKICNlbmRpZgogICAgICAgICAgKTsKICAgICAgIH0KLSAgICAgIGJyZWFrOworICAgICAgYnJlYWs7ICAvLyBlbmQgMyBicHAKKworICAgICAgY2FzZSA0OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDYgYnBwIGNhc2UgdmlhIF9TaGlmdEJwcCBhbmQgX1NoaWZ0UmVtLAorICAgICAgeyAgICAgICAgIC8vIGJ1dCA2NC1iaXQgUElDLy5zbyBwcm9ibGVtcyAoY291bGQgc3RpbGwgc2hhcmUsIG1vdmluZyB2YXJzCisgICAgICAgICAgICAgICAgLy8gaW50byB1bnVzZWQgTU1YIHJlZ3MgdmlhIGVjeC9lZHgsIGJ1dCBrbHVkZ3kpCisvLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDMyIChwc2xscSkKKy8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMzIgKHBzcmxxKQorCisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisvLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgorLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKKy8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorCisgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKKyAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTEgIFxuXHQiCisKKyAgICAgICAgICJzdWJfNGxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAorICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCisgICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCisgICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCisgICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAorICAgICAgICAgICAgImpiIHN1Yl80bHAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCisgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMworCisgICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CisKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisjZW5kaWYKKyAgICAgICAgICk7CisgICAgICB9CisgICAgICBicmVhazsgIC8vIGVuZCA0IGJwcAogCiAgICAgICBjYXNlIDE6CiAgICAgICB7CiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVkeCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCBfRnVsbExlbmd0aCwgJSVlZHggICAgIFxuXHQiCi0gICAgICAgICAgICAiam5iIHN1Yl8xZW5kICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0gICAgICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWF4ICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkbCAlJWVheCwgJSVlZGkgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICAgXG5cdCIKKy8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisvLyBwcmVsb2FkICAiY21wbCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImpuYiBzdWJfMWVuZCAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKKy8vIGlycmVsLiAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyAoYWN0dWFsbHkgYnVnIHdpdGggcHJlbG9hZCkKKy8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCiAKLSAgICAgICAgICJzdWJfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZiICglJWVzaSwlJWVkeCwpLCAlJWFsICAgXG5cdCIKLSAgICAgICAgICAgICJhZGRiICUlYWwsICglJWVkaSwlJWVkeCwpICAgXG5cdCIKLSAgICAgICAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsIF9GdWxsTGVuZ3RoLCAlJWVkeCAgICAgXG5cdCIKLSAgICAgICAgICAgICJqYiBzdWJfMWxwICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJzdWJfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgIm1vdmIgKCIgUFNJICIsIiBQRFggIiwpLCAlJWNsIFxuXHQiCisgICAgICAgICAgICAiYWRkYiAlJWNsLCAoJTEsIiBQRFggIiwpICAgICAgXG5cdCIKKyAgICAgICAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgIFxuXHQiIC8vIGNvbXBhcmUgd2l0aCBGdWxsTGVuZ3RoCisgICAgICAgICAgICAiamIgc3ViXzFscCAgICAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgICAgInN1Yl8xZW5kOiAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInN1Yl8xZW5kOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAKLSAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMQorICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCisgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwogCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4CisgICAgICAgICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAgICAgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgKTsKICAgICAgIH0KLSAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSA2OgotICAgICAgY2FzZSA0OgotICAgICAgLy9jYXNlIDc6ICAgLy8gR1JSIEJPR1VTCi0gICAgICAvL2Nhc2UgNTogICAvLyBHUlIgQk9HVVMKLSAgICAgIHsKLSAgICAgICAgIF9TaGlmdEJwcC51c2UgPSBicHAgPDwgMzsKLSAgICAgICAgIF9TaGlmdFJlbS51c2UgPSA2NCAtIF9TaGlmdEJwcC51c2U7Ci0KLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgJSVlZGksICUlZXNpICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlYXggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkbCAlJWVheCwgJSVlZGkgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAotCi0gICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUlZWRpLCUlZWR4LCksICUlbW0xIFxuXHQiCi0KLSAgICAgICAgICJzdWJfNGxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAotICAgICAgICAgICAgInBzcmxxIF9TaGlmdFJlbSwgJSVtbTEgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCi0gICAgICAgICAgICAibW92cSAoJSVlZGksJSVlZHgsKSwgJSVtbTAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tMSAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgImNtcGwgX01NWExlbmd0aCwgJSVlZHggICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglJWVkaSwlJWVkeCwpIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKLSAgICAgICAgICAgICJqYiBzdWJfNGxwICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMQotCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQotCi0gICAgICAgICAgICA6ICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIgotI2VuZGlmCi0gICAgICAgICApOwotICAgICAgfQotICAgICAgYnJlYWs7CisgICAgICByZXR1cm47ICAvLyBlbmQgMSBicHAgKGJ5cGFzc2luZyBjbGVhbnVwIGJsb2NrISkKIAogICAgICAgY2FzZSAyOgogICAgICAgewotICAgICAgICAgX0FjdGl2ZU1hc2sudXNlID0gMHgwMDAwMDAwMGZmZmYwMDAwTEw7Ci0gICAgICAgICBfU2hpZnRCcHAudXNlID0gMTY7ICAgICAgIC8vID09IDIgKiA4Ci0gICAgICAgICBfU2hpZnRSZW0udXNlID0gNDg7ICAgICAgIC8vID09IDY0IC0gMTYKKy8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgICAgICAvLyA9PSAyICogOAorLy8gICAgICAgX1NoaWZ0UmVtID0gNDg7ICAgICAgIC8vID09IDY0IC0gMTYKIAogICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgIm1vdnEgX0FjdGl2ZU1hc2ssICUlbW03ICAgICAgXG5cdCIgLy8gbG9hZCBfQWN0aXZlTWFzayBmb3IgMm5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYWN0aXZlIGJ5dGUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZsIF9kaWYsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICBMT0FEX0dPVF9yYnAKKyAgICAgICAgICAgIC8vIGxvYWQgKGZvcm1lcikgX0FjdGl2ZU1hc2sgZm9yIDJuZCBhY3RpdmUgYnl0ZSBncm91cAorICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzRfMl8yICIsICUlbW03ICAgXG5cdCIgLy8gX2FtYXNrNF8yXzIKKyAgICAgICAgICAgIFJFU1RPUkVfcmJwCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW02ICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJSVlZGkgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tNiAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCisvLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCi0gICAgICAgICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdworLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKICAgICAgICAgICAgICJtb3ZxICUlbW02LCAlJW1tNSAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWF4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImFkZGwgJSVlYXgsICUlZWRpICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW01ICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTUgdG8gY292ZXIKKy8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTUgICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBtYXNrIGluIG1tNSB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDR0aCBhY3RpdmUgYnl0ZSBncm91cAogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVkeCwpLCAlJW1tMSBcblx0IgorICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQRFggIiwpLCAlJW1tMSAgXG5cdCIKIAogICAgICAgICAgInN1Yl8ybHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0Ci0gICAgICAgICAgICAicHNybHEgX1NoaWZ0UmVtLCAlJW1tMSAgICAgICBcblx0IiAvLyAgYnBwIGJ5dGVzIChubyBuZWVkIGZvciBtYXNrOworICAgICAgICAgICAgInBzcmxxICQ0OCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cAotICAgICAgICAgICAgIm1vdnEgKCUlZWRpLCUlZWR4LCksICUlbW0wICAgXG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCiAgICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgogCiAgICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgICJwc2xscSBfU2hpZnRCcHAsICUlbW0xICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKKyAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDJuZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAKICAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgInBzbGxxIF9TaGlmdEJwcCwgJSVtbTEgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQorICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgM3JkIGFjdGl2ZSBncm91cAogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgLy8gYWRkIDR0aCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgX1NoaWZ0QnBwLCAlJW1tMSAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSA0dGggYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsIF9NTVhMZW5ndGgsICUlZWR4ICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKKyAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAorICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKICAgICAgICAgICAgICJqYiBzdWJfMmxwICAgICAgICAgICAgICAgICAgIFxuXHQiCiAKLSAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMQorICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCisgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwogCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncworICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKKyAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4CisgICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAogCi0gICAgICAgICAgICA6ICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tNSIsICIlbW02IiAgICAvLyBjbG9iYmVyIGxpc3QKKyAgICAgICAgICAgICwgIiVtbTciCiAjZW5kaWYKICAgICAgICAgICk7CiAgICAgICB9Ci0gICAgICBicmVhazsKKyAgICAgIGJyZWFrOyAgLy8gZW5kIDIgYnBwCisKKyAgICAgIGNhc2UgNjogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA0IGJwcCBjYXNlIChzZWUgY29tbWVudHMgdGhlcmUpCisgICAgICB7CisvLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKKy8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMTYgKHBzcmxxKQorCisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisvLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgorLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKKy8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorCisgICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKKyAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTEgIFxuXHQiCisKKyAgICAgICAgICJzdWJfNmxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAorICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCisgICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCisgICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CisgICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCisgICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKKyAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAorICAgICAgICAgICAgImpiIHN1Yl82bHAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCisgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKKyAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMworCisgICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCisgICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKKyAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4CisKKyNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQorICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CisjZW5kaWYKKyAgICAgICAgICk7CisgICAgICB9CisgICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAogCiAgICAgICBjYXNlIDg6CiAgICAgICB7CiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0vLyBwcmVsb2FkICAibW92bCByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmwgX2RpZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZsICUlZWRpLCAlJWVzaSAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWF4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImFkZGwgJSVlYXgsICUlZWRpICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLSAgICAgICAgICAgICJtb3ZsIF9NTVhMZW5ndGgsICUlZWN4ICAgICAgIFxuXHQiCisvLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCisvLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgorLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKKy8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorLy8gcHJlbG9hZCAgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICAgXG5cdCIKIAogICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglJWVkaSwlJWVkeCwpLCAlJW1tNyBcblx0IgotICAgICAgICAgICAgImFuZGwgJDB4MDAwMDAwM2YsICUlZWN4ICAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgNjQKKyAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTcgIFxuXHQiCisgICAgICAgICAgICAibW92bCAlJWVheCwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIE1NWExlbmd0aCAtPiBlc2kKKyAgICAgICAgICAgICJhbmRsICQweDAwMDAwMDNmLCAlJWVzaSAgICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0CiAKICAgICAgICAgICJzdWJfOGxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJSVlZGksJSVlZHgsKSwgJSVtbTAgICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgMXN0IDggYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAxc3QgOCBieXRlcwogICAgICAgICAgICAgInBhZGRiICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDgoJSVlZGksJSVlZHgsKSwgJSVtbTEgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAybmQgOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSwlJWVkeCwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAxc3QgOCBieXRlcworICAgICAgICAgICAgIm1vdnEgOCglMSwiIFBEWCAiLCksICUlbW0xICAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDJuZCA4IGJ5dGVzCisgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUxLCIgUERYICIsKSAgICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDFzdCA4IGJ5dGVzCiAKICAgICAgICAgICAgIC8vIE5vdyBtbTAgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgZm9yIHRoZSAybmQgZ3JvdXAgb2YgOCBieXRlcy4KICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSByZXBlYXRlZCBmb3IgZWFjaCBncm91cCBvZiA4IGJ5dGVzIHdpdGggdGhlIDh0aApAQCAtNDc5MywxMzAgKzU0ODgsMTE4IEBACiAgICAgICAgICAgICAvLyBuZXh0IGxvb3AuCiAKICAgICAgICAgICAgICJwYWRkYiAlJW1tMCwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAxNiglJWVkaSwlJWVkeCwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgM3JkIDggYnl0ZXMKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUlZWRpLCUlZWR4LCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgMm5kIDggYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxIDE2KCUxLCIgUERYICIsKSwgJSVtbTIgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAzcmQgOCBieXRlcworICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTEsIiBQRFggIiwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAybmQgOCBieXRlcwogICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDI0KCUlZWRpLCUlZWR4LCksICUlbW0zIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA0dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUlZWRpLCUlZWR4LCkgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAzcmQgOCBieXRlcworICAgICAgICAgICAgIm1vdnEgMjQoJTEsIiBQRFggIiwpLCAlJW1tMyAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDR0aCA4IGJ5dGVzCisgICAgICAgICAgICAibW92cSAlJW1tMiwgMTYoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDNyZCA4IGJ5dGVzCiAgICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgMzIoJSVlZGksJSVlZHgsKSwgJSVtbTQgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDV0aCA4IGJ5dGVzCi0gICAgICAgICAgICAibW92cSAlJW1tMywgMjQoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDR0aCA4IGJ5dGVzCisgICAgICAgICAgICAibW92cSAzMiglMSwiIFBEWCAiLCksICUlbW00ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNXRoIDggYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxICUlbW0zLCAyNCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgNHRoIDggYnl0ZXMKICAgICAgICAgICAgICJwYWRkYiAlJW1tMywgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSA0MCglJWVkaSwlJWVkeCwpLCAlJW1tNSBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNnRoIDggYnl0ZXMKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAzMiglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgNXRoIDggYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxIDQwKCUxLCIgUERYICIsKSwgJSVtbTUgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA2dGggOCBieXRlcworICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDMyKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA1dGggOCBieXRlcwogICAgICAgICAgICAgInBhZGRiICUlbW00LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDQ4KCUlZWRpLCUlZWR4LCksICUlbW02IFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA3dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTUsIDQwKCUlZWRpLCUlZWR4LCkgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA2dGggOCBieXRlcworICAgICAgICAgICAgIm1vdnEgNDgoJTEsIiBQRFggIiwpLCAlJW1tNiAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDd0aCA4IGJ5dGVzCisgICAgICAgICAgICAibW92cSAlJW1tNSwgNDAoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDZ0aCA4IGJ5dGVzCiAgICAgICAgICAgICAicGFkZGIgJSVtbTUsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgNTYoJSVlZGksJSVlZHgsKSwgJSVtbTcgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDh0aCA4IGJ5dGVzCi0gICAgICAgICAgICAibW92cSAlJW1tNiwgNDgoJSVlZGksJSVlZHgsKSBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDd0aCA4IGJ5dGVzCisgICAgICAgICAgICAibW92cSA1NiglMSwiIFBEWCAiLCksICUlbW03ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgOHRoIDggYnl0ZXMKKyAgICAgICAgICAgICJtb3ZxICUlbW02LCA0OCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgN3RoIDggYnl0ZXMKICAgICAgICAgICAgICJhZGRsICQ2NCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAicGFkZGIgJSVtbTYsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImNtcGwgJSVlY3gsICUlZWR4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAtOCglJWVkaSwlJWVkeCwpIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgOHRoIDggYnl0ZXMKKyAgICAgICAgICAgICJjbXBsICUlZXNpLCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIGNtcCB0byBieXRlcyBvdmVyIG11bHQgb2YgNjQKKyAgICAgICAgICAgICJtb3ZxICUlbW03LCAtOCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgOHRoIDggYnl0ZXMKICAgICAgICAgICAgICJqYiBzdWJfOGxwICAgICAgICAgICAgICAgICAgIFxuXHQiCiAKLSAgICAgICAgICAgICJjbXBsIF9NTVhMZW5ndGgsICUlZWR4ICAgICAgIFxuXHQiCisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAogICAgICAgICAgICAgImpuYiBzdWJfOGx0OCAgICAgICAgICAgICAgICAgXG5cdCIKIAogICAgICAgICAgInN1Yl84bHBBOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVkeCwpLCAlJW1tMCAgIFxuXHQiCisgICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgogICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICJwYWRkYiAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCBfTU1YTGVuZ3RoLCAlJWVkeCAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWR4LCkgXG5cdCIgLy8gLTggdG8gb2Zmc2V0IGVhcmx5IGFkZGwgZWR4CisgICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAorICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gLTggdG8gb2Zmc2V0IGVhcmx5IGFkZGwgZWR4CiAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGNhbGN1bGF0ZWQgUmF3KHgpIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0byBtbTEgdG8gYmUgbmV3IFJhdyh4LWJwcCkKKyAgICAgICAgICAgICJqYiBzdWJfOGxwQSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0byBtbTcgdG8gYmUgbmV3IFJhdyh4LWJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBmb3IgbmV4dCBsb29wCi0gICAgICAgICAgICAiamIgc3ViXzhscEEgICAgICAgICAgICAgICAgICBcblx0IgotCiAgICAgICAgICAic3ViXzhsdDg6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogCi0gICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpICAgIC8vIDEKKyAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKKyAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQorICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCisgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKIAotICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlYXggICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdykgICAgICAgICAgICAgICAvLyBlZGkKKyAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCisgICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAorICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKIAotICAgICAgICAgICAgOiAiJWVjeCIsICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jaWYgMCAgLyogTU1YIHJlZ3MgKCVtbTAsIGV0Yy4pIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIDIuNy4yLjMgb3IgZWdjcyAxLjEgKi8KLSAgICAgICAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKKyAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAorI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCisgICAgICAgICAgICAsICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIgorICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKICNlbmRpZgogICAgICAgICAgKTsKICAgICAgIH0KLSAgICAgIGJyZWFrOworICAgICAgYnJlYWs7ICAvLyBlbmQgOCBicHAKIAotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLy8gYnBwIGdyZWF0ZXIgdGhhbiA4IGJ5dGVzICAgR1JSIEJPR1VTCisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0CiAgICAgICB7Ci0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAibW92bCBfZGlmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZsICUlZWRpLCAlJWVzaSAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWF4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImFkZGwgJSVlYXgsICUlZWRpICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLQotICAgICAgICAgInN1Yl9BbHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglJWVkaSwlJWVkeCwpLCAlJW1tMCAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJSVlc2ksJSVlZHgsKSwgJSVtbTEgICBcblx0IgotICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCBfTU1YTGVuZ3RoLCAlJWVkeCAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWR4LCkgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAtOCB0byBvZmZzZXQgYWRkbCBlZHgKLSAgICAgICAgICAgICJqYiBzdWJfQWxwICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMQotCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQotCi0gICAgICAgICAgICA6ICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLwotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIgorICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAorI2lmIGRlZmluZWQoUE5HX0RFQlVHKQorICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCisgICAgICAgICAgICJwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKSlcbiIpOwogI2VuZGlmCi0gICAgICAgICApOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgIH0gLy8gZW5kIHN3aXRjaCAoYnBwKQogCiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAibW92bCBfTU1YTGVuZ3RoLCAlJWVkeCAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgcm93LCAlJWVkaSAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJjbXBsIF9GdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAiam5iIHN1Yl9lbmQgICAgICAgICAgICAgICAgICBcblx0IgorLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICAgIFxuXHQiCisvL3ByZSAibW92ICByb3csICUxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQorLy9wcmUgImNtcGwgRnVsbExlbmd0aCwgJSVlYXggICAgICAgIFxuXHQiCisgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgICAgXG5cdCIKKyAgICAgICJqbmIgc3ViX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgogCi0gICAgICAibW92bCAlJWVkaSwgJSVlc2kgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwotLy9wcmUgIm1vdmwgYnBwLCAlJWVheCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJhZGRsICUlZWF4LCAlJWVkaSAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgICBcblx0IgorICAgICAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93CisvL3ByZSAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAorICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCiAKLSAgICJzdWJfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAoJSVlc2ksJSVlZHgsKSwgJSVhbCAgICBcblx0IgotICAgICAgImFkZGIgJSVhbCwgKCUlZWRpLCUlZWR4LCkgICAgXG5cdCIKLSAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCBfRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgotICAgICAgImpiIHN1Yl9scDIgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICJzdWJfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCisgICAgICAiYWRkYiAlJWNsLCAoJTEsIiBQQVggIiwpICAgICAgXG5cdCIKKyAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGgKKyAgICAgICJqYiBzdWJfbHAyICAgICAgICAgICAgICAgICAgICBcblx0IgogCi0gICAic3ViX2VuZDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5kIE1NWCBpbnN0cnVjdGlvbnMKKyAgICJzdWJfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVggaW5zdHJ1Y3Rpb25zCiAKLSAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMQorICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQorICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCisgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgIC8vIDIKKyAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkgICAgLy8gMwogCi0gICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVheCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQorICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncworICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKKyAgICAgICAgIjIiIChNTVhMZW5ndGgpLCAgICAgICAgLy8gZWF4CisgICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAgICAgIC8vIGVkeAogCi0gICAgICA6ICIlZWR4IiwgIiVlc2kiICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKKyAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgKTsKIAogfSAvLyBlbmQgb2YgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKLSNlbmRpZgorCisjZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVEICovCiAKIAogCiAKKyNpZiBkZWZpbmVkKFBOR19NTVhfUkVBRF9GSUxURVJfVVBfU1VQUE9SVEVEKQorCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLyAgICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFUgUCAgICAgICAgICAgIC8vCkBAIC00OTI5LDEzNiArNTYxMiwxMzMgQEAKIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcHJldl9yb3cpCiB7Ci0gICBwbmdfdWludF8zMiBsZW47CisgICB1bnNpZ25lZCBsZW47ICAgICAgICAvLyBwbmdfdWludF8zMiBpcyBhY3R1YWxseSA2NC1iaXQgb24geDg2LTY0CiAgICBpbnQgZHVtbXlfdmFsdWVfZDsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciAzIChkeCkgd2FzIHNwaWxsZWQnIGVycm9yCi0gICBpbnQgZHVtbXlfdmFsdWVfUzsKLSAgIGludCBkdW1teV92YWx1ZV9EOworICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX1M7CisgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKIAogICAgbGVuID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgogCiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0vL3ByZSAibW92bCByb3csICUlZWRpICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50Ci0jaWZkZWYgX19QSUNfXwotICAgICAgInB1c2hsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKLSNlbmRpZgotICAgICAgIm1vdmwgJSVlZGksICUlZWN4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgIFxuXHQiCi0gICAgICAiYWRkbCAkMHg3LCAlJWVjeCAgICAgICAgICAgICBcblx0IgotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVjeCAgICAgIFxuXHQiCi0vL3ByZSAibW92bCBwcmV2X3JvdywgJSVlc2kgICAgICAgICBcblx0IgotICAgICAgInN1YmwgJSVlZGksICUlZWN4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJqeiB1cF9nbyAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICBTQVZFX0dPVF9lYngKKy8vcHJlICJtb3YgIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQorLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCiAKLSAgICJ1cF9scDE6ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGZpeCBhbGlnbm1lbnQKLSAgICAgICJtb3ZiICglJWVkaSwlJWVieCwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiYWRkYiAoJSVlc2ksJSVlYngsKSwgJSVhbCAgICBcblx0IgotICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglJWVkaSwlJWVieCwpICBcblx0IiAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0bwotICAgICAgImpiIHVwX2xwMSAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIG9mZnNldCBpbmNsIGVieAorICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgorICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgogCi0gICAidXBfZ286ICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgbGVuLCAlJWVkeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWR4LCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi0gICAgICAic3VibCAlJWVieCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4Ci0gICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlZHggICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAotICAgICAgInN1YmwgJSVlZHgsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gbGVuZ3RoCisgICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQgKG5vdGU6ICBjb21wdXRpbmcgX2RlbHRhXyBvZiB0d28gcG9pbnRlcnMsCisgICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlY3ggaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKKyAgICAgICJtb3YgICUyLCAiIFBDWCAiICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKKyAgICAgICJhZGQgICQweDcsICIgUENYICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcgdG8gaW5jciBwYXN0IGFsaWdubWVudCBiZHJ5CisvLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlY3ggICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQorICAgICAgQ0xFQVJfQk9UVE9NXzNfQklUUyAgUENYICAgICJcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQorICAgICAgInN1YiAgJTIsICIgUENYICIgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCByb3cgcHRyIGFnYWluID0+IGVicCA9CisgICAgICAianogdXBfZ28gICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWN4IGF0IGFsaWdubWVudAorCisgICAidXBfbHAxOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGZpeCBhbGlnbm1lbnQKKyAgICAgICJtb3ZiICglMiwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKKyAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKKyAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKKyAgICAgICJtb3ZiICUlYWwsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8KKyAgICAgICJqYiB1cF9scDEgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIG9mZnNldCBpbmNsIGVieAorCisgICAidXBfZ286ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisvL3ByZSAibW92bCBsZW4sICUlZWR4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAibW92bCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCisgICAgICAic3VibCAlJWVieCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKKyAgICAgICJhbmRsICQweDAwMDAwMDNmLCAlJWVkeCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgNjQKKyAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gc3ViIG92ZXItYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKIAogICAgICAgLy8gdW5yb2xsZWQgbG9vcCAtIHVzZSBhbGwgTU1YIHJlZ2lzdGVycyBhbmQgaW50ZXJsZWF2ZSB0byByZWR1Y2UKICAgICAgIC8vIG51bWJlciBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zIChsb29wcykgYW5kIHJlZHVjZSBwYXJ0aWFsIHN0YWxscwotICAgInVwX2xvb3A6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxICglJWVzaSwlJWVieCwpLCAlJW1tMSAgIFxuXHQiCi0gICAgICAibW92cSAoJSVlZGksJSVlYngsKSwgJSVtbTAgICBcblx0IgotICAgICAgIm1vdnEgOCglJWVzaSwlJWVieCwpLCAlJW1tMyAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92cSA4KCUlZWRpLCUlZWJ4LCksICUlbW0yICBcblx0IgotICAgICAgIm1vdnEgJSVtbTAsICglJWVkaSwlJWVieCwpICAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92cSAxNiglJWVzaSwlJWVieCwpLCAlJW1tNSBcblx0IgotICAgICAgIm1vdnEgJSVtbTIsIDgoJSVlZGksJSVlYngsKSAgXG5cdCIKLSAgICAgICJtb3ZxIDE2KCUlZWRpLCUlZWJ4LCksICUlbW00IFxuXHQiCi0gICAgICAibW92cSAyNCglJWVzaSwlJWVieCwpLCAlJW1tNyBcblx0IgotICAgICAgInBhZGRiICUlbW01LCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDI0KCUlZWRpLCUlZWJ4LCksICUlbW02IFxuXHQiCi0gICAgICAibW92cSAlJW1tNCwgMTYoJSVlZGksJSVlYngsKSBcblx0IgotICAgICAgInBhZGRiICUlbW03LCAlJW1tNiAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDMyKCUlZXNpLCUlZWJ4LCksICUlbW0xIFxuXHQiCi0gICAgICAibW92cSAlJW1tNiwgMjQoJSVlZGksJSVlYngsKSBcblx0IgotICAgICAgIm1vdnEgMzIoJSVlZGksJSVlYngsKSwgJSVtbTAgXG5cdCIKLSAgICAgICJtb3ZxIDQwKCUlZXNpLCUlZWJ4LCksICUlbW0zIFxuXHQiCi0gICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgIm1vdnEgNDAoJSVlZGksJSVlYngsKSwgJSVtbTIgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0wLCAzMiglJWVkaSwlJWVieCwpIFxuXHQiCi0gICAgICAicGFkZGIgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IgotICAgICAgIm1vdnEgNDgoJSVlc2ksJSVlYngsKSwgJSVtbTUgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0yLCA0MCglJWVkaSwlJWVieCwpIFxuXHQiCi0gICAgICAibW92cSA0OCglJWVkaSwlJWVieCwpLCAlJW1tNCBcblx0IgotICAgICAgIm1vdnEgNTYoJSVlc2ksJSVlYngsKSwgJSVtbTcgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92cSA1NiglJWVkaSwlJWVieCwpLCAlJW1tNiBcblx0IgotICAgICAgIm1vdnEgJSVtbTQsIDQ4KCUlZWRpLCUlZWJ4LCkgXG5cdCIKLSAgICAgICJhZGRsICQ2NCwgJSVlYnggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAicGFkZGIgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxICUlbW02LCAtOCglJWVkaSwlJWVieCwpIFxuXHQiIC8vICgrNTYpbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7Ci0gICAgICAiamIgdXBfbG9vcCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgLTggdG8gb2Zmc2V0IGFkZGwgZWJ4CisgICAidXBfbG9vcDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSAoJTEsIiBQQlggIiwpLCAlJW1tMSAgIFxuXHQiCisgICAgICAibW92cSAoJTIsIiBQQlggIiwpLCAlJW1tMCAgIFxuXHQiCisgICAgICAibW92cSA4KCUxLCIgUEJYICIsKSwgJSVtbTMgIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSA4KCUyLCIgUEJYICIsKSwgJSVtbTIgIFxuXHQiCisgICAgICAibW92cSAlJW1tMCwgKCUyLCIgUEJYICIsKSAgIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTMsICUlbW0yICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSAxNiglMSwiIFBCWCAiLCksICUlbW01IFxuXHQiCisgICAgICAibW92cSAlJW1tMiwgOCglMiwiIFBCWCAiLCkgIFxuXHQiCisgICAgICAibW92cSAxNiglMiwiIFBCWCAiLCksICUlbW00IFxuXHQiCisgICAgICAibW92cSAyNCglMSwiIFBCWCAiLCksICUlbW03IFxuXHQiCisgICAgICAicGFkZGIgJSVtbTUsICUlbW00ICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSAyNCglMiwiIFBCWCAiLCksICUlbW02IFxuXHQiCisgICAgICAibW92cSAlJW1tNCwgMTYoJTIsIiBQQlggIiwpIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSAzMiglMSwiIFBCWCAiLCksICUlbW0xIFxuXHQiCisgICAgICAibW92cSAlJW1tNiwgMjQoJTIsIiBQQlggIiwpIFxuXHQiCisgICAgICAibW92cSAzMiglMiwiIFBCWCAiLCksICUlbW0wIFxuXHQiCisgICAgICAibW92cSA0MCglMSwiIFBCWCAiLCksICUlbW0zIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSA0MCglMiwiIFBCWCAiLCksICUlbW0yIFxuXHQiCisgICAgICAibW92cSAlJW1tMCwgMzIoJTIsIiBQQlggIiwpIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTMsICUlbW0yICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSA0OCglMSwiIFBCWCAiLCksICUlbW01IFxuXHQiCisgICAgICAibW92cSAlJW1tMiwgNDAoJTIsIiBQQlggIiwpIFxuXHQiCisgICAgICAibW92cSA0OCglMiwiIFBCWCAiLCksICUlbW00IFxuXHQiCisgICAgICAibW92cSA1NiglMSwiIFBCWCAiLCksICUlbW03IFxuXHQiCisgICAgICAicGFkZGIgJSVtbTUsICUlbW00ICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSA1NiglMiwiIFBCWCAiLCksICUlbW02IFxuXHQiCisgICAgICAibW92cSAlJW1tNCwgNDgoJTIsIiBQQlggIiwpIFxuXHQiCisgICAgICAiYWRkbCAkNjQsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAicGFkZGIgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCisgICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCisgICAgICAibW92cSAlJW1tNiwgLTgoJTIsIiBQQlggIiwpIFxuXHQiIC8vICgrNTYpbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7CisgICAgICAiamIgdXBfbG9vcCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICAtOCB0byBvZmZzZXQgYWRkbCBlYngKIAotICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBmb3IgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0Ci0gICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgNjQKKyAgICAgICJqeiB1cF9lbmQgICAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgICAgImNtcGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBmb3IgbGVzcyB0aGFuIDggYnl0ZXMKLSAgICAgICJqYiB1cF9sdDggICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBbYWRkZWQgYnkgbGNyZWV2ZSBhdCBuZXRpbnMubmV0XQorICAgICAgImNtcGwgJDgsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBsZXNzIHRoYW4gOCBieXRlcworICAgICAgImpiIHVwX2x0OCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgW2FkZGVkIGJ5IGxjcmVldmUgYXQgbmV0aW5zLm5ldF0KIAotICAgICAgImFkZGwgJSVlZHgsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVkeCAgICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAotICAgICAgImp6IHVwX2x0OCAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJhZGRsICUlZWR4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKKyAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVkeCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAorICAgICAgInN1YmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXItYnl0ZXMgZnJvbSBsZW5ndGgKKyAgICAgICJqeiB1cF9sdDggICAgICAgICAgICAgICAgICAgXG5cdCIKIAotICAgInVwX2xwQTogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gdXNlIE1NWCByZWdzIHRvIHVwZGF0ZSA4IGJ5dGVzIHNpbS4KLSAgICAgICJtb3ZxICglJWVzaSwlJWVieCwpLCAlJW1tMSAgIFxuXHQiCi0gICAgICAibW92cSAoJSVlZGksJSVlYngsKSwgJSVtbTAgICBcblx0IgotICAgICAgImFkZGwgJDgsICUlZWJ4ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgICBcblx0IgotICAgICAgIm1vdnEgJSVtbTAsIC04KCUlZWRpLCUlZWJ4LCkgXG5cdCIgLy8gbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC04IHRvCi0gICAgICAiamIgdXBfbHBBICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGFkZCBlYngKLSAgICAgICJjbXBsICQwLCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA4Ci0gICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgInVwX2xwQTogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyB1c2UgTU1YIHJlZ3MgdG8gdXBkYXRlIDggYnl0ZXMgc2ltLgorICAgICAgIm1vdnEgKCUxLCIgUEJYICIsKSwgJSVtbTEgICBcblx0IgorICAgICAgIm1vdnEgKCUyLCIgUEJYICIsKSwgJSVtbTAgICBcblx0IgorICAgICAgImFkZGwgJDgsICUlZWJ4ICAgICAgICAgICAgICBcblx0IgorICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgorICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgorICAgICAgIm1vdnEgJSVtbTAsIC04KCUyLCIgUEJYICIsKSBcblx0IiAvLyBtb3ZxIGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTggdG8KKyAgICAgICJqYiB1cF9scEEgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIG9mZnNldCBhZGQgZWJ4CisgICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA4CisgICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgIFxuXHQiCiAKLSAgICJ1cF9sdDg6ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgICBcblx0IgotICAgICAgImFkZGwgJSVlZHgsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBvdmVyIGJ5dGUgY291bnQgaW50byBjb3VudGVyCisgICAidXBfbHQ4OiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCisgICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIG1vdmUgb3ZlciBieXRlIGNvdW50IGludG8gY291bnRlcgogCi0gICAidXBfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyB1c2UgeDg2IHJlZ3MgZm9yIHJlbWFpbmluZyBieXRlcwotICAgICAgIm1vdmIgKCUlZWRpLCUlZWJ4LCksICUlYWwgICAgXG5cdCIKLSAgICAgICJhZGRiICglJWVzaSwlJWVieCwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZiICUlYWwsIC0xKCUlZWRpLCUlZWJ4LCkgIFxuXHQiIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvCi0gICAgICAiamIgdXBfbHAyICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGluYyBlYngKKyAgICJ1cF9scDI6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gdXNlIHg4NiByZWdzIGZvciByZW1haW5pbmcgYnl0ZXMKKyAgICAgICJtb3ZiICglMiwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKKyAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKKyAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKKyAgICAgICJtb3ZiICUlYWwsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8KKyAgICAgICJqYiB1cF9scDIgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIG9mZnNldCBpbmMgZWJ4CiAKLSAgICJ1cF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBjb252ZXJzaW9uIG9mIGZpbHRlcmVkIHJvdyBjb21wbGV0ZQotI2lmZGVmIF9fUElDX18KLSAgICAgICJwb3BsICUlZWJ4ICAgICAgICAgICAgICAgICAgIFxuXHQiCi0jZW5kaWYKKyAgICJ1cF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gY29udmVyc2lvbiBvZiBmaWx0ZXJlZCByb3cgY29tcGxldGUKKyAgICAgIFJFU1RPUkVfR09UX2VieAogCi0gICAgICA6ICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCisgICAgICA6ICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgLy8gMQogICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSAgICAvLyAyCiAKLSAgICAgIDogIjAiIChsZW4pLCAgICAgICAgICAgICAgLy8gZWR4ICAgIC8vIGlucHV0IHJlZ3MKKyAgICAgIDogIjAiIChsZW4pLCAgICAgICAgICAgICAgLy8gZWR4ICAgLy8gaW5wdXQgcmVncwogICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgICAgICAvLyBlc2kKICAgICAgICAgIjIiIChyb3cpICAgICAgICAgICAgICAgLy8gZWRpCiAKLSAgICAgIDogIiVlYXgiLCAiJWVjeCIgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QgKG5vIGlucHV0IHJlZ3MhKQotI2lmbmRlZiBfX1BJQ19fCi0gICAgICAsICIlZWJ4IgotI2VuZGlmCi0KLSNpZiAwICAvKiBNTVggcmVncyAoJW1tMCwgZXRjLikgbm90IHN1cHBvcnRlZCBieSBnY2MgMi43LjIuMyBvciBlZ2NzIDEuMSAqLworICAgICAgOiAiJWVheCIsICIlZWN4IiAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QgKG5vIGlucHV0IHJlZ3MhKQorICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CisjaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAsICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIgogICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKICNlbmRpZgpAQCAtNTA2Niw3ICs1NzQ2LDcgQEAKIAogfSAvLyBlbmQgb2YgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAoKQogCi0jZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLworI2VuZGlmIC8qIFBOR19NTVhfUkVBRF9GSUxURVJfVVBfU1VQUE9SVEVEICovCiAKIAogCkBAIC01MDc3LDc5ICs1NzU3LDEwMiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0KIC8qIE9wdGltaXplZCBwbmdfcmVhZF9maWx0ZXJfcm93IHJvdXRpbmVzICovCiAKIHZvaWQgLyogUFJJVkFURSAqLwogcG5nX3JlYWRfZmlsdGVyX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAKICAgIHJvdywgcG5nX2J5dGVwIHByZXZfcm93LCBpbnQgZmlsdGVyKQogewotI2lmZGVmIFBOR19ERUJVRwotICAgY2hhciBmaWxubVsxMF07CisjaWYgZGVmaW5lZChQTkdfREVCVUcpCisgICBjaGFyIGZpbHRuYW1lWzEwXTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKQotLyogR1JSOiAgdGhlc2UgYXJlIHN1cGVyc2VkZWQgYnkgcG5nX3B0ci0+YXNtX2ZsYWdzOiAqLwotI2RlZmluZSBVc2VNTVhfc3ViICAgIDEgICAvLyBHUlI6ICBjb252ZXJ0ZWQgMjAwMDA3MzAKLSNkZWZpbmUgVXNlTU1YX3VwICAgICAxICAgLy8gR1JSOiAgY29udmVydGVkIDIwMDAwNzI5Ci0jZGVmaW5lIFVzZU1NWF9hdmcgICAgMSAgIC8vIEdSUjogIGNvbnZlcnRlZCAyMDAwMDgyOCAoKyAxNi1iaXQgYnVnZml4IDIwMDAwOTE2KQotI2RlZmluZSBVc2VNTVhfcGFldGggIDEgICAvLyBHUlI6ICBjb252ZXJ0ZWQgMjAwMDA4MjgKLQogICAgaWYgKF9tbXhfc3VwcG9ydGVkID09IDIpIHsKLSAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KICNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCisgICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwogI2VuZGlmCiAgICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgICB9Ci0jZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwogCi0jaWZkZWYgUE5HX0RFQlVHCisjaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2ZpbHRlcl9yb3cgKHBuZ2djY3JkLmMpXG4iKTsKICAgIHN3aXRjaCAoZmlsdGVyKQogICAgewotICAgICAgY2FzZSAwOiBzcHJpbnRmKGZpbG5tLCAibm9uZSIpOworICAgICAgY2FzZSAwOgorICAgICAgICAgcG5nX3NucHJpbnRmKGZpbHRuYW1lLCAxMCwgIm5vbmUiKTsKICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAxOiBzcHJpbnRmKGZpbG5tLCAic3ViLSVzIiwKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCisKKyAgICAgIGNhc2UgMToKKyAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJzdWItJXMiLAorI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfU1VCX1NVUFBPUlRFRAogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKT8gIk1NWCIgOgorICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKSAmJgorICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgorICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkgPyAiTU1YIiA6IAorI2Vsc2UKKyAgICAgICAgICAgX21teF9zdXBwb3J0ZWQKICNlbmRpZgogI2VuZGlmCi0ieDg2Iik7CisgICAgICAgICAgICJDIik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjogc3ByaW50ZihmaWxubSwgInVwLSVzIiwKLSNpZmRlZiBQTkdfTU1YX0NPREVfU1VQUE9SVEVECisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJ1cC0lcyIsCisjaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQKICNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKT8gIk1NWCIgOgorICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApICYmCisgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCisgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKSA/ICJNTVgiIDoKKyNlbHNlCisgICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiAjZW5kaWYKICNlbmRpZgotICJ4ODYiKTsKKyAgICAgICAgICAgIkMiKTsKICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiBzcHJpbnRmKGZpbG5tLCAiYXZnLSVzIiwKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCisKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJhdmctJXMiLAorI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKT8gIk1NWCIgOgorICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKSAmJgorICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgorICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkgPyAiTU1YIiA6IAorI2Vsc2UKKyAgICAgICAgICAgX21teF9zdXBwb3J0ZWQKICNlbmRpZgogI2VuZGlmCi0gIng4NiIpOworICAgICAgICAgICAiQyIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDQ6IHNwcmludGYoZmlsbm0sICJQYWV0aC0lcyIsCi0jaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQorCisgICAgICBjYXNlIDQ6CisgICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAicGFldGgtJXMiLAorI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVECisjaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgfHwgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKICNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIKT8gIk1NWCI6CisgICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKKyAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKKyAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCisjZWxzZQorICAgICAgICAgICBfbW14X3N1cHBvcnRlZAogI2VuZGlmCisgICAgICAgICAgID8gIk1NWCIgOgorI2VuZGlmIC8qIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LICovCiAjZW5kaWYKLSJ4ODYiKTsKKyAgICAgICAgICAgICAiQyIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBzcHJpbnRmKGZpbG5tLCAidW5rbnciKTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJ1bmtub3duIik7CiAgICAgICAgICBicmVhazsKICAgIH0KLSAgIHBuZ19kZWJ1ZzIoMCwgInJvd19udW1iZXI9JTVsZCwgJTVzLCAiLCBwbmdfcHRyLT5yb3dfbnVtYmVyLCBmaWxubSk7Ci0gICBwbmdfZGVidWcxKDAsICJyb3c9MHglMDhseCwgIiwgKHVuc2lnbmVkIGxvbmcpcm93KTsKLSAgIHBuZ19kZWJ1ZzIoMCwgInBpeGRlcHRoPSUyZCwgYnl0ZXM9JWQsICIsIChpbnQpcm93X2luZm8tPnBpeGVsX2RlcHRoLAorICAgcG5nX2RlYnVnMigyLCAicm93X251bWJlcj0lbGQsICVzLCAiLCBwbmdfcHRyLT5yb3dfbnVtYmVyLCBmaWx0bmFtZSk7CisgICAvL3BuZ19kZWJ1ZzEoMCwgInBuZ19wdHI9JTEwcCwgIiwgcG5nX3B0cik7CisgICAvL3BuZ19kZWJ1ZzEoMCwgImFzbV9mbGFncz0weCUwOGx4LCAiLCBwbmdfcHRyLT5hc21fZmxhZ3MpOworICAgcG5nX2RlYnVnMSgwLCAicm93PSUxMHAsICIsIHJvdyk7CisgICBwbmdfZGVidWcyKDAsICJwaXhkZXB0aD0lZCwgYnl0ZXM9JWQsICIsIChpbnQpcm93X2luZm8tPnBpeGVsX2RlcHRoLAogICAgICAgKGludCkoKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDMpKTsKLSAgIHBuZ19kZWJ1ZzEoMCwicm93Ynl0ZXM9JThsZFxuIiwgcm93X2luZm8tPnJvd2J5dGVzKTsKKyAgIHBuZ19kZWJ1ZzEoMCwgInJvd2J5dGVzPSVsZFxuIiwgcm93X2luZm8tPnJvd2J5dGVzKTsKICNlbmRpZiAvKiBQTkdfREVCVUcgKi8KIAogICAgc3dpdGNoIChmaWx0ZXIpCkBAIC01MTU4LDcgKzU4NjEsNyBAQAogICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6Ci0jaWYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQorI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfU1VCX1NVUFBPUlRFRAogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpICYmCiAgICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgpAQCAtNTE3MCw3ICs1ODczLDcgQEAKICAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCisjZW5kaWYKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKQEAgLTUxODcsNyArNTg5MCw3IEBACiAgICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKKyNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkgJiYKICAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCkBAIC01MTk5LDcgKzU5MDIsNyBAQAogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQogICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCisjZW5kaWYKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKQEAgLTUyMTUsNyArNTkxOCw3IEBACiAgICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCisjaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVECiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRykgJiYKICAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCkBAIC01MjI3LDcgKzU5MzAsNyBAQAogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCisjZW5kaWYKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7CkBAIC01MjUzLDcgKzU5NTYsOCBAQAogICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9QQUVUSDoKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCisjaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQKKyNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQogI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKICAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCkBAIC01MjY1LDcgKzU5NjksOCBAQAogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KKyNlbmRpZiAvKiBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCB8fCBQTkdfVEhSRUFEX1VOU0FGRV9PSyAqLworI2VuZGlmCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwpAQCAtNTI5Miw3ICs1OTk3LDcgQEAKICAgICAgICAgICAgICAgIHAgPSBiIC0gYzsKICAgICAgICAgICAgICAgIHBjID0gYSAtIGM7CiAKLSNpZmRlZiBQTkdfVVNFX0FCUworI2lmIGRlZmluZWQoUE5HX1VTRV9BQlMpCiAgICAgICAgICAgICAgICBwYSA9IGFicyhwKTsKICAgICAgICAgICAgICAgIHBiID0gYWJzKHBjKTsKICAgICAgICAgICAgICAgIHBjID0gYWJzKHAgKyBwYyk7CkBAIC01MzI5LDkyICs2MDM0LDUgQEAKICNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XICovCiAKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgUCBOIEcgXyBNIE0gWCBfIFMgVSBQIFAgTyBSIFQgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBHUlIgTk9URVM6ICAoMSkgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgMzg2IG9yIGJldHRlciAocHVzaGZsL3BvcGZsKQotICogICAgICAgICAgICAgKDIpIGFsbCBpbnN0cnVjdGlvbnMgY29tcGlsZSB3aXRoIGdjYyAyLjcuMi4zIGFuZCBsYXRlcgotICogICAgICAgICAgICAgKDMpIHRoZSBmdW5jdGlvbiBpcyBtb3ZlZCBkb3duIGhlcmUgdG8gcHJldmVudCBnY2MgZnJvbQotICogICAgICAgICAgICAgICAgICBpbmxpbmluZyBpdCBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIHRoZW4gYmFyZmluZyBiZS0KLSAqICAgICAgICAgICAgICAgICAgY2F1c2UgdGhlICIuTk9UX1NVUFBPUlRFRCIgbGFiZWwgaXMgbXVsdGlwbHkgZGVmaW5lZAotICogICAgICAgICAgICAgW2lzIHRoZXJlIGEgd2F5IHRvIHNpZ25hbCB0aGF0IGEgKnNpbmdsZSogZnVuY3Rpb24gc2hvdWxkCi0gKiAgICAgICAgICAgICAgbm90IGJlIGlubGluZWQ/ICBpcyB0aGVyZSBhIHdheSB0byBtb2RpZnkgdGhlIGxhYmVsIGZvcgotICogICAgICAgICAgICAgIGVhY2ggaW5saW5lZCBpbnN0YW5jZSwgZS5nLiwgYnkgYXBwZW5kaW5nIF8xLCBfMiwgZXRjLj8KLSAqICAgICAgICAgICAgICBtYXliZSBpZiBkb24ndCB1c2UgbGVhZGluZyAiLiIgaW4gbGFiZWwgbmFtZT8gKG5vcGUuLi5zaWdoKV0KLSAqLwotCi1pbnQgUE5HQVBJCi1wbmdfbW14X3N1cHBvcnQodm9pZCkKLXsKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0gICAgaW50IHJlc3VsdDsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICJwdXNobCAlJWVieCAgICAgICAgICBcblx0IiAgLy8gZWJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCi0gICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyBlY3guLi4KLSAgICAgICAgInB1c2hsICUlZWR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgZWR4IChidXQgZWN4ICYgZWR4IHNhZmUgb24gTGludXgpCi0vLyAgICAgICIuYnl0ZSAgMHg2NiAgICAgICAgICBcblx0IiAgLy8gY29udmVydCAxNi1iaXQgcHVzaGYgdG8gMzItYml0IHB1c2hmZAotLy8gICAgICAicHVzaGYgICAgICAgICAgICAgICAgXG5cdCIgIC8vIDE2LWJpdCBwdXNoZgotICAgICAgICAicHVzaGZsICAgICAgICAgICAgICAgXG5cdCIgIC8vIHNhdmUgRWZsYWcgdG8gc3RhY2sKLSAgICAgICAgInBvcGwgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjayBpbnRvIGVheAotICAgICAgICAibW92bCAlJWVheCwgJSVlY3ggICAgXG5cdCIgIC8vIG1ha2UgYW5vdGhlciBjb3B5IG9mIEVmbGFnIGluIGVjeAotICAgICAgICAieG9ybCAkMHgyMDAwMDAsICUlZWF4IFxuXHQiIC8vIHRvZ2dsZSBJRCBiaXQgaW4gRWZsYWcgKGkuZS4sIGJpdCAyMSkKLSAgICAgICAgInB1c2hsICUlZWF4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG1vZGlmaWVkIEVmbGFnIGJhY2sgdG8gc3RhY2sKLS8vICAgICAgIi5ieXRlICAweDY2ICAgICAgICAgIFxuXHQiICAvLyBjb252ZXJ0IDE2LWJpdCBwb3BmIHRvIDMyLWJpdCBwb3BmZAotLy8gICAgICAicG9wZiAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIDE2LWJpdCBwb3BmCi0gICAgICAgICJwb3BmbCAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBtb2RpZmllZCB2YWx1ZSB0byBFZmxhZyByZWcKLSAgICAgICAgInB1c2hmbCAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCi0gICAgICAgICJwb3BsICUlZWF4ICAgICAgICAgICBcblx0IiAgLy8gZ2V0IEVmbGFnIGZyb20gc3RhY2sKLSAgICAgICAgInB1c2hsICUlZWN4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG9yaWdpbmFsIEVmbGFnIHRvIHN0YWNrCi0gICAgICAgICJwb3BmbCAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBvcmlnaW5hbCBFZmxhZwotICAgICAgICAieG9ybCAlJWVjeCwgJSVlYXggICAgXG5cdCIgIC8vIGNvbXBhcmUgbmV3IEVmbGFnIHdpdGggb3JpZ2luYWwgRWZsYWcKLSAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBzYW1lLCBDUFVJRCBpbnN0ci4gaXMgbm90IHN1cHBvcnRlZAotCi0gICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICBcblx0IiAgLy8gc2V0IGVheCB0byB6ZXJvCi0vLyAgICAgICIuYnl0ZSAgMHgwZiwgMHhhMiAgICBcblx0IiAgLy8gQ1BVSUQgaW5zdHJ1Y3Rpb24gKHR3by1ieXRlIG9wY29kZSkKLSAgICAgICAgImNwdWlkICAgICAgICAgICAgICAgIFxuXHQiICAvLyBnZXQgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBpbmZvCi0gICAgICAgICJjbXBsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gbWFrZSBzdXJlIGVheCByZXR1cm4gbm9uLXplcm8gdmFsdWUKLSAgICAgICAgImpsIDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBlYXggaXMgemVybywgTU1YIGlzIG5vdCBzdXBwb3J0ZWQKLQotICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgXG5cdCIgIC8vIHNldCBlYXggdG8gemVybyBhbmQuLi4KLSAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyAuLi5pbmNyZW1lbnQgZWF4IHRvIDEuICBUaGlzIHBhaXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgaW5zdHJ1Y3Rpb24gIm1vdiBlYXgsIDEiCi0gICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbyBhZ2FpbgotICAgICAgICAiYW5kbCAkMHg4MDAwMDAsICUlZWR4IFxuXHQiIC8vIG1hc2sgb3V0IGFsbCBiaXRzIGJ1dCBNTVggYml0ICgyMykKLSAgICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgIFxuXHQiICAvLyAwID0gTU1YIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBub24temVybyA9IHllcywgTU1YIElTIHN1cHBvcnRlZAotCi0gICAgICAgICJtb3ZsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAxCi0gICAgICAgICJqbXAgIDFmICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIGhhdmUgTU1YIHN1cHBvcnQKLQotICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIC5OT1RfU1VQUE9SVEVEOiB0YXJnZXQgbGFiZWwgZm9yIGp1bXAgaW5zdHJ1Y3Rpb25zCi0gICAgICAgICJtb3ZsICQwLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAwCi0gICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gLlJFVFVSTjogdGFyZ2V0IGxhYmVsIGZvciBqdW1wIGluc3RydWN0aW9ucwotICAgICAgICAicG9wbCAlJWVkeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWR4Ci0gICAgICAgICJwb3BsICUlZWN4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlY3gKLSAgICAgICAgInBvcGwgJSVlYnggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVieAotCi0vLyAgICAgICJyZXQgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIG5vIE1NWCBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBDICJyZXQiKQotCi0gICAgICAgIDogIj1hIiAocmVzdWx0KSAgICAgICAgICAgICAgLy8gb3V0cHV0IGxpc3QKLQotICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSB2YXJpYWJsZXMgdXNlZCBvbiBpbnB1dCAobm9uZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNsb2JiZXIgbGlzdAotLy8gICAgICAsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIgICAgIC8vIEdSUjogIHdlIGhhbmRsZSB0aGVzZSBtYW51YWxseQotLy8gICAgICAsICJtZW1vcnkiICAgLy8gaWYgd3JpdGUgdG8gYSB2YXJpYWJsZSBnY2MgdGhvdWdodCB3YXMgaW4gYSByZWcKLS8vICAgICAgLCAiY2MiICAgICAgIC8vICJjb25kaXRpb24gY29kZXMiIChmbGFnIGJpdHMpCi0gICAgKTsKLSAgICBfbW14X3N1cHBvcnRlZCA9IHJlc3VsdDsKLSNlbHNlCi0gICAgX21teF9zdXBwb3J0ZWQgPSAwOwotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KLQotICAgIHJldHVybiBfbW14X3N1cHBvcnRlZDsKLX0KLQotCi0jZW5kaWYgLyogUE5HX1VTRV9QTkdHQ0NSRCAqLworI2VuZGlmIC8qIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgJiYgUE5HX1VTRV9QTkdHQ0NSRCAqLworI2VuZGlmIC8qIF9fR05VQ19fICovCmRpZmYgLS1naXQgYS9wbmdnZXQuYyBiL3BuZ2dldC5jCmluZGV4IDAzNmU5YWYuLjc1ZDJjYTAgMTAwNjQ0Ci0tLSBhL3BuZ2dldC5jCisrKyBiL3BuZ2dldC5jCkBAIC01MTIsOCArNTEyLDExIEBACiAgICAgICAgICAgICAgcG5nX3NQTFRfdHBwIHNwYWxldHRlcykKIHsKICAgIGlmIChwbmdfcHRyICE9IE5VTEwgJiYgaW5mb19wdHIgIT0gTlVMTCAmJiBzcGFsZXR0ZXMgIT0gTlVMTCkKKyAgIHsKICAgICAgKnNwYWxldHRlcyA9IGluZm9fcHRyLT5zcGx0X3BhbGV0dGVzOwotICAgcmV0dXJuICgocG5nX3VpbnRfMzIpaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtKTsKKyAgICAgcmV0dXJuICgocG5nX3VpbnRfMzIpaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtKTsKKyAgIH0KKyAgIHJldHVybiAoMCk7CiB9CiAjZW5kaWYKIApAQCAtODAwLDggKzgwMywxMSBAQAogICAgICAgICAgICAgIHBuZ191bmtub3duX2NodW5rcHAgdW5rbm93bnMpCiB7CiAgICBpZiAocG5nX3B0ciAhPSBOVUxMICYmIGluZm9fcHRyICE9IE5VTEwgJiYgdW5rbm93bnMgIT0gTlVMTCkKKyAgIHsKICAgICAgKnVua25vd25zID0gaW5mb19wdHItPnVua25vd25fY2h1bmtzOwotICAgcmV0dXJuICgocG5nX3VpbnRfMzIpaW5mb19wdHItPnVua25vd25fY2h1bmtzX251bSk7CisgICAgIHJldHVybiAoKHBuZ191aW50XzMyKWluZm9fcHRyLT51bmtub3duX2NodW5rc19udW0pOworICAgfQorICAgcmV0dXJuICgwKTsKIH0KICNlbmRpZgogCkBAIC05NTEsNSArOTU3LDYgQEAKICAgICByZXR1cm4gKHBuZ19wdHI/IHBuZ19wdHItPnVzZXJfaGVpZ2h0X21heCA6IDApOwogfQogI2VuZGlmIC8qID9QTkdfU0VUX1VTRVJfTElNSVRTX1NVUFBPUlRFRCAqLworIAogCiAjZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEIHx8IFBOR19XUklURV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3BuZ3ByZWFkLmMgYi9wbmdwcmVhZC5jCmluZGV4IDE0NzBiMGYuLjJlZjYyMTIgMTAwNjQ0Ci0tLSBhL3BuZ3ByZWFkLmMKKysrIGIvcG5ncHJlYWQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncHJlYWQuYyAtIHJlYWQgYSBwbmcgZmlsZSBpbiBwdXNoIG1vZGUKICAqCi0gKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xNyBNYXkgMTUsIDIwMDcKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bHkgMzEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTEzNyw2MCArMTM3LDYwIEBACiBwbmdfcHVzaF9yZWFkX2NodW5rKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0cikKIHsKICNpZmRlZiBQTkdfVVNFX0xPQ0FMX0FSUkFZUwotICAgICAgUE5HX0lIRFI7Ci0gICAgICBQTkdfSURBVDsKLSAgICAgIFBOR19JRU5EOwotICAgICAgUE5HX1BMVEU7CisgICAgICBQTkdfQ09OU1QgUE5HX0lIRFI7CisgICAgICBQTkdfQ09OU1QgUE5HX0lEQVQ7CisgICAgICBQTkdfQ09OU1QgUE5HX0lFTkQ7CisgICAgICBQTkdfQ09OU1QgUE5HX1BMVEU7CiAjaWYgZGVmaW5lZChQTkdfUkVBRF9iS0dEX1NVUFBPUlRFRCkKLSAgICAgIFBOR19iS0dEOworICAgICAgUE5HX0NPTlNUIFBOR19iS0dEOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9jSFJNX1NVUFBPUlRFRCkKLSAgICAgIFBOR19jSFJNOworICAgICAgUE5HX0NPTlNUIFBOR19jSFJNOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9nQU1BX1NVUFBPUlRFRCkKLSAgICAgIFBOR19nQU1BOworICAgICAgUE5HX0NPTlNUIFBOR19nQU1BOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9oSVNUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19oSVNUOworICAgICAgUE5HX0NPTlNUIFBOR19oSVNUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9pQ0NQX1NVUFBPUlRFRCkKLSAgICAgIFBOR19pQ0NQOworICAgICAgUE5HX0NPTlNUIFBOR19pQ0NQOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9pVFh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR19pVFh0OworICAgICAgUE5HX0NPTlNUIFBOR19pVFh0OwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9vRkZzX1NVUFBPUlRFRCkKLSAgICAgIFBOR19vRkZzOworICAgICAgUE5HX0NPTlNUIFBOR19vRkZzOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9wQ0FMX1NVUFBPUlRFRCkKLSAgICAgIFBOR19wQ0FMOworICAgICAgUE5HX0NPTlNUIFBOR19wQ0FMOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9wSFlzX1NVUFBPUlRFRCkKLSAgICAgIFBOR19wSFlzOworICAgICAgUE5HX0NPTlNUIFBOR19wSFlzOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zQklUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zQklUOworICAgICAgUE5HX0NPTlNUIFBOR19zQklUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zQ0FMX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zQ0FMOworICAgICAgUE5HX0NPTlNUIFBOR19zQ0FMOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zUkdCX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zUkdCOworICAgICAgUE5HX0NPTlNUIFBOR19zUkdCOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zUExUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zUExUOworICAgICAgUE5HX0NPTlNUIFBOR19zUExUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90RVh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR190RVh0OworICAgICAgUE5HX0NPTlNUIFBOR190RVh0OwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90SU1FX1NVUFBPUlRFRCkKLSAgICAgIFBOR190SU1FOworICAgICAgUE5HX0NPTlNUIFBOR190SU1FOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90Uk5TX1NVUFBPUlRFRCkKLSAgICAgIFBOR190Uk5TOworICAgICAgUE5HX0NPTlNUIFBOR190Uk5TOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF96VFh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR196VFh0OworICAgICAgUE5HX0NPTlNUIFBOR196VFh0OwogI2VuZGlmCiAjZW5kaWYgLyogUE5HX1VTRV9MT0NBTF9BUlJBWVMgKi8KICAgIC8qIEZpcnN0IHdlIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGZvciB0aGUgNCBieXRlIGNodW5rIG5hbWUKQEAgLTY2MCw3ICs2NjAsNyBAQAogcG5nX3B1c2hfcmVhZF9JREFUKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CiAjaWZkZWYgUE5HX1VTRV9MT0NBTF9BUlJBWVMKLSAgIFBOR19JREFUOworICAgUE5HX0NPTlNUIFBOR19JREFUOwogI2VuZGlmCiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfQ0hVTktfSEVBREVSKSkKICAgIHsKQEAgLTk5MCwyNSArOTkwLDI1IEBACiAgICAvKiBhcnJheXMgdG8gZmFjaWxpdGF0ZSBlYXN5IGludGVybGFjaW5nIC0gdXNlIHBhc3MgKDAgLSA2KSBhcyBpbmRleCAqLwogCiAgICAvKiBzdGFydCBvZiBpbnRlcmxhY2UgYmxvY2sgKi8KLSAgIGNvbnN0IGludCBGQVJEQVRBIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07CisgICBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKIAogICAgLyogb2Zmc2V0IHRvIG5leHQgaW50ZXJsYWNlIGJsb2NrICovCi0gICBjb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKIAogICAgLyogc3RhcnQgb2YgaW50ZXJsYWNlIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbiAqLwotICAgY29uc3QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfeXN0YXJ0W10gPSB7MCwgMCwgNCwgMCwgMiwgMCwgMX07CisgICBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfeXN0YXJ0W10gPSB7MCwgMCwgNCwgMCwgMiwgMCwgMX07CiAKICAgIC8qIG9mZnNldCB0byBuZXh0IGludGVybGFjZSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24gKi8KLSAgIGNvbnN0IGludCBGQVJEQVRBIHBuZ19wYXNzX3lpbmNbXSA9IHs4LCA4LCA4LCA0LCA0LCAyLCAyfTsKKyAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc195aW5jW10gPSB7OCwgOCwgOCwgNCwgNCwgMiwgMn07CiAKICAgIC8qIFdpZHRoIG9mIGludGVybGFjZSBibG9jay4gIFRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VkIC0gaWYgeW91IG5lZWQKICAgICAqIGl0LCB1bmNvbW1lbnQgaXQgaGVyZSBhbmQgaW4gcG5nLmgKLSAgIGNvbnN0IGludCBGQVJEQVRBIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07CisgICBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsKICAgICovCiAKICAgIC8qIEhlaWdodCBvZiBpbnRlcmxhY2UgYmxvY2suICBUaGlzIGlzIG5vdCBjdXJyZW50bHkgdXNlZCAtIGlmIHlvdSBuZWVkCiAgICAgKiBpdCwgdW5jb21tZW50IGl0IGhlcmUgYW5kIGluIHBuZy5oCi0gICBjb25zdCBpbnQgRkFSREFUQSBwbmdfcGFzc19oZWlnaHRbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19oZWlnaHRbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKICAgICovCiAjZW5kaWYKIApAQCAtMTA2Miw4ICsxMDYyLDcgQEAKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewogICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgcGxhY2UgdEVYdCIpOwotICAgICAgICAgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwotICAgICAgICAgaWYoaW5mb19wdHIgPT0gTlVMTCkgcmV0dXJuOworICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwogICAgICAgfQogCiAjaWZkZWYgUE5HX01BWF9NQUxMT0NfNjRLCkBAIC0xMTU5LDggKzExNTgsNyBAQAogICAgaWYgKCEocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lIRFIpIHx8IChwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUVORCkpCiAgICAgICB7CiAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIk91dCBvZiBwbGFjZSB6VFh0Iik7Ci0gICAgICAgICAvKiB0byBxdWlldCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzICovCi0gICAgICAgICBpZihpbmZvX3B0ciA9PSBOVUxMKSByZXR1cm47CisgICAgICAgICBpbmZvX3B0ciA9IGluZm9fcHRyOyAvKiB0byBxdWlldCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzICovCiAgICAgICB9CiAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKQEAgLTEzNTIsOCArMTM1MCw3IEBACiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikgfHwgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JRU5EKSkKICAgICAgIHsKICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIHBsYWNlIGlUWHQiKTsKLSAgICAgICAgIC8qIHRvIHF1aWV0IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgKi8KLSAgICAgICAgIGlmKGluZm9fcHRyID09IE5VTEwpIHJldHVybjsKKyAgICAgICAgIGluZm9fcHRyID0gaW5mb19wdHI7IC8qIHRvIHF1aWV0IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgKi8KICAgICAgIH0KIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwpAQCAtMTQ4MCw5ICsxNDc3LDcgQEAKICNlbmRpZgogICAgICAgICAgcG5nX2NodW5rX2Vycm9yKHBuZ19wdHIsICJ1bmtub3duIGNyaXRpY2FsIGNodW5rIik7CiAKLSAgICAgIC8qIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBpbmZvX3B0ciAqLwotICAgICAgaWYgKGluZm9fcHRyID09IE5VTEwpCi0gICAgICAgICByZXR1cm47CisgICAgICBpbmZvX3B0ciA9IGluZm9fcHRyOyAvKiB0byBxdWlldCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzICovCiAgICB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKQEAgLTE0OTYsOCArMTQ5MSw5IEBACiAgICAgICAgICAgIGxlbmd0aCA9IChwbmdfdWludF8zMik2NTUzNUw7CiAgICAgICAgfQogI2VuZGlmCi0gICAgICAgcG5nX3N0cmNweSgocG5nX2NoYXJwKXBuZ19wdHItPnVua25vd25fY2h1bmsubmFtZSwKLSAgICAgICAgIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CisgICAgICAgcG5nX3N0cm5jcHkoKHBuZ19jaGFycClwbmdfcHRyLT51bmtub3duX2NodW5rLm5hbWUsCisJIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSwKKyAgICAgICAgIHBuZ19zaXplb2YoKHBuZ19jaGFycClwbmdfcHRyLT5jaHVua19uYW1lKSk7CiAgICAgICAgcG5nX3B0ci0+dW5rbm93bl9jaHVuay5kYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7CiAgICAgICAgcG5nX3B0ci0+dW5rbm93bl9jaHVuay5zaXplID0gKHBuZ19zaXplX3QpbGVuZ3RoOwogICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19wdHItPnVua25vd25fY2h1bmsuZGF0YSwgbGVuZ3RoKTsKQEAgLTE1NTksNyArMTU1NSw3IEBACiAgICBwbmdfYnl0ZXAgb2xkX3JvdywgcG5nX2J5dGVwIG5ld19yb3cpCiB7CiAjaWZkZWYgUE5HX1VTRV9MT0NBTF9BUlJBWVMKLSAgIGNvbnN0IGludCBGQVJEQVRBIHBuZ19wYXNzX2RzcF9tYXNrWzddID0KKyAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19kc3BfbWFza1s3XSA9CiAgICAgICB7MHhmZiwgMHgwZiwgMHhmZiwgMHgzMywgMHhmZiwgMHg1NSwgMHhmZn07CiAjZW5kaWYKICAgIGlmKHBuZ19wdHIgPT0gTlVMTCkgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvcG5ncmVhZC5jIGIvcG5ncmVhZC5jCmluZGV4IDU2ZGFjOGEuLjU2MjQxNGEgMTAwNjQ0Ci0tLSBhL3BuZ3JlYWQuYworKysgYi9wbmdyZWFkLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3JlYWQuYyAtIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE1IEphbnVhcnkgNSwgMjAwNworICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTkgSnVseSAzMSwgMjAwNwogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTE3LDExICsxMTcsMTMgQEAKICAgICAgICAgY2hhciBtc2dbODBdOwogICAgICAgICBpZiAodXNlcl9wbmdfdmVyKQogICAgICAgICB7Ci0gICAgICAgICAgc3ByaW50Zihtc2csICJBcHBsaWNhdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBwbmcuaCBmcm9tIGxpYnBuZy0lLjIwcyIsCisgICAgICAgICAgcG5nX3NucHJpbnRmKG1zZywgODAsCisgICAgICAgICAgICAgIkFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIHBuZy5oIGZyb20gbGlicG5nLSUuMjBzIiwKICAgICAgICAgICAgICB1c2VyX3BuZ192ZXIpOwogICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsIG1zZyk7CiAgICAgICAgIH0KLSAgICAgICAgc3ByaW50Zihtc2csICJBcHBsaWNhdGlvbiAgaXMgIHJ1bm5pbmcgd2l0aCBwbmcuYyBmcm9tIGxpYnBuZy0lLjIwcyIsCisgICAgICAgIHBuZ19zbnByaW50Zihtc2csIDgwLAorICAgICAgICAgICAgICJBcHBsaWNhdGlvbiAgaXMgIHJ1bm5pbmcgd2l0aCBwbmcuYyBmcm9tIGxpYnBuZy0lLjIwcyIsCiAgICAgICAgICAgIHBuZ19saWJwbmdfdmVyKTsKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICNlbmRpZgpAQCAtMTk3LDExICsxOTksMTMgQEAKICAgICAgIHBuZ19wdHItPndhcm5pbmdfZm49TlVMTDsKICAgICAgIGlmICh1c2VyX3BuZ192ZXIpCiAgICAgICB7Ci0gICAgICAgIHNwcmludGYobXNnLCAiQXBwbGljYXRpb24gd2FzIGNvbXBpbGVkIHdpdGggcG5nLmggZnJvbSBsaWJwbmctJS4yMHMiLAorICAgICAgICBwbmdfc25wcmludGYobXNnLCA4MCwKKyAgICAgICAgICAgIkFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIHBuZy5oIGZyb20gbGlicG5nLSUuMjBzIiwKICAgICAgICAgICAgdXNlcl9wbmdfdmVyKTsKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICAgICAgIH0KLSAgICAgIHNwcmludGYobXNnLCAiQXBwbGljYXRpb24gIGlzICBydW5uaW5nIHdpdGggcG5nLmMgZnJvbSBsaWJwbmctJS4yMHMiLAorICAgICAgcG5nX3NucHJpbnRmKG1zZywgODAsCisgICAgICAgICAiQXBwbGljYXRpb24gIGlzICBydW5uaW5nIHdpdGggcG5nLmMgZnJvbSBsaWJwbmctJS4yMHMiLAogICAgICAgICAgcG5nX2xpYnBuZ192ZXIpOwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICAgIH0KQEAgLTM0Niw2MCArMzUwLDYwIEBACiAgICBmb3IoOzspCiAgICB7CiAjaWZkZWYgUE5HX1VTRV9MT0NBTF9BUlJBWVMKLSAgICAgIFBOR19JSERSOwotICAgICAgUE5HX0lEQVQ7Ci0gICAgICBQTkdfSUVORDsKLSAgICAgIFBOR19QTFRFOworICAgICAgUE5HX0NPTlNUIFBOR19JSERSOworICAgICAgUE5HX0NPTlNUIFBOR19JREFUOworICAgICAgUE5HX0NPTlNUIFBOR19JRU5EOworICAgICAgUE5HX0NPTlNUIFBOR19QTFRFOwogI2lmIGRlZmluZWQoUE5HX1JFQURfYktHRF9TVVBQT1JURUQpCi0gICAgICBQTkdfYktHRDsKKyAgICAgIFBOR19DT05TVCBQTkdfYktHRDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfY0hSTV9TVVBQT1JURUQpCi0gICAgICBQTkdfY0hSTTsKKyAgICAgIFBOR19DT05TVCBQTkdfY0hSTTsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfZ0FNQV9TVVBQT1JURUQpCi0gICAgICBQTkdfZ0FNQTsKKyAgICAgIFBOR19DT05TVCBQTkdfZ0FNQTsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfaElTVF9TVVBQT1JURUQpCi0gICAgICBQTkdfaElTVDsKKyAgICAgIFBOR19DT05TVCBQTkdfaElTVDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfaUNDUF9TVVBQT1JURUQpCi0gICAgICBQTkdfaUNDUDsKKyAgICAgIFBOR19DT05TVCBQTkdfaUNDUDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfaVRYdF9TVVBQT1JURUQpCi0gICAgICBQTkdfaVRYdDsKKyAgICAgIFBOR19DT05TVCBQTkdfaVRYdDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfb0ZGc19TVVBQT1JURUQpCi0gICAgICBQTkdfb0ZGczsKKyAgICAgIFBOR19DT05TVCBQTkdfb0ZGczsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfcENBTF9TVVBQT1JURUQpCi0gICAgICBQTkdfcENBTDsKKyAgICAgIFBOR19DT05TVCBQTkdfcENBTDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfcEhZc19TVVBQT1JURUQpCi0gICAgICBQTkdfcEhZczsKKyAgICAgIFBOR19DT05TVCBQTkdfcEhZczsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfc0JJVF9TVVBQT1JURUQpCi0gICAgICBQTkdfc0JJVDsKKyAgICAgIFBOR19DT05TVCBQTkdfc0JJVDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfc0NBTF9TVVBQT1JURUQpCi0gICAgICBQTkdfc0NBTDsKKyAgICAgIFBOR19DT05TVCBQTkdfc0NBTDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfc1BMVF9TVVBQT1JURUQpCi0gICAgICBQTkdfc1BMVDsKKyAgICAgIFBOR19DT05TVCBQTkdfc1BMVDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfc1JHQl9TVVBQT1JURUQpCi0gICAgICBQTkdfc1JHQjsKKyAgICAgIFBOR19DT05TVCBQTkdfc1JHQjsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfdEVYdF9TVVBQT1JURUQpCi0gICAgICBQTkdfdEVYdDsKKyAgICAgIFBOR19DT05TVCBQTkdfdEVYdDsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfdElNRV9TVVBQT1JURUQpCi0gICAgICBQTkdfdElNRTsKKyAgICAgIFBOR19DT05TVCBQTkdfdElNRTsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfdFJOU19TVVBQT1JURUQpCi0gICAgICBQTkdfdFJOUzsKKyAgICAgIFBOR19DT05TVCBQTkdfdFJOUzsKICNlbmRpZgogI2lmIGRlZmluZWQoUE5HX1JFQURfelRYdF9TVVBQT1JURUQpCi0gICAgICBQTkdfelRYdDsKKyAgICAgIFBOR19DT05TVCBQTkdfelRYdDsKICNlbmRpZgogI2VuZGlmIC8qIFBOR19VU0VfTE9DQUxfQVJSQVlTICovCiAgICAgICBwbmdfYnl0ZSBjaHVua19sZW5ndGhbNF07CkBAIC01NjcsOSArNTcxLDEwIEBACiBwbmdfcmVhZF9yb3cocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIHJvdywgcG5nX2J5dGVwIGRzcF9yb3cpCiB7CiAjaWZkZWYgUE5HX1VTRV9MT0NBTF9BUlJBWVMKLSAgIFBOR19JREFUOwotICAgY29uc3QgaW50IHBuZ19wYXNzX2RzcF9tYXNrWzddID0gezB4ZmYsIDB4MGYsIDB4ZmYsIDB4MzMsIDB4ZmYsIDB4NTUsIDB4ZmZ9OwotICAgY29uc3QgaW50IHBuZ19wYXNzX21hc2tbN10gPSB7MHg4MCwgMHgwOCwgMHg4OCwgMHgyMiwgMHhhYSwgMHg1NSwgMHhmZn07CisgICBQTkdfQ09OU1QgUE5HX0lEQVQ7CisgICBQTkdfQ09OU1QgaW50IHBuZ19wYXNzX2RzcF9tYXNrWzddID0gezB4ZmYsIDB4MGYsIDB4ZmYsIDB4MzMsIDB4ZmYsIDB4NTUsCisgICAgIDB4ZmZ9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc19tYXNrWzddID0gezB4ODAsIDB4MDgsIDB4ODgsIDB4MjIsIDB4YWEsIDB4NTUsIDB4ZmZ9OwogI2VuZGlmCiAgICBpbnQgcmV0OwogICAgaWYocG5nX3B0ciA9PSBOVUxMKSByZXR1cm47CkBAIC05MjUsNjAgKzkzMCw2MCBAQAogICAgZG8KICAgIHsKICNpZmRlZiBQTkdfVVNFX0xPQ0FMX0FSUkFZUwotICAgICAgUE5HX0lIRFI7Ci0gICAgICBQTkdfSURBVDsKLSAgICAgIFBOR19JRU5EOwotICAgICAgUE5HX1BMVEU7CisgICAgICBQTkdfQ09OU1QgUE5HX0lIRFI7CisgICAgICBQTkdfQ09OU1QgUE5HX0lEQVQ7CisgICAgICBQTkdfQ09OU1QgUE5HX0lFTkQ7CisgICAgICBQTkdfQ09OU1QgUE5HX1BMVEU7CiAjaWYgZGVmaW5lZChQTkdfUkVBRF9iS0dEX1NVUFBPUlRFRCkKLSAgICAgIFBOR19iS0dEOworICAgICAgUE5HX0NPTlNUIFBOR19iS0dEOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9jSFJNX1NVUFBPUlRFRCkKLSAgICAgIFBOR19jSFJNOworICAgICAgUE5HX0NPTlNUIFBOR19jSFJNOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9nQU1BX1NVUFBPUlRFRCkKLSAgICAgIFBOR19nQU1BOworICAgICAgUE5HX0NPTlNUIFBOR19nQU1BOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9oSVNUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19oSVNUOworICAgICAgUE5HX0NPTlNUIFBOR19oSVNUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9pQ0NQX1NVUFBPUlRFRCkKLSAgICAgIFBOR19pQ0NQOworICAgICAgUE5HX0NPTlNUIFBOR19pQ0NQOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9pVFh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR19pVFh0OworICAgICAgUE5HX0NPTlNUIFBOR19pVFh0OwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9vRkZzX1NVUFBPUlRFRCkKLSAgICAgIFBOR19vRkZzOworICAgICAgUE5HX0NPTlNUIFBOR19vRkZzOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9wQ0FMX1NVUFBPUlRFRCkKLSAgICAgIFBOR19wQ0FMOworICAgICAgUE5HX0NPTlNUIFBOR19wQ0FMOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9wSFlzX1NVUFBPUlRFRCkKLSAgICAgIFBOR19wSFlzOworICAgICAgUE5HX0NPTlNUIFBOR19wSFlzOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zQklUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zQklUOworICAgICAgUE5HX0NPTlNUIFBOR19zQklUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zQ0FMX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zQ0FMOworICAgICAgUE5HX0NPTlNUIFBOR19zQ0FMOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zUExUX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zUExUOworICAgICAgUE5HX0NPTlNUIFBOR19zUExUOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zUkdCX1NVUFBPUlRFRCkKLSAgICAgIFBOR19zUkdCOworICAgICAgUE5HX0NPTlNUIFBOR19zUkdCOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90RVh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR190RVh0OworICAgICAgUE5HX0NPTlNUIFBOR190RVh0OwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90SU1FX1NVUFBPUlRFRCkKLSAgICAgIFBOR190SU1FOworICAgICAgUE5HX0NPTlNUIFBOR190SU1FOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF90Uk5TX1NVUFBPUlRFRCkKLSAgICAgIFBOR190Uk5TOworICAgICAgUE5HX0NPTlNUIFBOR190Uk5TOwogI2VuZGlmCiAjaWYgZGVmaW5lZChQTkdfUkVBRF96VFh0X1NVUFBPUlRFRCkKLSAgICAgIFBOR196VFh0OworICAgICAgUE5HX0NPTlNUIFBOR196VFh0OwogI2VuZGlmCiAjZW5kaWYgLyogUE5HX1VTRV9MT0NBTF9BUlJBWVMgKi8KIApAQCAtMTQ2NCw4ICsxNDY5LDggQEAKICAgIC8qIHJlYWQgcmVzdCBvZiBmaWxlLCBhbmQgZ2V0IGFkZGl0aW9uYWwgY2h1bmtzIGluIGluZm9fcHRyIC0gUkVRVUlSRUQgKi8KICAgIHBuZ19yZWFkX2VuZChwbmdfcHRyLCBpbmZvX3B0cik7CiAKLSAgIGlmKHRyYW5zZm9ybXMgPT0gMCB8fCBwYXJhbXMgPT0gTlVMTCkKLSAgICAgIC8qIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzICovIHJldHVybjsKKyAgIHRyYW5zZm9ybXMgPSB0cmFuc2Zvcm1zOyAvKiBxdWlldCBjb21waWxlciB3YXJuaW5ncyAqLworICAgcGFyYW1zID0gcGFyYW1zOwogCiB9CiAjZW5kaWYgLyogUE5HX0lORk9fSU1BR0VfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9wbmdydHJhbi5jIGIvcG5ncnRyYW4uYwppbmRleCA2ZWYwYTFjLi40NDA0OWVjIDEwMDY0NAotLS0gYS9wbmdydHJhbi5jCisrKyBiL3BuZ3J0cmFuLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3J0cmFuLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93IGZvciBQTkcgcmVhZGVycwogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE1IEphbnVhcnkgNSwgMjAwNworICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTkgSnVseSAzMSwgMjAwNwogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTI0NCwyMCArMTI0NCwxOSBAQAogcG5nX2RvX3JlYWRfdHJhbnNmb3JtYXRpb25zKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CiAgICBwbmdfZGVidWcoMSwgImluIHBuZ19kb19yZWFkX3RyYW5zZm9ybWF0aW9uc1xuIik7Ci0jaWYgIWRlZmluZWQoUE5HX1VTRUxFU1NfVEVTVFNfU1VQUE9SVEVEKQogICAgaWYgKHBuZ19wdHItPnJvd19idWYgPT0gTlVMTCkKICAgIHsKICNpZiAhZGVmaW5lZChQTkdfTk9fU1RESU8pICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCiAgICAgICBjaGFyIG1zZ1s1MF07CiAKLSAgICAgIHNwcmludGYobXNnLCAiTlVMTCByb3cgYnVmZmVyIGZvciByb3cgJWxkLCBwYXNzICVkIiwgcG5nX3B0ci0+cm93X251bWJlciwKKyAgICAgIHBuZ19zbnByaW50ZjIobXNnLCA1MCwKKyAgICAgICAgICJOVUxMIHJvdyBidWZmZXIgZm9yIHJvdyAlbGQsIHBhc3MgJWQiLCBwbmdfcHRyLT5yb3dfbnVtYmVyLAogICAgICAgICAgcG5nX3B0ci0+cGFzcyk7CiAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgbXNnKTsKICNlbHNlCiAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIk5VTEwgcm93IGJ1ZmZlciIpOwogI2VuZGlmCiAgICB9Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoUE5HX1JFQURfRVhQQU5EX1NVUFBPUlRFRCkKICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfRVhQQU5EKQpAQCAtMTI2OSw3ICsxMjY4LDggQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgIGlmIChwbmdfcHRyLT5udW1fdHJhbnMgJiYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19FWFBBTkRfdFJOUykpCisgICAgICAgICBpZiAocG5nX3B0ci0+bnVtX3RyYW5zICYmCisgICAgICAgICAgICAgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19FWFBBTkRfdFJOUykpCiAgICAgICAgICAgICBwbmdfZG9fZXhwYW5kKCYocG5nX3B0ci0+cm93X2luZm8pLCBwbmdfcHRyLT5yb3dfYnVmICsgMSwKICAgICAgICAgICAgICAgICYocG5nX3B0ci0+dHJhbnNfdmFsdWVzKSk7CiAgICAgICAgICBlbHNlCkBAIC0xMjkzLDkgKzEyOTMsMTEgQEAKICAgICAgIGlmKHJnYl9lcnJvcikKICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPnJnYl90b19ncmF5X3N0YXR1cz0xOwotICAgICAgICAgaWYocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1JHQl9UT19HUkFZX1dBUk4pCisgICAgICAgICBpZigocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1JHQl9UT19HUkFZKSA9PSAKKyAgICAgICAgICAgICBQTkdfUkdCX1RPX0dSQVlfV0FSTikKICAgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJwbmdfZG9fcmdiX3RvX2dyYXkgZm91bmQgbm9uZ3JheSBwaXhlbCIpOwotICAgICAgICAgaWYocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1JHQl9UT19HUkFZX0VSUikKKyAgICAgICAgIGlmKChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUkdCX1RPX0dSQVkpID09CisgICAgICAgICAgICAgUE5HX1JHQl9UT19HUkFZX0VSUikKICAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAicG5nX2RvX3JnYl90b19ncmF5IGZvdW5kIG5vbmdyYXkgcGl4ZWwiKTsKICAgICAgIH0KICAgIH0KQEAgLTM2OTksNyArMzcwMSw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBncmF5ID0gKHBuZ191aW50XzE2KShncmF5KjB4ZmYpOworICAgICAgICAgICAgICAgICAgZ3JheSA9IChwbmdfdWludF8xNikoKGdyYXkmMHgwMSkqMHhmZik7CiAgICAgICAgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X3dpZHRoIC0gMSkgPj4gMyk7CiAgICAgICAgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KXJvd193aWR0aCAtIDE7CiAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDcgLSAoaW50KSgocm93X3dpZHRoICsgNykgJiAweDA3KTsKQEAgLTM3MjMsNyArMzcyNSw3IEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBncmF5ID0gKHBuZ191aW50XzE2KShncmF5KjB4NTUpOworICAgICAgICAgICAgICAgICAgZ3JheSA9IChwbmdfdWludF8xNikoKGdyYXkmMHgwMykqMHg1NSk7CiAgICAgICAgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X3dpZHRoIC0gMSkgPj4gMik7CiAgICAgICAgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KXJvd193aWR0aCAtIDE7CiAgICAgICAgICAgICAgICAgICBzaGlmdCA9IChpbnQpKCgzIC0gKChyb3dfd2lkdGggKyAzKSAmIDB4MDMpKSA8PCAxKTsKQEAgLTM3NDYsNyArMzc0OCw3IEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBncmF5ID0gKHBuZ191aW50XzE2KShncmF5KjB4MTEpOworICAgICAgICAgICAgICAgICAgZ3JheSA9IChwbmdfdWludF8xNikoKGdyYXkmMHgwZikqMHgxMSk7CiAgICAgICAgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X3dpZHRoIC0gMSkgPj4gMSk7CiAgICAgICAgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KXJvd193aWR0aCAtIDE7CiAgICAgICAgICAgICAgICAgICBzaGlmdCA9IChpbnQpKCgxIC0gKChyb3dfd2lkdGggKyAxKSAmIDB4MDEpKSA8PCAyKTsKQEAgLTM3NzYsNiArMzc3OCw3IEBACiAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAocm93X2luZm8tPmJpdF9kZXB0aCA9PSA4KQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgZ3JheSA9IGdyYXkgJiAweGZmOwogICAgICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdClyb3dfd2lkdGggLSAxOwogICAgICAgICAgICAgICAgZHAgPSByb3cgKyAocG5nX3NpemVfdCkocm93X3dpZHRoIDw8IDEpIC0gMTsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dfd2lkdGg7IGkrKykKQEAgLTM3ODksMTIgKzM3OTIsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHJvd19pbmZvLT5iaXRfZGVwdGggPT0gMTYpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBwbmdfYnl0ZSBncmF5X2hpZ2ggPSAoZ3JheSA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICAgICBwbmdfYnl0ZSBncmF5X2xvdyA9IGdyYXkgJiAweGZmOwogICAgICAgICAgICAgICAgc3AgPSByb3cgKyByb3dfaW5mby0+cm93Ynl0ZXMgLSAxOwogICAgICAgICAgICAgICAgZHAgPSByb3cgKyAocm93X2luZm8tPnJvd2J5dGVzIDw8IDEpIC0gMTsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dfd2lkdGg7IGkrKykKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBuZ191aW50XzE2KSooc3ApIHwKLSAgICAgICAgICAgICAgICAgICAgICgocG5nX3VpbnRfMTYpKihzcCAtIDEpIDw8IDgpKSA9PSBncmF5KQorICAgICAgICAgICAgICAgICAgaWYgKCooc3AtMSkgPT0gZ3JheV9oaWdoICYmICooc3ApID09IGdyYXlfbG93KSAKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gMDsKICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gMDsKQEAgLTM4MTksMTMgKzM4MjMsMTQgQEAKICAgICAgIHsKICAgICAgICAgIGlmIChyb3dfaW5mby0+Yml0X2RlcHRoID09IDgpCiAgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZSByZWQgPSB0cmFuc192YWx1ZS0+cmVkICYgMHhmZjsKKyAgICAgICAgICAgIHBuZ19ieXRlIGdyZWVuID0gdHJhbnNfdmFsdWUtPmdyZWVuICYgMHhmZjsKKyAgICAgICAgICAgIHBuZ19ieXRlIGJsdWUgPSB0cmFuc192YWx1ZS0+Ymx1ZSAmIDB4ZmY7CiAgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KXJvd19pbmZvLT5yb3dieXRlcyAtIDE7CiAgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KShyb3dfd2lkdGggPDwgMikgLSAxOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd193aWR0aDsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKCooc3AgLSAyKSA9PSB0cmFuc192YWx1ZS0+cmVkICYmCi0gICAgICAgICAgICAgICAgICAqKHNwIC0gMSkgPT0gdHJhbnNfdmFsdWUtPmdyZWVuICYmCi0gICAgICAgICAgICAgICAgICAqKHNwIC0gMCkgPT0gdHJhbnNfdmFsdWUtPmJsdWUpCisgICAgICAgICAgICAgICBpZiAoKihzcCAtIDIpID09IHJlZCAmJiAqKHNwIC0gMSkgPT0gZ3JlZW4gJiYgKihzcCkgPT0gYmx1ZSkKICAgICAgICAgICAgICAgICAgICpkcC0tID0gMDsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICpkcC0tID0gMHhmZjsKQEAgLTM4MzYsMTYgKzM4NDEsMjIgQEAKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHJvd19pbmZvLT5iaXRfZGVwdGggPT0gMTYpCiAgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZSByZWRfaGlnaCA9ICh0cmFuc192YWx1ZS0+cmVkID4gOCkgJiAweGZmOworICAgICAgICAgICAgcG5nX2J5dGUgZ3JlZW5faGlnaCA9ICh0cmFuc192YWx1ZS0+Z3JlZW4gPiA4KSAmIDB4ZmY7CisgICAgICAgICAgICBwbmdfYnl0ZSBibHVlX2hpZ2ggPSAodHJhbnNfdmFsdWUtPmJsdWUgPiA4KSAmIDB4ZmY7CisgICAgICAgICAgICBwbmdfYnl0ZSByZWRfbG93ID0gdHJhbnNfdmFsdWUtPnJlZCAmIDB4ZmY7CisgICAgICAgICAgICBwbmdfYnl0ZSBncmVlbl9sb3cgPSB0cmFuc192YWx1ZS0+Z3JlZW4gJiAweGZmOworICAgICAgICAgICAgcG5nX2J5dGUgYmx1ZV9sb3cgPSB0cmFuc192YWx1ZS0+Ymx1ZSAmIDB4ZmY7CiAgICAgICAgICAgICBzcCA9IHJvdyArIHJvd19pbmZvLT5yb3dieXRlcyAtIDE7CiAgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KShyb3dfd2lkdGggPDwgMykgLSAxOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd193aWR0aDsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKCgoKHBuZ191aW50XzE2KSooc3AgLSA0KSB8Ci0gICAgICAgICAgICAgICAgICAoKHBuZ191aW50XzE2KSooc3AgLSA1KSA8PCA4KSkgPT0gdHJhbnNfdmFsdWUtPnJlZCkgJiYKLSAgICAgICAgICAgICAgICAgICgoKHBuZ191aW50XzE2KSooc3AgLSAyKSB8Ci0gICAgICAgICAgICAgICAgICAoKHBuZ191aW50XzE2KSooc3AgLSAzKSA8PCA4KSkgPT0gdHJhbnNfdmFsdWUtPmdyZWVuKSAmJgotICAgICAgICAgICAgICAgICAgKCgocG5nX3VpbnRfMTYpKihzcCAtIDApIHwKLSAgICAgICAgICAgICAgICAgICgocG5nX3VpbnRfMTYpKihzcCAtIDEpIDw8IDgpKSA9PSB0cmFuc192YWx1ZS0+Ymx1ZSkpCisgICAgICAgICAgICAgICBpZiAoKihzcCAtIDUpID09IHJlZF9oaWdoICYmCisgICAgICAgICAgICAgICAgICAqKHNwIC0gNCkgPT0gcmVkX2xvdyAmJgorICAgICAgICAgICAgICAgICAgKihzcCAtIDMpID09IGdyZWVuX2hpZ2ggJiYKKyAgICAgICAgICAgICAgICAgICooc3AgLSAyKSA9PSBncmVlbl9sb3cgJiYKKyAgICAgICAgICAgICAgICAgICooc3AgLSAxKSA9PSBibHVlX2hpZ2ggJiYKKyAgICAgICAgICAgICAgICAgICooc3AgICAgKSA9PSBibHVlX2xvdykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICpkcC0tID0gMDsKICAgICAgICAgICAgICAgICAgICpkcC0tID0gMDsKQEAgLTM5NjUsNyArMzk3Niw3IEBACiAKICNpZmRlZiBQTkdfRkxPQVRJTkdfUE9JTlRfU1VQUE9SVEVECiAjaWYgZGVmaW5lZChQTkdfUkVBRF9HQU1NQV9TVVBQT1JURUQpCi1jb25zdCBzdGF0aWMgaW50IHBuZ19nYW1tYV9zaGlmdFtdID0KK3N0YXRpYyBQTkdfQ09OU1QgaW50IHBuZ19nYW1tYV9zaGlmdFtdID0KICAgIHsweDEwLCAweDIxLCAweDQyLCAweDg0LCAweDExMCwgMHgyNDgsIDB4NTUwLCAweGZmMCwgMHgwMH07CiAKIC8qIFdlIGJ1aWxkIHRoZSA4LSBvciAxNi1iaXQgZ2FtbWEgdGFibGVzIGhlcmUuICBOb3RlIHRoYXQgZm9yIDE2LWJpdApkaWZmIC0tZ2l0IGEvcG5ncnV0aWwuYyBiL3BuZ3J1dGlsLmMKaW5kZXggMmFiY2E3Yy4uOWU5NjYzMiAxMDA2NDQKLS0tIGEvcG5ncnV0aWwuYworKysgYi9wbmdydXRpbC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdydXRpbC5jIC0gdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE3IE1heSAxNSwgMjAwNworICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTkgSnVseSAzMSwgMjAwNwogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTksNyArMTksNyBAQAogI2lmZGVmIFBOR19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQKICMgIGlmIGRlZmluZWQoX1dJTjMyX1dDRSkKIC8qIHN0cnRvZCgpIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93c0NFICovCi1fX2lubGluZSBkb3VibGUgcG5nX3N0cnRvZChwbmdfc3RydWN0cCBwbmdfcHRyLCBjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQorX19pbmxpbmUgZG91YmxlIHBuZ19zdHJ0b2QocG5nX3N0cnVjdHAgcG5nX3B0ciwgUE5HX0NPTlNUIGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCiB7CiAgICBkb3VibGUgcmVzdWx0ID0gMDsKICAgIGludCBsZW47CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICByZXN1bHQgPSB3Y3N0b2Qoc3RyLCAmZW5kKTsKICAgICAgIGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCBlbmQsIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKICAgICAgICplbmRwdHIgPSAoY2hhciAqKW5wdHIgKyAocG5nX3N0cmxlbihucHRyKSAtIGxlbiArIDEpOwotICAgICAgcG5nX2ZyZWUoc3RyKTsKKyAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHN0cik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfY2hhcnAgY2h1bmtkYXRhLCBwbmdfc2l6ZV90IGNodW5rbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3NpemVfdCBwcmVmaXhfc2l6ZSwgcG5nX3NpemVfdCAqbmV3bGVuZ3RoKQogewotICAgY29uc3Qgc3RhdGljIGNoYXIgbXNnW10gPSAiRXJyb3IgZGVjb2RpbmcgY29tcHJlc3NlZCB0ZXh0IjsKKyAgIHN0YXRpYyBQTkdfQ09OU1QgY2hhciBtc2dbXSA9ICJFcnJvciBkZWNvZGluZyBjb21wcmVzc2VkIHRleHQiOwogICAgcG5nX2NoYXJwIHRleHQ7CiAgICBwbmdfc2l6ZV90IHRleHRfc2l6ZTsKIApAQCAtMjgyLDEzICsyODIsMTYgQEAKICAgICAgICAgIGNoYXIgdW1zZ1s1Ml07CiAKICAgICAgICAgIGlmIChyZXQgPT0gWl9CVUZfRVJST1IpCi0gICAgICAgICAgICBzcHJpbnRmKHVtc2csIkJ1ZmZlciBlcnJvciBpbiBjb21wcmVzc2VkIGRhdGFzdHJlYW0gaW4gJXMgY2h1bmsiLAorICAgICAgICAgICAgcG5nX3NucHJpbnRmKHVtc2csIDUyLAorICAgICAgICAgICAgICAgICJCdWZmZXIgZXJyb3IgaW4gY29tcHJlc3NlZCBkYXRhc3RyZWFtIGluICVzIGNodW5rIiwKICAgICAgICAgICAgICAgICBwbmdfcHRyLT5jaHVua19uYW1lKTsKICAgICAgICAgIGVsc2UgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpCi0gICAgICAgICAgICBzcHJpbnRmKHVtc2csIkRhdGEgZXJyb3IgaW4gY29tcHJlc3NlZCBkYXRhc3RyZWFtIGluICVzIGNodW5rIiwKKyAgICAgICAgICAgIHBuZ19zbnByaW50Zih1bXNnLCA1MiwKKyAgICAgICAgICAgICAgICAiRGF0YSBlcnJvciBpbiBjb21wcmVzc2VkIGRhdGFzdHJlYW0gaW4gJXMgY2h1bmsiLAogICAgICAgICAgICAgICAgIHBuZ19wdHItPmNodW5rX25hbWUpOwogICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3ByaW50Zih1bXNnLCJJbmNvbXBsZXRlIGNvbXByZXNzZWQgZGF0YXN0cmVhbSBpbiAlcyBjaHVuayIsCisgICAgICAgICAgICBwbmdfc25wcmludGYodW1zZywgNTIsCisgICAgICAgICAgICAgICAgIkluY29tcGxldGUgY29tcHJlc3NlZCBkYXRhc3RyZWFtIGluICVzIGNodW5rIiwKICAgICAgICAgICAgICAgICBwbmdfcHRyLT5jaHVua19uYW1lKTsKICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsIHVtc2cpOwogI2Vsc2UKQEAgLTMyMSw3ICszMjQsOCBAQAogI2lmICFkZWZpbmVkKFBOR19OT19TVERJTykgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKICAgICAgIGNoYXIgdW1zZ1s1MF07CiAKLSAgICAgIHNwcmludGYodW1zZywgIlVua25vd24gelRYdCBjb21wcmVzc2lvbiB0eXBlICVkIiwgY29tcF90eXBlKTsKKyAgICAgIHBuZ19zbnByaW50Zih1bXNnLCA1MCwKKyAgICAgICAgICJVbmtub3duIHpUWHQgY29tcHJlc3Npb24gdHlwZSAlZCIsIGNvbXBfdHlwZSk7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCB1bXNnKTsKICNlbHNlCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiVW5rbm93biB6VFh0IGNvbXByZXNzaW9uIHR5cGUiKTsKQEAgLTU2Myw4ICs1NjcsNyBAQAogICAgfQogICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgbGVuZ3RoKTsKIAotICAgaWYgKCZpbmZvX3B0ciA9PSBOVUxMKSAvKiBxdWlldCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgaW5mb19wdHIgKi8KLSAgICAgIHJldHVybjsKKyAgIGluZm9fcHRyID1pbmZvX3B0cjsgLyogcXVpZXQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIGluZm9fcHRyICovCiB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX2dBTUFfU1VQUE9SVEVEKQpAQCAtMTAzNyw3ICsxMDQwLDcgQEAKIAogICAgLyogdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSB6ZXJvICh0aGUgY29tcHJlc3Npb24gdHlwZSBieXRlKQogICAgICAgZm9sbG93aW5nIHRoZSBzZXBhcmF0b3IsIGFuZCB3ZSBzaG91bGQgYmUgb24gaXQgICovCi0gICBpZiAoIHByb2ZpbGUgPj0gY2h1bmtkYXRhICsgc2xlbmd0aCkKKyAgIGlmICggcHJvZmlsZSA+PSBjaHVua2RhdGEgKyBzbGVuZ3RoIC0gMSkKICAgIHsKICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsZm9ybWVkIGlDQ1AgY2h1bmsiKTsKQEAgLTExNDEsNyArMTE0NCw3IEBACiAgICArK2VudHJ5X3N0YXJ0OwogCiAgICAvKiBhIHNhbXBsZSBkZXB0aCBzaG91bGQgZm9sbG93IHRoZSBzZXBhcmF0b3IsIGFuZCB3ZSBzaG91bGQgYmUgb24gaXQgICovCi0gICBpZiAoZW50cnlfc3RhcnQgPiBjaHVua2RhdGEgKyBzbGVuZ3RoKQorICAgaWYgKGVudHJ5X3N0YXJ0ID4gY2h1bmtkYXRhICsgc2xlbmd0aCAtIDIpCiAgICB7CiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIm1hbGZvcm1lZCBzUExUIGNodW5rIik7CkBAIC0xMjM0LDkgKzEyMzcsMTUgQEAKIHBuZ19oYW5kbGVfdFJOUyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKIHsKICAgIHBuZ19ieXRlIHJlYWRidWZbUE5HX01BWF9QQUxFVFRFX0xFTkdUSF07CisgICBpbnQgYml0X21hc2s7CiAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2hhbmRsZV90Uk5TXG4iKTsKIAorICAgLyogRm9yIG5vbi1pbmRleGVkIGNvbG9yLCBtYXNrIG9mZiBhbnkgYml0cyBpbiB0aGUgdFJOUyB2YWx1ZSB0aGF0CisgICAgKiBleGNlZWQgdGhlIGJpdCBkZXB0aC4gIFNvbWUgY3JlYXRvcnMgd2VyZSB3cml0aW5nIGV4dHJhIGJpdHMgdGhlcmUuCisgICAgKiBUaGlzIGlzIG5vdCBuZWVkZWQgZm9yIGluZGV4ZWQgY29sb3IuICovCisgICBiaXRfbWFzayA9ICgxIDw8IHBuZ19wdHItPmJpdF9kZXB0aCkgLSAxOworCiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikpCiAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIk1pc3NpbmcgSUhEUiBiZWZvcmUgdFJOUyIpOwogICAgZWxzZSBpZiAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lEQVQpCkBAIC0xMjY1LDcgKzEyNzQsNyBAQAogCiAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgYnVmLCAyKTsKICAgICAgIHBuZ19wdHItPm51bV90cmFucyA9IDE7Ci0gICAgICBwbmdfcHRyLT50cmFuc192YWx1ZXMuZ3JheSA9IHBuZ19nZXRfdWludF8xNihidWYpOworICAgICAgcG5nX3B0ci0+dHJhbnNfdmFsdWVzLmdyYXkgPSBwbmdfZ2V0X3VpbnRfMTYoYnVmKSAmIGJpdF9tYXNrOwogICAgfQogICAgZWxzZSBpZiAocG5nX3B0ci0+Y29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IpCiAgICB7CkBAIC0xMjc5LDkgKzEyODgsOSBAQAogICAgICAgfQogICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGJ1ZiwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKICAgICAgIHBuZ19wdHItPm51bV90cmFucyA9IDE7Ci0gICAgICBwbmdfcHRyLT50cmFuc192YWx1ZXMucmVkID0gcG5nX2dldF91aW50XzE2KGJ1Zik7Ci0gICAgICBwbmdfcHRyLT50cmFuc192YWx1ZXMuZ3JlZW4gPSBwbmdfZ2V0X3VpbnRfMTYoYnVmICsgMik7Ci0gICAgICBwbmdfcHRyLT50cmFuc192YWx1ZXMuYmx1ZSA9IHBuZ19nZXRfdWludF8xNihidWYgKyA0KTsKKyAgICAgIHBuZ19wdHItPnRyYW5zX3ZhbHVlcy5yZWQgPSBwbmdfZ2V0X3VpbnRfMTYoYnVmKSAmIGJpdF9tYXNrOworICAgICAgcG5nX3B0ci0+dHJhbnNfdmFsdWVzLmdyZWVuID0gcG5nX2dldF91aW50XzE2KGJ1ZiArIDIpICYgYml0X21hc2s7CisgICAgICBwbmdfcHRyLT50cmFuc192YWx1ZXMuYmx1ZSA9IHBuZ19nZXRfdWludF8xNihidWYgKyA0KSAmIGJpdF9tYXNrOwogICAgfQogICAgZWxzZSBpZiAocG5nX3B0ci0+Y29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKQogICAgewpAQCAtMTk4MSwxMCArMTk5MCwxMSBAQAogICAgICAgLyogZW1wdHkgbG9vcCAqLyA7CiAKICAgIC8qIHpUWHQgbXVzdCBoYXZlIHNvbWUgdGV4dCBhZnRlciB0aGUgY2h1bmtkYXRhd29yZCAqLwotICAgaWYgKHRleHQgPT0gY2h1bmtkYXRhICsgc2xlbmd0aCkKKyAgIGlmICh0ZXh0ID09IGNodW5rZGF0YSArIHNsZW5ndGggLSAxKQogICAgewotICAgICAgY29tcF90eXBlID0gUE5HX1RFWFRfQ09NUFJFU1NJT05fTk9ORTsKLSAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJaZXJvIGxlbmd0aCB6VFh0IGNodW5rIik7CisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiVHJ1bmNhdGVkIHpUWHQgY2h1bmsiKTsKKyAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CisgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNlCiAgICB7CkBAIC0yMDg0LDEwICsyMDk0LDExIEBACiAgICAgICB0cmFuc2xhdGVkIGtleXdvcmQgKHBvc3NpYmx5IGVtcHR5KSwgYW5kIHBvc3NpYmx5IHNvbWUgdGV4dCBhZnRlciB0aGUKICAgICAgIGtleXdvcmQgKi8KIAotICAgaWYgKGxhbmcgPj0gY2h1bmtkYXRhICsgc2xlbmd0aCkKKyAgIGlmIChsYW5nID49IGNodW5rZGF0YSArIHNsZW5ndGggLSAzKQogICAgewotICAgICAgY29tcF9mbGFnID0gUE5HX1RFWFRfQ09NUFJFU1NJT05fTk9ORTsKLSAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJaZXJvIGxlbmd0aCBpVFh0IGNodW5rIik7CisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiVHJ1bmNhdGVkIGlUWHQgY2h1bmsiKTsKKyAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CisgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNlCiAgICB7CkBAIC0yMTAyLDYgKzIxMTMsMTIgQEAKICAgIGZvciAodGV4dCA9IGxhbmdfa2V5OyAqdGV4dDsgdGV4dCsrKQogICAgICAgLyogZW1wdHkgbG9vcCAqLyA7CiAgICB0ZXh0Kys7ICAgICAgICAvKiBza2lwIE5VTCBzZXBhcmF0b3IgKi8KKyAgIGlmICh0ZXh0ID49IGNodW5rZGF0YSArIHNsZW5ndGgpCisgICB7CisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsZm9ybWVkIGlUWHQgY2h1bmsiKTsKKyAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CisgICAgICByZXR1cm47CisgICB9CiAKICAgIHByZWZpeF9sZW4gPSB0ZXh0IC0gY2h1bmtkYXRhOwogCkBAIC0yMTUxLDcgKzIxNjgsNyBAQAogICAgaWYgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JREFUKQogICAgewogI2lmZGVmIFBOR19VU0VfTE9DQUxfQVJSQVlTCi0gICAgICBQTkdfSURBVDsKKyAgICAgIFBOR19DT05TVCBQTkdfSURBVDsKICNlbmRpZgogICAgICAgaWYgKHBuZ19tZW1jbXAocG5nX3B0ci0+Y2h1bmtfbmFtZSwgcG5nX0lEQVQsIDQpKSAgLyogbm90IGFuIElEQVQgKi8KICAgICAgICAgIHBuZ19wdHItPm1vZGUgfD0gUE5HX0FGVEVSX0lEQVQ7CkBAIC0yMTg0LDggKzIyMDEsOSBAQAogICAgICAgICAgICBsZW5ndGggPSAocG5nX3VpbnRfMzIpNjU1MzVMOwogICAgICAgIH0KICNlbmRpZgotICAgICAgIHBuZ19zdHJjcHkoKHBuZ19jaGFycClwbmdfcHRyLT51bmtub3duX2NodW5rLm5hbWUsCi0gICAgICAgICAocG5nX2NoYXJwKXBuZ19wdHItPmNodW5rX25hbWUpOworICAgICAgIHBuZ19zdHJuY3B5KChwbmdfY2hhcnApcG5nX3B0ci0+dW5rbm93bl9jaHVuay5uYW1lLAorCSAocG5nX2NoYXJwKXBuZ19wdHItPmNodW5rX25hbWUsCisgICAgICAgICBwbmdfc2l6ZW9mKChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSkpOwogICAgICAgIHBuZ19wdHItPnVua25vd25fY2h1bmsuZGF0YSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwogICAgICAgIHBuZ19wdHItPnVua25vd25fY2h1bmsuc2l6ZSA9IChwbmdfc2l6ZV90KWxlbmd0aDsKICAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfcHRyLT51bmtub3duX2NodW5rLmRhdGEsIGxlbmd0aCk7CkBAIC0yMjIxLDggKzIyMzksNyBAQAogICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCk7CiAKICNpZiAhZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCi0gICBpZiAoJmluZm9fcHRyID09IE5VTEwpIC8qIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBpbmZvX3B0ciAqLwotICAgICAgcmV0dXJuOworICAgaW5mb19wdHIgPSBpbmZvX3B0cjsgLyogcXVpZXQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIGluZm9fcHRyICovCiAjZW5kaWYKIH0KIApAQCAtMjI1NSwxMSArMjI3MiwxMDUwIEBACiAgICBhIHplcm8gaW5kaWNhdGVzIHRoZSBwaXhlbCBpcyB0byBiZSBza2lwcGVkLiAgVGhpcyBpcyBpbiBhZGRpdGlvbgogICAgdG8gYW55IGFscGhhIG9yIHRyYW5zcGFyZW5jeSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBpeGVsLiAgSWYKICAgIHlvdSB3YW50IGFsbCBwaXhlbHMgdG8gYmUgY29tYmluZWQsIHBhc3MgMHhmZiAoMjU1KSBpbiBtYXNrLiAgKi8KLSNpZm5kZWYgUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XCisKKy8qIE9wdGltaXplZCBDIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQorICoKKyAqIEJhc2VkIG9uIGNvZGUgY29udHJpYnV0ZWQgYnkgTmlyYXYgQ2hoYXRyYXBhdGksIEludGVsIENvcnAuLCAxOTk4LgorICogSW50ZXJmYWNlIHRvIGxpYnBuZyBjb250cmlidXRlZCBieSBHaWxsZXMgVm9sbGFudCwgMTk5OS4KKyAqIEdOVSBDIHBvcnQgYnkgR3JlZyBSb2Vsb2ZzLCAxOTk5LTIwMDEuCisgKgorICovCisKKyNpZiBkZWZpbmVkKFBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQpCisjaWYgIWRlZmluZWQoUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgUCBOIEcgXyBDIE8gTSBCIEkgTiBFIF8gUiBPIFcgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKworI2RlZmluZSBCUFAyICAyCisjZGVmaW5lIEJQUDMgIDMgLyogYnl0ZXMgcGVyIHBpeGVsIChhLmsuYS4gcGl4ZWxfYnl0ZXMpICovCisjZGVmaW5lIEJQUDQgIDQKKyNkZWZpbmUgQlBQNiAgNiAvKiAoZGVmaW5lZCBvbmx5IHRvIGhlbHAgYXZvaWQgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpICovCisjZGVmaW5lIEJQUDggIDgKKworLyogQ29tYmluZXMgdGhlIHJvdyByZWNlbnRseSByZWFkIGluIHdpdGggdGhlIHByZXZpb3VzIHJvdy4KKyAgIFRoaXMgcm91dGluZSB0YWtlcyBjYXJlIG9mIGFscGhhIGFuZCB0cmFuc3BhcmVuY3kgaWYgcmVxdWVzdGVkLgorICAgVGhpcyByb3V0aW5lIGFsc28gaGFuZGxlcyB0aGUgdHdvIG1ldGhvZHMgb2YgcHJvZ3Jlc3NpdmUgZGlzcGxheQorICAgb2YgaW50ZXJsYWNlZCBpbWFnZXMsIGRlcGVuZGluZyBvbiB0aGUgbWFzayB2YWx1ZS4KKyAgIFRoZSBtYXNrIHZhbHVlIGRlc2NyaWJlcyB3aGljaCBwaXhlbHMgYXJlIHRvIGJlIGNvbWJpbmVkIHdpdGgKKyAgIHRoZSByb3cuICBUaGUgcGF0dGVybiBhbHdheXMgcmVwZWF0cyBldmVyeSA4IHBpeGVscywgc28ganVzdCA4CisgICBiaXRzIGFyZSBuZWVkZWQuICBBIG9uZSBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIGNvbWJpbmVkOyBhCisgICB6ZXJvIGluZGljYXRlcyB0aGUgcGl4ZWwgaXMgdG8gYmUgc2tpcHBlZC4gIFRoaXMgaXMgaW4gYWRkaXRpb24KKyAgIHRvIGFueSBhbHBoYSBvciB0cmFuc3BhcmVuY3kgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXhlbC4KKyAgIElmIHlvdSB3YW50IGFsbCBwaXhlbHMgdG8gYmUgY29tYmluZWQsIHBhc3MgMHhmZiAoMjU1KSBpbiBtYXNrLiAqLworCisvKiBVc2UgdGhpcyByb3V0aW5lIGZvciB0aGUgeDg2IHBsYXRmb3JtIC0gaXQgdXNlcyBhIGZhc3RlciBNTVggcm91dGluZQorICAgaWYgdGhlIG1hY2hpbmUgc3VwcG9ydHMgTU1YLiAqLworCiB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKIHsKLSAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfY29tYmluZV9yb3dcbiIpOworCisjaWYgZGVmaW5lZChQTkdfVVNFX0xPQ0FMX0FSUkFZUykKK3N0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfc3RhcnRbN10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07CitzdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX2luY1s3XSAgID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9Oworc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFs3XSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsKKyNlbmRpZgorCisgICBwbmdfZGVidWcoMSwgImluIHBuZ19jb21iaW5lX3JvdyAocG5ncnV0aWwuYyBPUFRJTUlaRUQpXG4iKTsKKworICAgaWYgKG1hc2sgPT0gMHhmZikKKyAgIHsKKyAgICAgIHBuZ19kZWJ1ZygyLCJtYXNrID09IDB4ZmY6ICBkb2luZyBzaW5nbGUgcG5nX21lbWNweSgpXG4iKTsKKyAgICAgIHBuZ19tZW1jcHkocm93LCBwbmdfcHRyLT5yb3dfYnVmICsgMSwKKyAgICAgICAocG5nX3NpemVfdClQTkdfUk9XQllURVMocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgscG5nX3B0ci0+d2lkdGgpKTsKKyAgIH0KKyAgIGVsc2UgICAvKiAocG5nX2NvbWJpbmVfcm93KCkgaXMgbmV2ZXIgY2FsbGVkIHdpdGggbWFzayA9PSAwKSAqLworICAgeworICAgICAgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkKKyAgICAgIHsKKyAgICAgICAgIC8qIG1vc3QgY29tbW9uIGNhc2U6ICBjb21iaW5pbmcgMjQtYml0IFJHQiAqLworICAgICAgICAgY2FzZSAyNDogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAzICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFAzICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDMgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAvKiByZWR1Y2UgdG8gbXVsdCBvZiA4ICovCisgICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMyAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCisKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKKworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLworICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQMzsKKyAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8qIGVuZCAyNCBicHAgKi8KKworICAgICAgICAgY2FzZSAzMjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA0ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA0ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDQgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAvKiByZWR1Y2UgdG8gbXVsdCBvZiA4ICovCisgICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQNCAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCisKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKKworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLworICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQNDsKKyAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfSAgICAgICAvKiBlbmQgMzIgYnBwICovCisKKyAgICAgICAgIGNhc2UgODogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOworICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CisgICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCisgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCisgICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7IC8qIHJlZHVjZSB0byBtdWx0IG9mIDggKi8KKyAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBsZW47ICAvKiBHUlIgYnVnZml4ICovCisKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKKworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLworICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYgLyogKkJQUDEgKi8gOworICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKKyAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8qIGVuZCA4IGJwcCAqLworCisgICAgICAgICBjYXNlIDE6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLworICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwOworICAgICAgICAgICAgcG5nX2J5dGVwIGRwOworICAgICAgICAgICAgaW50IHNfaW5jLCBzX3N0YXJ0LCBzX2VuZDsKKyAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgaW50IHNoaWZ0OworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKKworICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgIGRwID0gcm93OworICAgICAgICAgICAgbSA9IDB4ODA7CisjaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCisgICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHNfZW5kID0gNzsKKyAgICAgICAgICAgICAgICBzX2luYyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzX3N0YXJ0ID0gNzsKKyAgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MTsKKyAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwKys7CisgICAgICAgICAgICAgICAgICBkcCsrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CisKKyAgICAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgICAgICBtID0gMHg4MDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIG0gPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0gICAgICAgLyogZW5kIDEgYnBwICovCisKKyAgICAgICAgIGNhc2UgMjogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZXAgc3A7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CisgICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOworICAgICAgICAgICAgaW50IG07CisgICAgICAgICAgICBpbnQgc2hpZnQ7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgaW50IHZhbHVlOworCisgICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOworICAgICAgICAgICAgZHAgPSByb3c7CisgICAgICAgICAgICBtID0gMHg4MDsKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKKyAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgIHNfZW5kID0gNjsKKyAgICAgICAgICAgICAgIHNfaW5jID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc19zdGFydCA9IDY7CisgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICBzX2luYyA9IC0yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgaWYgKG0gJiBtYXNrKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MzsKKyAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDNmM2YgPj4gKDYgLSBzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwKys7CisgICAgICAgICAgICAgICAgICBkcCsrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICAgICBpZiAobSA9PSAxKQorICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBtID4+PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8qIGVuZCAyIGJwcCAqLworCisgICAgICAgICBjYXNlIDQ6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLworICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwOworICAgICAgICAgICAgcG5nX2J5dGVwIGRwOworICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKKyAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgaW50IHNoaWZ0OworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKKyAgICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgIGRwID0gcm93OworICAgICAgICAgICAgbSA9IDB4ODA7CisjaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCisgICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CisgICAgICAgICAgICAgICBzX2VuZCA9IDQ7CisgICAgICAgICAgICAgICBzX2luYyA9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHNfc3RhcnQgPSA0OworICAgICAgICAgICAgICAgc19lbmQgPSAwOworICAgICAgICAgICAgICAgc19pbmMgPSAtNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHhmOworICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4ZjBmID4+ICg0IC0gc2hpZnQpKSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOworICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CisgICAgICAgICAgICAgICAgICBzcCsrOworICAgICAgICAgICAgICAgICAgZHArKzsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOworICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKKyAgICAgICAgICAgICAgICAgIG0gPSAweDgwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfSAgICAgICAvKiBlbmQgNCBicHAgKi8KKworICAgICAgICAgY2FzZSAxNjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAyICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFAyICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDIgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQgb2YgOCAqLworICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDIgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLworCisgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOworICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CisKKyAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDI7CisgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfSAgICAgICAvKiBlbmQgMTYgYnBwICovCisKKworCisgICAgICAgICBjYXNlIDQ4OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLworICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA2ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA2ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDYgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAvKiByZWR1Y2UgdG8gbXVsdCBvZiA4ICovCisgICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLworICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQNiAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCisKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKKworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLworICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQNjsKKyAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0gICAgICAgLyogZW5kIDQ4IGJwcCAqLworCisgICAgICAgICBjYXNlIDY0OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLworICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CisgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFA4ICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA4ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLworICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDggKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKKyAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLworICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQgb2YgOCAqLworICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KKyAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDggKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLworCisgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOworICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CisKKyAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CisgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDg7CisgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQorICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOworICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0gICAgICAgLyogZW5kIDY0IGJwcCAqLworCisgICAgICAgICBkZWZhdWx0OiAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAhPSAxLDIsNCw4LDE2LDI0LDMyLDQ4LDY0ICovCisgICAgICAgICB7CisgICAgICAgICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJbnZhbGlkIHJvd19pbmZvLnBpeGVsX2RlcHRoIGluIHBuZ3J1dGlsIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgIH0gLyogZW5kIHN3aXRjaCAocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgpICovCisKKyAgIH0gLyogZW5kIGlmIChub24tdHJpdmlhbCBtYXNrKSAqLworCit9IC8qIGVuZCBwbmdfY29tYmluZV9yb3coKSAqLworI2VuZGlmIC8qIFBOR19IQVZFX01NWF9DT01CSU5FX1JPVyAqLworCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgIFAgTiBHIF8gRCBPIF8gUiBFIEEgRCBfIEkgTiBUIEUgUiBMIEEgQyBFICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWYgZGVmaW5lZChQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQpCisjaWYgIWRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFKQorCisvKiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBpcyBjYWxsZWQgYWZ0ZXIgYW55IDE2LWJpdCB0byA4LWJpdCBjb252ZXJzaW9uCisgKiBoYXMgdGFrZW4gcGxhY2UuICBbR1JSOiB3aGF0IG90aGVyIHN0ZXBzIGNvbWUgYmVmb3JlIGFuZC9vciBhZnRlcj9dCisgKi8KKwordm9pZCAvKiBQUklWQVRFICovCitwbmdfZG9fcmVhZF9pbnRlcmxhY2UocG5nX3N0cnVjdHAgcG5nX3B0cikKK3sKKyNpZiBkZWZpbmVkKFBOR19VU0VfTE9DQUxfQVJSQVlTKQorc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbN10gICA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyNlbmRpZgorICAgcG5nX3Jvd19pbmZvcCByb3dfaW5mbyA9ICYocG5nX3B0ci0+cm93X2luZm8pOworICAgcG5nX2J5dGVwIHJvdyA9IHBuZ19wdHItPnJvd19idWYgKyAxOworICAgaW50IHBhc3MgPSBwbmdfcHRyLT5wYXNzOworI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQorICAgcG5nX3VpbnRfMzIgdHJhbnNmb3JtYXRpb25zID0gcG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zOworI2VuZGlmCisgICBwbmdfZGVidWcoMSwiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlIChwbmdydXRpbC5jIE9QVElNSVpFRClcbiIpOworCisgICBpZiAocm93ICE9IE5VTEwgJiYgcm93X2luZm8gIT0gTlVMTCkKKyAgIHsKKyAgICAgIHBuZ191aW50XzMyIGZpbmFsX3dpZHRoOworCisgICAgICBmaW5hbF93aWR0aCA9IHJvd19pbmZvLT53aWR0aCAqIHBuZ19wYXNzX2luY1twYXNzXTsKKworICAgICAgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpCisgICAgICB7CisgICAgICAgICBjYXNlIDE6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOworICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OworICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKKyAgICAgICAgICAgIHBuZ19ieXRlIHY7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgaW50IGo7CisKKyAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAzKTsKKyAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDMpOworI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHNzaGlmdCA9IChpbnQpKChyb3dfaW5mby0+d2lkdGggKyA3KSAmIDcpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gKGludCkoKGZpbmFsX3dpZHRoICsgNykgJiA3KTsKKyAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OworICAgICAgICAgICAgICAgc19lbmQgPSAwOworICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc3NoaWZ0ID0gNyAtIChpbnQpKChyb3dfaW5mby0+d2lkdGggKyA3KSAmIDcpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gNyAtIChpbnQpKChmaW5hbF93aWR0aCArIDcpICYgNyk7CisgICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgIHNfZW5kID0gNzsKKyAgICAgICAgICAgICAgIHNfaW5jID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweDEpOworICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4N2Y3ZiA+PiAoNyAtIGRzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CisgICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgIGRwLS07CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3NoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwLS07CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgY2FzZSAyOgorICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKKyAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKKyAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworCisgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMik7CisgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAyKTsKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKChyb3dfaW5mby0+d2lkdGggKyAzKSAmIDMpIDw8IDEpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAzKSAmIDMpIDw8IDEpOworICAgICAgICAgICAgICAgc19zdGFydCA9IDY7CisgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICBzX2luYyA9IC0yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKDMgLSAoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykpIDw8IDEpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgzIC0gKChmaW5hbF93aWR0aCArIDMpICYgMykpIDw8IDEpOworICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CisgICAgICAgICAgICAgICBzX2VuZCA9IDY7CisgICAgICAgICAgICAgICBzX2luYyA9IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgcG5nX2J5dGUgdjsKKyAgICAgICAgICAgICAgIGludCBqOworCisgICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweDMpOworICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4M2YzZiA+PiAoNiAtIGRzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CisgICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgIGRwLS07CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3NoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwLS07CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgY2FzZSA0OgorICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKKyAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKKyAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworCisgICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMSk7CisgICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAxKTsKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKChyb3dfaW5mby0+d2lkdGggKyAxKSAmIDEpIDw8IDIpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAxKSAmIDEpIDw8IDIpOworICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7CisgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICBzX2luYyA9IC00OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKDEgLSAoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkpIDw8IDIpOworICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgxIC0gKChmaW5hbF93aWR0aCArIDEpICYgMSkpIDw8IDIpOworICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CisgICAgICAgICAgICAgICBzX2VuZCA9IDQ7CisgICAgICAgICAgICAgICBzX2luYyA9IDQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgcG5nX2J5dGUgdjsKKyAgICAgICAgICAgICAgIGludCBqOworCisgICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweGYpOworICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4ZjBmID4+ICg0IC0gZHNoaWZ0KSkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgZHAtLTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OworICAgICAgICAgICAgICAgICAgc3AtLTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAgICAgIGRlZmF1bHQ6IC8qIDgtYml0IG9yIGxhcmdlciAodGhpcyBpcyB3aGVyZSB0aGUgcm91dGluZSBpcyBtb2RpZmllZCkgKi8KKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBzcHRyLCBkcDsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CisgICAgICAgICAgICBwbmdfc2l6ZV90IHBpeGVsX2J5dGVzOworICAgICAgICAgICAgaW50IHdpZHRoID0gKGludClyb3dfaW5mby0+d2lkdGg7CisKKyAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PiAzKTsKKworICAgICAgICAgICAgLyogcG9pbnQgc3B0ciBhdCB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgcHJlLWV4cGFuZGVkIHJvdzogKi8KKyAgICAgICAgICAgIHNwdHIgPSByb3cgKyAod2lkdGggLSAxKSAqIHBpeGVsX2J5dGVzOworCisgICAgICAgICAgICAvKiBwb2ludCBkcCBhdCB0aGUgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiB0aGUgZXhwYW5kZWQgcm93OiAqLworICAgICAgICAgICAgZHAgPSByb3cgKyAoZmluYWxfd2lkdGggLSAxKSAqIHBpeGVsX2J5dGVzOworCisgICAgICAgICAgICAvKiBNTVggbm90IHN1cHBvcnRlZDogIHVzZSBtb2RpZmllZCBDIGNvZGUgLSB0YWtlcyBhZHZhbnRhZ2UKKyAgICAgICAgICAgICAqICAgb2YgaW5saW5pbmcgb2YgcG5nX21lbWNweSBmb3IgYSBjb25zdGFudCAqLworICAgICAgICAgICAgLyogR1JSIDE5OTkxMDA3OiAgZG9lcyBpdD8gIG9yIHNob3VsZCBwaXhlbF9ieXRlcyBpbiBlYWNoCisgICAgICAgICAgICAgKiAgIGJsb2NrIGJlIHJlcGxhY2VkIHdpdGggaW1tZWRpYXRlIHZhbHVlIChlLmcuLCAxKT8gKi8KKyAgICAgICAgICAgIC8qIEdSUiAxOTk5MTAxNzogIHJlcGxhY2VkIHdpdGggY29uc3RhbnRzIGluIGVhY2ggY2FzZSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IDEpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgLS1zcHRyOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMykKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOworICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDMpOworICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAzOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAzOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMikKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOworICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDIpOworICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAyOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOworICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOworICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQorICAgICAgICAgICAgICAgICAgICAgeworI2lmIGRlZmluZWQoUE5HX0RFQlVHKSAmJiBkZWZpbmVkKFBOR18xXzBfWCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcCA8IHJvdyB8fCBkcCszID4gcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiZHAgb3V0IG9mIGJvdW5kczogcm93PSVkLCBkcD0lZCwgcnA9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdywgZHAsIHJvdytwbmdfcHRyLT5yb3dfYnVmX3NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyb3dfYnVmPSVkXG4iLHBuZ19wdHItPnJvd19idWZfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOworICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDYpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDYpOworICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNjsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDgpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDgpOworICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gODsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gODsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgICAgIC8qIEdSUjogIHNob3VsZCBuZXZlciBiZSByZWFjaGVkICovCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKKyAgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBwaXhlbF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBwaXhlbF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBwaXhlbF9ieXRlczsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgfSAvKiBlbmQgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpICovCisKKyAgICAgIHJvd19pbmZvLT53aWR0aCA9IGZpbmFsX3dpZHRoOworCisgICAgICByb3dfaW5mby0+cm93Ynl0ZXMgPSBQTkdfUk9XQllURVMocm93X2luZm8tPnBpeGVsX2RlcHRoLGZpbmFsX3dpZHRoKTsKKyAgIH0KKworfSAvKiBlbmQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgKi8KKworI2VuZGlmIC8qIFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRSAqLworI2VuZGlmIC8qIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCAqLworCisKKworI2lmICFkZWZpbmVkKFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cpCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKworLyogT3B0aW1pemVkIHBuZ19yZWFkX2ZpbHRlcl9yb3cgcm91dGluZXMgKi8KKwordm9pZCAvKiBQUklWQVRFICovCitwbmdfcmVhZF9maWx0ZXJfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcAorICAgcm93LCBwbmdfYnl0ZXAgcHJldl9yb3csIGludCBmaWx0ZXIpCit7CisjaWYgZGVmaW5lZChQTkdfREVCVUcpCisgICBjaGFyIGZpbG5tWzEwXTsKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKFBOR19ERUJVRykKKyAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3JlYWRfZmlsdGVyX3JvdyAocG5ncnV0aWwuYyBPUFRJTUlaRUQpXG4iKTsKKyAgIHN3aXRjaCAoZmlsdGVyKQorICAgeworICAgICAgY2FzZSAwOgorICAgICAgICAgcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgIm5vbmUiKTsKKyAgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDE6CisgICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAic3ViLSVzIiwKKyAgICAgICAgICAgICAieDg2Iik7CisgICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICAgcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgInVwLSVzIiwKKyAgICAgICAgICAgICAieDg2Iik7CisgICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAzOgorICAgICAgICAgcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgImF2Zy0lcyIsCisgICAgICAgICAgICAgIng4NiIpOworICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgNDoKKyAgICAgICAgIHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJQYWV0aC0lcyIsCisgICAgICAgICAgICAgIng4NiIpOworICAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidW5rbm93biIpOworICAgICAgICAgYnJlYWs7CisgICB9CisgICBwbmdfZGVidWcyKDAsICJyb3dfbnVtYmVyPSU1bGQsICUxMHMsICIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbG5tKTsKKyAgIHBuZ19kZWJ1ZzEoMCwgInJvdz0weCUwOGx4LCAiLCAodW5zaWduZWQgbG9uZylyb3cpOworICAgcG5nX2RlYnVnMigwLCAicGl4ZGVwdGg9JTJkLCBieXRlcz0lZCwgIiwgKGludClyb3dfaW5mby0+cGl4ZWxfZGVwdGgsCisgICAgICAoaW50KSgocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMykpOworICAgcG5nX2RlYnVnMSgwLCJyb3dieXRlcz0lOGxkXG4iLCByb3dfaW5mby0+cm93Ynl0ZXMpOworI2VuZGlmIC8qIFBOR19ERUJVRyAqLworCisgICBzd2l0Y2ggKGZpbHRlcikKKyAgIHsKKyAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9OT05FOgorICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7CisgICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdyArIGJwcDsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKKworICAgICAgICAgICAgZm9yIChpID0gYnBwOyBpIDwgaXN0b3A7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqbHArKykpICYgMHhmZik7CisgICAgICAgICAgICAgICBycCsrOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9VUDoKKyAgICAgICAgIHsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBwcCA9IHByZXZfcm93OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqcHArKykpICYgMHhmZik7CisgICAgICAgICAgICAgICBycCsrOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9BVkc6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OworICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CisgICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7CisgICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzIC0gYnBwOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsKKyAgICAgICAgICAgICAgICAgICgoaW50KSgqcHArKykgPj4gMSkpICYgMHhmZik7CisgICAgICAgICAgICAgICBycCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKworICAgICAgICAgICAgICAgICAgKChpbnQpKCpwcCsrICsgKmxwKyspID4+IDEpKSAmIDB4ZmYpOworICAgICAgICAgICAgICAgcnArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfUEFFVEg6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OworICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CisgICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7CisgICAgICAgICAgICBwbmdfYnl0ZXAgY3AgPSBwcmV2X3JvdzsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqcHArKykpICYgMHhmZik7CisgICAgICAgICAgICAgICBycCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykgICAvKiB1c2UgbGVmdG92ZXIgcnAscHAgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGludCBhLCBiLCBjLCBwYSwgcGIsIHBjLCBwOworCisgICAgICAgICAgICAgICBhID0gKmxwKys7CisgICAgICAgICAgICAgICBiID0gKnBwKys7CisgICAgICAgICAgICAgICBjID0gKmNwKys7CisKKyAgICAgICAgICAgICAgIHAgPSBiIC0gYzsKKyAgICAgICAgICAgICAgIHBjID0gYSAtIGM7CisKKyNpZiBkZWZpbmVkKFBOR19VU0VfQUJTKQorICAgICAgICAgICAgICAgcGEgPSBhYnMocCk7CisgICAgICAgICAgICAgICBwYiA9IGFicyhwYyk7CisgICAgICAgICAgICAgICBwYyA9IGFicyhwICsgcGMpOworI2Vsc2UKKyAgICAgICAgICAgICAgIHBhID0gcCA8IDAgPyAtcCA6IHA7CisgICAgICAgICAgICAgICBwYiA9IHBjIDwgMCA/IC1wYyA6IHBjOworICAgICAgICAgICAgICAgcGMgPSAocCArIHBjKSA8IDAgPyAtKHAgKyBwYykgOiBwICsgcGM7CisjZW5kaWYKKworICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykKKyAgICAgICAgICAgICAgICAgICAgIHAgPSBhOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGIgPD0gcGMpCisgICAgICAgICAgICAgICAgICAgICBwID0gYjsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIHAgPSBjOworICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgIHAgPSAocGEgPD0gcGIgJiYgcGEgPD0gcGMpID8gYSA6IChwYiA8PSBwYykgPyBiIDogYzsKKworICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIHApICYgMHhmZik7CisgICAgICAgICAgICAgICBycCsrOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiSWdub3JpbmcgYmFkIHJvdy1maWx0ZXIgdHlwZSIpOworICAgICAgICAgKnJvdz0wOworICAgICAgICAgYnJlYWs7CisgICB9Cit9CisKKyNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XICovCisjZW5kaWYgLyogUE5HX09QVElNSVpFRF9DT0RFX1NVUFBPUlRFRCAqLworCisjaWYgIWRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgIWRlZmluZWQoUE5HX1VTRV9QTkdWQ1JEKQorI2lmICFkZWZpbmVkKFBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQpCisvKiBVc2UgdGhlIHVub3B0aW1pemVkIG9yaWdpbmFsIEMgY29kZS4gIFRoaXMgbWlnaHQgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlCisgKiB2ZXJzaW9uIG9mIGxpYnBuZyBpZiB0ZXN0aW5nIHByb3ZlcyBpdCB0byBiZSB3b3J0aGxlc3MuICovCit2b2lkIC8qIFBSSVZBVEUgKi8KK3BuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKK3sKKyAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfY29tYmluZV9yb3cgTk9UIE9QVElNSVpFRFxuIik7CiAgICBpZiAobWFzayA9PSAweGZmKQogICAgewogICAgICAgcG5nX21lbWNweShyb3csIHBuZ19wdHItPnJvd19idWYgKyAxLApAQCAtMjQ1NiwxMCArMzUxMiw4IEBACiAgICAgICB9CiAgICB9CiB9Ci0jZW5kaWYgLyogIVBOR19IQVZFX01NWF9DT01CSU5FX1JPVyAqLwogCiAjaWZkZWYgUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVECi0jaWZuZGVmIFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRSAgIC8qIGVsc2UgaW4gcG5ndmNyZC5jLCBwbmdnY2NyZC5jICovCiAvKiBPTEQgcHJlLTEuMC45IGludGVyZmFjZToKIHZvaWQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csIGludCBwYXNzLAogICAgcG5nX3VpbnRfMzIgdHJhbnNmb3JtYXRpb25zKQpAQCAtMjQ3NCwxMCArMzUyOCwxMCBAQAogI2lmZGVmIFBOR19VU0VfTE9DQUxfQVJSQVlTCiAgICAvKiBhcnJheXMgdG8gZmFjaWxpdGF0ZSBlYXN5IGludGVybGFjaW5nIC0gdXNlIHBhc3MgKDAgLSA2KSBhcyBpbmRleCAqLwogICAgLyogb2Zmc2V0IHRvIG5leHQgaW50ZXJsYWNlIGJsb2NrICovCi0gICBjb25zdCBpbnQgcG5nX3Bhc3NfaW5jWzddID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc19pbmNbN10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAjZW5kaWYKIAotICAgcG5nX2RlYnVnKDEsImluIHBuZ19kb19yZWFkX2ludGVybGFjZSAoc3RvY2sgQyB2ZXJzaW9uKVxuIik7CisgICBwbmdfZGVidWcoMSwiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlIChwbmdydXRpbC5jIE5PVCBPUFRJTUlaRUQpXG4iKTsKICAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQogICAgewogICAgICAgcG5nX3VpbnRfMzIgZmluYWxfd2lkdGg7CkBAIC0yNjgxLDE5ICszNzM1LDE2IEBACiAgICAgICByb3dfaW5mby0+cm93Ynl0ZXMgPSBQTkdfUk9XQllURVMocm93X2luZm8tPnBpeGVsX2RlcHRoLGZpbmFsX3dpZHRoKTsKICAgIH0KICNpZiAhZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICBpZiAoJnRyYW5zZm9ybWF0aW9ucyA9PSBOVUxMKSAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgKi8KLSAgICAgIHJldHVybjsKKyAgIHRyYW5zZm9ybWF0aW9ucyA9IHRyYW5zZm9ybWF0aW9uczsgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICovCiAjZW5kaWYKIH0KLSNlbmRpZiAvKiAhUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFICovCiAjZW5kaWYgLyogUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVEICovCiAKLSNpZm5kZWYgUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVwogdm9pZCAvKiBQUklWQVRFICovCiBwbmdfcmVhZF9maWx0ZXJfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3csCiAgICBwbmdfYnl0ZXAgcHJldl9yb3csIGludCBmaWx0ZXIpCiB7Ci0gICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2ZpbHRlcl9yb3dcbiIpOworICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93IChOT1QgT1BUSU1JWkVEKVxuIik7CiAgICBwbmdfZGVidWcyKDIsInJvdyA9ICVsdSwgZmlsdGVyID0gJWRcbiIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbHRlcik7CiAgICBzd2l0Y2ggKGZpbHRlcikKICAgIHsKQEAgLTI4MTEsNyArMzg2Miw4IEBACiAgICAgICAgICBicmVhazsKICAgIH0KIH0KLSNlbmRpZiAvKiAhUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVyAqLworI2VuZGlmIC8qICFQTkdfT1BUSU1JWkVEX0NPREVfU1VQUE9SVEVEICovCisjZW5kaWYgLyogIVBOR19VU0VfUE5HR0NDUkQgJiYgIVBOR19VU0VfUE5HVkNSRCAqLwogCiB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19yZWFkX2ZpbmlzaF9yb3cocG5nX3N0cnVjdHAgcG5nX3B0cikKQEAgLTI4MjAsMTYgKzM4NzIsMTYgQEAKICAgIC8qIGFycmF5cyB0byBmYWNpbGl0YXRlIGVhc3kgaW50ZXJsYWNpbmcgLSB1c2UgcGFzcyAoMCAtIDYpIGFzIGluZGV4ICovCiAKICAgIC8qIHN0YXJ0IG9mIGludGVybGFjZSBibG9jayAqLwotICAgY29uc3QgaW50IHBuZ19wYXNzX3N0YXJ0WzddID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKIAogICAgLyogb2Zmc2V0IHRvIG5leHQgaW50ZXJsYWNlIGJsb2NrICovCi0gICBjb25zdCBpbnQgcG5nX3Bhc3NfaW5jWzddID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc19pbmNbN10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAKICAgIC8qIHN0YXJ0IG9mIGludGVybGFjZSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24gKi8KLSAgIGNvbnN0IGludCBwbmdfcGFzc195c3RhcnRbN10gPSB7MCwgMCwgNCwgMCwgMiwgMCwgMX07CisgICBQTkdfQ09OU1QgaW50IHBuZ19wYXNzX3lzdGFydFs3XSA9IHswLCAwLCA0LCAwLCAyLCAwLCAxfTsKIAogICAgLyogb2Zmc2V0IHRvIG5leHQgaW50ZXJsYWNlIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbiAqLwotICAgY29uc3QgaW50IHBuZ19wYXNzX3lpbmNbN10gPSB7OCwgOCwgOCwgNCwgNCwgMiwgMn07CisgICBQTkdfQ09OU1QgaW50IHBuZ19wYXNzX3lpbmNbN10gPSB7OCwgOCwgOCwgNCwgNCwgMiwgMn07CiAjZW5kaWYKIAogICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maW5pc2hfcm93XG4iKTsKQEAgLTI4NDAsNyArMzg5Miw4IEBACiAgICBpZiAocG5nX3B0ci0+aW50ZXJsYWNlZCkKICAgIHsKICAgICAgIHBuZ19wdHItPnJvd19udW1iZXIgPSAwOwotICAgICAgcG5nX21lbXNldF9jaGVjayhwbmdfcHRyLCBwbmdfcHRyLT5wcmV2X3JvdywgMCwgcG5nX3B0ci0+cm93Ynl0ZXMgKyAxKTsKKyAgICAgIHBuZ19tZW1zZXRfY2hlY2socG5nX3B0ciwgcG5nX3B0ci0+cHJldl9yb3csIDAsCisgICAgICAgICBwbmdfcHRyLT5yb3dieXRlcyArIDEpOwogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPnBhc3MrKzsKQEAgLTI4NzQsNyArMzkyNyw3IEBACiAgICBpZiAoIShwbmdfcHRyLT5mbGFncyAmIFBOR19GTEFHX1pMSUJfRklOSVNIRUQpKQogICAgewogI2lmZGVmIFBOR19VU0VfTE9DQUxfQVJSQVlTCi0gICAgICBQTkdfSURBVDsKKyAgICAgIFBOR19DT05TVCBQTkdfSURBVDsKICNlbmRpZgogICAgICAgY2hhciBleHRyYTsKICAgICAgIGludCByZXQ7CkBAIC0yOTQ3LDE2ICs0MDAwLDE2IEBACiAgICAvKiBhcnJheXMgdG8gZmFjaWxpdGF0ZSBlYXN5IGludGVybGFjaW5nIC0gdXNlIHBhc3MgKDAgLSA2KSBhcyBpbmRleCAqLwogCiAgICAvKiBzdGFydCBvZiBpbnRlcmxhY2UgYmxvY2sgKi8KLSAgIGNvbnN0IGludCBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKKyAgIFBOR19DT05TVCBpbnQgcG5nX3Bhc3Nfc3RhcnRbN10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07CiAKICAgIC8qIG9mZnNldCB0byBuZXh0IGludGVybGFjZSBibG9jayAqLwotICAgY29uc3QgaW50IHBuZ19wYXNzX2luY1s3XSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgIFBOR19DT05TVCBpbnQgcG5nX3Bhc3NfaW5jWzddID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwogCiAgICAvKiBzdGFydCBvZiBpbnRlcmxhY2UgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uICovCi0gICBjb25zdCBpbnQgcG5nX3Bhc3NfeXN0YXJ0WzddID0gezAsIDAsIDQsIDAsIDIsIDAsIDF9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc195c3RhcnRbN10gPSB7MCwgMCwgNCwgMCwgMiwgMCwgMX07CiAKICAgIC8qIG9mZnNldCB0byBuZXh0IGludGVybGFjZSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24gKi8KLSAgIGNvbnN0IGludCBwbmdfcGFzc195aW5jWzddID0gezgsIDgsIDgsIDQsIDQsIDIsIDJ9OworICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc195aW5jWzddID0gezgsIDgsIDgsIDQsIDQsIDIsIDJ9OwogI2VuZGlmCiAKICAgIGludCBtYXhfcGl4ZWxfZGVwdGg7CkBAIC0zMTA1LDcgKzQxNTgsNyBAQAogI2VuZGlmCiAgICBwbmdfcHRyLT5iaWdfcm93X2J1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCByb3dfYnl0ZXMrNjQpOwogICAgcG5nX3B0ci0+cm93X2J1ZiA9IHBuZ19wdHItPmJpZ19yb3dfYnVmKzMyOwotI2lmIGRlZmluZWQoUE5HX0RFQlVHKSAmJiBkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpCisjaWYgZGVmaW5lZChQTkdfREVCVUcpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgZGVmaW5lZChQTkdfMV8wX1gpCiAgICBwbmdfcHRyLT5yb3dfYnVmX3NpemUgPSByb3dfYnl0ZXM7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvcG5nc2V0LmMgYi9wbmdzZXQuYwppbmRleCBmMWExZWY2Li5kNDMzMzMxIDEwMDY0NAotLS0gYS9wbmdzZXQuYworKysgYi9wbmdzZXQuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICBpbmZvX3B0ci0+cGl4ZWxfZGVwdGggPSAocG5nX2J5dGUpKGluZm9fcHRyLT5jaGFubmVscyAqIGluZm9fcHRyLT5iaXRfZGVwdGgpOwogCiAgICAvKiBjaGVjayBmb3IgcG90ZW50aWFsIG92ZXJmbG93ICovCi0gICBpZiAoIHdpZHRoID4gKFBOR19VSU5UXzMyX01BWAorICAgaWYgKHdpZHRoID4gKFBOR19VSU5UXzMyX01BWAogICAgICAgICAgICAgICAgICA+PiAzKSAgICAgIC8qIDgtYnl0ZSBSR0JBIHBpeGVscyAqLwogICAgICAgICAgICAgICAgICAtIDY0ICAgICAgIC8qIGJpZ3Jvd2J1ZiBoYWNrICovCiAgICAgICAgICAgICAgICAgIC0gMSAgICAgICAgLyogZmlsdGVyIGJ5dGUgKi8KQEAgLTQ4NCw3ICs0ODQsOCBAQAogICAgaW5mb19wdHItPnNjYWxfc193aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvY193YXJuKHBuZ19wdHIsIGxlbmd0aCk7CiAgICBpZiAoaW5mb19wdHItPnNjYWxfc193aWR0aCA9PSBOVUxMKQogICAgewotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCB3aGlsZSBwcm9jZXNzaW5nIHNDQUwuIik7CisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLAorICAgICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgd2hpbGUgcHJvY2Vzc2luZyBzQ0FMLiIpOwogICAgfQogICAgcG5nX21lbWNweShpbmZvX3B0ci0+c2NhbF9zX3dpZHRoLCBzd2lkdGgsIChwbmdfc2l6ZV90KWxlbmd0aCk7CiAKQEAgLTQ5NCw3ICs0OTUsOCBAQAogICAgaWYgKGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0ID09IE5VTEwpCiAgICB7CiAgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgaW5mb19wdHItPnNjYWxfc193aWR0aCk7Ci0gICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIHdoaWxlIHByb2Nlc3Npbmcgc0NBTC4iKTsKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCB3aGlsZSBwcm9jZXNzaW5nIHNDQUwuIik7CiAgICB9CiAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0LCBzaGVpZ2h0LCAocG5nX3NpemVfdClsZW5ndGgpOwogCkBAIC02ODgsNyArNjkwLDcgQEAKICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIHByb2Nlc3MgaUNDUCBjaHVuay4iKTsKICAgICAgIHJldHVybjsKICAgIH0KLSAgIHBuZ19zdHJjcHkobmV3X2ljY3BfbmFtZSwgbmFtZSk7CisgICBwbmdfc3RybmNweShuZXdfaWNjcF9uYW1lLCBuYW1lLCBwbmdfc2l6ZW9mKG5ld19pY2NwX25hbWUpKTsKICAgIG5ld19pY2NwX3Byb2ZpbGUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2Nfd2FybihwbmdfcHRyLCBwcm9mbGVuKTsKICAgIGlmIChuZXdfaWNjcF9wcm9maWxlID09IE5VTEwpCiAgICB7CkBAIC05NzMsMTUgKzk3NSwyNyBAQAogICAgICAgICBwbmdfc1BMVF90cCB0byA9IG5wICsgaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtICsgaTsKICAgICAgICAgcG5nX3NQTFRfdHAgZnJvbSA9IGVudHJpZXMgKyBpOwogCi0gICAgICAgIHRvLT5uYW1lID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsCi0gICAgICAgICAgICBwbmdfc3RybGVuKGZyb20tPm5hbWUpICsgMSk7CisgICAgICAgIHRvLT5uYW1lID0gKHBuZ19jaGFycClwbmdfbWFsbG9jX3dhcm4ocG5nX3B0ciwKKyAgICAgICAgICBwbmdfc3RybGVuKGZyb20tPm5hbWUpICsgMSk7CisgICAgICAgIGlmICh0by0+bmFtZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyBzUExUIGNodW5rIik7CisgICAgICAgIH0KICAgICAgICAgLyogVE9ETzogdXNlIHBuZ19tYWxsb2Nfd2FybiAqLwotICAgICAgICBwbmdfc3RyY3B5KHRvLT5uYW1lLCBmcm9tLT5uYW1lKTsKLSAgICAgICAgdG8tPmVudHJpZXMgPSAocG5nX3NQTFRfZW50cnlwKXBuZ19tYWxsb2MocG5nX3B0ciwKKyAgICAgICAgcG5nX3N0cm5jcHkodG8tPm5hbWUsIGZyb20tPm5hbWUsIHBuZ19zdHJsZW4oZnJvbS0+bmFtZSkpOworICAgICAgICB0by0+ZW50cmllcyA9IChwbmdfc1BMVF9lbnRyeXApcG5nX21hbGxvY193YXJuKHBuZ19wdHIsCiAgICAgICAgICAgICBmcm9tLT5uZW50cmllcyAqIHBuZ19zaXplb2YocG5nX3NQTFRfZW50cnkpKTsKICAgICAgICAgLyogVE9ETzogdXNlIHBuZ19tYWxsb2Nfd2FybiAqLwogICAgICAgICBwbmdfbWVtY3B5KHRvLT5lbnRyaWVzLCBmcm9tLT5lbnRyaWVzLAogICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBwbmdfc2l6ZW9mKHBuZ19zUExUX2VudHJ5KSk7CisgICAgICAgIGlmICh0by0+ZW50cmllcyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyBzUExUIGNodW5rIik7CisgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsdG8tPm5hbWUpOworICAgICAgICAgICB0by0+bmFtZSA9IE5VTEw7CisgICAgICAgIH0KICAgICAgICAgdG8tPm5lbnRyaWVzID0gZnJvbS0+bmVudHJpZXM7CiAgICAgICAgIHRvLT5kZXB0aCA9IGZyb20tPmRlcHRoOwogICAgIH0KQEAgLTEwMTEsNyArMTAyNSw4IEBACiAgICAgICAgIHBuZ19zaXplb2YocG5nX3Vua25vd25fY2h1bmspKTsKICAgICBpZiAobnAgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyB1bmtub3duIGNodW5rLiIpOworICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyB1bmtub3duIGNodW5rLiIpOwogICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMjksNyArMTA0NCw4IEBACiAgICAgICAgIHRvLT5kYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jX3dhcm4ocG5nX3B0ciwgZnJvbS0+c2l6ZSk7CiAgICAgICAgIGlmICh0by0+ZGF0YSA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJPdXQgb2YgbWVtb3J5IHByb2Nlc3NpbmcgdW5rbm93biBjaHVuay4iKTsKKyAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwKKyAgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyB1bmtub3duIGNodW5rLiIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvcG5ndGVzdC5jIGIvcG5ndGVzdC5jCmluZGV4IDI1ODM2ZmYuLmUzNzAzZDAgMTAwNjQ0Ci0tLSBhL3BuZ3Rlc3QuYworKysgYi9wbmd0ZXN0LmMKQEAgLTQzNCw4ICs0MzQsOSBAQAogICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJXcml0ZSBFcnJvciIpOwogICAgfQogfQotCiAjZW5kaWYgLyogVVNFX0ZBUl9LRVlXT1JEICovCisjZW5kaWYgLyogUE5HX05PX1NURElPICovCisvKiBFTkQgb2YgY29kZSB0byB2YWxpZGF0ZSBzdGRpby1mcmVlIGNvbXBpbGF0aW9uICovCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSB3YXJuaW5nLCBidXQgdGhlIGxpYnJhcnkgdGhpbmtzCiAgKiBpdCBjYW4gY29udGludWUgYW55d2F5LiAgUmVwbGFjZW1lbnQgZnVuY3Rpb25zIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcKQEAgLTQ2Myw4ICs0NjQsNiBAQAogICAgLyogV2UgY2FuIHJldHVybiBiZWNhdXNlIHBuZ19lcnJvciBjYWxscyB0aGUgZGVmYXVsdCBoYW5kbGVyLCB3aGljaCBpcwogICAgICogYWN0dWFsbHkgT0sgaW4gdGhpcyBjYXNlLiAqLwogfQotI2VuZGlmIC8qIFBOR19OT19TVERJTyAqLwotLyogRU5EIG9mIGNvZGUgdG8gdmFsaWRhdGUgc3RkaW8tZnJlZSBjb21waWxhdGlvbiAqLwogCiAvKiBTVEFSVCBvZiBjb2RlIHRvIHZhbGlkYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKi8KICNpZiBkZWZpbmVkKFBOR19VU0VSX01FTV9TVVBQT1JURUQpICYmIFBOR19ERUJVRwpAQCAtNjU4LDEwICs2NTcsOCBAQAogICAgcmVhZF9wdHIgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgcG5nX3ZvaWRwX05VTEwsCiAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwsIHBuZ19lcnJvcl9wdHJfTlVMTCk7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBOR19OT19TVERJTykKICAgIHBuZ19zZXRfZXJyb3JfZm4ocmVhZF9wdHIsIChwbmdfdm9pZHApaW5uYW1lLCBwbmd0ZXN0X2Vycm9yLAogICAgICAgIHBuZ3Rlc3Rfd2FybmluZyk7Ci0jZW5kaWYKICNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAjaWYgZGVmaW5lZChQTkdfVVNFUl9NRU1fU1VQUE9SVEVEKSAmJiBQTkdfREVCVUcKICAgIHdyaXRlX3B0ciA9IHBuZ19jcmVhdGVfd3JpdGVfc3RydWN0XzIoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBwbmdfdm9pZHBfTlVMTCwKQEAgLTY3MSwxMSArNjY4LDkgQEAKICAgIHdyaXRlX3B0ciA9IHBuZ19jcmVhdGVfd3JpdGVfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgcG5nX3ZvaWRwX05VTEwsCiAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwsIHBuZ19lcnJvcl9wdHJfTlVMTCk7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBOR19OT19TVERJTykKICAgIHBuZ19zZXRfZXJyb3JfZm4od3JpdGVfcHRyLCAocG5nX3ZvaWRwKWlubmFtZSwgcG5ndGVzdF9lcnJvciwKICAgICAgICBwbmd0ZXN0X3dhcm5pbmcpOwogI2VuZGlmCi0jZW5kaWYKICAgIHBuZ19kZWJ1ZygwLCAiQWxsb2NhdGluZyByZWFkX2luZm8sIHdyaXRlX2luZm8gYW5kIGVuZF9pbmZvIHN0cnVjdHVyZXNcbiIpOwogICAgcmVhZF9pbmZvX3B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocmVhZF9wdHIpOwogICAgZW5kX2luZm9fcHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChyZWFkX3B0cik7CkBAIC0xMDA3LDEwICsxMDAyLDExIEBACiAgICAgICB7CiAgICAgICAgICBwbmdfc2V0X3RJTUUod3JpdGVfcHRyLCB3cml0ZV9pbmZvX3B0ciwgbW9kX3RpbWUpOwogI2lmIGRlZmluZWQoUE5HX1RJTUVfUkZDMTEyM19TVVBQT1JURUQpCi0gICAgICAgICAvKiB3ZSBoYXZlIHRvIHVzZSBwbmdfc3RyY3B5IGluc3RlYWQgb2YgIj0iIGJlY2F1c2UgdGhlIHN0cmluZworICAgICAgICAgLyogd2UgaGF2ZSB0byB1c2UgcG5nX3N0cm5jcHkgaW5zdGVhZCBvZiAiPSIgYmVjYXVzZSB0aGUgc3RyaW5nCiAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHBuZ19jb252ZXJ0X3RvX3JmYzExMjMoKSBnZXRzIGZyZWUnZWQgYmVmb3JlCiAgICAgICAgICAgICB3ZSB1c2UgaXQgKi8KLSAgICAgICAgIHBuZ19zdHJjcHkodElNRV9zdHJpbmcscG5nX2NvbnZlcnRfdG9fcmZjMTEyMyhyZWFkX3B0ciwgbW9kX3RpbWUpKTsKKyAgICAgICAgIHBuZ19zdHJuY3B5KHRJTUVfc3RyaW5nLHBuZ19jb252ZXJ0X3RvX3JmYzExMjMocmVhZF9wdHIsCisgICAgICAgICAgICBtb2RfdGltZSksMzApOwogICAgICAgICAgdElNRV9jaHVua19wcmVzZW50Kys7CiAjZW5kaWYgLyogUE5HX1RJTUVfUkZDMTEyM19TVVBQT1JURUQgKi8KICAgICAgIH0KQEAgLTExNDcsMTAgKzExNDMsMTEgQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19zZXRfdElNRSh3cml0ZV9wdHIsIHdyaXRlX2VuZF9pbmZvX3B0ciwgbW9kX3RpbWUpOwogI2lmIGRlZmluZWQoUE5HX1RJTUVfUkZDMTEyM19TVVBQT1JURUQpCi0gICAgICAgICAvKiB3ZSBoYXZlIHRvIHVzZSBwbmdfc3RyY3B5IGluc3RlYWQgb2YgIj0iIGJlY2F1c2UgdGhlIHN0cmluZworICAgICAgICAgLyogd2UgaGF2ZSB0byB1c2UgcG5nX3N0cm5jcHkgaW5zdGVhZCBvZiAiPSIgYmVjYXVzZSB0aGUgc3RyaW5nCiAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHBuZ19jb252ZXJ0X3RvX3JmYzExMjMoKSBnZXRzIGZyZWUnZWQgYmVmb3JlCiAgICAgICAgICAgICB3ZSB1c2UgaXQgKi8KLSAgICAgICAgIHBuZ19zdHJjcHkodElNRV9zdHJpbmcscG5nX2NvbnZlcnRfdG9fcmZjMTEyMyhyZWFkX3B0ciwgbW9kX3RpbWUpKTsKKyAgICAgICAgIHBuZ19zdHJuY3B5KHRJTUVfc3RyaW5nLHBuZ19jb252ZXJ0X3RvX3JmYzExMjMocmVhZF9wdHIsCisgICAgICAgICAgICBtb2RfdGltZSksMzApOwogICAgICAgICAgdElNRV9jaHVua19wcmVzZW50Kys7CiAjZW5kaWYgLyogUE5HX1RJTUVfUkZDMTEyM19TVVBQT1JURUQgKi8KICAgICAgIH0KQEAgLTE1NTEsNCArMTU0OCw0IEBACiB9CiAKIC8qIEdlbmVyYXRlIGEgY29tcGlsZXIgZXJyb3IgaWYgdGhlcmUgaXMgYW4gb2xkIHBuZy5oIGluIHRoZSBzZWFyY2ggcGF0aC4gKi8KLXR5cGVkZWYgdmVyc2lvbl8xXzBfMjYgeW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzBfMjY7Cit0eXBlZGVmIHZlcnNpb25fMV8wXzI3cmMxIHlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzI3cmMxOwpkaWZmIC0tZ2l0IGEvcG5ndHJhbnMuYyBiL3BuZ3RyYW5zLmMKaW5kZXggOGNiNGI4OC4uMTY0MDA5NSAxMDA2NDQKLS0tIGEvcG5ndHJhbnMuYworKysgYi9wbmd0cmFucy5jCkBAIC0xLDkgKzEsOSBAQAogCiAvKiBwbmd0cmFucy5jIC0gdHJhbnNmb3JtcyB0aGUgZGF0YSBpbiBhIHJvdyAodXNlZCBieSBib3RoIHJlYWRlcnMgYW5kIHdyaXRlcnMpCiAgKgotICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTMgTm92ZW1iZXIgMTMsIDIwMDYKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE3IE1heSAxNSwgMjAwNwogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCiAgKiAoVmVyc2lvbiAwLjg4IENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4pCiAgKi8KQEAgLTI1Miw3ICsyNTIsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCl8fGRlZmluZWQoUE5HX1dSSVRFX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLWNvbnN0IHN0YXRpYyBQTkdfQ09OU1QgcG5nX2J5dGUgb25lYnBwc3dhcHRhYmxlWzI1Nl0gPSB7CitzdGF0aWMgUE5HX0NPTlNUIHBuZ19ieXRlIG9uZWJwcHN3YXB0YWJsZVsyNTZdID0gewogICAgMHgwMCwgMHg4MCwgMHg0MCwgMHhDMCwgMHgyMCwgMHhBMCwgMHg2MCwgMHhFMCwKICAgIDB4MTAsIDB4OTAsIDB4NTAsIDB4RDAsIDB4MzAsIDB4QjAsIDB4NzAsIDB4RjAsCiAgICAweDA4LCAweDg4LCAweDQ4LCAweEM4LCAweDI4LCAweEE4LCAweDY4LCAweEU4LApAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAweDFGLCAweDlGLCAweDVGLCAweERGLCAweDNGLCAweEJGLCAweDdGLCAweEZGCiB9OwogCi1jb25zdCBzdGF0aWMgUE5HX0NPTlNUIHBuZ19ieXRlIHR3b2JwcHN3YXB0YWJsZVsyNTZdID0geworc3RhdGljIFBOR19DT05TVCBwbmdfYnl0ZSB0d29icHBzd2FwdGFibGVbMjU2XSA9IHsKICAgIDB4MDAsIDB4NDAsIDB4ODAsIDB4QzAsIDB4MTAsIDB4NTAsIDB4OTAsIDB4RDAsCiAgICAweDIwLCAweDYwLCAweEEwLCAweEUwLCAweDMwLCAweDcwLCAweEIwLCAweEYwLAogICAgMHgwNCwgMHg0NCwgMHg4NCwgMHhDNCwgMHgxNCwgMHg1NCwgMHg5NCwgMHhENCwKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgMHgyRiwgMHg2RiwgMHhBRiwgMHhFRiwgMHgzRiwgMHg3RiwgMHhCRiwgMHhGRgogfTsKIAotY29uc3Qgc3RhdGljIFBOR19DT05TVCBwbmdfYnl0ZSBmb3VyYnBwc3dhcHRhYmxlWzI1Nl0gPSB7CitzdGF0aWMgUE5HX0NPTlNUIHBuZ19ieXRlIGZvdXJicHBzd2FwdGFibGVbMjU2XSA9IHsKICAgIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4NDAsIDB4NTAsIDB4NjAsIDB4NzAsCiAgICAweDgwLCAweDkwLCAweEEwLCAweEIwLCAweEMwLCAweEQwLCAweEUwLCAweEYwLAogICAgMHgwMSwgMHgxMSwgMHgyMSwgMHgzMSwgMHg0MSwgMHg1MSwgMHg2MSwgMHg3MSwKZGlmZiAtLWdpdCBhL3BuZ3ZjcmQuYyBiL3BuZ3ZjcmQuYwppbmRleCBkMWM2NDA1Li44ODQ1OTM2IDEwMDY0NAotLS0gYS9wbmd2Y3JkLmMKKysrIGIvcG5ndmNyZC5jCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIEZvciBJbnRlbCB4ODYgQ1BVIGFuZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlcgogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjYgLSBBdWd1c3QgMTUsIDIwMDQKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bHkgMzEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQgR2xlbm4gUmFuZGVycy1QZWhyc29uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIENvcHlyaWdodCAoYykgMTk5OCwgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBDb250cmlidXRlZCBieSBOaXJhdiBDaGhhdHJhcGF0aSwgSW50ZWwgQ29ycG9yYXRpb24sIDE5OTgKQEAgLTIyLDEyICsyMiwxNSBAQAogICoKICAqIFtydW50aW1lIE1NWCBjb25maWd1cmF0aW9uLCBHUlIgMjAwMTAxMDJdCiAgKgorICogW0NvcHkgNiBieXRlcyBwZXIgcGl4ZWwsIG5vdCA0LCBhbmQgdXNlIHN0cmlkZSBvZiA2LCBub3QgNCwgaW4gdGhlCisgKiAgc2Vjb25kIGxvb3Agb2YgaW50ZXJsYWNlIHByb2Nlc3Npbmcgb2YgNDgtYml0IHBpeGVscywgR1ItUCAyMDA3MDcxN10KICAqLwogCiAjZGVmaW5lIFBOR19JTlRFUk5BTAogI2luY2x1ZGUgInBuZy5oIgogCi0jaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSAmJiBkZWZpbmVkKFBOR19VU0VfUE5HVkNSRCkKKyNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdWQ1JEKQorCiAKIHN0YXRpYyBpbnQgbW14X3N1cHBvcnRlZD0yOwogCkBAIC0xMTAsNyArMTEzLDcgQEAKIHBuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKIHsKICNpZmRlZiBQTkdfVVNFX0xPQ0FMX0FSUkFZUwotICAgY29uc3QgaW50IHBuZ19wYXNzX2luY1s3XSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgIFBOR19DT05TVCBpbnQgcG5nX3Bhc3NfaW5jWzddID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwogI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfY29tYmluZV9yb3dfYXNtXG4iKTsKQEAgLTEzNSwzOTQgKzEzOCw2IEBACiAgICB7CiAgICAgICBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKQogICAgICAgewotICAgICAgICAgY2FzZSAxOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgaW50IHNfaW5jLCBzX3N0YXJ0LCBzX2VuZDsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IHNoaWZ0OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLQotICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRwID0gcm93OwotICAgICAgICAgICAgbSA9IDB4ODA7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgIHNfZW5kID0gNzsKLSAgICAgICAgICAgICAgICBzX2luYyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzX3N0YXJ0ID0gNzsKLSAgICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MTsKLSAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwKys7Ci0gICAgICAgICAgICAgICAgICBkcCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7Ci0KLSAgICAgICAgICAgICAgIGlmIChtID09IDEpCi0gICAgICAgICAgICAgICAgICBtID0gMHg4MDsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIG0gPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLQotICAgICAgICAgY2FzZSAyOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IHNoaWZ0OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIGludCB2YWx1ZTsKLQotICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRwID0gcm93OwotICAgICAgICAgICAgbSA9IDB4ODA7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDY7Ci0gICAgICAgICAgICAgICBzX2luYyA9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OwotICAgICAgICAgICAgICAgc19lbmQgPSAwOwotICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDM7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcCsrOwotICAgICAgICAgICAgICAgICAgZHArKzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKLSAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3A7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHA7Ci0gICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwotICAgICAgICAgICAgaW50IG07Ci0gICAgICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgZHAgPSByb3c7Ci0gICAgICAgICAgICBtID0gMHg4MDsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC00OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweGY7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwKys7Ci0gICAgICAgICAgICAgICAgICBkcCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICAgICBpZiAobSA9PSAxKQotICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBtID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGNhc2UgODoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwotICAgICAgICAgICAgaW50IG07Ci0gICAgICAgICAgICBpbnQgZGlmZiwgdW5tYXNrOwotCi0gICAgICAgICAgICBfX2ludDY0IG1hc2swPTB4MDEwMjA0MDgxMDIwNDA4MDsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQotICAgICAgICAgICAgICAgIC8qICYmIG1teF9zdXBwb3J0ZWQgKi8gKQotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLSAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgdW5tYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLy9yZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAotICAgICAgICAgICAgICAgZGlmZiA9IHBuZ19wdHItPndpZHRoICYgNzsgIC8vYW1vdW50IGxvc3QKLQotICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbW92ZCAgICAgICBtbTcsIHVubWFzayAgIC8vbG9hZCBiaXQgcGF0dGVybgotICAgICAgICAgICAgICAgICAgcHN1YmIgICAgICBtbTYsbW02ICAgICAgIC8vemVybyBtbTYKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xidyAgbW03LG1tNwotICAgICAgICAgICAgICAgICAgcHVucGNrbHdkICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgIG1tNyxtbTcgICAgICAgLy9maWxsIHJlZ2lzdGVyIHdpdGggOCBtYXNrcwotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMCxtYXNrMAotCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMCxtbTcgICAgICAgLy9ub256ZXJvIGlmIGtlZXAgYnl0ZQotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTAsbW02ICAgICAgIC8vemVyb3MtPjFzLCB2IHZlcnNhCi0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGxlbiAgICAgICAvL2xvYWQgbGVuZ3RoIG9mIGxpbmUgKHBpeGVscykKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZXNpLHNyY3B0ciAgICAvL2xvYWQgc291cmNlCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVieCxkc3RwdHIgICAgLy9sb2FkIGRlc3QKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAgICAgICAgICAvL2xjcgotICAgICAgICAgICAgICAgICAgamUgICAgICAgICBtYWlubG9vcDhlbmQKLQotbWFpbmxvb3A4OgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTQsW2VzaV0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW00LG1tMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsbW0wCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNixbZWJ4XQotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTQsbW02Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYnhdLG1tNAotCi0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSw4ICAgICAgICAgLy9pbmMgYnkgOCBieXRlcyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDgKLSAgICAgICAgICAgICAgICAgIHN1YiAgICAgICAgZWN4LDggICAgICAgICAvL2RlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKLQotICAgICAgICAgICAgICAgICAgamEgICAgICAgICBtYWlubG9vcDgKLW1haW5sb29wOGVuZDoKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsZGlmZgotICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMAotICAgICAgICAgICAgICAgICAganogICAgICAgICBlbmQ4Ci0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWR4LG1hc2sKLSAgICAgICAgICAgICAgICAgIHNhbCAgICAgICAgZWR4LDI0ICAgICAgICAvL21ha2UgbG93IGJ5dGUgdGhlIGhpZ2ggYnl0ZQotCi1zZWNvbmRsb29wODoKLSAgICAgICAgICAgICAgICAgIHNhbCAgICAgICAgZWR4LDEgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDggICAgICAgICAvL2lmIENGID0gMAotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBhbCxbZXNpXQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBbZWJ4XSxhbAotc2tpcDg6Ci0gICAgICAgICAgICAgICAgICBpbmMgICAgICAgIGVzaQotICAgICAgICAgICAgICAgICAgaW5jICAgICAgICBlYngKLQotICAgICAgICAgICAgICAgICAgZGVjICAgICAgICBlY3gKLSAgICAgICAgICAgICAgICAgIGpueiAgICAgICAgc2Vjb25kbG9vcDgKLWVuZDg6Ci0gICAgICAgICAgICAgICAgICBlbW1zCi0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG1teCBub3Qgc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGluY3IxLCBpbml0aWFsX3ZhbCwgZmluYWxfdmFsOwotICAgICAgICAgICAgICAgcG5nX3NpemVfdCBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgZGlzcCA9IHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgIGludCBvZmZzZXRfdGFibGVbN10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07Ci0KLSAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoID4+IDMpOwotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qCi0gICAgICAgICAgICAgICAgICBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGluaXRpYWxfdmFsID0gb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgZmluYWxfdmFsID0gcG5nX3B0ci0+d2lkdGgqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbmNyMSA9IChkaXNwKSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IGluY3IxKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAqLwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLy8gZW5kIDggYnBwCi0KLSAgICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKLSAgICAgICAgICAgIGludCB1bm1hc2ssIGRpZmY7Ci0gICAgICAgICAgICBfX2ludDY0IG1hc2sxPTB4MDEwMTAyMDIwNDA0MDgwOCwKLSAgICAgICAgICAgICAgICAgICAgbWFzazA9MHgxMDEwMjAyMDQwNDA4MDgwOwotCi0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0gICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCi0jZWxzZQotICAgICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwotCi0gICAgICAgICAgICAgICB1bm1hc2sgPSB+bWFzazsKLSAgICAgICAgICAgICAgIGxlbiAgICAgPSAocG5nX3B0ci0+d2lkdGgpJn43OwotICAgICAgICAgICAgICAgZGlmZiA9IChwbmdfcHRyLT53aWR0aCkmNzsKLSAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG1vdmQgICAgICAgbW03LCB1bm1hc2sgICAgICAgLy9sb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICBwc3ViYiAgICAgIG1tNixtbTYgICAgICAgICAgIC8vemVybyBtbTYKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xidyAgbW03LG1tNwotICAgICAgICAgICAgICAgICAgcHVucGNrbHdkICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgIG1tNyxtbTcgICAgICAgICAgIC8vZmlsbCByZWdpc3RlciB3aXRoIDggbWFza3MKLQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTAsbWFzazAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0xLG1hc2sxCi0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0wLG1tNwotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTEsbW03Ci0KLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0wLG1tNgotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTEsbW02Ci0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGxlbiAgICAgICAgICAgLy9sb2FkIGxlbmd0aCBvZiBsaW5lCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVzaSxzcmNwdHIgICAgICAgIC8vbG9hZCBzb3VyY2UKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWJ4LGRzdHB0ciAgICAgICAgLy9sb2FkIGRlc3QKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAgICAgICAgICAgICAgLy9sY3IKLSAgICAgICAgICAgICAgICAgIGp6ICAgICAgICAgbWFpbmxvb3AxNmVuZAotCi1tYWlubG9vcDE2OgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTQsW2VzaV0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW00LG1tMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsbW0wCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxbZWJ4XQotICAgICAgICAgICAgICAgICAgcGFuZG4gICAgICBtbTYsbW03Ci0gICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNCxtbTYKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieF0sbW00Ci0KLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW01LFtlc2krOF0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW01LG1tMQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsbW0xCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixbZWJ4KzhdCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNyxtbTYKLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW01LG1tNwotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzhdLG1tNQotCi0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSwxNiAgICAgICAgICAgIC8vaW5jIGJ5IDE2IGJ5dGVzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsMTYKLSAgICAgICAgICAgICAgICAgIHN1YiAgICAgICAgZWN4LDggICAgICAgICAgICAgLy9kZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCi0KLSAgICAgICAgICAgICAgICAgIGphICAgICAgICAgbWFpbmxvb3AxNgotCi1tYWlubG9vcDE2ZW5kOgotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsZGlmZgotICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMAotICAgICAgICAgICAgICAgICAganogICAgICAgICBlbmQxNgotCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVkeCxtYXNrCi0gICAgICAgICAgICAgICAgICBzYWwgICAgICAgIGVkeCwyNCAgICAgICAgICAgIC8vbWFrZSBsb3cgYnl0ZSB0aGUgaGlnaCBieXRlCi1zZWNvbmRsb29wMTY6Ci0gICAgICAgICAgICAgICAgICBzYWwgICAgICAgIGVkeCwxICAgICAgICAgICAgIC8vbW92ZSBoaWdoIGJpdCB0byBDRgotICAgICAgICAgICAgICAgICAgam5jICAgICAgICBza2lwMTYgICAgICAgICAgICAvL2lmIENGID0gMAotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBheCxbZXNpXQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBbZWJ4XSxheAotc2tpcDE2OgotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksMgotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsMgotCi0gICAgICAgICAgICAgICAgICBkZWMgICAgICAgIGVjeAotICAgICAgICAgICAgICAgICAgam56ICAgICAgICBzZWNvbmRsb29wMTYKLWVuZDE2OgotICAgICAgICAgICAgICAgICAgZW1tcwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggbm90IHN1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpbmNyMSwgaW5pdGlhbF92YWwsIGZpbmFsX3ZhbDsKLSAgICAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGRpc3AgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3RhYmxlWzddID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OwotCi0gICAgICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCA+PiAzKTsKLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKgotICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbml0aWFsX3ZhbCA9IG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZpbmFsX3ZhbCA9IHBuZ19wdHItPndpZHRoKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8vIGVuZCAxNiBicHAKLQogICAgICAgICAgY2FzZSAyNDoKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CkBAIC04MDIsNiArNDE3LDM5NCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9ICAgICAgIC8vIGVuZCAzMiBicHAKIAorICAgICAgICAgY2FzZSA4OgorICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKKyAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CisgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CisgICAgICAgICAgICBpbnQgbTsKKyAgICAgICAgICAgIGludCBkaWZmLCB1bm1hc2s7CisKKyAgICAgICAgICAgIF9faW50NjQgbWFzazA9MHgwMTAyMDQwODEwMjA0MDgwOworCisjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCisjZWxzZQorICAgICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOworICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OworICAgICAgICAgICAgICAgbSA9IDB4ODA7CisgICAgICAgICAgICAgICB1bm1hc2sgPSB+bWFzazsKKyAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvL3JlZHVjZSB0byBtdWx0aXBsZSBvZiA4CisgICAgICAgICAgICAgICBkaWZmID0gcG5nX3B0ci0+d2lkdGggJiA3OyAgLy9hbW91bnQgbG9zdAorCisgICAgICAgICAgICAgICBfYXNtCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBtb3ZkICAgICAgIG1tNywgdW5tYXNrICAgLy9sb2FkIGJpdCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICBwc3ViYiAgICAgIG1tNixtbTYgICAgICAgLy96ZXJvIG1tNgorICAgICAgICAgICAgICAgICAgcHVucGNrbGJ3ICBtbTcsbW03CisgICAgICAgICAgICAgICAgICBwdW5wY2tsd2QgIG1tNyxtbTcKKyAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSAgbW03LG1tNyAgICAgICAvL2ZpbGwgcmVnaXN0ZXIgd2l0aCA4IG1hc2tzCisKKyAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0wLG1hc2swCisKKyAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0wLG1tNyAgICAgICAvL25vbnplcm8gaWYga2VlcCBieXRlCisgICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tMCxtbTYgICAgICAgLy96ZXJvcy0+MXMsIHYgdmVyc2EKKworICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsbGVuICAgICAgIC8vbG9hZCBsZW5ndGggb2YgbGluZSAocGl4ZWxzKQorICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlc2ksc3JjcHRyICAgIC8vbG9hZCBzb3VyY2UKKyAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWJ4LGRzdHB0ciAgICAvL2xvYWQgZGVzdAorICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMCAgICAgICAgIC8vbGNyCisgICAgICAgICAgICAgICAgICBqZSAgICAgICAgIG1haW5sb29wOGVuZAorCittYWlubG9vcDg6CisgICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNCxbZXNpXQorICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTQsbW0wCisgICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixtbTAKKyAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW02LFtlYnhdCisgICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNCxtbTYKKyAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieF0sbW00CisKKyAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZXNpLDggICAgICAgICAvL2luYyBieSA4IGJ5dGVzIHByb2Nlc3NlZAorICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsOAorICAgICAgICAgICAgICAgICAgc3ViICAgICAgICBlY3gsOCAgICAgICAgIC8vZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAorCisgICAgICAgICAgICAgICAgICBqYSAgICAgICAgIG1haW5sb29wOAorbWFpbmxvb3A4ZW5kOgorCisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVjeCxkaWZmCisgICAgICAgICAgICAgICAgICBjbXAgICAgICAgIGVjeCwwCisgICAgICAgICAgICAgICAgICBqeiAgICAgICAgIGVuZDgKKworICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlZHgsbWFzaworICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMjQgICAgICAgIC8vbWFrZSBsb3cgYnl0ZSB0aGUgaGlnaCBieXRlCisKK3NlY29uZGxvb3A4OgorICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMSAgICAgICAgIC8vbW92ZSBoaWdoIGJpdCB0byBDRgorICAgICAgICAgICAgICAgICAgam5jICAgICAgICBza2lwOCAgICAgICAgIC8vaWYgQ0YgPSAwCisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGFsLFtlc2ldCisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIFtlYnhdLGFsCitza2lwODoKKyAgICAgICAgICAgICAgICAgIGluYyAgICAgICAgZXNpCisgICAgICAgICAgICAgICAgICBpbmMgICAgICAgIGVieAorCisgICAgICAgICAgICAgICAgICBkZWMgICAgICAgIGVjeAorICAgICAgICAgICAgICAgICAgam56ICAgICAgICBzZWNvbmRsb29wOAorZW5kODoKKyAgICAgICAgICAgICAgICAgIGVtbXMKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLyogbW14IG5vdCBzdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaW5jcjEsIGluaXRpYWxfdmFsLCBmaW5hbF92YWw7CisgICAgICAgICAgICAgICBwbmdfc2l6ZV90IHBpeGVsX2J5dGVzOworICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBkaXNwID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOworICAgICAgICAgICAgICAgaW50IG9mZnNldF90YWJsZVs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKKworICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggPj4gMyk7CisgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSoKKyAgICAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzOworICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKnBpeGVsX2J5dGVzOworICAgICAgICAgICAgICAgaW5pdGlhbF92YWwgPSBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICBmaW5hbF92YWwgPSBwbmdfcHRyLT53aWR0aCpwaXhlbF9ieXRlczsKKyAgICAgICAgICAgICAgIGluY3IxID0gKGRpc3ApKnBpeGVsX2J5dGVzOworICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gaW5jcjEpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCBwaXhlbF9ieXRlcyk7CisgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gaW5jcjE7CisgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gaW5jcjE7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlICovCisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfSAgICAgICAvLyBlbmQgOCBicHAKKworICAgICAgICAgY2FzZSAxOgorICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwOworICAgICAgICAgICAgcG5nX2J5dGVwIGRwOworICAgICAgICAgICAgaW50IHNfaW5jLCBzX3N0YXJ0LCBzX2VuZDsKKyAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgaW50IHNoaWZ0OworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKKworICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgIGRwID0gcm93OworICAgICAgICAgICAgbSA9IDB4ODA7CisjaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCisgICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHNfZW5kID0gNzsKKyAgICAgICAgICAgICAgICBzX2luYyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzX3N0YXJ0ID0gNzsKKyAgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MTsKKyAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwKys7CisgICAgICAgICAgICAgICAgICBkcCsrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CisKKyAgICAgICAgICAgICAgIGlmIChtID09IDEpCisgICAgICAgICAgICAgICAgICBtID0gMHg4MDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIG0gPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKworICAgICAgICAgY2FzZSAyOgorICAgICAgICAgeworICAgICAgICAgICAgcG5nX2J5dGVwIHNwOworICAgICAgICAgICAgcG5nX2J5dGVwIGRwOworICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKKyAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgaW50IHNoaWZ0OworICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKKyAgICAgICAgICAgIGludCB2YWx1ZTsKKworICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKKyAgICAgICAgICAgIGRwID0gcm93OworICAgICAgICAgICAgbSA9IDB4ODA7CisjaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCisgICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc19zdGFydCA9IDA7CisgICAgICAgICAgICAgICBzX2VuZCA9IDY7CisgICAgICAgICAgICAgICBzX2luYyA9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OworICAgICAgICAgICAgICAgc19lbmQgPSAwOworICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDM7CisgICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOworICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CisgICAgICAgICAgICAgICAgICBzcCsrOworICAgICAgICAgICAgICAgICAgZHArKzsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOworICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKKyAgICAgICAgICAgICAgICAgIG0gPSAweDgwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorCisgICAgICAgICBjYXNlIDQ6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZXAgc3A7CisgICAgICAgICAgICBwbmdfYnl0ZXAgZHA7CisgICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOworICAgICAgICAgICAgaW50IG07CisgICAgICAgICAgICBpbnQgc2hpZnQ7CisgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgaW50IHZhbHVlOworCisgICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOworICAgICAgICAgICAgZHAgPSByb3c7CisgICAgICAgICAgICBtID0gMHg4MDsKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKKyAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgIHNfZW5kID0gNDsKKyAgICAgICAgICAgICAgIHNfaW5jID0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7CisgICAgICAgICAgICAgICBzX2VuZCA9IDA7CisgICAgICAgICAgICAgICBzX2luYyA9IC00OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweGY7CisgICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBzaGlmdCkpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKKyAgICAgICAgICAgICAgICAgIHNwKys7CisgICAgICAgICAgICAgICAgICBkcCsrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CisgICAgICAgICAgICAgICBpZiAobSA9PSAxKQorICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBtID4+PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisKKyAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICB7CisgICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOworICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKKyAgICAgICAgICAgIGludCB1bm1hc2ssIGRpZmY7CisgICAgICAgICAgICBfX2ludDY0IG1hc2sxPTB4MDEwMTAyMDIwNDA0MDgwOCwKKyAgICAgICAgICAgICAgICAgICAgbWFzazA9MHgxMDEwMjAyMDQwNDA4MDgwOworCisjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCisjZWxzZQorICAgICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOworICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OworCisgICAgICAgICAgICAgICB1bm1hc2sgPSB+bWFzazsKKyAgICAgICAgICAgICAgIGxlbiAgICAgPSAocG5nX3B0ci0+d2lkdGgpJn43OworICAgICAgICAgICAgICAgZGlmZiA9IChwbmdfcHRyLT53aWR0aCkmNzsKKyAgICAgICAgICAgICAgIF9hc20KKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1vdmQgICAgICAgbW03LCB1bm1hc2sgICAgICAgLy9sb2FkIGJpdCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICBwc3ViYiAgICAgIG1tNixtbTYgICAgICAgICAgIC8vemVybyBtbTYKKyAgICAgICAgICAgICAgICAgIHB1bnBja2xidyAgbW03LG1tNworICAgICAgICAgICAgICAgICAgcHVucGNrbHdkICBtbTcsbW03CisgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgIG1tNyxtbTcgICAgICAgICAgIC8vZmlsbCByZWdpc3RlciB3aXRoIDggbWFza3MKKworICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTAsbWFzazAKKyAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0xLG1hc2sxCisKKyAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0wLG1tNworICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTEsbW03CisKKyAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0wLG1tNgorICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTEsbW02CisKKyAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGxlbiAgICAgICAgICAgLy9sb2FkIGxlbmd0aCBvZiBsaW5lCisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVzaSxzcmNwdHIgICAgICAgIC8vbG9hZCBzb3VyY2UKKyAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWJ4LGRzdHB0ciAgICAgICAgLy9sb2FkIGRlc3QKKyAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAgICAgICAgICAgICAgLy9sY3IKKyAgICAgICAgICAgICAgICAgIGp6ICAgICAgICAgbWFpbmxvb3AxNmVuZAorCittYWlubG9vcDE2OgorICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTQsW2VzaV0KKyAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW00LG1tMAorICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsbW0wCisgICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxbZWJ4XQorICAgICAgICAgICAgICAgICAgcGFuZG4gICAgICBtbTYsbW03CisgICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNCxtbTYKKyAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieF0sbW00CisKKyAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW01LFtlc2krOF0KKyAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW01LG1tMQorICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsbW0xCisgICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixbZWJ4KzhdCisgICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNyxtbTYKKyAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW01LG1tNworICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzhdLG1tNQorCisgICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSwxNiAgICAgICAgICAgIC8vaW5jIGJ5IDE2IGJ5dGVzIHByb2Nlc3NlZAorICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsMTYKKyAgICAgICAgICAgICAgICAgIHN1YiAgICAgICAgZWN4LDggICAgICAgICAgICAgLy9kZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCisKKyAgICAgICAgICAgICAgICAgIGphICAgICAgICAgbWFpbmxvb3AxNgorCittYWlubG9vcDE2ZW5kOgorICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsZGlmZgorICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMAorICAgICAgICAgICAgICAgICAganogICAgICAgICBlbmQxNgorCisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVkeCxtYXNrCisgICAgICAgICAgICAgICAgICBzYWwgICAgICAgIGVkeCwyNCAgICAgICAgICAgIC8vbWFrZSBsb3cgYnl0ZSB0aGUgaGlnaCBieXRlCitzZWNvbmRsb29wMTY6CisgICAgICAgICAgICAgICAgICBzYWwgICAgICAgIGVkeCwxICAgICAgICAgICAgIC8vbW92ZSBoaWdoIGJpdCB0byBDRgorICAgICAgICAgICAgICAgICAgam5jICAgICAgICBza2lwMTYgICAgICAgICAgICAvL2lmIENGID0gMAorICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBheCxbZXNpXQorICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBbZWJ4XSxheAorc2tpcDE2OgorICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksMgorICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsMgorCisgICAgICAgICAgICAgICAgICBkZWMgICAgICAgIGVjeAorICAgICAgICAgICAgICAgICAgam56ICAgICAgICBzZWNvbmRsb29wMTYKK2VuZDE2OgorICAgICAgICAgICAgICAgICAgZW1tcworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAvKiBtbXggbm90IHN1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpbmNyMSwgaW5pdGlhbF92YWwsIGZpbmFsX3ZhbDsKKyAgICAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICBwbmdfdWludF8zMiBpOworICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGRpc3AgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CisgICAgICAgICAgICAgICBpbnQgb2Zmc2V0X3RhYmxlWzddID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OworCisgICAgICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCA+PiAzKTsKKyAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKgorICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICBpbml0aWFsX3ZhbCA9IG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKKyAgICAgICAgICAgICAgIGZpbmFsX3ZhbCA9IHBuZ19wdHItPndpZHRoKnBpeGVsX2J5dGVzOworICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7CisgICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKKyAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKKyAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKi8KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9ICAgICAgIC8vIGVuZCAxNiBicHAKKwogICAgICAgICAgY2FzZSA0ODoKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CkBAIC05MjcsOSArOTMwLDExIEBACiAgICAgICAgICAgICAgICAgICBqbmMgICAgICAgIHNraXA0OCAgICAgICAgICAgIC8vaWYgQ0YgPSAwCiAgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVheCxbZXNpXQogICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBbZWJ4XSxlYXgKKyAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgYXgsW2VzaSs0XSAgICAgICAvLyBUaGVzZSAyIGxpbmVzIGFkZGVkIDIwMDcwNzE3CisgICAgICAgICAgICAgICAgICBtb3YgICAgICAgIFtlYngrNF0sYXggICAgICAgLy8gR2xlbm4gUi1QCiBza2lwNDg6Ci0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSw0Ci0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVieCw0CisgICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSw2ICAgICAgICAgICAgLy8gQ2hhbmdlZCA0IHRvIDYgb24gdGhlc2UgMgorICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsNiAgICAgICAgICAgIC8vIGxpbmVzLiAgR2xlbm4gUi1QIDIwMDcwNzE3CiAKICAgICAgICAgICAgICAgICAgIGRlYyAgICAgICAgZWN4CiAgICAgICAgICAgICAgICAgICBqbnogICAgICAgIHNlY29uZGxvb3A0OApAQCAtMTAwNSw3ICsxMDEwLDcgQEAKICAgIGludCBwYXNzID0gcG5nX3B0ci0+cGFzczsKICAgIHBuZ191aW50XzMyIHRyYW5zZm9ybWF0aW9ucyA9IHBuZ19wdHItPnRyYW5zZm9ybWF0aW9uczsKICNpZmRlZiBQTkdfVVNFX0xPQ0FMX0FSUkFZUwotICAgY29uc3QgaW50IHBuZ19wYXNzX2luY1s3XSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKKyAgIFBOR19DT05TVCBpbnQgcG5nX3Bhc3NfaW5jWzddID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwogI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2VcbiIpOwpAQCAtMTIyNCw3MCArMTIyOSw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gMykKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAyMSAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcwotbG9vcF9wYXNzMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgbW0wLCBbZXNpXSAgICAgOyBYIFggWCBYIFggdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhbmQgbW0wLCBjb25zdDQgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMTYgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0yLCBtbTAgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMjQgICAgICAgOyB2MiB2MSB2MCAwIDAgMCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzcmxxIG1tMSwgOCAgICAgICAgOyAwIDAgMCAwIDAgMCB2MiB2MQotICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0yICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0xICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIHYyIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMywgbW0wICAgICAgIDsgdjIgdjEgdjAgdjIgdjEgdjAgdjIgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMTYgICAgICAgOyB2MCB2MiB2MSB2MCB2MiB2MSAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW00LCBtbTMgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCB2MiB2MQotICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNraGRxIG1tMywgbW0wICA7IHYwIHYyIHYxIHYwIHYyIHYxIHYwIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrMTZdICwgbW00Ci0gICAgICAgICAgICAgICAgICAgICAgICBwc3JscSBtbTAsIDMyICAgICAgIDsgMCAwIDAgMCB2MCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzhdICwgbW0zCi0gICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTQgIDsgdjEgdjAgdjIgdjEgdjAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDMKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMjQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc3ViIGVzaSwgMwotICAgICAgICAgICAgICAgICAgICAgICAgZGVjIGVjeAotICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3BfcGFzczAKLSAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBfYXNtCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3YgZXNpLCBzcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWRpLCBkcAotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVjeCwgd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDkgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKLWxvb3BfcGFzczI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIG1tMCwgW2VzaV0gICAgIDsgWCBYIFggWCBYIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICBwYW5kIG1tMCwgY29uc3Q0ICAgIDsgMCAwIDAgMCAwIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgMCAwIDAgMCAwIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTAsIDE2ICAgICAgIDsgMCAwIDAgdjIgdjEgdjAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAgIDsgMCAwIDAgdjIgdjEgdjAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTAsIDI0ICAgICAgIDsgdjIgdjEgdjAgMCAwIDAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICBwc3JscSBtbTEsIDggICAgICAgIDsgMCAwIDAgMCAwIDAgdjIgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvciBtbTAsIG1tMiAgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvciBtbTAsIG1tMSAgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCB2MiB2MQotICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzRdLCBtbTAgICA7IG1vdmUgdG8gbWVtb3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICBwc3JscSBtbTAsIDE2ICAgICAgIDsgMCAwIHYyIHYxIHYwIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIFtlZGldLCBtbTAgICAgIDsgbW92ZSB0byBtZW1vcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDEyCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWMgZWN4Ci0gICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcF9wYXNzMgotICAgICAgICAgICAgICAgICAgICAgICAgRU1NUwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpIC8qICYmICgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgLSA4OwogICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCA8IDApCkBAIC0xMzQxLDExICsxMjgzLDE1OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAzOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIF9hc20KKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCisgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgOSAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcworbG9vcF9wYXNzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgbW0wLCBbZXNpXSAgICAgOyBYIFggWCBYIFggdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhbmQgbW0wLCBjb25zdDQgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMTYgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0yLCBtbTAgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMjQgICAgICAgOyB2MiB2MSB2MCAwIDAgMCAwIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzcmxxIG1tMSwgOCAgICAgICAgOyAwIDAgMCAwIDAgMCB2MiB2MQorICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0yICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIDAgMAorICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0xICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIHYyIHYxCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrNF0sIG1tMCAgIDsgbW92ZSB0byBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzcmxxIG1tMCwgMTYgICAgICAgOyAwIDAgdjIgdjEgdjAgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgW2VkaV0sIG1tMCAgICAgOyBtb3ZlIHRvIG1lbW9yeQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMworICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYyBlY3gKKyAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wX3Bhc3MyCisgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgLyogJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSkgKi8KKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIF9hc20KKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCisgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMjEgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKK2xvb3BfcGFzczA6CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIG1tMCwgW2VzaV0gICAgIDsgWCBYIFggWCBYIHYyIHYxIHYwCisgICAgICAgICAgICAgICAgICAgICAgICBwYW5kIG1tMCwgY29uc3Q0ICAgIDsgMCAwIDAgMCAwIHYyIHYxIHYwCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgMCAwIDAgMCAwIHYyIHYxIHYwCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTAsIDE2ICAgICAgIDsgMCAwIDAgdjIgdjEgdjAgMCAwCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAgIDsgMCAwIDAgdjIgdjEgdjAgMCAwCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTAsIDI0ICAgICAgIDsgdjIgdjEgdjAgMCAwIDAgMCAwCisgICAgICAgICAgICAgICAgICAgICAgICBwc3JscSBtbTEsIDggICAgICAgIDsgMCAwIDAgMCAwIDAgdjIgdjEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvciBtbTAsIG1tMiAgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCAwIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvciBtbTAsIG1tMSAgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCB2MiB2MQorICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTMsIG1tMCAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIHYyIHYxCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTAsIDE2ICAgICAgIDsgdjAgdjIgdjEgdjAgdjIgdjEgMCAwCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tNCwgbW0zICAgICAgIDsgdjIgdjEgdjAgdjIgdjEgdjAgdjIgdjEKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTMsIG1tMCAgOyB2MCB2MiB2MSB2MCB2MiB2MSB2MCB2MgorICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzE2XSAsIG1tNAorICAgICAgICAgICAgICAgICAgICAgICAgcHNybHEgbW0wLCAzMiAgICAgICA7IDAgMCAwIDAgdjAgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSs4XSAsIG1tMworICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbGRxIG1tMCwgbW00ICA7IHYxIHYwIHYyIHYxIHYwIHYyIHYxIHYwCisgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCAzCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDI0CisgICAgICAgICAgICAgICAgICAgICAgICAvL3N1YiBlc2ksIDMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYyBlY3gKKyAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wX3Bhc3MwCisgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAzICovCiAKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMykgPDwgMyk7CisgICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7CisgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDcKK2xvb3AxX3Bhc3M0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTAsIFtlc2ldICAgICA7IHYwIHYxIHYyIHYzIHY0IHY1IHY2IHY3CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgdjAgdjEgdjIgdjMgdjQgdjUgdjYgdjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xidyBtbTAsIG1tMCAgOyB2NCB2NCB2NSB2NSB2NiB2NiB2NyB2NworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb3ZxIG1tMSwgbW0wICAgICA7IHYwIHYwIHYxIHYxIHYyIHYyIHYzIHYzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toYncgbW0xLCBtbTEgIDt2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MworICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzhdLCBtbTEgICA7IG1vdmUgdG8gbWVtb3J5IHYwIHYxIHYyIGFuZCB2MworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wICAgICA7IG1vdmUgdG8gbWVtb3J5IHY0IHY1IHY2IGFuZCB2NworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdWIgZXNpLCA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3M0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OworICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjI7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC0tOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDIpIDw8IDIpOworICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OworICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc20KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE1CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCAzCitsb29wMV9wYXNzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgbW0wLCBbZXNpXSAgICAgOyBYIFggWCBYIHYwIHYxIHYyIHYzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsYncgbW0wLCBtbTAgIDsgdjAgdjAgdjEgdjEgdjIgdjIgdjMgdjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgOyB2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbHdkIG1tMCwgbW0wICA7IHYyIHYyIHYyIHYyIHYzIHYzIHYzIHYzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tod2QgbW0xLCBtbTEgIDsgdjAgdjAgdjAgdjAgdjEgdjEgdjEgdjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMCAgICAgOyBtb3ZlIHRvIG1lbW9yeSB2MiBhbmQgdjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSs4XSwgbW0xICAgOyBtb3ZlIHRvIG1lbW9yeSB2MSAgICAgYW5kIHYwCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OworICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjQ7CisgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC0tOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpIC8qICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkpICovCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsKQEAgLTE0MTIsOTggKzE1MDIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNwdHItLTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfYXNtCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZXNpLCBzcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWRpLCBkcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVjeCwgd2lkdGhfbW14Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMwotbG9vcDFfcGFzczI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIG1tMCwgW2VzaV0gICAgIDsgWCBYIFggWCB2MCB2MSB2MiB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbGJ3IG1tMCwgbW0wICA7IHYwIHYwIHYxIHYxIHYyIHYyIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgdjAgdjAgdjEgdjEgdjIgdjIgdjMgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCBtbTAsIG1tMCAgOyB2MiB2MiB2MiB2MiB2MyB2MyB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNraHdkIG1tMSwgbW0xICA7IHYwIHYwIHYwIHYwIHYxIHYxIHYxIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAgICAgIDsgbW92ZSB0byBtZW1vcnkgdjIgYW5kIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrOF0sIG1tMSAgIDsgbW92ZSB0byBtZW1vcnkgdjEgICAgIGFuZCB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wMV9wYXNzMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1NUwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09IHdpZHRoX21teCo0OwotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtLTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpKSAqLwotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMykgPDwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDcKLWxvb3AxX3Bhc3M0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTAsIFtlc2ldICAgICA7IHYwIHYxIHYyIHYzIHY0IHY1IHY2IHY3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgdjAgdjEgdjIgdjMgdjQgdjUgdjYgdjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xidyBtbTAsIG1tMCAgOyB2NCB2NCB2NSB2NSB2NiB2NiB2NyB2NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb3ZxIG1tMSwgbW0wICAgICA7IHYwIHYwIHYxIHYxIHYyIHYyIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toYncgbW0xLCBtbTEgIDt2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzhdLCBtbTEgICA7IG1vdmUgdG8gbWVtb3J5IHYwIHYxIHYyIGFuZCB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wICAgICA7IG1vdmUgdG8gbWVtb3J5IHY0IHY1IHY2IGFuZCB2NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3M0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjI7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC0tOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMSAqLwogCiAgICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAyKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkgJiYgd2lkdGgpCisgICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOworICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwogICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OwogICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTE1MTMsMjcgKzE1MTgsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDMwCi1sb29wMl9wYXNzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDYKK2xvb3AyX3Bhc3M0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBtbTAsIFtlc2ldICAgICAgICA7IFggWCBYIFggdjEgdjAgdjMgdjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCBtbTAsIG1tMCAgICAgOyB2MSB2MCB2MSB2MCB2MyB2MiB2MyB2MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICA7IHYxIHYwIHYxIHYwIHYzIHYyIHYzIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICAgIDsgdjMgdjIgdjMgdjIgdjMgdjIgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgICAgOyB2MSB2MCB2MSB2MCB2MSB2MCB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA4XSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAxNl0sIG1tMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgMjRdLCBtbTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wMl9wYXNzMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AyX3Bhc3M0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCoyIC0gMik7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDIpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKKyAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqNCAtIDIpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwpAQCAtMTU5Miw5ICsxNTkxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gcGFzcyA9PSA0IG9yIDUKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpKSAqLwogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOworICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSk7CiAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7CiAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICAgewpAQCAtMTYwNCwyMSArMTYwMywyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgNgotbG9vcDJfcGFzczQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAzMAorbG9vcDJfcGFzczA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIG1tMCwgW2VzaV0gICAgICAgIDsgWCBYIFggWCB2MSB2MCB2MyB2MgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbHdkIG1tMCwgbW0wICAgICA7IHYxIHYwIHYxIHYwIHYzIHYyIHYzIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgICAgIDsgdjEgdjAgdjEgdjAgdjMgdjIgdjMgdjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSBtbTAsIG1tMCAgICAgOyB2MyB2MiB2MyB2MiB2MyB2MiB2MyB2MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNraGRxIG1tMSwgbW0xICAgICA7IHYxIHYwIHYxIHYwIHYxIHYwIHYxIHYwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDhdLCBtbTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDE2XSwgbW0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAyNF0sIG1tMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wMl9wYXNzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AyX3Bhc3MwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCoyIC0gMik7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCo0IC0gMik7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDIpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwpAQCAtMTYzNiw3ICsxNjQxLDcgQEAKIAogICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNCkKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpICYmIHdpZHRoKQorICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CiAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7CkBAIC0xNjQ4LDMwICsxNjUzLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWRpLCBkcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVjeCwgd2lkdGhfbW14CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCA2MAotbG9vcDRfcGFzczA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMCwgW2VzaV0gICAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgICAgOyB2MyB2MiB2MSB2MCB2NyB2NiB2NSB2NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbGRxIG1tMCwgbW0wICAgICA7IHY3IHY2IHY1IHY0IHY3IHY2IHY1IHY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toZHEgbW0xLCBtbTEgICAgIDsgdjMgdjIgdjEgdjAgdjMgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDEyCitsb29wNF9wYXNzNDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSBtbTAsIG1tMCAgIDsgdjcgdjYgdjUgdjQgdjcgdjYgdjUgdjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgIDsgdjMgdjIgdjEgdjAgdjMgdjIgdjEgdjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgOF0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgMTZdLCBtbTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDI0XSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrMzJdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDQwXSwgbW0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrIDQ4XSwgbW0xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA1Nl0sIG1tMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgNjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDhdLCBtbTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWN4LCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcDRfcGFzczAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wNF9wYXNzNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1NUwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMzIgLSA0KTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCisgICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAgICAgICAgICAvLyBzaWduIGZpeGVkCisgICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjggLSA0KTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKQEAgLTE3MzAsNyArMTcyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vIHBhc3MgPT0gNCBvciA1CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgLyogJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKSkgKi8KICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsKQEAgLTE3NDIsMjQgKzE3NDEsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDEyCi1sb29wNF9wYXNzNDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSBtbTAsIG1tMCAgIDsgdjcgdjYgdjUgdjQgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgIDsgdjMgdjIgdjEgdjAgdjMgdjIgdjEgdjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDYwCitsb29wNF9wYXNzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgICAgOyB2MyB2MiB2MSB2MCB2NyB2NiB2NSB2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICA7IHYzIHYyIHYxIHYwIHY3IHY2IHY1IHY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICAgIDsgdjcgdjYgdjUgdjQgdjcgdjYgdjUgdjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgICAgOyB2MyB2MiB2MSB2MCB2MyB2MiB2MSB2MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA4XSwgbW0wCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAxNl0sIG1tMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgMjRdLCBtbTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSszMl0sIG1tMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgNDBdLCBtbTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSsgNDhdLCBtbTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDhdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA1Nl0sIG1tMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgNjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wNF9wYXNzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3A0X3Bhc3MwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7ICAgICAgICAgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqOCAtIDQpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKKyAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAorICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCozMiAtIDQpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwpAQCAtMzY5MywzMiArMzY5OCwzMiBAQAogICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93XG4iKTsKICAgIHN3aXRjaCAoZmlsdGVyKQogICAgewotICAgICAgY2FzZSAwOiBzcHJpbnRmKGZpbG5tLCAibm9uZSIpOworICAgICAgY2FzZSAwOiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAibm9uZSIpOwogICAgICAgICAgYnJlYWs7CiAjaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgY2FzZSAxOiBzcHJpbnRmKGZpbG5tLCAic3ViLSVzIiwKKyAgICAgIGNhc2UgMTogcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgInN1Yi0lcyIsCiAgICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQik/ICJNTVgiIDogIng4NiIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI6IHNwcmludGYoZmlsbm0sICJ1cC0lcyIsCisgICAgICBjYXNlIDI6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJ1cC0lcyIsCiAgICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKT8gIk1NWCIgOiAieDg2Iik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMzogc3ByaW50ZihmaWxubSwgImF2Zy0lcyIsCisgICAgICBjYXNlIDM6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJhdmctJXMiLAogICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpPyAiTU1YIiA6ICJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0OiBzcHJpbnRmKGZpbG5tLCAiUGFldGgtJXMiLAorICAgICAgY2FzZSA0OiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiUGFldGgtJXMiLAogICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCk/ICJNTVgiOiJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwogI2Vsc2UKLSAgICAgIGNhc2UgMTogc3ByaW50ZihmaWxubSwgInN1YiIpOworICAgICAgY2FzZSAxOiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAic3ViIik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjogc3ByaW50ZihmaWxubSwgInVwIik7CisgICAgICBjYXNlIDI6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJ1cCIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6IHNwcmludGYoZmlsbm0sICJhdmciKTsKKyAgICAgIGNhc2UgMzogcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgImF2ZyIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDQ6IHNwcmludGYoZmlsbm0sICJQYWV0aCIpOworICAgICAgY2FzZSA0OiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiUGFldGgiKTsKICAgICAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgICBkZWZhdWx0OiBzcHJpbnRmKGZpbG5tLCAidW5rbnciKTsKKyAgICAgIGRlZmF1bHQ6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJ1bmtudyIpOwogICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBwbmdfZGVidWcyKDAsInJvdz0lNWQsICVzLCAiLCBwbmdfcHRyLT5yb3dfbnVtYmVyLCBmaWxubSk7CkBAIC0zOTAxLDQgKzM5MDYsNCBAQAogICAgfQogfQogCi0jZW5kaWYgLyogUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCAmJiBQTkdfVVNFX1BOR1ZDUkQgKi8KKyNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICYmIFBOR19VU0VfUE5HVkNSRCAqLwpkaWZmIC0tZ2l0IGEvcG5nd2lvLmMgYi9wbmd3aW8uYwppbmRleCA0ZDlkNTdlLi4zNzFhNGZhIDEwMDY0NAotLS0gYS9wbmd3aW8uYworKysgYi9wbmd3aW8uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xMyBOb3ZlbWJlciAxMywgMjAwNgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCiAgKiAoVmVyc2lvbiAwLjg4IENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4pCiAgKgpkaWZmIC0tZ2l0IGEvcG5nd3JpdGUuYyBiL3BuZ3dyaXRlLmMKaW5kZXggZGY3YWRlMy4uYjZkY2NmNyAxMDA2NDQKLS0tIGEvcG5nd3JpdGUuYworKysgYi9wbmd3cml0ZS5jCkBAIC01MTcsMTEgKzUxNywxMyBAQAogICAgICAgICBjaGFyIG1zZ1s4MF07CiAgICAgICAgIGlmICh1c2VyX3BuZ192ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICBzcHJpbnRmKG1zZywgIkFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIHBuZy5oIGZyb20gbGlicG5nLSUuMjBzIiwKKyAgICAgICAgICBwbmdfc25wcmludGYobXNnLCA4MCwKKyAgICAgICAgICAgICAiQXBwbGljYXRpb24gd2FzIGNvbXBpbGVkIHdpdGggcG5nLmggZnJvbSBsaWJwbmctJS4yMHMiLAogICAgICAgICAgICAgIHVzZXJfcG5nX3Zlcik7CiAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICAgICAgICAgfQotICAgICAgICBzcHJpbnRmKG1zZywgIkFwcGxpY2F0aW9uICBpcyAgcnVubmluZyB3aXRoIHBuZy5jIGZyb20gbGlicG5nLSUuMjBzIiwKKyAgICAgICAgcG5nX3NucHJpbnRmKG1zZywgODAsCisgICAgICAgICAgICJBcHBsaWNhdGlvbiAgaXMgIHJ1bm5pbmcgd2l0aCBwbmcuYyBmcm9tIGxpYnBuZy0lLjIwcyIsCiAgICAgICAgICAgIHBuZ19saWJwbmdfdmVyKTsKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICNlbmRpZgpAQCAtNTg3LDExICs1ODksMTMgQEAKICAgICAgIHBuZ19wdHItPndhcm5pbmdfZm49TlVMTDsKICAgICAgIGlmICh1c2VyX3BuZ192ZXIpCiAgICAgICB7Ci0gICAgICAgIHNwcmludGYobXNnLCAiQXBwbGljYXRpb24gd2FzIGNvbXBpbGVkIHdpdGggcG5nLmggZnJvbSBsaWJwbmctJS4yMHMiLAorICAgICAgICBwbmdfc25wcmludGYobXNnLCA4MCwKKyAgICAgICAgICAgIkFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIHBuZy5oIGZyb20gbGlicG5nLSUuMjBzIiwKICAgICAgICAgICAgdXNlcl9wbmdfdmVyKTsKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICAgICAgIH0KLSAgICAgIHNwcmludGYobXNnLCAiQXBwbGljYXRpb24gIGlzICBydW5uaW5nIHdpdGggcG5nLmMgZnJvbSBsaWJwbmctJS4yMHMiLAorICAgICAgcG5nX3NucHJpbnRmKG1zZywgODAsCisgICAgICAgICAiQXBwbGljYXRpb24gIGlzICBydW5uaW5nIHdpdGggcG5nLmMgZnJvbSBsaWJwbmctJS4yMHMiLAogICAgICAgICAgcG5nX2xpYnBuZ192ZXIpOwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICAgIH0KQEAgLTExMzcsMTUgKzExNDEsMjYgQEAKICAgIHsKICAgICAgIHN3aXRjaCAoZmlsdGVycyAmIChQTkdfQUxMX0ZJTFRFUlMgfCAweDA3KSkKICAgICAgIHsKKyNpZm5kZWYgUE5HX05PX1dSSVRFX0ZJTFRFUgogICAgICAgICAgY2FzZSA1OgogICAgICAgICAgY2FzZSA2OgogICAgICAgICAgY2FzZSA3OiBwbmdfd2FybmluZyhwbmdfcHRyLCAiVW5rbm93biByb3cgZmlsdGVyIGZvciBtZXRob2QgMCIpOwotICAgICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX05PTkU6ICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9OT05FOyBicmVhazsKLSAgICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6ICAgcG5nX3B0ci0+ZG9fZmlsdGVyPVBOR19GSUxURVJfU1VCOyAgYnJlYWs7Ci0gICAgICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfVVA6ICAgIHBuZ19wdHItPmRvX2ZpbHRlcj1QTkdfRklMVEVSX1VQOyAgIGJyZWFrOwotICAgICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzogICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9BVkc7ICBicmVhazsKLSAgICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9QQUVUSDogcG5nX3B0ci0+ZG9fZmlsdGVyPVBOR19GSUxURVJfUEFFVEg7YnJlYWs7CisjZW5kaWYgLyogUE5HX05PX1dSSVRFX0ZJTFRFUiAqLworICAgICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX05PTkU6CisgICAgICAgICAgICAgIHBuZ19wdHItPmRvX2ZpbHRlcj1QTkdfRklMVEVSX05PTkU7IGJyZWFrOworI2lmbmRlZiBQTkdfTk9fV1JJVEVfRklMVEVSCisgICAgICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfU1VCOgorICAgICAgICAgICAgICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9TVUI7IGJyZWFrOworICAgICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgorICAgICAgICAgICAgICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9VUDsgYnJlYWs7CisgICAgICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfQVZHOgorICAgICAgICAgICAgICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9BVkc7IGJyZWFrOworICAgICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgorICAgICAgICAgICAgICBwbmdfcHRyLT5kb19maWx0ZXI9UE5HX0ZJTFRFUl9QQUVUSDsgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OiBwbmdfcHRyLT5kb19maWx0ZXIgPSAocG5nX2J5dGUpZmlsdGVyczsgYnJlYWs7CisjZWxzZQorICAgICAgICAgZGVmYXVsdDogcG5nX3dhcm5pbmcocG5nX3B0ciwgIlVua25vd24gcm93IGZpbHRlciBmb3IgbWV0aG9kIDAiKTsKKyNlbmRpZiAvKiBQTkdfTk9fV1JJVEVfRklMVEVSICovCiAgICAgICB9CiAKICAgICAgIC8qIElmIHdlIGhhdmUgYWxsb2NhdGVkIHRoZSByb3dfYnVmLCB0aGlzIG1lYW5zIHdlIGhhdmUgYWxyZWFkeSBzdGFydGVkCkBAIC0xMTU5LDYgKzExNzQsNyBAQAogICAgICAgICovCiAgICAgICBpZiAocG5nX3B0ci0+cm93X2J1ZiAhPSBOVUxMKQogICAgICAgeworI2lmbmRlZiBQTkdfTk9fV1JJVEVfRklMVEVSCiAgICAgICAgICBpZiAoKHBuZ19wdHItPmRvX2ZpbHRlciAmIFBOR19GSUxURVJfU1VCKSAmJiBwbmdfcHRyLT5zdWJfcm93ID09IE5VTEwpCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5zdWJfcm93ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCkBAIC0xMjEzLDYgKzEyMjksNyBAQAogICAgICAgICAgfQogCiAgICAgICAgICBpZiAocG5nX3B0ci0+ZG9fZmlsdGVyID09IFBOR19OT19GSUxURVJTKQorI2VuZGlmIC8qIFBOR19OT19XUklURV9GSUxURVIgKi8KICAgICAgICAgICAgIHBuZ19wdHItPmRvX2ZpbHRlciA9IFBOR19GSUxURVJfTk9ORTsKICAgICAgIH0KICAgIH0KQEAgLTE1MTEsOCArMTUyOCw4IEBACiAgICAvKiBJdCBpcyBSRVFVSVJFRCB0byBjYWxsIHRoaXMgdG8gZmluaXNoIHdyaXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgKi8KICAgIHBuZ193cml0ZV9lbmQocG5nX3B0ciwgaW5mb19wdHIpOwogCi0gICBpZih0cmFuc2Zvcm1zID09IDAgfHwgcGFyYW1zID09IE5VTEwpCi0gICAgICAvKiBxdWlldCBjb21waWxlciB3YXJuaW5ncyAqLyByZXR1cm47CisgICB0cmFuc2Zvcm1zID0gdHJhbnNmb3JtczsgLyogcXVpZXQgY29tcGlsZXIgd2FybmluZ3MgKi8KKyAgIHBhcmFtcyA9IHBhcmFtczsKIH0KICNlbmRpZgogI2VuZGlmIC8qIFBOR19XUklURV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3BuZ3d1dGlsLmMgYi9wbmd3dXRpbC5jCmluZGV4IDMxNGJlYTIuLjUyZjhjMTIgMTAwNjQ0Ci0tLSBhL3BuZ3d1dGlsLmMKKysrIGIvcG5nd3V0aWwuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3V0aWwuYyAtIHV0aWxpdGllcyB0byB3cml0ZSBhIFBORyBmaWxlCiAgKgotICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMTUgSmFudWFyeSA1LCAyMDA3CisgKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4xOSBKdWx5IDMxLCAyMDA3CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xODIsNyArMTgyLDcgQEAKICAgIHsKICNpZiAhZGVmaW5lZChQTkdfTk9fU1RESU8pICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCiAgICAgICBjaGFyIG1zZ1s1MF07Ci0gICAgICBzcHJpbnRmKG1zZywgIlVua25vd24gY29tcHJlc3Npb24gdHlwZSAlZCIsIGNvbXByZXNzaW9uKTsKKyAgICAgIHBuZ19zbnByaW50Zihtc2csIDUwLCAiVW5rbm93biBjb21wcmVzc2lvbiB0eXBlICVkIiwgY29tcHJlc3Npb24pOwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICNlbHNlCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiVW5rbm93biBjb21wcmVzc2lvbiB0eXBlIik7CkBAIC01NzgsNyArNTc4LDcgQEAKICAgIHBuZ19wdHItPm51bV9wYWxldHRlID0gKHBuZ191aW50XzE2KW51bV9wYWw7CiAgICBwbmdfZGVidWcxKDMsICJudW1fcGFsZXR0ZSA9ICVkXG4iLCBwbmdfcHRyLT5udW1fcGFsZXR0ZSk7CiAKLSAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19QTFRFLCBudW1fcGFsICogMyk7CisgICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgcG5nX1BMVEUsIG51bV9wYWwgKiAzKTsKICNpZm5kZWYgUE5HX05PX1BPSU5URVJfSU5ERVhJTkcKICAgIGZvciAoaSA9IDAsIHBhbF9wdHIgPSBwYWxldHRlOyBpIDwgbnVtX3BhbDsgaSsrLCBwYWxfcHRyKyspCiAgICB7CkBAIC03ODMsNyArNzgzLDcgQEAKICAgICAgICAgICBQTkdfQ09NUFJFU1NJT05fVFlQRV9CQVNFLCAmY29tcCk7CiAKICAgIC8qIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSBOVUxMIGFmdGVyIHRoZSBuYW1lIGFuZCB0aGUgY29tcHJlc3Npb24gdHlwZSAqLwotICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIChwbmdfYnl0ZXApcG5nX2lDQ1AsCisgICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgcG5nX2lDQ1AsCiAgICAgICAgICAgKHBuZ191aW50XzMyKW5hbWVfbGVuK3Byb2ZpbGVfbGVuKzIpOwogICAgbmV3X25hbWVbbmFtZV9sZW4rMV09MHgwMDsKICAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApbmV3X25hbWUsIG5hbWVfbGVuICsgMik7CkBAIC04MjMsNyArODIzLDcgQEAKICAgIH0KIAogICAgLyogbWFrZSBzdXJlIHdlIGluY2x1ZGUgdGhlIE5VTEwgYWZ0ZXIgdGhlIG5hbWUgKi8KLSAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19zUExULAorICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIHBuZ19zUExULAogICAgICAgICAgIChwbmdfdWludF8zMikobmFtZV9sZW4gKyAyICsgcGFsZXR0ZV9zaXplKSk7CiAgICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKW5ld19uYW1lLCBuYW1lX2xlbiArIDEpOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmc3BhbGV0dGUtPmRlcHRoLCAxKTsKQEAgLTExODAsNyArMTE4MCw3IEBACiAgICAgICByZXR1cm47CiAgICB9CiAKLSAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19oSVNULCAocG5nX3VpbnRfMzIpKG51bV9oaXN0ICogMikpOworICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIHBuZ19oSVNULCAocG5nX3VpbnRfMzIpKG51bV9oaXN0ICogMikpOwogICAgZm9yIChpID0gMDsgaSA8IG51bV9oaXN0OyBpKyspCiAgICB7CiAgICAgICBwbmdfc2F2ZV91aW50XzE2KGJ1ZiwgaGlzdFtpXSk7CkBAIC0xMjMxLDEyICsxMjMxLDE0IEBACiAgICAvKiBSZXBsYWNlIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIHdpdGggYSBibGFuayBhbmQgcHJpbnQgYSB3YXJuaW5nICovCiAgICBmb3IgKGtwID0ga2V5LCBkcCA9ICpuZXdfa2V5OyAqa3AgIT0gJ1wwJzsga3ArKywgZHArKykKICAgIHsKLSAgICAgIGlmICgqa3AgPCAweDIwIHx8ICgqa3AgPiAweDdFICYmIChwbmdfYnl0ZSkqa3AgPCAweEExKSkKKyAgICAgIGlmICgocG5nX2J5dGUpKmtwIDwgMHgyMCB8fAorICAgICAgICAgKChwbmdfYnl0ZSkqa3AgPiAweDdFICYmIChwbmdfYnl0ZSkqa3AgPCAweEExKSkKICAgICAgIHsKICNpZiAhZGVmaW5lZChQTkdfTk9fU1RESU8pICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCiAgICAgICAgICBjaGFyIG1zZ1s0MF07CiAKLSAgICAgICAgIHNwcmludGYobXNnLCAiaW52YWxpZCBrZXl3b3JkIGNoYXJhY3RlciAweCUwMlgiLCAqa3ApOworICAgICAgICAgcG5nX3NucHJpbnRmKG1zZywgNDAsCisgICAgICAgICAgICJpbnZhbGlkIGtleXdvcmQgY2hhcmFjdGVyIDB4JTAyWCIsIChwbmdfYnl0ZSkqa3ApOwogICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKICNlbHNlCiAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4ga2V5d29yZCIpOwpAQCAtMTM5Nyw4ICsxMzk5LDYgQEAKIAogICAgdGV4dF9sZW4gPSBwbmdfc3RybGVuKHRleHQpOwogCi0gICBwbmdfZnJlZShwbmdfcHRyLCBuZXdfa2V5KTsKLQogICAgLyogY29tcHV0ZSB0aGUgY29tcHJlc3NlZCBkYXRhOyBkbyBpdCBub3cgZm9yIHRoZSBsZW5ndGggKi8KICAgIHRleHRfbGVuID0gcG5nX3RleHRfY29tcHJlc3MocG5nX3B0ciwgdGV4dCwgdGV4dF9sZW4sIGNvbXByZXNzaW9uLAogICAgICAgICZjb21wKTsKQEAgLTE0MDcsNyArMTQwNyw5IEBACiAgICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfelRYdCwgKHBuZ191aW50XzMyKQogICAgICAgKGtleV9sZW4rdGV4dF9sZW4rMikpOwogICAgLyogd3JpdGUga2V5ICovCi0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKWtleSwga2V5X2xlbiArIDEpOworICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCluZXdfa2V5LCBrZXlfbGVuICsgMSk7CisgICBwbmdfZnJlZShwbmdfcHRyLCBuZXdfa2V5KTsKKwogICAgYnVmWzBdID0gKHBuZ19ieXRlKWNvbXByZXNzaW9uOwogICAgLyogd3JpdGUgY29tcHJlc3Npb24gKi8KICAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApYnVmLCAocG5nX3NpemVfdCkxKTsKQEAgLTE1MjcsMTAgKzE1MjksOSBAQAogICAgcG5nX3NhdmVfaW50XzMyKGJ1ZiArIDQsIHlfb2Zmc2V0KTsKICAgIGJ1Zls4XSA9IChwbmdfYnl0ZSl1bml0X3R5cGU7CiAKLSAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19vRkZzLCBidWYsIChwbmdfc2l6ZV90KTkpOworICAgcG5nX3dyaXRlX2NodW5rKHBuZ19wdHIsIHBuZ19vRkZzLCBidWYsIChwbmdfc2l6ZV90KTkpOwogfQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKFBOR19XUklURV9wQ0FMX1NVUFBPUlRFRCkKIC8qIHdyaXRlIHRoZSBwQ0FMIGNodW5rIChkZXNjcmliZWQgaW4gdGhlIFBORyBleHRlbnNpb25zIGRvY3VtZW50KSAqLwogdm9pZCAvKiBQUklWQVRFICovCkBAIC0xNTY5LDcgKzE1NzAsNyBAQAogICAgfQogCiAgICBwbmdfZGVidWcxKDMsICJwQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCAoaW50KXRvdGFsX2xlbik7Ci0gICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfcENBTCwgKHBuZ191aW50XzMyKXRvdGFsX2xlbik7CisgICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgcG5nX3BDQUwsIChwbmdfdWludF8zMil0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCluZXdfcHVycG9zZSwgcHVycG9zZV9sZW4pOwogICAgcG5nX3NhdmVfaW50XzMyKGJ1ZiwgWDApOwogICAgcG5nX3NhdmVfaW50XzMyKGJ1ZiArIDQsIFgxKTsKQEAgLTE2MjIsMTQgKzE2MjMsMTQgQEAKICAgICAgIHRvdGFsX2xlbiArPSB3Y19sZW47CiAgICB9CiAjZWxzZQotICAgc3ByaW50ZihidWYgKyAxLCAiJTEyLjEyZSIsIHdpZHRoKTsKKyAgIHBuZ19zbnByaW50ZihidWYgKyAxLCA2MywgIiUxMi4xMmUiLCB3aWR0aCk7CiAgICB0b3RhbF9sZW4gPSAxICsgcG5nX3N0cmxlbihidWYgKyAxKSArIDE7Ci0gICBzcHJpbnRmKGJ1ZiArIHRvdGFsX2xlbiwgIiUxMi4xMmUiLCBoZWlnaHQpOworICAgcG5nX3NucHJpbnRmKGJ1ZiArIHRvdGFsX2xlbiwgNjQtdG90YWxfbGVuLCAiJTEyLjEyZSIsIGhlaWdodCk7CiAgICB0b3RhbF9sZW4gKz0gcG5nX3N0cmxlbihidWYgKyB0b3RhbF9sZW4pOwogI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZzEoMywgInNDQUwgdG90YWwgbGVuZ3RoID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpdG90YWxfbGVuKTsKLSAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19zQ0FMLCAocG5nX2J5dGVwKWJ1ZiwgdG90YWxfbGVuKTsKKyAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCBwbmdfc0NBTCwgKHBuZ19ieXRlcClidWYsIHRvdGFsX2xlbik7CiB9CiAjZWxzZQogI2lmZGVmIFBOR19GSVhFRF9QT0lOVF9TVVBQT1JURUQKQEAgLTE2NTksNyArMTY2MCw3IEBACiAgICBwbmdfbWVtY3B5KGJ1ZiArIHdsZW4gKyAyLCBoZWlnaHQsIGhsZW4pOyAgLyogZG8gTk9UIGFwcGVuZCB0aGUgJ1wwJyBoZXJlICovCiAKICAgIHBuZ19kZWJ1ZzEoMywgInNDQUwgdG90YWwgbGVuZ3RoID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpdG90YWxfbGVuKTsKLSAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19zQ0FMLCBidWYsIHRvdGFsX2xlbik7CisgICBwbmdfd3JpdGVfY2h1bmsocG5nX3B0ciwgcG5nX3NDQUwsIGJ1ZiwgdG90YWxfbGVuKTsKIH0KICNlbmRpZgogI2VuZGlmCkBAIC0xNjg1LDcgKzE2ODYsNyBAQAogICAgcG5nX3NhdmVfdWludF8zMihidWYgKyA0LCB5X3BpeGVsc19wZXJfdW5pdCk7CiAgICBidWZbOF0gPSAocG5nX2J5dGUpdW5pdF90eXBlOwogCi0gICBwbmdfd3JpdGVfY2h1bmsocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfcEhZcywgYnVmLCAocG5nX3NpemVfdCk5KTsKKyAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCBwbmdfcEhZcywgYnVmLCAocG5nX3NpemVfdCk5KTsKIH0KICNlbmRpZgogCkBAIC0xNzE3LDcgKzE3MTgsNyBAQAogICAgYnVmWzVdID0gbW9kX3RpbWUtPm1pbnV0ZTsKICAgIGJ1Zls2XSA9IG1vZF90aW1lLT5zZWNvbmQ7CiAKLSAgIHBuZ193cml0ZV9jaHVuayhwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ190SU1FLCBidWYsIChwbmdfc2l6ZV90KTcpOworICAgcG5nX3dyaXRlX2NodW5rKHBuZ19wdHIsIHBuZ190SU1FLCBidWYsIChwbmdfc2l6ZV90KTcpOwogfQogI2VuZGlmCiAKQEAgLTE3NTEsNiArMTc1Miw3IEBACiAgICBwbmdfcHRyLT5yb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMilidWZfc2l6ZSk7CiAgICBwbmdfcHRyLT5yb3dfYnVmWzBdID0gUE5HX0ZJTFRFUl9WQUxVRV9OT05FOwogCisjaWZuZGVmIFBOR19OT19XUklURV9GSUxURVJJTkcKICAgIC8qIHNldCB1cCBmaWx0ZXJpbmcgYnVmZmVyLCBpZiB1c2luZyB0aGlzIGZpbHRlciAqLwogICAgaWYgKHBuZ19wdHItPmRvX2ZpbHRlciAmIFBOR19GSUxURVJfU1VCKQogICAgewpAQCAtMTc2OCw3ICsxNzcwLDcgQEAKIAogICAgICAgaWYgKHBuZ19wdHItPmRvX2ZpbHRlciAmIFBOR19GSUxURVJfVVApCiAgICAgICB7Ci0gICAgICAgICBwbmdfcHRyLT51cF9yb3cgPSAocG5nX2J5dGVwIClwbmdfbWFsbG9jKHBuZ19wdHIsCisgICAgICAgICBwbmdfcHRyLT51cF9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKICAgICAgICAgIHBuZ19wdHItPnVwX3Jvd1swXSA9IFBOR19GSUxURVJfVkFMVUVfVVA7CiAgICAgICB9CkBAIC0xNzgyLDEwICsxNzg0LDExIEBACiAKICAgICAgIGlmIChwbmdfcHRyLT5kb19maWx0ZXIgJiBQTkdfRklMVEVSX1BBRVRIKQogICAgICAgewotICAgICAgICAgcG5nX3B0ci0+cGFldGhfcm93ID0gKHBuZ19ieXRlcCApcG5nX21hbGxvYyhwbmdfcHRyLAorICAgICAgICAgcG5nX3B0ci0+cGFldGhfcm93ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3B0ci0+cm93Ynl0ZXMgKyAxKSk7CiAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOwogICAgICAgfQorI2VuZGlmIC8qIFBOR19OT19XUklURV9GSUxURVJJTkcgKi8KICAgIH0KIAogI2lmZGVmIFBOR19XUklURV9JTlRFUkxBQ0lOR19TVVBQT1JURUQKQEAgLTIxMjEsNiArMjEyNCw3IEBACiAKICAgIHByZXZfcm93ID0gcG5nX3B0ci0+cHJldl9yb3c7CiAgICBiZXN0X3JvdyA9IHJvd19idWYgPSBwbmdfcHRyLT5yb3dfYnVmOworI2lmbmRlZiBQTkdfTk9fV1JJVEVfRklMVEVSCiAgICBtaW5zID0gUE5HX01BWFNVTTsKIAogICAgLyogVGhlIHByZWRpY3Rpb24gbWV0aG9kIHdlIHVzZSBpcyB0byBmaW5kIHdoaWNoIG1ldGhvZCBwcm92aWRlcyB0aGUKQEAgLTI2OTUsNyArMjY5OSw3IEBACiAgICAgICAgICBiZXN0X3JvdyA9IHBuZ19wdHItPnBhZXRoX3JvdzsKICAgICAgIH0KICAgIH0KLQorI2VuZGlmIC8qIFBOR19OT19XUklURV9GSUxURVIgKi8KICAgIC8qIERvIHRoZSBhY3R1YWwgd3JpdGluZyBvZiB0aGUgZmlsdGVyZWQgcm93IGRhdGEgZnJvbSB0aGUgY2hvc2VuIGZpbHRlci4gKi8KIAogICAgcG5nX3dyaXRlX2ZpbHRlcmVkX3JvdyhwbmdfcHRyLCBiZXN0X3Jvdyk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL0NNYWtlTGlzdHMudHh0IGIvc2NyaXB0cy9DTWFrZUxpc3RzLnR4dAppbmRleCA3ZjEwZjExLi43MzgwYjU3IDEwMDY0NAotLS0gYS9zY3JpcHRzL0NNYWtlTGlzdHMudHh0CisrKyBiL3NjcmlwdHMvQ01ha2VMaXN0cy50eHQKQEAgLTUsNyArNSw3IEBACiAKIHNldChQTkdMSUJfTUFKT1IgMSkKIHNldChQTkdMSUJfTUlOT1IgMCkKLXNldChQTkdMSUJfUkVMRUFTRSAyNikKK3NldChQTkdMSUJfUkVMRUFTRSAyNykKIHNldChQTkdMSUJfTkFNRSBsaWJwbmcke1BOR0xJQl9NQUpPUn0ke1BOR0xJQl9NSU5PUn0pCiBzZXQoUE5HTElCX1ZFUlNJT04gJHtQTkdMSUJfTUFKT1J9LiR7UE5HTElCX01JTk9SfS4ke1BOR0xJQl9SRUxFQVNFfSkKIApAQCAtNDksNiArNDksMTIgQEAKICAgICAgIHNldChwbmdfYXNtX3RtcCAiT0ZGIikKICAgIGVuZGlmKCJ1bmFtZV9vdXRwdXQiIE1BVENIRVMgIl4uKmlbMS05XTg2LiokIikKICBlbmRpZih1bmFtZV9leGVjdXRhYmxlKQorZWxzZShOT1QgV0lOMzIpCisgIyB0aGlzIGVudiB2YXIgaXMgbm9ybWFsbHkgb25seSBzZXQgb24gd2luNjQKKyBTRVQoVEVYVCAiUHJvZ3JhbUZpbGVzKHg4NikiKQorIGlmKCIkRU5WeyR7VEVYVH19IiBTVFJFUVVBTCAiIikKKyAgc2V0KHBuZ19hc21fdG1wICJPTiIpCisgZW5kaWYoIiRFTlZ7JHtURVhUfX0iIFNUUkVRVUFMICIiKQogZW5kaWYoTk9UIFdJTjMyKQogCiBvcHRpb24oUE5HX01NWCAiVXNlIE1NWCBhc3NlbWJsZXIgY29kZSAoeDg2IG9ubHkpIiAke3BuZ19hc21fdG1wfSkKQEAgLTkwLDMxICs5NiwyMSBAQAogIyBTT01FIE5FRURFRCBERUZJTklUSU9OUwogYWRkX2RlZmluaXRpb25zKC1EWkxJQl9ETEwpCiAKLWlmKE1TVkMpCi0gYWRkX2RlZmluaXRpb25zKC1EUE5HX1VTRV9QTkdWQ1JEIC1EUE5HX05PX01PRFVMRURFRgotICAgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpCi0gc2V0KGxpYnBuZ19zb3VyY2VzICR7bGlicG5nX3NvdXJjZXN9Ci0gICAgICAgICBwbmd2Y3JkLmMKLSApCi1lbHNlKE1TVkMpCi0gYWRkX2RlZmluaXRpb25zKC1EUE5HX1VTRV9QTkdHQ0NSRCkKLSBzZXQobGlicG5nX3NvdXJjZXMgJHtsaWJwbmdfc291cmNlc30KLSAgICAgICAgIHBuZ2djY3JkLmMKLSApCi1lbmRpZihNU1ZDKQotCi1pZihOT1QgTVNWQykKLSBpZihOT1QgUE5HX01NWCkKLSAgIGFkZF9kZWZpbml0aW9ucygtRExJQlBOR19OT19NTVgpCi0gICBhZGRfZGVmaW5pdGlvbnMoLURQTkdfTk9fTU1YX0NPREUpCi0gZW5kaWYoTk9UIFBOR19NTVgpCi1lbHNlKE5PVCBNU1ZDKQotIGlmKFBOR19NTVgpCi0gIyBtYXliZSBhZGQgdGhpcyB0byBwbmdjb25mLmggPwotIGFkZF9kZWZpbml0aW9ucygtRFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0gZW5kaWYoUE5HX01NWCkKLWVuZGlmKE5PVCBNU1ZDKQotCitpZihQTkdfTU1YKQorIGlmKE1TVkMpCisgIGFkZF9kZWZpbml0aW9ucygtRFBOR19OT19NT0RVTEVERUYgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpCisgIHNldChsaWJwbmdfc291cmNlcyAke2xpYnBuZ19zb3VyY2VzfQorICAgICAgICAgIHBuZ3ZjcmQuYworICApCisgZWxzZShNU1ZDKQorICBzZXQobGlicG5nX3NvdXJjZXMgJHtsaWJwbmdfc291cmNlc30KKyAgICAgICAgICBwbmdnY2NyZC5jCisgICkKKyBlbmRpZihNU1ZDKQorZWxzZShQTkdfTU1YKQorICBhZGRfZGVmaW5pdGlvbnMoLURMSUJQTkdfTk9fTU1YKQorICBhZGRfZGVmaW5pdGlvbnMoLURQTkdfTk9fTU1YX0NPREUpCitlbmRpZihQTkdfTU1YKQogCiBpZihQTkdfQ09OU09MRV9JT19TVVBQT1JURUQpCiAgYWRkX2RlZmluaXRpb25zKC1EUE5HX0NPTlNPTEVfSU9fU1VQUE9SVEVEKQpAQCAtMTMyLDkgKzEyOCw5IEBACiAgYWRkX2RlZmluaXRpb25zKC1EUE5HX0RFQlVHKQogZW5kaWYoUE5HX0RFQlVHKQogCi1pZihOT1QgTV9MSUJSQVJZKQoraWYoTk9UIE1fTElCUkFSWSBBTkQgTk9UIFdJTjMyKQogIGFkZF9kZWZpbml0aW9ucygtRFBOR19OT19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQpCi1lbmRpZihOT1QgTV9MSUJSQVJZKQorZW5kaWYoTk9UIE1fTElCUkFSWSBBTkQgTk9UIFdJTjMyKQogCiAjIE5PVyBCVUlMRCBPVVIgVEFSR0VUCiBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7UE5HX1NPVVJDRV9ESVJ9ICR7WkxJQl9JTkNMVURFX0RJUn0pCkBAIC0xNzksNyArMTc1LDcgQEAKIAogIyBTRVQgVVAgTElOS1MKIHNldF90YXJnZXRfcHJvcGVydGllcygke1BOR19MSUJfTkFNRX0gUFJPUEVSVElFUwotIyAgICBWRVJTSU9OIDAuJHtQTkdMSUJfUkVMRUFTRX0uMS4wLjI2CisjICAgIFZFUlNJT04gMC4ke1BOR0xJQl9SRUxFQVNFfS4xLjAuMjdyYzEKICAgICAgVkVSU0lPTiAwLiR7UE5HTElCX1JFTEVBU0V9LjAKICAgICAgU09WRVJTSU9OIDAKICAgICAgQ0xFQU5fRElSRUNUX09VVFBVVCAxKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW4gYi9zY3JpcHRzL2xpYnBuZy1jb25maWctaGVhZC5pbgppbmRleCA4NjMxMDEzLi5lYTRkMTUxIDEwMDc1NQotLS0gYS9zY3JpcHRzL2xpYnBuZy1jb25maWctaGVhZC5pbgorKysgYi9zY3JpcHRzL2xpYnBuZy1jb25maWctaGVhZC5pbgpAQCAtOCw3ICs4LDcgQEAKIAogIyBNb2RlbGVkIGFmdGVyIGxpYnhtbC1jb25maWcuCiAKLXZlcnNpb249MS4wLjI2Cit2ZXJzaW9uPTEuMC4yN3JjMQogcHJlZml4PSIiCiBsaWJkaXI9IiIKIGxpYnM9IiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGlicG5nLnBjLWNvbmZpZ3VyZS5pbiBiL3NjcmlwdHMvbGlicG5nLnBjLWNvbmZpZ3VyZS5pbgppbmRleCAzMzJmZjg0Li4xMDYyNDhmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2xpYnBuZy5wYy1jb25maWd1cmUuaW4KKysrIGIvc2NyaXB0cy9saWJwbmcucGMtY29uZmlndXJlLmluCkBAIC01LDYgKzUsNiBAQAogCiBOYW1lOiBsaWJwbmcKIERlc2NyaXB0aW9uOiBMb2FkcyBhbmQgc2F2ZXMgUE5HIGZpbGVzCi1WZXJzaW9uOiAxLjAuMjYKK1ZlcnNpb246IDEuMC4yN3JjMQogTGliczogLUwke2xpYmRpcn0gLWxwbmcxMAogQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQExJQlBOR19OT19NTVhACmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYnBuZy5wYy5pbiBiL3NjcmlwdHMvbGlicG5nLnBjLmluCmluZGV4IGIwMDdiZWIuLjNmMjk0ODQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbGlicG5nLnBjLmluCisrKyBiL3NjcmlwdHMvbGlicG5nLnBjLmluCkBAIC01LDYgKzUsNiBAQAogCiBOYW1lOiBsaWJwbmcKIERlc2NyaXB0aW9uOiBMb2FkcyBhbmQgc2F2ZXMgUE5HIGZpbGVzCi1WZXJzaW9uOiAxLjAuMjYKK1ZlcnNpb246IDEuMC4yN3JjMQogTGliczogLUwke2xpYmRpcn0gLWxwbmcxMAogQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuMzJzdW51IGIvc2NyaXB0cy9tYWtlZmlsZS4zMnN1bnUKaW5kZXggOGYxNTQ2My4uMDAxYWEzOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS4zMnN1bnUKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS4zMnN1bnUKQEAgLTgsNyArOCw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUU9bGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLjY0c3VudSBiL3NjcmlwdHMvbWFrZWZpbGUuNjRzdW51CmluZGV4IGEyYjA0ZWQuLjQ5NTI4N2UgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuNjRzdW51CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuNjRzdW51CkBAIC04LDcgKzgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FPWxpYnBuZzEwCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjAuMjYKK1BOR01JTiA9IDEuMC4yN3JjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5haXggYi9zY3JpcHRzL21ha2VmaWxlLmFpeAppbmRleCBlNGViYTM3Li4wZTZhNDRkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmFpeAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmFpeApAQCAtMjAsNyArMjAsNyBAQAogCiBMSUJOQU1FPWxpYnBuZzEwCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjAuMjYKK1BOR01JTiA9IDEuMC4yN3JjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBwcmVmaXg9L3Vzci9sb2NhbApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5iZW9zIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCmluZGV4IDQwNWY5YWIuLjg3NmJmNzEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcworKysgYi9zY3JpcHRzL21ha2VmaWxlLmJlb3MKQEAgLTgsNyArOCw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUU9bGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbiBiL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCmluZGV4IDEwOTk3YjAuLjYzYWVkOWMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCkBAIC0zLDcgKzMsNyBAQAogIyAgIG9mIHRoZSBsaWJyYXJ5LCBhbmQgYnVpbGRzIHR3byBjb3BpZXMgb2YgcG5ndGVzdDogb25lCiAjICAgc3RhdGljYWxseSBsaW5rZWQgYW5kIG9uZSBkeW5hbWljYWxseSBsaW5rZWQuCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBTb3JlbiBBbmRlcnNvbiwgQ2hhcmxlcyBXaWxzb24sCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwNyBTb3JlbiBBbmRlcnNvbiwgQ2hhcmxlcyBXaWxzb24sCiAjICAgIGFuZCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGJhc2VkIG9uIG1ha2VmaWxlIGZvciBsaW51eC1lbGYgdy9tbXggYnk6CiAjIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEdyZWcgUm9lbG9mcwogIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKQEAgLTMxLDkgKzMxLDggQEAKIAogREVTVERJUj0KIAotIyBUbyBlbmFibGUgYXNzZW1ibGVyIG9wdGltaXphdGlvbnMsIGFkZCAnLURQTkdfVVNFX1BOR0dDQ1JEJyB0bwotIyAkQ0ZMQUdTLCBhbmQgaW5jbHVkZSBwbmdnY2NyZC5vIGluICRPQkpTLCBiZWxvdywgYW5kIGluIHRoZSBkZXBlbmRlbmN5Ci0jIGxpc3QgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIG1ha2VmaWxlLgorIyBUbyBkaXNhYmxlIGFzc2VtYmxlciBvcHRpbWl6YXRpb25zLCBhZGQgJy1EUE5HX05PX01NWF9DT0RFJyB0bworIyAkQ0ZMQUdTLiAgVG8gZW5hYmxlLCBhZGQgcG5nZ2NjcmQubyB0byB0aGUgZGVwZW5kZW5jaWVzLgogCiBDQz1nY2MKIGlmZGVmIE1JTkdXCkBAIC02MiwyNSArNjEsMjMgQEAKIAktV21pc3NpbmctZGVjbGFyYXRpb25zIC1XdHJhZGl0aW9uYWwgLVdjYXN0LWFsaWduIFwKIAktV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzICMtV2NvbnZlcnNpb24KIAotIyMjIGlmIHlvdSB1c2UgdGhlIGFzbSwgYWRkIHBuZ2djY3JkLm8gdG8gdGhlIE9CSlMgbGlzdAotIyMjCiAjIyMgaWYgeW91IGRvbid0IG5lZWQgdGhyZWFkIHNhZmV0eSwgYnV0IHdhbnQgdGhlIGFzbSBhY2NlbAotI0NGTEFHUz0gJChzdHJpcCAkKE1JTkdXX0NDRkxBR1MpIC1EUE5HX1RIUkVBRF9VTlNBRkVfT0sgLURQTkdfVVNFX1BOR0dDQ1JEIFwKLSMJJChhZGRwcmVmaXggLUksJChaTElCSU5DKSkgLVdhbGwgLU8zICQoQUxJR04pIC1mdW5yb2xsLWxvb3BzIFwKKyNDRkxBR1M9ICQoc3RyaXAgJChNSU5HV19DQ0ZMQUdTKSAtRFBOR19USFJFQURfVU5TQUZFX09LIFwKKyMJJChhZGRwcmVmaXggLUksJChaTElCSU5DKSkgLVdhbGwgLU8gJChBTElHTikgLWZ1bnJvbGwtbG9vcHMgXAogIwktZm9taXQtZnJhbWUtcG9pbnRlcikgICMgJChXQVJOTU9SRSkgLWcgLURQTkdfREVCVUc9NQogIyMjIGlmIHlvdSBuZWVkIHRocmVhZCBzYWZldHkgYW5kIHdhbnQgKG1pbmltYWwpIGFzbSBhY2NlbAotI0NGTEFHUz0gJChzdHJpcCAkKE1JTkdXX0NDRkxBR1MpIC1EUE5HX1VTRV9QTkdHQ0NSRCAkKGFkZHByZWZpeCAtSSwkKFpMSUJJTkMpKSBcCi0jCS1XYWxsIC1PMyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyBcCisjQ0ZMQUdTPSAkKHN0cmlwICQoTUlOR1dfQ0NGTEFHUykgJChhZGRwcmVmaXggLUksJChaTElCSU5DKSkgXAorIwktV2FsbCAtTyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyBcCiAjCS1mb21pdC1mcmFtZS1wb2ludGVyKSAgIyAkKFdBUk5NT1JFKSAtZyAtRFBOR19ERUJVRz01CiAjIyMgTm9ybWFsIChub24tYXNtKSBjb21waWxhdGlvbgogQ0ZMQUdTPSAkKHN0cmlwICQoTUlOR1dfQ0NGTEFHUykgJChhZGRwcmVmaXggLUksJChaTElCSU5DKSkgXAotICAgICAgICAtV2FsbCAtTzMgJChBTElHTikgLWZ1bnJvbGwtbG9vcHMgXAorICAgICAgICAtV2FsbCAtTzMgJChBTElHTikgLWZ1bnJvbGwtbG9vcHMgLURQTkdfTk9fTU1YX0NPREUgXAogCS1mb21pdC1mcmFtZS1wb2ludGVyKSAjICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKIAogTElCTkFNRSA9IGxpYnBuZzEwCiBQTkdNQUogPSAwCiBDWUdETEwgPSAxMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogU0hBUkVETElCPWN5Z3BuZyQoQ1lHRExMKS5kbGwKQEAgLTE1OSwxOSArMTU2LDE5IEBACiBhbGwtc3RhdGljOiAkKFNUQVRMSUIpIHBuZ3Rlc3Qtc3RhdCQoRVhFKQogYWxsLXNoYXJlZDogJChTSEFSRURMSUIpIHBuZ3Rlc3QkKEVYRSkKIAotcG5nZ2NjcmQubzogcG5nZ2NjcmQuYyBwbmcuaCBwbmdjb25mLmgKLQlAZWNobyAiIgotCUBlY2hvICcgICAgWW91IGNhbiBpZ25vcmUgdGhlICJjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIicKLQlAZWNobyAnICAgIHdhcm5pbmcgYW5kICI8dmFyaWFibGU+IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5nczonCi0JQGVjaG8gIiIKLQkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKyMgcG5nZ2NjcmQubzogcG5nZ2NjcmQuYyBwbmcuaCBwbmdjb25mLmgKKyMJQGVjaG8gIiIKKyMJQGVjaG8gJyAgICBZb3UgY2FuIGlnbm9yZSB0aGUgImNvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24iJworIwlAZWNobyAnICAgIHdhcm5pbmcgYW5kICI8dmFyaWFibGU+IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5nczonCisjCUBlY2hvICIiCisjCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAogCi1wbmdnY2NyZC5waWMubzoJcG5nZ2NjcmQuYyBwbmcuaCBwbmdjb25mLmgKLQlAZWNobyAiIgotCUBlY2hvICcgICAgWW91IGNhbiBpZ25vcmUgdGhlICJjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIicKLQlAZWNobyAnICAgIHdhcm5pbmcgYW5kICI8dmFyaWFibGU+IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5nczonCi0JQGVjaG8gIiIKLQkkKENDKSAtYyAkKENGTEFHUykgLURQTkdfQlVJTERfRExMIC1vICRAICQ8CisjIHBuZ2djY3JkLnBpYy5vOglwbmdnY2NyZC5jIHBuZy5oIHBuZ2NvbmYuaAorIwlAZWNobyAiIgorIwlAZWNobyAnICAgIFlvdSBjYW4gaWdub3JlIHRoZSAiY29udHJvbCByZWFjaGVzIGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiInCisjCUBlY2hvICcgICAgd2FybmluZyBhbmQgIjx2YXJpYWJsZT4gZGVmaW5lZCBidXQgbm90IHVzZWQiIHdhcm5pbmdzOicKKyMJQGVjaG8gIiIKKyMJJChDQykgLWMgJChDRkxBR1MpIC1EUE5HX0JVSUxEX0RMTCAtbyAkQCAkPAogCiAkKFNUQVRMSUIpOiAkKE9CSlMpCiAJYXIgcmMgJEAgJChPQkpTKQpAQCAtMzA4LDYgKzMwNSw3IEBACiBwbmd3dHJhbi5vIHBuZ3d0cmFuLnBpYy5vOglwbmcuaCBwbmdjb25mLmggcG5nd3RyYW4uYwogcG5nd3V0aWwubyBwbmd3dXRpbC5waWMubzoJcG5nLmggcG5nY29uZi5oIHBuZ3d1dGlsLmMKIHBuZ3ByZWFkLm8gcG5ncHJlYWQucGljLm86CXBuZy5oIHBuZ2NvbmYuaCBwbmdwcmVhZC5jCisjIHBuZ2djY3JkLm8gcG5nZ2NjcmQucGljLm86CXBuZy5oIHBuZ2NvbmYuaCBwbmdnY2NyZC5jCiAKIHBuZ3Rlc3QubzoJCQlwbmcuaCBwbmdjb25mLmggcG5ndGVzdC5jCiBwbmd0ZXN0LXN0YXQubzoJCQlwbmcuaCBwbmdjb25mLmggcG5ndGVzdC5jCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmRhcndpbiBiL3NjcmlwdHMvbWFrZWZpbGUuZGFyd2luCmluZGV4IGJmMDhhNDAuLmZhNTc2NDYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZGFyd2luCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuZGFyd2luCkBAIC0xOSw3ICsxOSw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMAogUE5HTUFKID0gMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKQEAgLTM4LDcgKzM4LDggQEAKIFJBTkxJQj1yYW5saWIKIFJNX0Y9L2Jpbi9ybSAtZgogCi1DRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PMyAtZnVucm9sbC1sb29wcworIyBDRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PMyAtZnVucm9sbC1sb29wcyAtRFBOR19OT19NTVhfQ09ERQorQ0ZMQUdTPS1JJChaTElCSU5DKSAtV2FsbCAtTyAtZnVucm9sbC1sb29wcwogTERGTEFHUz0tTC4gLUwkKFpMSUJMSUIpIC1scG5nMTAgLWx6CiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZGVjIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKaW5kZXggZWMzZGVkNC4uNjA0NmJhNyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5kZWMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKQEAgLTUsNyArNSw3IEBACiAKICMgTGlicmFyeSBuYW1lOgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIExJQk5BTUUgPSBsaWJwbmcxMAogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmVsZiBiL3NjcmlwdHMvbWFrZWZpbGUuZWxmCmluZGV4IDJkODgxNzMuLjAzZWIyMTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZWxmCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuZWxmCkBAIC0xMiw3ICsxMiw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMAogUE5HTUFKID0gMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZnJlZWJzZCBiL3NjcmlwdHMvbWFrZWZpbGUuZnJlZWJzZAppbmRleCA3ODIxZTM4Li41OWYzNjQ0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmZyZWVic2QKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5mcmVlYnNkCkBAIC0yNCwxNCArMjQsMTQgQEAKIExEQUREKz0gICAgICAgICAtbG0gLWx6CiBEUEFERCs9ICAgICAgICAgJHtMSUJNfSAke0xJQlp9CiAKLUNGTEFHUys9IC1JLiAtRFBOR19VU0VfUE5HR0NDUkQKK0NGTEFHUys9IC1JLgogLmlmICgke01BQ0hJTkVfQVJDSH0gIT0gImkzODYiKQogQ0ZMQUdTKz0gLURQTkdfTk9fTU1YX0NPREUKIC5lbmRpZgogCiBTUkNTPQlwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCiAJcG5ncmVhZC5jIHBuZ3Jpby5jIHBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5ncnRyYW4uYyBcCi0JcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMgcG5nZ2NjcmQuYworCXBuZ3d0cmFuLmMgcG5nbWVtLmMgcG5nZXJyb3IuYyBwbmdwcmVhZC5jCiAKIHBuZ3Rlc3Q6IHBuZ3Rlc3QubyBsaWJwbmcuYQogCSR7Q0N9ICR7Q0ZMQUdTfSAtTC4gLXN0YXRpYyAtbyBwbmd0ZXN0IHBuZ3Rlc3QubyAtbHBuZyAtbHogLWxtCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmdjbW14IGIvc2NyaXB0cy9tYWtlZmlsZS5nY21teAppbmRleCBmZjNhYzQyLi5kZWM3MWMwIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmdjbW14CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKQEAgLTE2LDcgKzE2LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRSA9IGxpYnBuZzEwCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjAuMjYKK1BOR01JTiA9IDEuMC4yN3JjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpAQCAtNjAsMTUgKzYwLDE1IEBACiAKICMgUmVtb3ZlIC1EUE5HX1RIUkVBRF9VTlNBRkVfT0sgaWYgeW91IG5lZWQgdGhyZWFkIHNhZmV0eQogIyMjIGZvciBnZW5lcmljIGdjYzoKLUNGTEFHUz0tRFBOR19USFJFQURfVU5TQUZFX09LIC1EUE5HX1VTRV9QTkdHQ0NSRCAtSSQoWkxJQklOQykgLVdhbGwgXAotCS1PMyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyBcCitDRkxBR1M9LURQTkdfVEhSRUFEX1VOU0FGRV9PSyAtSSQoWkxJQklOQykgLVdhbGwgLU8gXAorCSQoQUxJR04pIC1mdW5yb2xsLWxvb3BzIFwKIAktZm9taXQtZnJhbWUtcG9pbnRlciAgIyAkKFdBUk5NT1JFKSAtZyAtRFBOR19ERUJVRz01CiAjIyMgZm9yIGdjYyAyLjk1LjIgb24gNjg2OgotI0NGTEFHUz0tRFBOR19USFJFQURfVU5TQUZFX09LIC1EUE5HX1VTRV9QTkdHQ0NSRCAtSSQoWkxJQklOQykgLVdhbGwgLU8zIFwKKyNDRkxBR1M9LURQTkdfVEhSRUFEX1VOU0FGRV9PSyAtSSQoWkxJQklOQykgLVdhbGwgLU8gXAogIwktbWNwdT1pNjg2IC1tYWxpZ24tZG91YmxlIC1mZmFzdC1tYXRoIC1mc3RyaWN0LWFsaWFzaW5nIFwKICMJJChBTElHTikgLWZ1bnJvbGwtbG9vcHMgLWZ1bnJvbGwtYWxsLWxvb3BzIC1mb21pdC1mcmFtZS1wb2ludGVyIAogIyMjIGZvciBnY2MgMi43LjIuMyBvbiA0ODYgYW5kIHVwOgotI0NGTEFHUz0tRFBOR19USFJFQURfVU5TQUZFX09LIC1EUE5HX1VTRV9QTkdHQ0NSRCAtSSQoWkxJQklOQykgLVdhbGwgLU8zIFwKKyNDRkxBR1M9LURQTkdfVEhSRUFEX1VOU0FGRV9PSyAtSSQoWkxJQklOQykgLVdhbGwgLU8gXAogIwktbTQ4NiAtbWFsaWduLWRvdWJsZSAtZmZhc3QtbWF0aCBcCiAjCSQoQUxJR04pIC1mdW5yb2xsLWxvb3BzIC1mdW5yb2xsLWFsbC1sb29wcyAtZm9taXQtZnJhbWUtcG9pbnRlciAKIApAQCAtMTIwLDcgKzEyMCw3IEBACiAJKCBjYXQgc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW47IFwKIAllY2hvIHByZWZpeD1cIiQocHJlZml4KVwiOyBcCiAJZWNobyBJX29wdHM9XCItSSQoSU5DUEFUSCkvJChMSUJOQU1FKVwiOyBcCi0JZWNobyBjcHBmbGFncz1cIi1EUE5HX1RIUkVBRF9VTlNBRkVfT0sgLURQTkdfVVNFX1BOR0dDQ1JEXCI7IFwKKwllY2hvIGNwcGZsYWdzPVwiLURQTkdfVEhSRUFEX1VOU0FGRV9PSyBcIjsgXAogCWVjaG8gTF9vcHRzPVwiLUwkKExJQlBBVEgpXCI7IFwKIAllY2hvIFJfb3B0cz1cIi1XbCwtcnBhdGgsJChMSUJQQVRIKVwiOyBcCiAJZWNobyBsaWJzPVwiLWxwbmcxMCAtbHogLWxtXCI7IFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuaHA2NCBiL3NjcmlwdHMvbWFrZWZpbGUuaHA2NAppbmRleCBmNGQ3Y2QwLi4yMmNjNzRkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmhwNjQKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5ocDY0CkBAIC0xOCw3ICsxOCw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMAogUE5HTUFKID0gMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MgYi9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCmluZGV4IGUzNTdjYmYuLjE5YjI1NzEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYwpAQCAtMSw1ICsxLDUgQEAKICMgbWFrZWZpbGUgZm9yIGxpYnBuZyBvbiBIUC1VWCB1c2luZyBHQ0Mgd2l0aCB0aGUgSFAgQU5TSS9DIGxpbmtlci4KLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEdsZW5uIFJhbmRlcnMtUGVocnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAjIENvcHlyaWdodCAoQykgMjAwMSwgTGF1cmVudCBmYWlsbGllCiAjIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBHcmVnIFJvZWxvZnMKICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCkBAIC04LDcgKzgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CkBAIC01Myw3ICs1Myw3IEBACiAKICMgZm9yIHBnY2MgdmVyc2lvbiAyLjk1LjEsIC1PMyBpcyBidWdneTsgZG9uJ3QgdXNlIGl0LgogCi1DRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PMyAtZnVucm9sbC1sb29wcyBcCitDRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PMyAtZnVucm9sbC1sb29wcyAtRFBOR19OT19NTVhfQ09ERSBcCiAJJChBTElHTikgIyAkKFdBUk5NT1JFKSAtZyAtRFBOR19ERUJVRz01CiAjTERGTEFHUz0tTC4gLVdsLC1ycGF0aCwuIC1MJChaTElCTElCKSAtV2wsLXJwYXRoLCQoWkxJQkxJQikgLWxwbmcxMCAtbHogLWxtCiBMREZMQUdTPS1MLiAtTCQoWkxJQkxJQikgLWxwbmcxMCAtbHogLWxtCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmhwdXggYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKaW5kZXggZjZmZWU3ZS4uZTFhN2M5YiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaHB1eApAQCAtMTgsNyArMTgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CkBAIC00NSw3ICs0NSw3IEBACiBNQU5QQVRIPSQocHJlZml4KS9tYW4KIEJJTlBBVEg9JChleGVjX3ByZWZpeCkvYmluCiAKLUNGTEFHUz0tSSQoWkxJQklOQykgLU8gLUFlICtEQTEuMSArRFMyLjAKK0NGTEFHUz0tSSQoWkxJQklOQykgLU8gLUFlICtEQTEuMSArRFMyLjAgLURQTkdfTk9fTU1YX0NPREUKICMgQ2F1dGlvbjogYmUgc3VyZSB5b3UgaGF2ZSBidWlsdCB6bGliIHdpdGggdGhlIHNhbWUgQ0ZMQUdTLgogQ0NGTEFHUz0tSSQoWkxJQklOQykgLU8gLUFlICtEQTEuMSArRFMyLjAKIExERkxBR1M9LUwuIC1MJChaTElCTElCKSAtbHBuZyAtbHogLWxtCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmludGVsIGIvc2NyaXB0cy9tYWtlZmlsZS5pbnRlbAppbmRleCAxY2FiZTc3Li5hMTU1ZGRkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmludGVsCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaW50ZWwKQEAgLTgsMTQgKzgsNiBAQAogIyBUbyB1c2UsIGRvICJubWFrZSAvZiBzY3JpcHRzXG1ha2VmaWxlLmludGVsIgogCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlbCBDL0MrKyBDb21waWxlciA0LjAgYW5kIGxhdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBDYXV0aW9uOiB0aGUgYXNzZW1ibGVyIGNvZGUgd2FzIGludHJvZHVjZWQgYXQgbGlicG5nIHZlcnNpb24gMS4wLjQgYW5kIGhhcwotIyBub3QgeWV0IGJlZW4gdGhvcm91Z2hseSB0ZXN0ZWQuCi0KLSMgVXNlIGFzc2VtYmxlciBjb2RlCi1BU01DT0RFPS1EUE5HX1VTRV9QTkdWQ1JECi0KICMgV2hlcmUgdGhlIHpsaWIgbGlicmFyeSBhbmQgaW5jbHVkZSBmaWxlcyBhcmUgbG9jYXRlZAogWkxJQkxJQj0uLlx6bGliCiBaTElCSU5DPS4uXHpsaWIKQEAgLTM2LDcgKzI4LDcgQEAKIAogCiBDQz1pY2wgLWMKLUNGTEFHUz0tTzIgLUckKENQVSkkKENBTExJTkcpIC1RaXAgLVF1bnJvbGw0IC1JJChaTElCSU5DKSAkKEFTTUNPREUpIC1ub2xvZ28KK0NGTEFHUz0tTzIgLUckKENQVSkkKENBTExJTkcpIC1RaXAgLVF1bnJvbGw0IC1JJChaTElCSU5DKSAtbm9sb2dvCiBMRD1saW5rCiBMREZMQUdTPS9TVUJTWVNURU06Q09OU09MRSAvTk9MT0dPCiAKQEAgLTQ0LDggKzM2LDcgQEAKIAogT0JKUz1wbmckKE8pIHBuZ3NldCQoTykgcG5nZ2V0JChPKSBwbmdydXRpbCQoTykgcG5ndHJhbnMkKE8pIHBuZ3d1dGlsJChPKSBcCiBwbmdtZW0kKE8pIHBuZ3ByZWFkJChPKSBwbmdyZWFkJChPKSBwbmdlcnJvciQoTykgcG5nd3JpdGUkKE8pIFwKLXBuZ3J0cmFuJChPKSBwbmd3dHJhbiQoTykgcG5ncmlvJChPKSBwbmd3aW8kKE8pIHBuZ3ZjcmQkKE8pCi0KK3BuZ3J0cmFuJChPKSBwbmd3dHJhbiQoTykgcG5ncmlvJChPKSBwbmd3aW8kKE8pIHBuZ3ZjcmQkKE8pIHBuZ2djY3JkJChPKQogCiBhbGw6IHRlc3QKIApAQCAtNzAsNiArNjEsOSBAQAogcG5ncnV0aWwkKE8pOiBwbmcuaCBwbmdjb25mLmgKIAkkKENDKSAkKENGTEFHUykgJCouYyAkKEVSUkZJTEUpCiAKK3BuZ2djY3JkJChPKTogcG5nLmggcG5nY29uZi5oCisJJChDQykgJChDRkxBR1MpICQqLmMgJChFUlJGSUxFKQorCiBwbmd2Y3JkJChPKTogcG5nLmggcG5nY29uZi5oCiAJJChDQykgJChDRkxBR1MpICQqLmMgJChFUlJGSUxFKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmxpbnV4IGIvc2NyaXB0cy9tYWtlZmlsZS5saW51eAppbmRleCBiMTAwZWI0Li42ZDdmNWRhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUubGludXgKQEAgLTYsNyArNiw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMAogUE5HTUFKID0gMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogIyBmb3IgcGdjYyB2ZXJzaW9uIDIuOTUuMSwgLU8zIGlzIGJ1Z2d5OyBkb24ndCB1c2UgaXQuCiAKLUNGTEFHUz0tSSQoWkxJQklOQykgLVdhbGwgLU8zIC1mdW5yb2xsLWxvb3BzIFwKK0NGTEFHUz0tSSQoWkxJQklOQykgLVdhbGwgLU8zIC1mdW5yb2xsLWxvb3BzIC1EUE5HX05PX01NWF9DT0RFIFwKIAkkKEFMSUdOKSAjICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKIAogTERGTEFHUz0tTC4gLVdsLC1ycGF0aCwuIC1MJChaTElCTElCKSAtV2wsLXJwYXRoLCQoWkxJQkxJQikgLWxwbmcxMCAtbHogLWxtCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLm1pbmd3IGIvc2NyaXB0cy9tYWtlZmlsZS5taW5ndwppbmRleCAyMjQ5NjMzLi4yMGQxOTQxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLm1pbmd3CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUubWluZ3cKQEAgLTYsMTUgKzYsMTUgQEAKICMgQnVpbHQgZnJvbSBtYWtlZmlsZS5jeWd3aW4KICMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IFNvcmVuIEFuZGVyc29uLCBDaGFybGVzIFdpbHNvbiwKICMgICAgYW5kIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYmFzZWQgb24gbWFrZWZpbGUgZm9yIGxpbnV4LWVsZiB3L21teCBieToKLSMgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgR3JlZyBSb2Vsb2ZzCisjIENvcHlyaWdodCAoQykgMTk5OC0yMDAwLCAyMDA3IEdyZWcgUm9lbG9mcwogIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAKKwogIyBUaGlzIG1ha2VmaWxlIGludGVuZHMgdG8gc3VwcG9ydCBidWlsZGluZyBvdXRzaWRlIHRoZSBzcmMgZGlyZWN0b3J5CiAjIGlmIGRlc2lyZWQuIFdoZW4gaW52b2tpbmcgaXQsIHNwZWNpZnkgYW4gYXJndW1lbnQgdG8gU1JDRElSIG9uIHRoZQogIyBjb21tYW5kIGxpbmUgdGhhdCBwb2ludHMgdG8gdGhlIHRvcCBvZiB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdXIgc291cmNlCiAjIGlzIGxvY2F0ZWQuCi0KIGlmZGVmIFNSQ0RJUgogVlBBVEggPSAkKFNSQ0RJUikKIGVsc2UKQEAgLTI5LDIwICsyOSwyNCBAQAogIyBJZiB5b3UncmUgZ29pbmcgdG8gaW5zdGFsbCBpbnRvIGEgdGVtcG9yYXJ5IGxvY2F0aW9uCiAjIHZpYSBERVNURElSLCAkKERFU1RESVIpJChwcmVmaXgpIG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUKICMgeW91IGV4ZWN1dGUgbWFrZSBpbnN0YWxsLgotCiBERVNURElSPQogCi0jIFRvIGVuYWJsZSBhc3NlbWJsZXIgb3B0aW1pemF0aW9ucywgYWRkICctRFBOR19VU0VfUE5HR0NDUkQnIHRvCi0jICRDRkxBR1MsIGFuZCBpbmNsdWRlIHBuZ2djY3JkLm8gaW4gJE9CSlMsIGJlbG93LCBhbmQgaW4gdGhlIGRlcGVuZGVuY3kKLSMgbGlzdCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgbWFrZWZpbGUuCi0KKyMgSWYgeW91J3JlIHVzaW5nIGEgY3Jvc3MtY29tcGlsZXIsIGFkZCB0aGUgYXBwcm9wcmlhdGUgcHJlZml4IChlLmcuLAorIyAiaTM4Ni1taW5ndzMybXN2Yy0iKSB0byB0aGUgZm9sbG93aW5nIHRocmVlIGNvbW1hbmRzOgogQ0M9Z2NjCitBUj1hcgorUkFOTElCPXJhbmxpYgogCitNS0RJUl9QPS9iaW4vbWtkaXIgLXB2CisKKworIyBUbyBkaXNhYmxlIGFzc2VtYmxlciBvcHRpbWl6YXRpb25zLCBhZGQgJy1EUE5HX05PX01NWF9DT0RFJyB0bworIyAkQ0ZMQUdTLiAgVG8gZW5hYmxlIHRoZW0sIGFkZCBwbmdnY2NyZC5vIHRvIHRoZSBkZXBlbmRlbmNpZXMuCiAKICMgV2hlcmUgIm1ha2UgaW5zdGFsbCIgcHV0cyBsaWJwbmcqLmEsICpwbmcqLmRsbCwgcG5nLmgsIGFuZCBwbmdjb25mLmgKIGlmbmRlZiBwcmVmaXgKIHByZWZpeD0vdXNyCi0kKHdhcm5pbmcgWW91IGhhdmVuJ3Qgc3BlY2lmaWVkIGEgJ3ByZWZpeD0nIGxvY2F0aW9uLiBEZWZhdWx0aW5nIHRvICIvdXNyIikKKyQod2FybmluZyAiWW91IGhhdmVuJ3Qgc3BlY2lmaWVkIGEgJ3ByZWZpeD0nIGxvY2F0aW9uLiBEZWZhdWx0aW5nIHRvICcvdXNyJyIpCiBlbmRpZgogZXhlY19wcmVmaXg9JChwcmVmaXgpCiAKQEAgLTU4LDI1ICs2MiwyMyBAQAogCS1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd0cmFkaXRpb25hbCAtV2Nhc3QtYWxpZ24gXAogCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgIy1XY29udmVyc2lvbgogCi0jIyMgaWYgeW91IHVzZSB0aGUgYXNtLCBhZGQgcG5nZ2NjcmQubyB0byB0aGUgT0JKUyBsaXN0Ci0jIyMKICMjIyBpZiB5b3UgZG9uJ3QgbmVlZCB0aHJlYWQgc2FmZXR5LCBidXQgd2FudCB0aGUgYXNtIGFjY2VsCi0jQ0ZMQUdTPSAkKHN0cmlwICQoTUlOR1dfQ0NGTEFHUykgLURQTkdfVEhSRUFEX1VOU0FGRV9PSyAtRFBOR19VU0VfUE5HR0NDUkQgXAotIwkkKGFkZHByZWZpeCAtSSwkKFpMSUJJTkMpKSAtV2FsbCAtTzMgJChBTElHTikgLWZ1bnJvbGwtbG9vcHMgXAorI0NGTEFHUz0gJChzdHJpcCAkKE1JTkdXX0NDRkxBR1MpIC1EUE5HX1RIUkVBRF9VTlNBRkVfT0sgXAorIwkkKGFkZHByZWZpeCAtSSwkKFpMSUJJTkMpKSAtV2FsbCAtTyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyBcCiAjCS1mb21pdC1mcmFtZS1wb2ludGVyKSAgIyAkKFdBUk5NT1JFKSAtZyAtRFBOR19ERUJVRz01CiAjIyMgaWYgeW91IG5lZWQgdGhyZWFkIHNhZmV0eSBhbmQgd2FudCAobWluaW1hbCkgYXNtIGFjY2VsCi0jQ0ZMQUdTPSAkKHN0cmlwICQoTUlOR1dfQ0NGTEFHUykgLURQTkdfVVNFX1BOR0dDQ1JEICQoYWRkcHJlZml4IC1JLCQoWkxJQklOQykpIFwKLSMJLVdhbGwgLU8zICQoQUxJR04pIC1mdW5yb2xsLWxvb3BzIFwKKyNDRkxBR1M9ICQoc3RyaXAgJChNSU5HV19DQ0ZMQUdTKSAkKGFkZHByZWZpeCAtSSwkKFpMSUJJTkMpKSBcCisjCS1XYWxsIC1PICQoQUxJR04pIC1mdW5yb2xsLWxvb3BzIFwKICMJLWZvbWl0LWZyYW1lLXBvaW50ZXIpICAjICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKICMjIyBOb3JtYWwgKG5vbi1hc20pIGNvbXBpbGF0aW9uCiBDRkxBR1M9ICQoc3RyaXAgJChNSU5HV19DQ0ZMQUdTKSAkKGFkZHByZWZpeCAtSSwkKFpMSUJJTkMpKSBcCi0gICAgICAgIC1XYWxsIC1PMyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyBcCisgICAgICAgIC1XYWxsIC1PMyAkKEFMSUdOKSAtZnVucm9sbC1sb29wcyAtRFBOR19OT19NTVhfQ09ERSBcCiAJLWZvbWl0LWZyYW1lLXBvaW50ZXIpICMgJChXQVJOTU9SRSkgLWcgLURQTkdfREVCVUc9NQogCiBMSUJOQU1FID0gbGlicG5nMTAKIFBOR01BSiA9IDAKIE1JTkdETEwgPSAxMAotUE5HTUlOID0gMS4wLjI2CitQTkdNSU4gPSAxLjAuMjdyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogU0hBUkVETElCPWxpYnBuZyQoTUlOR0RMTCkuZGxsCkBAIC05MCwxMCArOTIsNiBAQAogTERTRkxBR1M9JChzdHJpcCAtc2hhcmVkIC1MLiAgJChNSU5HV19MREZMQUdTKSkKIExERVhUUkE9LVdsLC0tb3V0LWltcGxpYj0kKElNUExJQikgJChhZGRwcmVmaXggLUwsJChaTElCTElCKSkgLWx6CiAKLU1LRElSX1A9L2Jpbi9ta2RpciAtcHYKLVJBTkxJQj1yYW5saWIKLSNSQU5MSUI9ZWNobwotCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCiBMSUJQQVRIPSQoZXhlY19wcmVmaXgpL2xpYgogCkBAIC0xNTUsMjIgKzE1Myw4IEBACiBhbGwtc3RhdGljOiAkKFNUQVRMSUIpIHBuZ3Rlc3Qtc3RhdCQoRVhFKQogYWxsLXNoYXJlZDogJChTSEFSRURMSUIpIHBuZ3Rlc3QkKEVYRSkKIAotcG5nZ2NjcmQubzogcG5nZ2NjcmQuYyBwbmcuaCBwbmdjb25mLmgKLQlAZWNobyAiIgotCUBlY2hvICcgICAgWW91IGNhbiBpZ25vcmUgdGhlICJjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIicKLQlAZWNobyAnICAgIHdhcm5pbmcgYW5kICI8dmFyaWFibGU+IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5nczonCi0JQGVjaG8gIiIKLQkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKLQotcG5nZ2NjcmQucGljLm86CXBuZ2djY3JkLmMgcG5nLmggcG5nY29uZi5oCi0JQGVjaG8gIiIKLQlAZWNobyAnICAgIFlvdSBjYW4gaWdub3JlIHRoZSAiY29udHJvbCByZWFjaGVzIGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiInCi0JQGVjaG8gJyAgICB3YXJuaW5nIGFuZCAiPHZhcmlhYmxlPiBkZWZpbmVkIGJ1dCBub3QgdXNlZCIgd2FybmluZ3M6JwotCUBlY2hvICIiCi0JJChDQykgLWMgJChDRkxBR1MpIC1EUE5HX0JVSUxEX0RMTCAtbyAkQCAkPAotCiAkKFNUQVRMSUIpOiAkKE9CSlMpCi0JYXIgcmMgJEAgJChPQkpTKQorCSQoQVIpIHJjICRAICQoT0JKUykKIAkkKFJBTkxJQikgJEAKIAogJChTSEFSRURERUYpOiBzY3JpcHRzL3BuZ3czMi5kZWYKQEAgLTE4NiwxMiArMTcwLDYgQEAKIHBuZ3Rlc3Qtc3RhdCQoRVhFKTogcG5ndGVzdC5vICQoU1RBVExJQikKIAkkKENDKSAtc3RhdGljICQoQ0ZMQUdTKSAkPCAkKExERkxBR1MpIC1vICRACiAKLXBuZ3Rlc3QucGljLm86IHBuZ3Rlc3QuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAotCi1wbmd0ZXN0Lm86IHBuZ3Rlc3QuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAotCiB0ZXN0OiB0ZXN0LXN0YXRpYyB0ZXN0LXNoYXJlZAogCiB0ZXN0LXN0YXRpYzogcG5ndGVzdC1zdGF0JChFWEUpCkBAIC0yNzgsOCArMjU2LDggQEAKIAogY2xlYW46CiAJL2Jpbi9ybSAtZiAqLnBpYy5vICoubyAkKFNUQVRMSUIpICQoSU1QTElCKSAkKFNIQVJFRExJQikgXAotCXBuZ3Rlc3Qtc3RhdCQoRVhFKSBwbmd0ZXN0JChFWEUpIHBuZ291dC5wbmcgJChTSEFSRURERUYpIFwKLQlsaWJwbmctY29uZmlnIGxpYnBuZy5wYyBwbmd0ZXN0aSQoRVhFKQorCSAgIHBuZ3Rlc3Qtc3RhdCQoRVhFKSBwbmd0ZXN0JChFWEUpIHBuZ291dC5wbmcgJChTSEFSRURERUYpIFwKKwkgICBsaWJwbmctY29uZmlnIGxpYnBuZy5wYyBwbmd0ZXN0aSQoRVhFKQogCiBET0NTID0gQU5OT1VOQ0UgQ0hBTkdFUyBJTlNUQUxMIEtOT1dOQlVHIExJQ0VOU0UgUkVBRE1FIFRPRE8gWTJLSU5GTwogd3JpdGVsb2NrOgpAQCAtMzA0LDkgKzI4Miw5IEBACiBwbmd3dHJhbi5vIHBuZ3d0cmFuLnBpYy5vOglwbmcuaCBwbmdjb25mLmggcG5nd3RyYW4uYwogcG5nd3V0aWwubyBwbmd3dXRpbC5waWMubzoJcG5nLmggcG5nY29uZi5oIHBuZ3d1dGlsLmMKIHBuZ3ByZWFkLm8gcG5ncHJlYWQucGljLm86CXBuZy5oIHBuZ2NvbmYuaCBwbmdwcmVhZC5jCisjIHBuZ2djY3JkLm8gcG5nZ2NjcmQucGljLm86CXBuZy5oIHBuZ2NvbmYuaCBwbmdnY2NyZC5jCiAKLXBuZ3Rlc3QubzoJCQlwbmcuaCBwbmdjb25mLmggcG5ndGVzdC5jCi1wbmd0ZXN0LXN0YXQubzoJCQlwbmcuaCBwbmdjb25mLmggcG5ndGVzdC5jCitwbmd0ZXN0Lm8gcG5ndGVzdC5waWMubzoJcG5nLmggcG5nY29uZi5oIHBuZ3Rlc3QuYwogCiAKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5uZTEyYnNkIGIvc2NyaXB0cy9tYWtlZmlsZS5uZTEyYnNkCmluZGV4IGYxZWM3MTguLmI5Zjg3NTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubmUxMmJzZAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5lMTJic2QKQEAgLTE0LDE0ICsxNCwxNCBAQAogCiBMSUI9CXBuZzEyCiBTSExJQl9NQUpPUj0JMAotU0hMSUJfTUlOT1I9CTEuMC4yNgorU0hMSUJfTUlOT1I9CTEuMC4yN3JjMQogU1JDUz0JcG5nZ2NjcmQuYyBwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCiAJCXBuZ3JlYWQuYyBwbmdyaW8uYyBwbmd3aW8uYyBwbmd3cml0ZS5jIHBuZ3J0cmFuLmMgXAogCQlwbmd3dHJhbi5jIHBuZ21lbS5jIHBuZ2Vycm9yLmMgcG5ncHJlYWQuYwogSU5DUz0JcG5nLmggcG5nY29uZi5oCiBNQU49CWxpYnBuZy4zIGxpYnBuZ3BmLjMgcG5nLjUKIAotQ1BQRkxBR1MrPS1JJHsuQ1VSRElSfSAtRFBOR19VU0VfUE5HR0NDUkQKK0NQUEZMQUdTKz0tSSR7LkNVUkRJUn0KIAogIyBzb21ldGhpbmcgbGlrZSB0aGlzIGZvciBtbXggYXNzZW1ibGVyLCBidXQgaXQgY29yZSBkdW1wcyBmb3IgbWUgYXQgdGhlIG1vbWVudAogIyAuaWYgJHtNQUNISU5FX0FSQ0h9ID09ICJpMzg2IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5uZXRic2QgYi9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZAppbmRleCAxYzAwMzAwLi4wNjI3MjZhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZApAQCAtMTQsMTQgKzE0LDE0IEBACiAKIExJQj0JcG5nCiBTSExJQl9NQUpPUj0JMwotU0hMSUJfTUlOT1I9CTEuMC4yNgorU0hMSUJfTUlOT1I9CTEuMC4yN3JjMQogU1JDUz0JcG5nZ2NjcmQuYyBwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCiAJCXBuZ3JlYWQuYyBwbmdyaW8uYyBwbmd3aW8uYyBwbmd3cml0ZS5jIHBuZ3J0cmFuLmMgXAogCQlwbmd3dHJhbi5jIHBuZ21lbS5jIHBuZ2Vycm9yLmMgcG5ncHJlYWQuYwogSU5DUz0JcG5nLmggcG5nY29uZi5oCiBNQU49CWxpYnBuZy4zIGxpYnBuZ3BmLjMgcG5nLjUKIAotQ1BQRkxBR1MrPS1JJHsuQ1VSRElSfSAtRFBOR19VU0VfUE5HR0NDUkQKK0NQUEZMQUdTKz0tSSR7LkNVUkRJUn0KIAogIyBzb21ldGhpbmcgbGlrZSB0aGlzIGZvciBtbXggYXNzZW1ibGVyLCBidXQgaXQgY29yZSBkdW1wcyBmb3IgbWUgYXQgdGhlIG1vbWVudAogIyAuaWYgJHtNQUNISU5FX0FSQ0h9ID09ICJpMzg2IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ub21teCBiL3NjcmlwdHMvbWFrZWZpbGUubm9tbXgKaW5kZXggYWM2MTA1Mi4uMjQ3MGI2OSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ub21teAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5vbW14CkBAIC03LDcgKzcsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CkBAIC00OCw4ICs0OCw3IEBACiAKICMgZm9yIHBnY2MgdmVyc2lvbiAyLjk1LjEsIC1PMyBpcyBidWdneTsgZG9uJ3QgdXNlIGl0LgogCi1DRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PMyAtZnVucm9sbC1sb29wcyBcCi0JLURQTkdfTk9fTU1YX0NPREUgXAorQ0ZMQUdTPS1JJChaTElCSU5DKSAtV2FsbCAtTzMgLWZ1bnJvbGwtbG9vcHMgLURQTkdfTk9fTU1YX0NPREUgXAogCSQoQUxJR04pICMgJChXQVJOTU9SRSkgLWcgLURQTkdfREVCVUc9NQogCiBMREZMQUdTPS1MLiAtV2wsLXJwYXRoLC4gLUwkKFpMSUJMSUIpIC1XbCwtcnBhdGgsJChaTElCTElCKSAtbHBuZzEwIC1seiAtbG0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUub3BlbmJzZCBiL3NjcmlwdHMvbWFrZWZpbGUub3BlbmJzZAppbmRleCBhNzllMDU2Li5kNWRiNjc0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLm9wZW5ic2QKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5vcGVuYnNkCkBAIC04LDcgKzgsNyBAQAogTUFORElSPSAke1BSRUZJWH0vbWFuL2NhdAogCiBTSExJQl9NQUpPUj0JMAotU0hMSUJfTUlOT1I9CTEuMC4yNgorU0hMSUJfTUlOT1I9CTEuMC4yN3JjMQogCiBMSUI9CXBuZwogU1JDUz0JcG5nLmMgcG5nZXJyb3IuYyBwbmdnY2NyZC5jIHBuZ2dldC5jIHBuZ21lbS5jIHBuZ3ByZWFkLmMgXApAQCAtMTgsNyArMTgsNyBAQAogSERSUz0JcG5nLmggcG5nY29uZi5oCiAKIENGTEFHUys9IC1XYWxsCi1DUFBGTEFHUys9IC1JJHsuQ1VSRElSfSAtRFBOR19OT19NTVhfQ09ERSAtRFBOR19VU0VfUE5HR0NDUkQKK0NQUEZMQUdTKz0gLUkkey5DVVJESVJ9IC1EUE5HX05PX01NWF9DT0RFIAogCiBOT1BST0ZJTEU9IFllcwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNjbyBiL3NjcmlwdHMvbWFrZWZpbGUuc2NvCmluZGV4IDRkZTVkMGUuLjA1ODYzMjAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2NvCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc2NvCkBAIC05LDcgKzksNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CkBAIC0zOCw3ICszOCw3IEBACiBaTElCTElCPS4uL3psaWIKIFpMSUJJTkM9Li4vemxpYgogCi1DRkxBR1M9IC1keSAtYmVsZiAtSSQoWkxJQklOQykgLU8zCitDRkxBR1M9IC1keSAtYmVsZiAtSSQoWkxJQklOQykgLU8zIC1EUE5HX05PX01NWF9DT0RFCiBMREZMQUdTPS1MLiAtTCQoWkxJQkxJQikgLWxwbmcxMCAtbHogLWxtCiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUvbGlicG5nCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYwppbmRleCA2OTI1OTBkLi40MTMzYTVlIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKQEAgLTYsNyArNiw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUU9bGlicG5nMTAKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CkBAIC00NCw3ICs0NCw3IEBACiBBQkk9CiAKIFdBUk5NT1JFPSAjIC1nIC1EUE5HX0RFQlVHPTUKLUNGTEFHUz0kKEFCSSkgLUkkKFpMSUJJTkMpIC1PMiAkKFdBUk5NT1JFKSAtZlBJQyAtbWFiaT1uMzIKK0NGTEFHUz0kKEFCSSkgLUkkKFpMSUJJTkMpIC1PICQoV0FSTk1PUkUpIC1mUElDIC1tYWJpPW4zMiAtRFBOR19OT19NTVhfQ09ERQogTERGTEFHUz0kKEFCSSkgLUwuIC1MJChaTElCTElCKSAtbHBuZyAtbHogLWxtCiBMRFNIQVJFRD1jYyAkKEFCSSkgLXNoYXJlZCAtc29uYW1lICQoTElCU09NQUopIFwKICAgLXNldF92ZXJzaW9uIHNnaSQoUE5HTUFKKS4wCkBAIC03Myw3ICs3Myw3IEBACiBETD0kKERFU1RESVIpJChMSUJQQVRIKQogRE09JChERVNURElSKSQoTUFOUEFUSCkKIAotT0JKUyA9IHBuZ2djY3JkLm8gcG5nLm8gcG5nc2V0Lm8gcG5nZ2V0Lm8gcG5ncnV0aWwubyBwbmd0cmFucy5vIHBuZ3d1dGlsLm8gXAorT0JKUyA9ICBwbmcubyBwbmdzZXQubyBwbmdnZXQubyBwbmdydXRpbC5vIHBuZ3RyYW5zLm8gcG5nd3V0aWwubyBcCiAJcG5ncmVhZC5vIHBuZ3Jpby5vIHBuZ3dpby5vIHBuZ3dyaXRlLm8gcG5ncnRyYW4ubyBcCiAJcG5nd3RyYW4ubyBwbmdtZW0ubyBwbmdlcnJvci5vIHBuZ3ByZWFkLm8KIApAQCAtOTMsNiArOTMsNyBAQAogCWVjaG8gcHJlZml4PVwiJChwcmVmaXgpXCI7IFwKIAllY2hvIElfb3B0cz1cIi1JJChJTkNQQVRIKS8kKExJQk5BTUUpXCI7IFwKIAllY2hvIGNjb3B0cz1cIiQoQUJJKVwiOyBcCisJZWNobyBjcHBmbGFncz1cIi1EUE5HX05PX01NWF9DT0RFXCI7IFwKIAllY2hvIGxkb3B0cz1cIiQoQUJJKVwiOyBcCiAJZWNobyBMX29wdHM9XCItTCQoTElCUEFUSClcIjsgXAogCWVjaG8gbGliZGlyPVwiJChMSUJQQVRIKVwiOyBcCkBAIC0yMzQsNSArMjM1LDQgQEAKIHBuZ3d0cmFuLm86IHBuZy5oIHBuZ2NvbmYuaAogcG5nd3V0aWwubzogcG5nLmggcG5nY29uZi5oCiBwbmdwcmVhZC5vOiBwbmcuaCBwbmdjb25mLmgKLXBuZ2djY3JkLm86IHBuZy5oIHBuZ2NvbmYuaAogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNnaSBiL3NjcmlwdHMvbWFrZWZpbGUuc2dpCmluZGV4IGVjMTlmMGQuLmI4ZDVlMjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dpCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc2dpCkBAIC02LDcgKzYsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FPWxpYnBuZzEwCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjAuMjYKK1BOR01JTiA9IDEuMC4yN3JjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpAQCAtNDUsOSArNDUsOCBAQAogCiBXQVJOTU9SRT0tZnVsbHdhcm4KICMgTm90ZTogLUtQSUMgaXMgdGhlIGRlZmF1bHQgYW55aG93Ci0jQ0ZMQUdTPSAkKEFCSSkgLUkkKFpMSUJJTkMpIC1PICQoV0FSTk1PUkUpIC1LUElDIC1EUE5HX1VTRV9QTkdHQ0NSRCAjIC1nIC1EUE5HX0RFQlVHPTUKLUNGTEFHUz0kKEFCSSkgLUkkKFpMSUJJTkMpIC1PICQoV0FSTk1PUkUpIC1EUE5HX1VTRV9QTkdHQ0NSRCBcCi0gIC1EUE5HX05PX01NWF9DT0RFCisjQ0ZMQUdTPSAkKEFCSSkgLUkkKFpMSUJJTkMpIC1PICQoV0FSTk1PUkUpIC1LUElDIC1EUE5HX05PX01NWF9DT0RFICMgLWcgLURQTkdfREVCVUc9NQorQ0ZMQUdTPSQoQUJJKSAtSSQoWkxJQklOQykgLU8gJChXQVJOTU9SRSkgLURQTkdfTk9fTU1YX0NPREUKIExERkxBR1NfQT0kKEFCSSkgLUwuIC1MJChaTElCTElCKSAtbHBuZzEwIC1seiAtbG0KIExERkxBR1M9JChBQkkpIC1MLiAtTCQoWkxJQkxJQikgLWxwbmcgLWx6IC1sbQogTERTSEFSRUQ9Y2MgJChBQkkpIC1zaGFyZWQgLXNvbmFtZSAkKExJQlNPTUFKKSBcCkBAIC03Nyw3ICs3Niw3IEBACiBETD0kKERFU1RESVIpJChMSUJQQVRIKQogRE09JChERVNURElSKSQoTUFOUEFUSCkKIAotT0JKUyA9IHBuZ2djY3JkLm8gcG5nLm8gcG5nc2V0Lm8gcG5nZ2V0Lm8gcG5ncnV0aWwubyBwbmd0cmFucy5vIHBuZ3d1dGlsLm8gXAorT0JKUyA9ICBwbmcubyBwbmdzZXQubyBwbmdnZXQubyBwbmdydXRpbC5vIHBuZ3RyYW5zLm8gcG5nd3V0aWwubyBcCiAJcG5ncmVhZC5vIHBuZ3Jpby5vIHBuZ3dpby5vIHBuZ3dyaXRlLm8gcG5ncnRyYW4ubyBcCiAJcG5nd3RyYW4ubyBwbmdtZW0ubyBwbmdlcnJvci5vIHBuZ3ByZWFkLm8KIApAQCAtOTYsNyArOTUsNyBAQAogCSggY2F0IHNjcmlwdHMvbGlicG5nLWNvbmZpZy1oZWFkLmluOyBcCiAJZWNobyBwcmVmaXg9XCIkKHByZWZpeClcIjsgXAogCWVjaG8gSV9vcHRzPVwiLUkkKElOQ1BBVEgpLyQoTElCTkFNRSlcIjsgXAotCWVjaG8gY3BwZmxhZ3M9XCItRFBOR19VU0VfUE5HR0NDUkQgLURQTkdfTk9fTU1YX0NPREVcIjsgXAorCWVjaG8gY3BwZmxhZ3M9XCItRFBOR19OT19NTVhfQ09ERVwiOyBcCiAJZWNobyBjY29wdHM9XCIkKEFCSSlcIjsgXAogCWVjaG8gbGRvcHRzPVwiJChBQkkpXCI7IFwKIAllY2hvIExfb3B0cz1cIi1MJChMSUJQQVRIKVwiOyBcCkBAIC0yMzksNSArMjM4LDQgQEAKIHBuZ3d0cmFuLm86IHBuZy5oIHBuZ2NvbmYuaAogcG5nd3V0aWwubzogcG5nLmggcG5nY29uZi5oCiBwbmdwcmVhZC5vOiBwbmcuaCBwbmdjb25mLmgKLXBuZ2djY3JkLm86IHBuZy5oIHBuZ2NvbmYuaAogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNvOSBiL3NjcmlwdHMvbWFrZWZpbGUuc285CmluZGV4IDI4NGE1ZTIuLjFiN2NiOWMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc285CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc285CkBAIC04LDcgKzgsNyBAQAogCiAjIExpYnJhcnkgbmFtZToKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMC4yNgorUE5HTUlOID0gMS4wLjI3cmMxCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiBMSUJOQU1FID0gbGlicG5nMTAKIApAQCAtNDcsOCArNDcsOCBAQAogI1dBUk5NT1JFPS1Xd3JpdGUtc3RyaW5ncyAtV3BvaW50ZXItYXJpdGggLVdzaGFkb3cgXAogCS1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd0cmFkaXRpb25hbCAtV2Nhc3QtYWxpZ24gXAogCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgIy1XY29udmVyc2lvbgotI0NGTEFHUz0tSSQoWkxJQklOQykgLVdhbGwgLU8zICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKLUNGTEFHUz0tSSQoWkxJQklOQykgLU8zCisjQ0ZMQUdTPS1JJChaTElCSU5DKSAtV2FsbCAtTzMgJChXQVJOTU9SRSkgLWcgLURQTkdfREVCVUc9NSAtRFBOR19OT19NTVhfQ09ERQorQ0ZMQUdTPS1JJChaTElCSU5DKSAtTzMgLURQTkdfTk9fTU1YX0NPREUKIExERkxBR1M9LUwuIC1SLiAtTCQoWkxJQkxJQikgLVIkKFpMSUJMSUIpIC1scG5nMTAgLWx6IC1sbQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMgYi9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKaW5kZXggZGJiYTJkMS4uZDE1MWM4YiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcwpAQCAtOCw3ICs4LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRSA9IGxpYnBuZzEwCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjAuMjYKK1BOR01JTiA9IDEuMC4yN3JjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpAQCAtNDQsNiArNDQsNyBAQAogCS1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd0cmFkaXRpb25hbCAtV2Nhc3QtYWxpZ24gXAogCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgIy1XY29udmVyc2lvbgogQ0ZMQUdTPS1JJChaTElCSU5DKSAtV2FsbCAtTyBcCisJLURQTkdfTk9fTU1YX0NPREU7IFwKIAkjICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKIExERkxBR1M9LUwuIC1SLiAtTCQoWkxJQkxJQikgLVIkKFpMSUJMSUIpIC1scG5nMTAgLWx6IC1sbQogCkBAIC05MSw3ICs5Miw3IEBACiAJKCBjYXQgc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW47IFwKIAllY2hvIHByZWZpeD1cIiQocHJlZml4KVwiOyBcCiAJZWNobyBJX29wdHM9XCItSSQoSU5DUEFUSCkvJChMSUJOQU1FKVwiOyBcCi0JZWNobyBjcHBmbGFncz1cIi1EUE5HX1VTRV9QTkdHQ0NSRCAtRFBOR19OT19NTVhfQ09ERVwiOyBcCisJZWNobyBjcHBmbGFncz1cIi1EUE5HX05PX01NWF9DT0RFXCI7IFwKIAllY2hvIExfb3B0cz1cIi1MJChMSUJQQVRIKVwiOyBcCiAJZWNobyBSX29wdHM9XCItUiQoTElCUEFUSClcIjsgXAogCWVjaG8gbGlicz1cIi1scG5nMTAgLWx6IC1sbVwiOyBcCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMteDg2IGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzLXg4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzcxYWIyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzLXg4NgpAQCAtMCwwICsxLDI0NSBAQAorIyBtYWtlZmlsZSBmb3IgbGlicG5nIG9uIFNvbGFyaXMgMi54IHdpdGggZ2NjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyMgQ29udHJpYnV0ZWQgYnkgV2lsbGlhbSBMLiBTZWJvaywgYmFzZWQgb24gbWFrZWZpbGUubGludXgKKyMgQ29weXJpZ2h0IChDKSAxOTk4IEdyZWcgUm9lbG9mcworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKKyMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCisKKyMgTGlicmFyeSBuYW1lOgorTElCTkFNRSA9IGxpYnBuZzEwCitQTkdNQUogPSAwCitQTkdNSU4gPSAxLjAuMjdyYzEKK1BOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKKworIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKK0xJQlNPPSQoTElCTkFNRSkuc28KK0xJQlNPTUFKPSQoTElCTkFNRSkuc28uJChQTkdNQUopCitMSUJTT1ZFUj0kKExJQk5BTUUpLnNvLiQoUE5HVkVSKQorT0xEU089bGlicG5nLnNvCitPTERTT01BSj1saWJwbmcuc28uMgorT0xEU09WRVI9bGlicG5nLnNvLjIuJChQTkdNSU4pCisKKyMgVXRpbGl0aWVzOgorQVJfUkM9YXIgcmMKK0NDPWdjYworTUtESVJfUD1ta2RpciAtcAorTE5fU0Y9bG4gLWYgLXMKK1JBTkxJQj1lY2hvCitSTV9GPS9iaW4vcm0gLWYKKworIyBXaGVyZSBtYWtlIGluc3RhbGwgcHV0cyBsaWJwbmcuYSwgbGlicG5nMTAuc28qLCBhbmQgcG5nLmgKK3ByZWZpeD0vdXNyL2xvY2FsCitleGVjX3ByZWZpeD0kKHByZWZpeCkKKworIyBXaGVyZSB0aGUgemxpYiBsaWJyYXJ5IGFuZCBpbmNsdWRlIGZpbGVzIGFyZSBsb2NhdGVkCisjIENoYW5naW5nIHRoZXNlIHRvIC4uL3psaWIgcG9zZXMgYSBzZWN1cml0eSByaXNrLiAgSWYgeW91IHdhbnQKKyMgdG8gaGF2ZSB6bGliIGluIGFuIGFkamFjZW50IGRpcmVjdG9yeSwgc3BlY2lmeSB0aGUgZnVsbCBwYXRoIGluc3RlYWQgb2YgIi4uIi4KKyNaTElCTElCPS4uL3psaWIKKyNaTElCSU5DPS4uL3psaWIKKworWkxJQkxJQj0vdXNyL2xvY2FsL2xpYgorWkxJQklOQz0vdXNyL2xvY2FsL2luY2x1ZGUKKworV0FSTk1PUkU9LVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV3NoYWRvdyBcCisJLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV3RyYWRpdGlvbmFsIC1XY2FzdC1hbGlnbiBcCisJLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAjLVdjb252ZXJzaW9uCitDRkxBR1M9LUkkKFpMSUJJTkMpIC1XYWxsIC1PIFwKKwkjICQoV0FSTk1PUkUpIC1nIC1EUE5HX0RFQlVHPTUKK0xERkxBR1M9LUwuIC1SLiAtTCQoWkxJQkxJQikgLVIkKFpMSUJMSUIpIC1scG5nMTAgLWx6IC1sbQorCitJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCitMSUJQQVRIPSQoZXhlY19wcmVmaXgpL2xpYgorTUFOUEFUSD0kKHByZWZpeCkvbWFuCitCSU5QQVRIPSQoZXhlY19wcmVmaXgpL2JpbgorCisjIG92ZXJyaWRlIERFU1RESVI9IG9uIHRoZSBtYWtlIGluc3RhbGwgY29tbWFuZCBsaW5lIHRvIGVhc2lseSBzdXBwb3J0CisjIGluc3RhbGxpbmcgaW50byBhIHRlbXBvcmFyeSBsb2NhdGlvbi4gIEV4YW1wbGU6CisjCisjICAgIG1ha2UgaW5zdGFsbCBERVNURElSPS90bXAvYnVpbGQvbGlicG5nCisjCisjIElmIHlvdSdyZSBnb2luZyB0byBpbnN0YWxsIGludG8gYSB0ZW1wb3JhcnkgbG9jYXRpb24KKyMgdmlhIERFU1RESVIsICQoREVTVERJUikkKHByZWZpeCkgbXVzdCBhbHJlYWR5IGV4aXN0IGJlZm9yZQorIyB5b3UgZXhlY3V0ZSBtYWtlIGluc3RhbGwuCitERVNURElSPQorCitEQj0kKERFU1RESVIpJChCSU5QQVRIKQorREk9JChERVNURElSKSQoSU5DUEFUSCkKK0RMPSQoREVTVERJUikkKExJQlBBVEgpCitETT0kKERFU1RESVIpJChNQU5QQVRIKQorCitPQkpTID0gcG5nLm8gcG5nc2V0Lm8gcG5nZ2V0Lm8gcG5ncnV0aWwubyBwbmd0cmFucy5vIHBuZ3d1dGlsLm8gXAorCXBuZ3JlYWQubyBwbmdyaW8ubyBwbmd3aW8ubyBwbmd3cml0ZS5vIHBuZ3J0cmFuLm8gXAorCXBuZ3d0cmFuLm8gcG5nbWVtLm8gcG5nZXJyb3IubyBwbmdwcmVhZC5vIHBuZ2djY3JkLm8KKworT0JKU0RMTCA9ICQoT0JKUzoubz0ucGljLm8pCisKKy5TVUZGSVhFUzogICAgICAuYyAubyAucGljLm8KKworLmMucGljLm86CisJJChDQykgLWMgJChDRkxBR1MpIC1mUElDIC1vICRAICQqLmMKKworYWxsOiBsaWJwbmcuYSAkKExJQlNPKSBwbmd0ZXN0IGxpYnBuZy5wYyBsaWJwbmctY29uZmlnCisKK2xpYnBuZy5hOiAkKE9CSlMpCisJJChBUl9SQykgJEAgJChPQkpTKQorCSQoUkFOTElCKSAkQAorCitsaWJwbmcucGM6CisJY2F0IHNjcmlwdHMvbGlicG5nLnBjLmluIHwgc2VkIC1lIHNcIUBQUkVGSVhAISQocHJlZml4KSEgPiBsaWJwbmcucGMKKworbGlicG5nLWNvbmZpZzoKKwkoIGNhdCBzY3JpcHRzL2xpYnBuZy1jb25maWctaGVhZC5pbjsgXAorCWVjaG8gcHJlZml4PVwiJChwcmVmaXgpXCI7IFwKKwllY2hvIElfb3B0cz1cIi1JJChJTkNQQVRIKS8kKExJQk5BTUUpXCI7IFwKKwllY2hvIGNwcGZsYWdzPVwiIjsgXAorCWVjaG8gTF9vcHRzPVwiLUwkKExJQlBBVEgpXCI7IFwKKwllY2hvIFJfb3B0cz1cIi1SJChMSUJQQVRIKVwiOyBcCisJZWNobyBsaWJzPVwiLWxwbmcxMCAtbHogLWxtXCI7IFwKKwljYXQgc2NyaXB0cy9saWJwbmctY29uZmlnLWJvZHkuaW4gKSA+IGxpYnBuZy1jb25maWcKKwljaG1vZCAreCBsaWJwbmctY29uZmlnCisKKyQoTElCU08pOiAkKExJQlNPTUFKKQorCSQoTE5fU0YpICQoTElCU09NQUopICQoTElCU08pCisKKyQoTElCU09NQUopOiAkKExJQlNPVkVSKQorCSQoTE5fU0YpICQoTElCU09WRVIpICQoTElCU09NQUopCisKKyQoTElCU09WRVIpOiAkKE9CSlNETEwpCisJQGNhc2UgImB0eXBlIGxkYCIgaW4gKnVjYiopIFwKKwllY2hvOyBcCisJZWNobyAnIyMgV0FSTklORzonOyBcCisJZWNobyAnIyMgVGhlIGNvbW1hbmRzICJDQyIgYW5kICJMRCIgbXVzdCBOT1QgcmVmZXIgdG8gL3Vzci91Y2IvY2MnOyBcCisJZWNobyAnIyMgYW5kIC91c3IvdWNiL2xkLiAgSWYgdGhleSBkbywgeW91IG5lZWQgdG8gYWRqdXN0IHlvdXIgUEFUSCc7IFwKKwllY2hvICcjIyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwdXQgL3Vzci9jY3MvYmluIGFoZWFkIG9mIC91c3IvdWNiLic7IFwKKwllY2hvICcjIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTERfTElCUkFSWV9QQVRIIHNob3VsZCBub3QgYmUgc2V0JzsgXAorCWVjaG8gJyMjIGF0IGFsbC4gIElmIGl0IGlzLCB0aGluZ3MgYXJlIGxpa2VseSB0byBicmVhayBiZWNhdXNlIG9mJzsgXAorCWVjaG8gJyMjIHRoZSBsaWJ1Y2IgZGVwZW5kZW5jeSB0aGF0IGlzIGNyZWF0ZWQuJzsgXAorCWVjaG87IFwKKwk7OyBcCisJZXNhYworCSQoTEQpIC1HIC1oICQoTElCU09NQUopIFwKKwkgLW8gJChMSUJTT1ZFUikgJChPQkpTRExMKQorCiskKE9MRFNPVkVSKTogJChPQkpTKQorCSQoTEQpIC1HIC1oICQoT0xEU09NQUopIFwKKwkgLW8gJChPTERTT1ZFUikgJChPQkpTRExMKQorCitwbmd0ZXN0OiBwbmd0ZXN0Lm8gJChMSUJTTykKKwkkKENDKSAtbyBwbmd0ZXN0ICQoQ0ZMQUdTKSBwbmd0ZXN0Lm8gJChMREZMQUdTKQorCit0ZXN0OiBwbmd0ZXN0CisJLi9wbmd0ZXN0CisKK2luc3RhbGwtaGVhZGVyczogcG5nLmggcG5nY29uZi5oCisJLUBpZiBbICEgLWQgJChESSkgXTsgdGhlbiAkKE1LRElSX1ApICQoREkpOyBmaQorCS1AaWYgWyAhIC1kICQoREkpLyQoTElCTkFNRSkgXTsgdGhlbiAkKE1LRElSX1ApICQoREkpLyQoTElCTkFNRSk7IGZpCisJY3AgcG5nLmggcG5nY29uZi5oICQoREkpLyQoTElCTkFNRSkKKwljaG1vZCA2NDQgJChESSkvJChMSUJOQU1FKS9wbmcuaCAkKERJKS8kKExJQk5BTUUpL3BuZ2NvbmYuaAorCS1AJChSTV9GKSAkKERJKS9wbmcuaCAkKERJKS9wbmdjb25mLmgKKwktQCQoUk1fRikgJChESSkvbGlicG5nCisJKGNkICQoREkpOyAkKExOX1NGKSAkKExJQk5BTUUpIGxpYnBuZzsgJChMTl9TRikgJChMSUJOQU1FKS8qIC4pCisKK2luc3RhbGwtc3RhdGljOiBpbnN0YWxsLWhlYWRlcnMgbGlicG5nLmEKKwktQGlmIFsgISAtZCAkKERMKSBdOyB0aGVuICQoTUtESVJfUCkgJChETCk7IGZpCisJY3AgbGlicG5nLmEgJChETCkvJChMSUJOQU1FKS5hCisJY2htb2QgNjQ0ICQoREwpLyQoTElCTkFNRSkuYQorCS1AJChSTV9GKSAkKERMKS9saWJwbmcuYQorCShjZCAkKERMKTsgJChMTl9TRikgJChMSUJOQU1FKS5hIGxpYnBuZy5hKQorCitpbnN0YWxsLXNoYXJlZDogaW5zdGFsbC1oZWFkZXJzICQoTElCU09WRVIpIGxpYnBuZy5wYyBcCisJJChPTERTT1ZFUikKKwktQGlmIFsgISAtZCAkKERMKSBdOyB0aGVuICQoTUtESVJfUCkgJChETCk7IGZpCisJLUAkKFJNX0YpICQoREwpLyQoTElCU09WRVIpKiAkKERMKS8kKExJQlNPKQorCS1AJChSTV9GKSAkKERMKS8kKExJQlNPTUFKKQorCS1AJChSTV9GKSAkKERMKS8kKE9MRFNPKQorCS1AJChSTV9GKSAkKERMKS8kKE9MRFNPTUFKKQorCS1AJChSTV9GKSAkKERMKS8kKE9MRFNPVkVSKSoKKwljcCAkKExJQlNPVkVSKSAkKERMKQorCWNwICQoT0xEU09WRVIpICQoREwpCisJY2htb2QgNzU1ICQoREwpLyQoTElCU09WRVIpCisJY2htb2QgNzU1ICQoREwpLyQoT0xEU09WRVIpCisJKGNkICQoREwpOyBcCisJJChMTl9TRikgJChPTERTT1ZFUikgJChPTERTT01BSik7IFwKKwkkKExOX1NGKSAkKE9MRFNPTUFKKSAkKE9MRFNPKTsgXAorCSQoTE5fU0YpICQoTElCU09WRVIpICQoTElCU08pOyBcCisJJChMTl9TRikgJChMSUJTT1ZFUikgJChMSUJTT01BSikpCisJLUBpZiBbICEgLWQgJChETCkvcGtnY29uZmlnIF07IHRoZW4gJChNS0RJUl9QKSAkKERMKS9wa2djb25maWc7IGZpCisJLUAkKFJNX0YpICQoREwpL3BrZ2NvbmZpZy8kKExJQk5BTUUpLnBjCisJLUAkKFJNX0YpICQoREwpL3BrZ2NvbmZpZy9saWJwbmcucGMKKwljcCBsaWJwbmcucGMgJChETCkvcGtnY29uZmlnLyQoTElCTkFNRSkucGMKKwljaG1vZCA2NDQgJChETCkvcGtnY29uZmlnLyQoTElCTkFNRSkucGMKKwkoY2QgJChETCkvcGtnY29uZmlnOyAkKExOX1NGKSAkKExJQk5BTUUpLnBjIGxpYnBuZy5wYykKKworaW5zdGFsbC1tYW46IGxpYnBuZy4zIGxpYnBuZ3BmLjMgcG5nLjUKKwktQGlmIFsgISAtZCAkKERNKSBdOyB0aGVuICQoTUtESVJfUCkgJChETSk7IGZpCisJLUBpZiBbICEgLWQgJChETSkvbWFuMyBdOyB0aGVuICQoTUtESVJfUCkgJChETSkvbWFuMzsgZmkKKwktQCQoUk1fRikgJChETSkvbWFuMy9saWJwbmcuMworCS1AJChSTV9GKSAkKERNKS9tYW4zL2xpYnBuZ3BmLjMKKwljcCBsaWJwbmcuMyAkKERNKS9tYW4zCisJY3AgbGlicG5ncGYuMyAkKERNKS9tYW4zCisJLUBpZiBbICEgLWQgJChETSkvbWFuNSBdOyB0aGVuICQoTUtESVJfUCkgJChETSkvbWFuNTsgZmkKKwktQCQoUk1fRikgJChETSkvbWFuNS9wbmcuNQorCWNwIHBuZy41ICQoRE0pL21hbjUKKworaW5zdGFsbC1jb25maWc6IGxpYnBuZy1jb25maWcKKwktQGlmIFsgISAtZCAkKERCKSBdOyB0aGVuICQoTUtESVJfUCkgJChEQik7IGZpCisJLUAkKFJNX0YpICQoREIpL2xpYnBuZy1jb25maWcKKwktQCQoUk1fRikgJChEQikvJChMSUJOQU1FKS1jb25maWcKKwljcCBsaWJwbmctY29uZmlnICQoREIpLyQoTElCTkFNRSktY29uZmlnCisJY2htb2QgNzU1ICQoREIpLyQoTElCTkFNRSktY29uZmlnCisJKGNkICQoREIpOyAkKExOX1NGKSAkKExJQk5BTUUpLWNvbmZpZyBsaWJwbmctY29uZmlnKQorCitpbnN0YWxsOiBpbnN0YWxsLXN0YXRpYyBpbnN0YWxsLXNoYXJlZCBpbnN0YWxsLW1hbiBpbnN0YWxsLWNvbmZpZworCisjIElmIHlvdSBpbnN0YWxsZWQgaW4gJChERVNURElSKSwgdGVzdC1pbnN0YWxsZWQgd29uJ3Qgd29yayB1bnRpbCB5b3UKKyMgbW92ZSB0aGUgbGlicmFyeSB0byBpdHMgZmluYWwgbG9jYXRpb24uICBVc2UgdGVzdC1kZCB0byB0ZXN0IGl0CisjIGJlZm9yZSB0aGVuLgorCit0ZXN0LWRkOgorCWVjaG8KKwllY2hvIFRlc3RpbmcgaW5zdGFsbGVkIGR5bmFtaWMgc2hhcmVkIGxpYnJhcnkgaW4gJChETCkuCisJJChDQykgLUkkKERJKSAtSSQoWkxJQklOQykgXAorCSAgIGAkKEJJTlBBVEgpLyQoTElCTkFNRSktY29uZmlnIC0tY2ZsYWdzYCBwbmd0ZXN0LmMgXAorCSAgIC1vIHBuZ3Rlc3RkIGAkKEJJTlBBVEgpLyQoTElCTkFNRSktY29uZmlnIC0tbGRmbGFnc2AgXAorCSAgIC1MJChETCkgLUwkKFpMSUJMSUIpIC1SJChaTElCTElCKSAtUiQoREwpCisJLi9wbmd0ZXN0ZCBwbmd0ZXN0LnBuZworCit0ZXN0LWluc3RhbGxlZDoKKwllY2hvCisJZWNobyBUZXN0aW5nIGluc3RhbGxlZCBkeW5hbWljIHNoYXJlZCBsaWJyYXJ5LgorCSQoQ0MpIC1JJChaTElCSU5DKSBcCisJICAgYCQoQklOUEFUSCkvJChMSUJOQU1FKS1jb25maWcgLS1jZmxhZ3NgIHBuZ3Rlc3QuYyBcCisJICAgLW8gcG5ndGVzdGkgYCQoQklOUEFUSCkvJChMSUJOQU1FKS1jb25maWcgLS1sZGZsYWdzYCBcCisJICAgLUwkKFpMSUJMSUIpIC1SJChaTElCTElCKQorCS4vcG5ndGVzdGkgcG5ndGVzdC5wbmcKKworY2xlYW46CisJJChSTV9GKSAqLm8gbGlicG5nLmEgcG5ndGVzdCBwbmd0ZXN0aSBwbmdvdXQucG5nIFwKKwlsaWJwbmctY29uZmlnICQoTElCU08pICQoTElCU09NQUopKiBcCisJJChPTERTT1ZFUikgXAorCWxpYnBuZy5wYworCitET0NTID0gQU5OT1VOQ0UgQ0hBTkdFUyBJTlNUQUxMIEtOT1dOQlVHIExJQ0VOU0UgUkVBRE1FIFRPRE8gWTJLSU5GTword3JpdGVsb2NrOgorCWNobW9kIGEtdyAqLltjaDM1XSAkKERPQ1MpIHNjcmlwdHMvKgorCisjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisKK3BuZy5vIHBuZy5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmdlcnJvci5vIHBuZ2Vycm9yLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3Jpby5vIHBuZ3Jpby5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmd3aW8ubyBwbmd3aW8ucGljLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nbWVtLm8gcG5nbWVtLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3NldC5vIHBuZ3NldC5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmdnZXQubyBwbmdnZXQucGljLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nZ2NjcmQubyBwbmdnY2NyZC5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmdyZWFkLm8gcG5ncmVhZC5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmdydHJhbi5vIHBuZ3J0cmFuLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3J1dGlsLm8gcG5ncnV0aWwucGljLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5ndHJhbnMubyBwbmd0cmFucy5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmd3cml0ZS5vIHBuZ3dyaXRlLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3d0cmFuLm8gcG5nd3RyYW4ucGljLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nd3V0aWwubyBwbmd3dXRpbC5waWMubzogcG5nLmggcG5nY29uZi5oCitwbmdwcmVhZC5vIHBuZ3ByZWFkLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKKworcG5ndGVzdC5vOiBwbmcuaCBwbmdjb25mLmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUudmN3aW4zMiBiL3NjcmlwdHMvbWFrZWZpbGUudmN3aW4zMgppbmRleCBkMjNkODEyLi5mYzZlY2U2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnZjd2luMzIKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS52Y3dpbjMyCkBAIC0xMSw3ICsxMSw3IEBACiBDQyA9IGNsCiBMRCA9IGxpbmsKIEFSID0gbGliCi1DRkxBR1MgID0gLW5vbG9nbyAtTUQgLU8yIC1XMyAtSS4uXHpsaWIKK0NGTEFHUyAgPSAtbm9sb2dvIC1EUE5HX05PX01NWF9DT0RFIC1NRCAtTzIgLVczIC1JLi5cemxpYgogTERGTEFHUyA9IC1ub2xvZ28KIEFSRkxBR1MgPSAtbm9sb2dvCiBSTSA9IGRlbApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wbmdvczIuZGVmIGIvc2NyaXB0cy9wbmdvczIuZGVmCmluZGV4IDI3NjM4NDIuLmYyMTEwNTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcG5nb3MyLmRlZgorKysgYi9zY3JpcHRzL3BuZ29zMi5kZWYKQEAgLTIsNyArMiw3IEBACiA7IFBORy5MSUIgbW9kdWxlIGRlZmluaXRpb24gZmlsZSBmb3IgT1MvMgogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotOyBWZXJzaW9uIDEuMC4yNgorOyBWZXJzaW9uIDEuMC4yN3JjMQogCiBMSUJSQVJZCQlQTkcKIERFU0NSSVBUSU9OCSJQTkcgaW1hZ2UgY29tcHJlc3Npb24gbGlicmFyeSBmb3IgT1MvMiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcG5ndzMyLmRlZiBiL3NjcmlwdHMvcG5ndzMyLmRlZgppbmRleCAwZjUwMDIwLi5kMmRiMDA4IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BuZ3czMi5kZWYKKysrIGIvc2NyaXB0cy9wbmd3MzIuZGVmCkBAIC01LDcgKzUsNyBAQAogTElCUkFSWQogCiBFWFBPUlRTCi07VmVyc2lvbiAxLjAuMjYKKztWZXJzaW9uIDEuMC4yN3JjMQogICBwbmdfYnVpbGRfZ3JheXNjYWxlX3BhbGV0dGUgIEAxCiAgIHBuZ19jaGVja19zaWcgICAgICAgIEAyCiAgIHBuZ19jaHVua19lcnJvciAgICAgIEAzCg==