Name: series-workflow7w9mz Phase: Failed StartedAt: 2026-07-27 07:04:53 +0000 UTC FinishedAt: 2026-07-27 07:33:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w9mz[0] Phase: Succeeded StartedAt: 2026-07-27 07:04:53 +0000 UTC FinishedAt: 2026-07-27 07:32:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w9mz[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 07:04:53 +0000 UTC FinishedAt: 2026-07-27 07:32:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MWU0ZDhkMjFhZDI0ODc3NTA1YThlYWMyNDZmMWFlNWRmMTg0ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDc6MzE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbiYjNDM7XHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICYjNDM7MzAsMjAgQEAgRGVzY3JpcHRpb246XG4gXHRcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbiBcdFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbiYjNDM7RGF0ZTpcdFx0SmFuIDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDYuMTlcbiYjNDM7Q29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0KFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpc1xuJiM0MztcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbiYjNDM7XG4mIzQzO1x0XHRBZnRlciBiYWNrZ3JvdW5kIHNjcnViYmluZyBzdGFydHMsIHRoZSB1c2VyIG11c3Qgc2V0IHRoZVxuJiM0MztcdFx0YWRkcmVzcyByYW5nZSBiZWZvcmUgaW5pdGlhdGluZyBhIG5ldyBkZW1hbmQgc2NydWJiaW5nXG4mIzQzO1x0XHRvcGVyYXRpb24uIFRoZSBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZVxuJiM0MztcdFx0Y3VycmVudCBzY3J1YmJpbmcgcmFuZ2UsIGFyZSBub3QgdmFsaWQgZHVyaW5nIGJhY2tncm91bmRcbiYjNDM7XHRcdHNjcnViYmluZyBhbmQgdGhlcmVmb3JlIGFyZSByZXNldCB3aGVuIGl0IHN0YXJ0cy5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgJiM0MzszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cbiBcbiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXG4mIzQzO1xuJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuJiM0MztcbiYjNDM7My4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4mIzQzO1xuJiM0MzszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7MFxuJiM0MztcbiYjNDM7My4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxuJiM0MztcbiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuJiM0MztzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbiYjNDM7XG4mIzQzOzM2MDAwXG4mIzQzO1xuJiM0MzszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cbiYjNDM7VGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0Mzs4NjQwMFxuJiM0MztcbiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbiYjNDM7NDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4mIzQzO1xuJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbiYjNDM7XG4mIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbiYjNDM7XG4mIzQzOyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbiYjNDM7XG4mIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy5cbiYjNDM7XG4mIzQzO1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4mIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4mIzQzO2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4mIzQzO1xuJiM0MzszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4mIzQzO1xuJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuJiM0MztcbiYjNDM7MFxuJiM0MztcbiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMFxuJiM0MztzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbiYjNDM7XG4mIzQzOyMgZWNobyAyMTYwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbiYjNDM7XG4mIzQzOzMuMi4zLiBTdGFydCAmIzM5O2JhY2tncm91bmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5AQCAtMjk0LDYgJiM0MzsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuJiM0Mztjb25maWcgQUNQSV9SQVMyXG4mIzQzO1x0Ym9vbCBcJiMzNDtBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiYjNDM7XHRkZXBlbmRzIG9uIE1BSUxCT1hcbiYjNDM7XHRkZXBlbmRzIG9uIFBDQ1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4mIzQzO1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuJiM0MztcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1Byb2Nlc3NvclwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCYjNDM7PSBlY19zeXMub1xuIG9iai0kKENPTkZJR19BQ1BJX0JHUlQpXHRcdCYjNDM7PSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCYjNDM7PSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQmIzQzOz0gc3Bjci5vXG4mIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCYjNDM7PSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcub1xuIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIFx0JiM0Mzs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0JiM0Mzs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NhY3BpL2FwZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BybXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbkBAIC0xNjEwLDYgJiM0MzsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4mIzQzO1x0YWNwaV9yYXMyX2luaXQoKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjFlYTE0ZDliYjllNTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcbkBAIC0wLDAgJiM0MzsxLDUwOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbiYjNDM7ICogcHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBlLmcuLCBmb3IgSFctYmFzZWQgbWVtb3J5XG4mIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbiYjNDM7ICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O0FDUEkgUkFTMjogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcmFzMl9zc3BjYyAtIERhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxuJiM0MzsgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4mIzQzOyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4mIzQzOyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbiYjNDM7ICogQHBjY19tcGFyOlx0XHRNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKSBmb3IgUENDIGNoYW5uZWxcbiYjNDM7ICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbiYjNDM7ICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuJiM0MzsgKlx0XHRcdGlzc3VpbmcgbmV4dCBjb21tYW5kXG4mIzQzOyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuJiM0MzsgKiBAbXBhcl9jb3VudDpcdFx0TVBBUiBjb3VudFxuJiM0MzsgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuJiM0MzsgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbiYjNDM7ICogQGtyZWY6XHRcdGtyZWYgb2JqZWN0XG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2xpZW50XHRcdG1ib3hfY2xpZW50O1xuJiM0MztcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0XHRlbGVtO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuJiM0MztcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21wYXI7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4mIzQzO1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfbXBhcl9yZXNldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb25cbiYjNDM7XHQgKiBzdXBwb3J0cyBjb21tYW5kIFBDQ19DTURfRVhFQ19SQVMyIG9ubHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgcGFyYW1ldGVycyByYXMyX2N0eDogJXAgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIHJhczJfY3R4LCBjbWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuJiM0MztcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1xuJiM0MztcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cGNjX2NoYW5uZWwgPSBzc3BjYy1cdTAwM2VwY2NfY2hhbi1cdTAwM2VtY2hhbjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxuJiM0MztcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcbiYjNDM7XHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuJiM0MztcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0IFx1MDAzZSB0aW1lX2RlbHRhKVxuJiM0MztcdFx0XHRmc2xlZXAoc3NwY2MtXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4mIzQzO1x0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cbiYjNDM7XHQgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBub1xuJiM0MztcdCAqIGxpbWl0YXRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0XG4mIzQzO1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4mIzQzO1x0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxuJiM0MztcdCAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVJcbiYjNDM7XHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21wYXIpIHtcbiYjNDM7XHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuJiM0MztcdFx0XHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XG4mIzQzO1x0XHRcdGlmICgodGltZV9kZWx0YSBcdTAwM2MgNjAgKiBNU0VDX1BFUl9TRUMpIFx1MDAyNlx1MDAyNiBzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXRcJiMzNDssIGNtZCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cdTAwM2VwY2NfbXBhcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbiYjNDM7XHRpb3dyaXRlMTYoY21kLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZWNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbiYjNDM7XHRpb3dyaXRlMTYoMCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHQvKiBSaW5nIGRvb3JiZWxsICovXG4mIzQzO1x0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXHUwMDI2Y21kKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbiYjNDM7XHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X3dhcm4ocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCYjMzQ7LCBjbWQsIHJjKTtcbiYjNDM7XHRcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xuJiM0MztcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuJiM0MztcdFx0aW93cml0ZTE2KHZhbCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzc3BjYy1cdTAwM2VsYXN0X2NtZCA9IGNtZDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgY29tcGxldGlvbiBhbmQgY2hlY2sgZm9yIFBDQyBlcnJvciBiaXQgKi9cbiYjNDM7XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGVcbiYjNDM7XHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4mIzQzO1x0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1xuJiM0MztcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuJiM0MztcdFx0bWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcJiMzNDthY3BpX3JhczJcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuJiM0MztcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cdTAwM2VwY2NfY2hhbik7XG4mIzQzO1x0a2ZyZWUoc3NwY2MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRrcmVmX3B1dChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmLCAgXHUwMDI2cmFzMl9saXN0X3BjY19yZWxlYXNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX3NzcGNjX2dldChpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX2lkICE9IHBjY19pZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHNzcGNjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcbiYjNDM7XHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbiYjNDM7XHRpZiAoc3NwY2MpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD1cbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MgPSBremFsbG9jKHNpemVvZigqc3NwY2MpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXNzcGNjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnNzcGNjLVx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xuJiM0MztcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4mIzQzO1x0XHRrZnJlZShzc3BjYyk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFuLVx1MDAzZXNobWVtIHx8IHBjY19jaGFuLVx1MDAzZXNobWVtX3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtKSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4mIzQzO1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7Y3R4X2ZyZWU6XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MTYgdG90X3RibF9sZW47XG4mIzQzO1x0dTE2IGk7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwY3R4X2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuJiM0MztcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbiYjNDM7XHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuJiM0MztcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTtcbiYjNDM7XHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuJiM0MztcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuJiM0MztcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4mIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbm9uZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbiYjNDM7XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuJiM0MztcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4mIzQzO1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwmIzM0OzB4JWxseFxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG5AQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4mIzQzO1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuJiM0MztcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4mIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuJiM0MztcdGRlcGVuZHMgb24gRURBQ1xuJiM0MztcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuJiM0MztcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuJiM0MztcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4mIzQzO1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbiYjNDM7XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbiYjNDM7XG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0JiM0Mzs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0JiM0Mzs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0JiM0Mzs9IGNlYy5vXG4mIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0JiM0Mzs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0JiM0Mzs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCYjNDM7PSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTFhZGZjZGRmYTk5YThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw2MjQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4mIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4mIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuJiM0MztcbiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlIGFkZHJlc3NcbiYjNDM7XHRcdCAqIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmcgb3BlcmF0aW9uLiBUaGVcbiYjNDM7XHRcdCAqIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlIGN1cnJlbnQgc2NydWJiaW5nXG4mIzQzO1x0XHQgKiByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZCBzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZVxuJiM0MztcdFx0ICogYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAgKGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIpIHtcbiYjNDM7XHRcdCpydW5uaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpydW5uaW5nID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XG4mIzQzO1x0aWYgKCEoKnJ1bm5pbmcpKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXG4mIzQzO1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4mIzQzO1x0XHQgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzQzO1x0XHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcnVubmluZykge1xuJiM0MztcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRtc2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7ZXhpdDpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSlcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqbWF4ID0gcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxuJiM0MztcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbiYjNDM7XHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpiYXNlID0gcmFzMl9jdHgtXHUwMDNlYmFzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqc2l6ZSA9IHJhczJfY3R4LVx1MDAzZXNpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBiYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHR1MzIgc2NydWJfcGFyYW1zX2luO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxuJiM0MztcdFx0ICogYXMgdGhlIEFJIHJldmlldyB0b29sIHN1Z2dlc3RlZCwgaWYgaXQgaXMgbm90IHJ1bm5pbmchLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4mIzQzO1x0XHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHZhbGlkaXR5IGNoZWNrcyBmb3IgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gc2NydWIgbmVlZCB0byBiZSB1cGRhdGVkXG4mIzQzO1x0ICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYVxuJiM0MztcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJhczJfY3R4LVx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXHUwMDNlYmFzZSBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0ID0gLUVSQU5HRTtcbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4mIzQzO1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZWJhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXkgbmVlZCB0byByZXR1cm4gdGhlIGVycm9yIGNvZGUgZnJvbSBiZWxvdyBmdW5jdGlvbiBjYWxsIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxuJiM0MztcdCAqIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcbiYjNDM7XHRcdCAqIHRoZSB0aHJlYWQgbWF5IGRldGVybWluZSB0aGF0IGRlbWFuZCBzY3J1YmJpbmcgaXMgbm90IHJ1bm5pbmcsIGF0dGVtcHQgdG9cbiYjNDM7XHRcdCAqIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcsIGFuZCB0aGVuIGV4aXQuIFRoaXMgY2FuIG9jY3VyIGJlY2F1c2UgdGhlXG4mIzQzO1x0XHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDtyYXMyX3NjcnViX25pZCVkXCYjMzQ7LCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbiYjNDM7XHRcdFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcbiYjNDM7XHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO2VuYWJsZV9iZ19zY3J1YjpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXhpdDpcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XG4mIzQzO1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuJiM0MztcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcbiYjNDM7XHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcbiYjNDM7XHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbiYjNDM7XHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxuJiM0MztcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXG4mIzQzO1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuJiM0MztcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbiYjNDM7XHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcbiYjNDM7XHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJldmVudCB0aGUgdGhyZWFkJiMzOTtzIGB0YXNrX3N0cnVjdGAgZnJvbSBiZWluZyBmcmVlZCBpZiB0aGVcbiYjNDM7XHRcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z2V0X3Rhc2tfc3RydWN0KHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0a3RocmVhZF9zdG9wX3B1dChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXG4mIzQzO1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuJiM0MztcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcbiYjNDM7XHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXG4mIzQzO1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHNjcnViX25hbWUsIFwmIzM0O2FjcGlfcmFzX21lbSVkXCYjMzQ7LCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcdD0gMDtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuJiM0MztcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXHUwMDI2YXV4ZGV2LVx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXHUwMDI2cmFzX2ZlYXR1cmVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4mIzQzO1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuJiM0MztcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuJiM0MztcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7QUNQSV9SQVMyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCAmIzQzOzEsODYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9IXG4mIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4mIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFwmIzM0O3JhczJcJiMzNDtcbiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSBcJiMzNDthY3BpX3JhczJfbWVtXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4mIzQzOyAqIEBhZGV2Olx0XHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4mIzQzOyAqIEBzc3BjYzpcdFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBzeXNfY29tcF9uaWQ6XHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXG4mIzQzOyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4mIzQzOyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuJiM0MzsgKlx0XHRcdEZpZWxkOiBJbnN0YW5jZVxuJiM0MzsgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAbWVtX3NpemVcdFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXG4mIzQzOyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4mIzQzOyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNpemU6XHRcdFNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZTpcdE1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbiYjNDM7ICogQGJnX3NjcnViOlx0XHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXG4mIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4mIzQzOyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4mIzQzOyAqIEB0aHJlYWQ6XHRcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcbiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgQUNQSSB0YWJsZXMgYW5kIG1haWxib3ggbWVjaGFuaXNtcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxZTRkOGQyMWFkMjQ4Nzc1MDVhOGVhYzI0NmYxYWU1ZGYxODRlOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwNzozMTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgppbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIKQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOgk2LjE1CiBDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogRGVzY3JpcHRpb246CiAJCShSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZAotCQlmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuCi0JCVRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0LgotCi0JCVRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWQKLQkJb24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuCiYjNDM7CQlmb3IgZGVtYW5kIHNjcnViYmluZy4KIAogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplCiBEYXRlOgkJTWFyY2ggMjAyNQpAQCAtMzQsNiAmIzQzOzMwLDIwIEBAIERlc2NyaXB0aW9uOgogCQkoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCiAJCShvbi1kZW1hbmQgc2NydWJiaW5nKS4KIAomIzQzO1doYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2RlbWFuZAomIzQzO0RhdGU6CQlKYW4gMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTYuMTkKJiM0MztDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpcwomIzQzOwkJc3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC4KJiM0MzsKJiM0MzsJCUFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlCiYjNDM7CQlhZGRyZXNzIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsJCW9wZXJhdGlvbi4gVGhlIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlCiYjNDM7CQljdXJyZW50IHNjcnViYmluZyByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZAomIzQzOwkJc2NydWJiaW5nIGFuZCB0aGVyZWZvcmUgYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjFlYTE0ZDliYjllNTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJdW5zaWduZWQgaW50CQkJbXBhcl9jb3VudDsKJiM0MzsJaW50CQkJCXBjY19pZDsKJiM0MzsJdTE2CQkJCWxhc3RfY21kOwomIzQzOwlzdHJ1Y3Qga3JlZgkJCWtyZWY7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZQomIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGUKJiM0MzsgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTEwKJiM0MzsjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwCiYjNDM7I2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgMwomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDAKJiM0MzsjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwCiYjNDM7CiYjNDM7LyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqLwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsJdTMyIGNhcF9zdGF0dXM7CiYjNDM7CXUxNiBzdGF0dXM7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZQomIzQzOwkgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW4KJiM0MzsJICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uCiYjNDM7CSAqCiYjNDM7CSAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2YKJiM0MzsJICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZQomIzQzOwkgKiBiaXQgaXMgc2V0LgomIzQzOwkgKi8KJiM0MzsJcmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dCgmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cywgc3RhdHVzLAomIzQzOwkJCQkJc3RhdHVzICZhbXA7IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLAomIzQzOwkJCQkJUENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kLCByYyk7CiYjNDM7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0VSUk9SKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XG4mIzM0OywKJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2lkLCBzc3BjYy0mZ3Q7bGFzdF9jbWQpOwomIzQzOwkJc3RhdHVzICZhbXA7PSB+UENDX1NUQVRVU19FUlJPUjsKJiM0MzsJCWlvd3JpdGUxNihzdGF0dXMsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovCiYjNDM7CXJtYigpOwomIzQzOwljYXBfc3RhdHVzID0gaW9yZWFkMzIoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwlzd2l0Y2ggKGNhcF9zdGF0dXMpIHsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOgomIzQzOwljYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOgomIzQzOwkJcmMgPSAtRVBFUk07CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfQlVTWToKJiM0MzsJCXJjID0gLUVCVVNZOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0ZBSUxFRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOgomIzQzOwkJcmMgPSAtRUlOVkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyYyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTMyKDB4MCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWwKJiM0MzsgKiBAcmFzMl9jdHg6CXBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmUKJiM0MzsgKiBAY21kOglSQVMyIGNvbW1hbmQgdG8gc2VuZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7CiYjNDM7CXN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsOwomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CXM2NCB0aW1lX2RlbHRhOwomIzQzOwl1MTYgdmFsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24KJiM0MzsJICogc3VwcG9ydHMgY29tbWFuZCBQQ0NfQ01EX0VYRUNfUkFTMiBvbmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBwYXJhbWV0ZXJzIHJhczJfY3R4OiAlcCBjb21tYW5kOiAweCV4XG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXBjY19jaGFubmVsID0gc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW0KJiM0MzsJICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgomIzQzOwkgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJdGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lKTsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQgJmd0OyB0aW1lX2RlbHRhKQomIzQzOwkJCWZzbGVlcChzc3BjYy0mZ3Q7cGNjX21ydHQgLSB0aW1lX2RlbHRhKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGUKJiM0MzsJICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW4KJiM0MzsJICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm8KJiM0MzsJICogbGltaXRhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdAomIzQzOwkgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGUKJiM0MzsJICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZAomIzQzOwkgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSCiYjNDM7CSAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXBhcikgewomIzQzOwkJaWYgKCFzc3BjYy0mZ3Q7bXBhcl9jb3VudCkgewomIzQzOwkJCXRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCk7CiYjNDM7CQkJaWYgKCh0aW1lX2RlbHRhICZsdDsgNjAgKiBNU0VDX1BFUl9TRUMpICZhbXA7JmFtcDsgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCkgewomIzQzOwkJCQlkZXZfZGJnKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXQmIzM0OywgY21kKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU87CiYjNDM7CQkJfQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTsKJiM0MzsJCQlzc3BjYy0mZ3Q7bXBhcl9jb3VudCA9IHNzcGNjLSZndDtwY2NfbXBhcjsKJiM0MzsJCX0KJiM0MzsJCXNzcGNjLSZndDttcGFyX2NvdW50LS07CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqLwomIzQzOwlpb3dyaXRlMTYoY21kLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O2NvbW1hbmQpOwomIzQzOwomIzQzOwkvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi8KJiM0MzsJaW93cml0ZTE2KDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJLyogUmluZyBkb29yYmVsbCAqLwomIzQzOwlyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCAmYW1wO2NtZCk7CiYjNDM7CS8qCiYjNDM7CSAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb24KJiM0MzsJICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCWRldl93YXJuKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXG4mIzM0OywgY21kLCByYyk7CiYjNDM7CQkvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi8KJiM0MzsJCXZhbCA9IGlvcmVhZDE2KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTsKJiM0MzsJCWlvd3JpdGUxNih2YWwsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7bGFzdF9jbWQgPSBjbWQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gYW5kIGNoZWNrIGZvciBQQ0MgZXJyb3IgYml0ICovCiYjNDM7CXJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGUKJiM0MzsJICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZwomIzQzOwkgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dC4KJiM0MzsJICovCiYjNDM7CWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQpCiYjNDM7CQlzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW5uZWwtJmd0O21ib3gtJmd0O3R4ZG9uZV9pcnEpCiYjNDM7CQltYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCAmIzM0O2FjcGlfcmFzMiYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MgPQomIzQzOwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9kZWwoJmFtcDtzc3BjYy0mZ3Q7ZWxlbSk7CiYjNDM7CXBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy0mZ3Q7cGNjX2NoYW4pOwomIzQzOwlrZnJlZShzc3BjYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7c3NwY2MtJmd0O2tyZWYsICAmYW1wO3JhczJfbGlzdF9wY2NfcmVsZWFzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgJmFtcDtyYXMyX3NzcGNjLCBlbGVtKSB7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19pZCAhPSBwY2NfaWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7c3NwY2MtJmd0O2tyZWYpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0dXJuIHNzcGNjOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuOwomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CiYjNDM7CWlmIChwY2NfaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTsKJiM0MzsJaWYgKHNzcGNjKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyCT0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsJCXJhczJfY3R4LSZndDtkZXYJCT0KJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghc3NwY2MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoJmFtcDtzc3BjYy0mZ3Q7bWJveF9jbGllbnQsIHBjY19pZCk7CiYjNDM7CWlmIChJU19FUlIocGNjX2NoYW4pKSB7CiYjNDM7CQlrZnJlZShzc3BjYyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwY2NfY2hhbi0mZ3Q7c2htZW0gfHwgcGNjX2NoYW4tJmd0O3NobWVtX3NpemUgJmx0OyBzaXplb2Yoc3RydWN0IGFjcGlfcmFzMl9zaG1lbSkpIHsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7CiYjNDM7CQlrZnJlZShzc3BjYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2lkCQk9IHBjY19pZDsKJiM0MzsJc3NwY2MtJmd0O3BjY19jaGFuCQk9IHBjY19jaGFuOwomIzQzOwlzc3BjYy0mZ3Q7Y29tbV9hZGRyCT0gcGNjX2NoYW4tJmd0O3NobWVtOwomIzQzOwlpZiAocGNjX2NoYW4tJmd0O2xhdGVuY3kpCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi0mZ3Q7bGF0ZW5jeTsKJiM0MzsJZWxzZQomIzQzOwkJc3NwY2MtJmd0O2RlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX21ydHQJCT0gcGNjX2NoYW4tJmd0O21pbl90dXJuYXJvdW5kX3RpbWU7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXBhcgkJPSBwY2NfY2hhbi0mZ3Q7bWF4X2FjY2Vzc19yYXRlOwomIzQzOwlzc3BjYy0mZ3Q7bWJveF9jbGllbnQua25vd3NfdHhkb25lCT0gdHJ1ZTsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3NzcGNjLSZndDtwY2NfbG9jayk7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO3NzcGNjLSZndDtrcmVmKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfYWRkKCZhbXA7c3NwY2MtJmd0O2VsZW0sICZhbXA7cmFzMl9zc3BjYyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXJhczJfY3R4LSZndDtkZXYJCT0gcGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CXJhczJfY3R4LSZndDtwY2NfbG9jawk9ICZhbXA7c3NwY2MtJmd0O3BjY19sb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9JREEocmFzMl9pZGEpOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBhdXhkZXYtJmd0O2lkKTsKJiM0MzsJcmFzMl9zc3BjY19wdXQocmFzMl9jdHgtJmd0O3NzcGNjKTsKJiM0MzsJa2ZyZWUocmFzMl9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MzIgY29tcF9uaWQ7CiYjNDM7CWludCBpZCwgcmM7CiYjNDM7CiYjNDM7CWNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpOwomIzQzOwlpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXG4mIzM0OywgY2hhbm5lbCwgcHhtX2luc3QpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQgPSBjb21wX25pZDsKJiM0MzsKJiM0MzsJcmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7CiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXG4mIzM0OywgY2hhbm5lbCwKJiM0MzsJCQkgcHhtX2luc3QsIHJjKTsKJiM0MzsJCWdvdG8gY3R4X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBpZGFfYWxsb2MoJmFtcDtyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApIHsKJiM0MzsJCXJjID0gaWQ7CiYjNDM7CQlnb3RvIHBjY19mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmlkCQk9IGlkOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5uYW1lCQk9IG5hbWU7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5yZWxlYXNlCT0gcmFzMl9yZWxlYXNlOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucGFyZW50CT0gcmFzMl9jdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gaWRhX2ZyZWU7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhczJfY3R4OwomIzQzOwomIzQzO2lkYV9mcmVlOgomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBpZCk7CiYjNDM7cGNjX2ZyZWU6CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7Y3R4X2ZyZWU6CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVSUl9QVFIocmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CWlmICghcmFzMl9jdHgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqcGNjX2Rlc2NfbGlzdDsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7CiYjNDM7CXUxNiB0b3RfdGJsX2xlbjsKJiM0MzsJdTE2IGk7CiYjNDM7CiYjNDM7CWlmIChyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCAmbHQ7IHNpemVvZigqcmFzMl90YWIpKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICZndDsgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7Tm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyB0b3RfdGJsX2xlbikgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcywgcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcywgc2l6ZW9mKCpwY3R4X2xpc3QpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwY3R4X2xpc3QpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBjY19kZXNjX2xpc3QtJmd0O2ZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LSZndDtjaGFubmVsX2lkLAomIzQzOwkJCQkJICBwY2NfZGVzY19saXN0LSZndDtpbnN0YW5jZSk7CiYjNDM7CQkvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi8KJiM0MzsJCWlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4KSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcbiYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7CiYjNDM7CQkJZm9yICg7IGkgJmd0OyAwOyBpLS0pIHsKJiM0MzsJCQkJaWYgKHBjdHhfbGlzdFtpIC0gMV0pCiYjNDM7CQkJCQlyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTsKJiM0MzsJCQl9CiYjNDM7CQkJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7CiYjNDM7CQl9CiYjNDM7CQlwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDsKJiM0MzsJfQomIzQzOwlrZnJlZShwY3R4X2xpc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KJiM0MzsgKgomIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuCiYjNDM7ICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyCiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBub25lLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwomIzQzOwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZhbXA7cmFzMl90YWIpOwomIzQzOwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcbiYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKQomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwlhY3BpX3B1dF90YWJsZSgoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopcmFzMl90YWIpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmMKaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMgewogCVNDUlVCX0FERFJFU1MsCiAJU0NSVUJfU0laRSwKIAlTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCwKJiM0MzsJU0NSVUJfRU5BQkxFX0RFTUFORCwKIAlTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sCiAJU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTiwKQEAgLTU1LDYgJiM0Mzs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCAmIzM0OzB4JWxseFxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCAmIzM0OyV1XG4mIzM0OykKJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtaW5fY3ljbGVfZHVyYXRpb24sIGdldF9taW5fY3ljbGUsIHUzMiwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgJiMzNDsldVxuJiMzNDspCkBAIC04NCw2ICYjNDM7ODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsCQkJXAogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQogCiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKQpAQCAtMTE5LDYgJiM0MzsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQKIAkJCQlyZXR1cm4gMDQ0NDsKIAkJfQogCQlicmVhazsKJiM0MzsJY2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOgomIzQzOwkJaWYgKG9wcy0mZ3Q7Z2V0X2VuYWJsZWRfb2QpIHsKJiM0MzsJCQlpZiAob3BzLSZndDtzZXRfZW5hYmxlZF9vZCkKJiM0MzsJCQkJcmV0dXJuIGEtJmd0O21vZGU7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlyZXR1cm4gMDQ0NDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOgogCQlpZiAob3BzLSZndDtnZXRfbWluX2N5Y2xlKQogCQkJcmV0dXJuIGEtJmd0O21vZGU7CkBAIC0xNjQsNiAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LAogCQlbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLAogCQlbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLAogCQlbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksCiYjNDM7CQlbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLAogCQlbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSwKIAkJW1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWcKaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWcKQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE0KIAkgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uCiAJICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy4KIAomIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyCiYjNDM7CXRyaXN0YXRlICYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlkZXBlbmRzIG9uIEFDUElfUkFTMgomIzQzOwlkZXBlbmRzIG9uIEVEQUMKJiM0MzsJZGVwZW5kcyBvbiBFREFDX1NDUlVCCiYjNDM7CXNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTwomIzQzOwloZWxwCiYjNDM7CSAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyCiYjNDM7CSAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvCiYjNDM7CSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzCiYjNDM7CSAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIKJiM0MzsJICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4KJiM0MzsKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGUKQEAgLTIsNiAmIzQzOzIsNyBAQAogb2JqLSQoQ09ORklHX1JBUykJJiM0Mzs9IHJhcy5vCiBvYmotJChDT05GSUdfREVCVUdfRlMpCSYjNDM7PSBkZWJ1Z2ZzLm8KIG9iai0kKENPTkZJR19SQVNfQ0VDKQkmIzQzOz0gY2VjLm8KJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMikJJiM0Mzs9IGFjcGlfcmFzMi5vCiAKIG9iai0kKENPTkZJR19SQVNfRk1QTSkJJiM0Mzs9IGFtZC9mbXBtLm8KIG9iai15CQkJJiM0Mzs9IGFtZC9hdGwvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41MWFkZmNkZGZhOTlhOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDYyNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuCiYjNDM7ICoKJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KQkmIzM0O0FDUEkgUkFTMiBNRU1PUlk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZGFjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcmFzMi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMCkKJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxCiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyCiYjNDM7I2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDMKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJBUzIgcGF0cm9sIHNjcnViCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNikKJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjgKJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDAKJiM0MzsKJiM0MztzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFwKJiM0MzsJY29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbikKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LSZndDtjb21tX2FkZHI7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlpb3dyaXRlOCgwLCAmYW1wO2NvbW1vbi0mZ3Q7c2V0X2NhcHNbMF0pOwomIzQzOwomIzQzOwlyZXR1cm4gaW9yZWFkOCgmYW1wO2NvbW1vbi0mZ3Q7ZmVhdHVyZXNbMF0pICZhbXA7IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9CiYjNDM7CQlUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtJmd0O2NvbW1fYWRkcik7CiYjNDM7CXUzMiBzY3J1Yl9wYXJhbXNfb3V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKgomIzQzOwkJICogQWZ0ZXIgYmFja2dyb3VuZCBzY3J1YmJpbmcgc3RhcnRzLCB0aGUgdXNlciBtdXN0IHNldCB0aGUgYWRkcmVzcwomIzQzOwkJICogcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZyBvcGVyYXRpb24uIFRoZQomIzQzOwkJICogYWRkcmVzcyByYW5nZSBhdHRyaWJ1dGVzLCB3aGljaCBpbmRpY2F0ZSB0aGUgY3VycmVudCBzY3J1YmJpbmcKJiM0MzsJCSAqIHJhbmdlLCBhcmUgbm90IHZhbGlkIGR1cmluZyBiYWNrZ3JvdW5kIHNjcnViYmluZyBhbmQgdGhlcmVmb3JlCiYjNDM7CQkgKiBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kCiYjNDM7CQkgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsCiYjNDM7CQkgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nCiYjNDM7CQkgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJCWlmICghcnVubmluZykgewomIzQzOwkJCXJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC0mZ3Q7ZGV2LCByYXMyX2N0eCwgdHJ1ZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCW1zbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7ZXhpdDoKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlKQomIzQzOwkJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSptaW4gPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1heCA9IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChydW5uaW5nKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJaWYgKHNjcnViX2N5Y2xlX2hycyAmbHQ7IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgfHwKJiM0MzsJICAgIHNjcnViX2N5Y2xlX2hycyAmZ3Q7IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hyczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC4KJiM0MzsJICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKmJhc2UgPSByYXMyX2N0eC0mZ3Q7YmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSpzaXplID0gcmFzMl9jdHgtJmd0O3NpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YmFzZSA9IGJhc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChydW5uaW5nKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3NpemUgPSBzaXplOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKmVuYWJsZWQgPSByYXMyX2N0eC0mZ3Q7Ymdfc2NydWI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgfHwgcnVubmluZykKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkJaW93cml0ZTY0KDAsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSzsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwkJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8gc3RvcCBiYWNrZ3JvdW5kIHNjcnViYmluZywKJiM0MzsJCSAqIGFzIHRoZSBBSSByZXZpZXcgdG9vbCBzdWdnZXN0ZWQsIGlmIGl0IGlzIG5vdCBydW5uaW5nIS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZAomIzQzOwkgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpICZndDsgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYQomIzQzOwkgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtzaXplIHx8IHJhczJfY3R4LSZndDtiYXNlICZsdDsgcmFzMl9jdHgtJmd0O21lbV9iYXNlKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIHJhczJfY3R4LSZndDtiYXNlLCByYXMyX2N0eC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXQgPSAtRVJBTkdFOwomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CWlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sICZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7c2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBlbmFibGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1heSBuZWVkIHRvIHJldHVybiB0aGUgZXJyb3IgY29kZSBmcm9tIGJlbG93IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIHVzZXIKJiM0MzsJICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZQomIzQzOwkgKiBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseS4KJiM0MzsJICovCiYjNDM7CXJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViICZhbXA7JmFtcDsgcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgJmFtcDsmYW1wOyAhcmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLAomIzQzOwkJICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0bwomIzQzOwkJICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7ZW5hYmxlX2JnX3NjcnViOgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTsKJiM0MzsJCV9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzO2V4aXQ6CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gZmFsc2U7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUHJldmVudCB0aGUgdGhyZWFkJiMzOTtzIGB0YXNrX3N0cnVjdGAgZnJvbSBiZWluZyBmcmVlZCBpZiB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy4KJiM0MzsJCSAqLwomIzQzOwkJZ2V0X3Rhc2tfc3RydWN0KHJhczJfY3R4LSZndDt0aHJlYWQpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlrdGhyZWFkX3N0b3BfcHV0KHJhczJfY3R4LSZndDt0aHJlYWQpOwomIzQzOwkJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7CiYjNDM7CXN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlczsKJiM0MzsJY2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGUKJiM0MzsJICogJiMzOTtSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZSYjMzk7LCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSUwomIzQzOwkgKiB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXMgaW4gdGhlIE5VTUEgZG9tYWluCiYjNDM7CSAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmQKJiM0MzsJICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpcwomIzQzOwkgKiBhbHJlYWR5IHBlcmZvcm1lZCBpbiBhZGRfYXV4X2RldmljZSgpIGluIC9hY3BpL3JhczIuYwomIzQzOwkgKi8KJiM0MzsJc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CW51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwlpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcbiYjMzQ7LCByYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyAmZ3Q7IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hyczsKJiM0MzsJZWxzZQomIzQzOwkJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGU7CiYjNDM7CiYjNDM7CXNwcmludGYoc2NydWJfbmFtZSwgJiMzNDthY3BpX3Jhc19tZW0lZCYjMzQ7LCBhdXhkZXYtJmd0O2lkKTsKJiM0MzsKJiM0MzsJcmFzX2ZlYXR1cmVzLmZ0X3R5cGUJPSBSQVNfRkVBVF9TQ1JVQjsKJiM0MzsJcmFzX2ZlYXR1cmVzLmluc3RhbmNlCT0gMDsKJiM0MzsJcmFzX2ZlYXR1cmVzLnNjcnViX29wcwk9ICZhbXA7cmFzMl9zY3J1Yl9vcHM7CiYjNDM7CXJhc19mZWF0dXJlcy5jdHgJPSByYXMyX2N0eDsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoJmFtcDthdXhkZXYtJmd0O2Rldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgJmFtcDtyYXNfZmVhdHVyZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgcmFzMl9tZW1fZGV2X2lkX3RhYmxlW10gPSB7CiYjNDM7CXsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSAmIzM0Oy4mIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0gewomIzQzOwkubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLAomIzQzOwkucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLAomIzQzOwkuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsCiYjNDM7fTsKJiM0Mzttb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtBQ1BJX1JBUzImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7QUNQSSBSQVMyIG1lbW9yeSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcmFzMi5oCkBAIC0wLDAgJiM0MzsxLDg2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQUNQSV9SQVMyX0gKJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hY3BpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2F1eGlsaWFyeV9idXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5CiYjNDM7ICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSAmIzM0O3JhczImIzM0OwomIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgJiMzNDthY3BpX3JhczJfbWVtJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXMKJiM0MzsgKiBAYWRldjoJCUF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0CiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZGV2OgkJUG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0MKJiM0MzsgKiBAc3NwY2M6CQlQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvbgomIzQzOyAqIEBwY2NfbG9jazoJCVBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzCiYjNDM7ICoJCQl0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIEBzeXNfY29tcF9uaWQ6CU5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmUKJiM0MzsgKgkJCWlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMgomIzQzOyAqCQkJUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LAomIzQzOyAqCQkJRmllbGQ6IEluc3RhbmNlCiYjNDM7ICogQG1lbV9iYXNlOgkJQmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAbWVtX3NpemUJCVNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZQomIzQzOyAqCQkJb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluCiYjNDM7ICogQGJhc2U6CQlCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIKJiM0MzsgKiBAc2l6ZToJCVNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIKJiM0MzsgKiBAc2NydWJfY3ljbGVfaHJzOglDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnMKJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOglTY3J1YiByYXRlIHRvIHNldCBpbiBob3VycwomIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6CU1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAbWF4X3NjcnViX2N5Y2xlOglNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkCiYjNDM7ICogQG9kX3NjcnViOgkJU3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pCiYjNDM7ICogQGJnX3NjcnViOgkJU3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZwomIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjoJRmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmQKJiM0MzsgKgkJCXNjcnViYmluZyBpcyBmaW5pc2hlZAomIzQzOyAqIEB0aHJlYWQ6CQlEZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkCiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6CUZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCByYXMyX21lbV9jdHggewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZQkJYWRldjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtCSpjb21tX2FkZHI7CiYjNDM7CXN0cnVjdCBkZXZpY2UJCQkqZGV2OwomIzQzOwl2b2lkCQkJCSpzc3BjYzsKJiM0MzsJc3RydWN0IG11dGV4CQkJKnBjY19sb2NrOwomIzQzOwl1MzIJCQkJc3lzX2NvbXBfbmlkOwomIzQzOwl1NjQJCQkJbWVtX2Jhc2U7CiYjNDM7CXU2NAkJCQltZW1fc2l6ZTsKJiM0MzsJdTY0CQkJCWJhc2U7CiYjNDM7CXU2NAkJCQlzaXplOwomIzQzOwl1OAkJCQlzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CXU4CQkJCXNldF9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWluX3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltYXhfc2NydWJfY3ljbGU7CiYjNDM7CWJvb2wJCQkJb2Rfc2NydWI7CiYjNDM7CWJvb2wJCQkJYmdfc2NydWI7CiYjNDM7CWJvb2wJCQkJcmVlbmFibGVfYmdfc2NydWI7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKJiM0MzsJYm9vbAkJCQlkcml2ZXJfYWN0aXZlOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzIKJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTsKJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaApAQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQgewogICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS4KICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi4KICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLgomIzQzOyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLgomIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi4KICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7CiAJaW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpOwogCWludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwogCWludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CWludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwomIzQzOwlpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwogCWludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7CiAJaW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTsKIAlpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBQ1BJIFJBUzIgU2NydWJiaW5nOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIGFkZGluZyBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQmIzM5O3MgZ290IGEgbmV3IGRyaXZlciwgYGRyaXZlcnMvYWNwaS9yYXMyLmNgLCBhbmQgYSByZWxhdGVkIG9uZSBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBwbHVzIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgZm9yIGBlbmFibGVfZGVtYW5kYC4gVGhlIHdob2xlIHRoaW5nIHVzZXMgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIHRvIHRhbGsgdG8gdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBhbiBBQ1BJIHRoaW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBDQyBzZWVtcyB0cmlja3kgYmVjYXVzZSBpdCByZWxpZXMgb24gbWFpbGJveGVzLiAgQUNQSSB0YWJsZXMgYXJlIG9mdGVuIHByb3ZpZGVkLCBidXQgdGhpcyBtYWlsYm94IHRoaW5nIGlzIGRpZmZlcmVudC4KCkFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byBgZHJpdmVycy9hY3BpL3JhczIuY2AuICBMb29rcyBsaWtlIGl0IHVzZXMgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuICBOb3csIFFFTVUuLi4gUUVNVSBkb2VzbiYjMzk7dCBqdXN0IGhhbmQgeW91IEFDUEkgUkFTMiBvciBQQ0MgbWFpbGJveGVzIG91dCBvZiB0aGUgYm94IGZvciBlYXN5IGZ1enppbmcuIFN5emthbGxlciAqY2FuKiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzIG9yIHVzZSBzb2Z0d2FyZSBtYWlsYm94ZXMsIGlmIHRoZXkgZXhpc3QsIGJ1dCBQQ0MgbWFpbGJveGVzIGFyZSB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuICBJcyB0aGVyZSBhIHNvZnR3YXJlIFBDQyBtYWlsYm94IGhlcmUsIG9yIGlzIGl0IHB1cmVseSBoYXJkd2FyZT8KCkFoYSEgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2Agc2VlbXMgdG8gcHJvdmlkZSBhIFBDQyBtYWlsYm94ICpjb250cm9sbGVyKi4gSXQgcmVhZHMgdGhlIFBDQ1QgQUNQSSB0YWJsZS4gU28sIGlmIHN5emthbGxlciBjYW4gcHJvdmlkZSBhIGN1c3RvbSBQQ0NUIHRhYmxlLCBpdCBtaWdodCB0cmlnZ2VyIHRoYXQuCgpXYWl0IGEgc2Vjb25kLCB0aGlzIHBhdGNoICphbHNvKiBhZGRzIGBBQ1BJX1JBUzJgIGFuZCBgTUVNX0FDUElfUkFTMmAgY29uZmlncy4gSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/CgpUaGUgZHJpdmVyIHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlLCByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSwgYW5kIHRoZW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCBwcm9iZXMgaXQuICBUaGVuIGl0IGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyB2aWEgRURBQy4gICpUaGF0KiBJIGNhbiBmdXp6LiBTeXprYWxsZXIgbG92ZXMgc3lzZnMuIExldCYjMzk7cyBzZWUuLi4gd2UgaGF2ZSB0aGluZ3MgbGlrZSBgZW5hYmxlX2RlbWFuZGAsIGBlbmFibGVfYmFja2dyb3VuZGAsIGBhZGRyYCwgYHNpemVgLCBgY3VycmVudF9jeWNsZV9kdXJhdGlvbmAsIGFsbCBnb29kIHRhcmdldHMuIFRoZSBmdW5jdGlvbnMgYXJlOiBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfcmVhZF9zaXplYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZGAsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYCwgYHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZWAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWRgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZWAuCgpBbGwgdGhvc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzICppZiogdGhlIGRldmljZSBpcyBwcm9iZWQuIEFuZCBmb3IgdGhlIGRldmljZSB0byBwcm9iZSwgd2UgbmVlZCB0aGF0IFJBUzIgQUNQSSB0YWJsZS4gQ2FuIFN5emthbGxlciBpbmplY3QgQUNQSSB0YWJsZXM/CgpTeXprYWxsZXIgaXNuJiMzOTt0IG1hZ2ljLCBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBBQ1BJIHRhYmxlIGluamVjdGlvbiBtZWNoYW5pc20gdGhhdCB3b3JrcyByZWxpYWJseSBmb3IgYWxsIHRhYmxlcyBkdXJpbmcgYm9vdC4gV2UgaGF2ZSBgY29uZmlnIEFDUElfVEFCTEVfVVBHUkFERWAgd2hpY2ggbWlnaHQgYWxsb3cgb3ZlcnJpZGluZyB2aWEgaW5pdHJkLCBvciBjb25maWdmcyBBQ1BJIHRhYmxlIGluamVjdGlvbi4KCldhaXQgYSBtaW51dGUsIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgZHVyaW5nIGJvb3QuIExldCYjMzk7cyBzZWUgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCkKewoJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CglhY3BpX3N0YXR1cyBzdGF0dXM7CgoJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewoJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcbiYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CgkJcmV0dXJuOwoJfQouLi4KYGBgCgpJZiBpdCBkb2VzbiYjMzk7dCBmaW5kIHRoZSB0YWJsZSwgaXQganVzdCBiYWlscy4gIFNvLCBjYW4gc3l6a2FsbGVyICpyZWFjaCogdGhpcz8gIFN5emthbGxlciB1c3VhbGx5IGJvb3RzIHdpdGggZml4ZWQgQUNQSSB0YWJsZXMgZnJvbSBRRU1VLCBhbmQgUUVNVSBwcm9iYWJseSBkb2VzbiYjMzk7dCBoYXZlIGEgUkFTMiB0YWJsZSB5ZXQuICBXZSBjYW4mIzM5O3QgdXNlIGNvbmZpZ2ZzIGJlY2F1c2UgYGFjcGlfcmFzMl9pbml0YCBpcyBgX19pbml0YCEgIEl0JiMzOTtzIGEgb25lLXRpbWUgdGhpbmcgYXQgYm9vdC4gSWYgUUVNVSBkb2VzbiYjMzk7dCBwcm92aWRlIHRoZSBSQVMyIHRhYmxlLCB0aGUgZHJpdmVyIG5ldmVyIGJpbmRzLCBhbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgbmV2ZXIgZ2V0IGNyZWF0ZWQuICBUaGVyZSYjMzk7cyBubyB3YXkKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9lbmFibGVkX29kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZWRhYy9zY3J1Yi5jPTg4PUVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuZHJpdmVycy9lZGFjL3NjcnViLmM6ODk6RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTkwLUVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jPTkyPXN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI2LVx0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG5kcml2ZXJzL2VkYWMvc2NydWIuYzoxMjc6XHRcdFx0aWYgKG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyOC1cdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4tLVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9Mzk0PXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQwOS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQxMDpzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00MTEte1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTUxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTUyNS1cdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo1MjY6XHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI3LVx0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oPTY3Mj1lbnVtIGVkYWNfZGV2X2ZlYXQge1xuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4Ny0gKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbmluY2x1ZGUvbGludXgvZWRhYy5oOjY4ODogKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02ODktICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oPTY5ND1zdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMS1cdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuaW5jbHVkZS9saW51eC9lZGFjLmg6NzAyOlx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMy1cdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBvZiBgYWNwaV9yYXMyLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGFjcGlfcmFzMi5jYCBkcml2ZXIsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBpc29sYXRlZC4gVGhlIG9ubHkgcGxhY2UgSSYjMzk7bSBzZWVpbmcgYHNldF9lbmFibGVkX29kYCB1c2VkIGlzIHdpdGhpbiB0aGlzIG1vZHVsZS4gTm93LCB0aGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIEFDUEkgUkFTMiB0YWJsZXMsIGFuZCB0aG9zZSBhcmVuJiMzOTt0IGV2ZW4gcHJlc2VudCBpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFBsdXMsIFFFTVUgZG9lc24mIzM5O3QgbW9kZWwgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb25zIENoYW5uZWwgKFBDQykgbWFpbGJveCBoYXJkd2FyZSB0aGF0IHRoaXMgZHJpdmVyIHdvdWxkIHVzZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUuIFNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGRyaXZlciBzaG91bGQgYmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUuCgpIb2xkIG9uLCB0aG91Z2guIEkmIzM5O20gd29uZGVyaW5nIGlmIEkgY2FuIHRyaWNrIGl0LiBDYW4gSSBwb3RlbnRpYWxseSBsb2FkIGEgZmFrZSBBQ1BJIHRhYmxlIHZpYSBjb25maWdmcyBhbmQgZm9yY2UgYSBwcm9iZT8gV2FpdCwgbm8sIHRoYXQgd29uJiMzOTt0IHdvcmsuIFRoZSBgYWNwaV9yYXMyX2luaXRgIGZ1bmN0aW9uIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCBvbmx5IGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3QsIHdoaWxlIHRoZSBjb25maWdmcyBBQ1BJIHRhYmxlIGxvYWRpbmcgaGFwcGVucyBsYXRlciBpbiB0aGUgcHJvY2Vzcy4KCkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIGZha2UgdGFibGUgdXNpbmcgaW5pdHJkIOKAkyB3aGljaCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggc3l6a2FsbGVyLCBhbHRob3VnaCBpdCYjMzk7cyBub3QgY3VycmVudGx5IHNldCB1cCBmb3IgUkFTMiDigJMgdGhlIGRyaXZlciBzdGlsbCByZWxpZXMgb24gdGhhdCBQQ0MgY2hhbm5lbC4gSSBzaG91bGQgY2hlY2sgdGhhdCBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYCBmdW5jdGlvbiB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3JlcXVlc3RfY2hhbm5lbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02Ny1cdGluaXRfY29tcGxldGlvbihcdTAwMjZkYXRhLVx1MDAzZWRvbmUpO1xuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XHRkYXRhLVx1MDAzZXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmRhdGEtXHUwMDNlY2wsIGN0eC1cdTAwM2VzdWJzcGFjZV9pZCk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cdGlmIChJU19FUlIoZGF0YS1cdTAwM2VwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM9NTY2PXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoaW50IHBjY19zc19pZHgpXG4tLVxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cdGlmIChwY2Nfc3NfaWR4IFx1MDAzZT0gMCkge1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYy01NzMtXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYz0yODg9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMwOS1cbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzEwOlx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2c3NwY2MtXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMxMS1cdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4tLVxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYz0xMDY9c3RhdGljIGludCBoaXNpX3VuY29yZV9yZXF1ZXN0X3BjY19jaGFuKHN0cnVjdCBoaXNpX3VuY29yZV9mcmVxICp1bmNvcmUpXG4tLVxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTYtXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jOjExNzpcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnVuY29yZS1cdTAwM2VjbCwgdW5jb3JlLVx1MDAzZWNoYW5faWQpO1xuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTgtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHhnZW5lX2h3bW9uX3BjY19yeF9jYjtcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XHRcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXHUwMDNlbWJveF9pZHgpO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTY2OS1cdFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz00MzY9c3RhdGljIGludCB4Z2VuZV9zbGltcHJvX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTQ3Ny1cdFx0Y2wtXHUwMDNlcnhfY2FsbGJhY2sgPSBzbGltcHJvX2kyY19wY2NfcnhfY2I7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzo0Nzg6XHRcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXHUwMDNlbWJveF9pZHgpO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzEzPXN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM0OTogKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNTAtICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNjE6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNjIte1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTItfVxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5MzpFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpO1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk4LSAqIEBwY2hhbjogUG9pbnRlciB0byB0aGUgUENDIG1haWxib3ggY2hhbm5lbCBhcyByZXR1cm5lZCBieVxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlx0ICAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy00MDAtICovXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jPTE3Mz1zdGF0aWMgaW50IGhjY3NfcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IGhjY3NfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM6MTg5Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGhkZXYtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmMtMTkwLVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5pbmNsdWRlL2FjcGkvcGNjLmg9Mzc9ZXh0ZXJuIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmluY2x1ZGUvYWNwaS9wY2MuaDozODpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD00MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuaW5jbHVkZS9hY3BpL3BjYy5oLTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUzMgoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggcHVyc3VpbmcgZm9yIGZ1enppbmcsIGFuZCBoZXJlJiMzOTtzIHdoeS4gVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLCBkZXBlbmRzIG9uIGEgcmVnaXN0ZXJlZCBQQ0MgY2hhbm5lbC4gVGhvc2UgY2hhbm5lbHMgYXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGVzdGFibGlzaGVkIHRocm91Z2ggdGhlIGBkcml2ZXJzL21haWxib3gvcGNjLmNgIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGl0IHBhcnNlcyB0aGUgUENDVCBBQ1BJIHRhYmxlLiBUaGUgY2F0Y2g/IFRoaXMgZW50aXJlIHNldHVwIGhpbmdlcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDQ1QgYW5kIFJBUzIgQUNQSSB0YWJsZXMuCgpTaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhhdCYjMzk7cyBhIHByb2JsZW0uIFFFTVUsIGFzIGZhciBhcyBJIGtub3csIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgQUNQSSB0YWJsZXMuIEFuZCwga25vd2luZyBob3cgc3l6a2FsbGVyIHdvcmtzLCBpdCYjMzk7cyBub3QgaW5qZWN0aW5nIHRoZW0gZWl0aGVyLiBUaGF0IG1lYW5zIHRoZSBjb2RlIHBhdGggaW52b2x2aW5nIHRoZSBQQ0MgY2hhbm5lbCBhbmQgdGhlIEFDUEkgdGFibGVzIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBUaGVyZWZvcmUsIGZyb20gYSBwdXJlIHJlYWNoYWJpbGl0eSBzdGFuZHBvaW50LCBJIGhhdmUgdG8gY29uY2x1ZGUgYFdvcnRoRnV6emluZz1mYWxzZWAgaGVyZS4KClRvIGJlIHByZWNpc2UsIHRoZSBwYXRjaCBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcsIHdoaWNoIGRpcmVjdGx5IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIG1haWxib3ggbWVjaGFuaXNtLiBUaGVzZSBhcmUsIGFzIG1lbnRpb25lZCwgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIEFDUEkgdGFibGUgZHJpdmVuLCBhbmQgYmVjYXVzZSB0aGV5JiMzOTtyZSBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIGlzIGRlYWQgZm9yIGZ1enppbmcgcHVycG9zZXMuCgpMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBPa2F5LCBJIHNlZSB0aGF0IGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgaXMgaW50cm9kdWNpbmcgdGhlIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUgdG8gRURBQyBzY3J1YiBzeXNmcy4gVGhhdCBzZWVtcyBnZW5lcmljIGVub3VnaCwgYnV0IGl0IG9ubHkgcmVhbGx5ICpkb2VzKiBhbnl0aGluZyBpZiB0aGUgYG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2RgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgc2V0LiBGcm9tIG15IGFuYWx5c2lzLCB0aGUgb25seSBwbGFjZSB3aGVyZSBgc2V0X2VuYWJsZWRfb2RgIGlzICphY3R1YWxseSogc2V0IGlzIHdpdGhpbiBgYWNwaV9yYXMyLmNgLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgJiMzNDtnZW5lcmljJiMzNDsgc3lzZnMgYXR0cmlidXRlIGlzIHVzZWxlc3MgdW5sZXNzIHRoZSBgYWNwaV9yYXMyYCBkcml2ZXIgaXMgbG9hZGVkLiBTaW5jZSBgYWNwaV9yYXMyYCByZXF1aXJlcyB0aGUgUENDVCBhbmQgUkFTMiB0YWJsZXMgKHdoaWNoIGFyZW4mIzM5O3QgcHJlc2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQpLCB0aGF0IHN5c2ZzIGF0dHJpYnV0ZSBpcyBuZXZlciBjcmVhdGVkLgoKSW4gY29uY2x1c2lvbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc3RpY2tpbmcgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBkZXBlbmRlbmNlIG9uIHRob3NlIG1pc3NpbmcgQUNQSSB0YWJsZXMgbWFrZXMgdGhlIGNyaXRpY2FsIHBhcnRzIG9mIHRoaXMgcGF0Y2gsIGluY2x1ZGluZyB0aGF0IG5ldyBzeXNmcyBhdHRyaWJ1dGUsIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTo0Mi42ODU0ODU3ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk3MzcxNDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgQUNQSSB0YWJsZXMgYW5kIG1haWxib3ggbWVjaGFuaXNtcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6NDIuNjg1NDkyMTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5ODU4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTFlNGQ4ZDIxYWQyNDg3NzUwNWE4ZWFjMjQ2ZjFhZTVkZjE4NGU5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNzozMTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMjAgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbitcXHRcXHRBZnRlciBiYWNrZ3JvdW5kIHNjcnViYmluZyBzdGFydHMsIHRoZSB1c2VyIG11c3Qgc2V0IHRoZVxcbitcXHRcXHRhZGRyZXNzIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmdcXG4rXFx0XFx0b3BlcmF0aW9uLiBUaGUgYWRkcmVzcyByYW5nZSBhdHRyaWJ1dGVzLCB3aGljaCBpbmRpY2F0ZSB0aGVcXG4rXFx0XFx0Y3VycmVudCBzY3J1YmJpbmcgcmFuZ2UsIGFyZSBub3QgdmFsaWQgZHVyaW5nIGJhY2tncm91bmRcXG4rXFx0XFx0c2NydWJiaW5nIGFuZCB0aGVyZWZvcmUgYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcXG4gRGF0ZTpcXHRcXHRNYXJjaCAyMDI1XFxuIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXFxuIFxcbiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluXFxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxcbitcXG4rMy4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcXG4rXFxuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxcbitcXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcXG4rXFxuKzBcXG4rXFxuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cXG4rXFxuK0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwMFxcbitcXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXFxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxcbitcXG4rMzYwMFxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxcbitcXG4rODY0MDBcXG4rXFxuKzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XFxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxcbitcXG4rIyBlY2hvIDQzMjAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS5cXG4rXFxuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHg4MDAwMDAwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXFxuK1xcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxcbitcXG4rIyBlY2hvIDB4MjAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcXG4rXFxuKzMuMS42LiBTdGFydCAnZGVtYW5kIHNjcnViYmluZycuXFxuK1xcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xcbit3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cXG4rXFxuKyMgZWNobyAxIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcXG4rXFxuKzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnlcXG4rXFxuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXFxuK1xcbiswXFxuK1xcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXFxuK3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLlxcbitcXG4rIyBlY2hvIDIxNjAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcXG4gXFx0ICBJZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgQ1BQQyBpbiBmaXJtd2FyZSxcXG4gXFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4gXFxuK2NvbmZpZyBBQ1BJX1JBUzJcXG4rXFx0Ym9vbCBcXFwiQUNQSSBSQVMyIGRyaXZlclxcXCJcXG4rXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4rXFx0ZGVwZW5kcyBvbiBNQUlMQk9YXFxuK1xcdGRlcGVuZHMgb24gUENDXFxuK1xcdGhlbHBcXG4rXFx0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxcbitcXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxcbitcXG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXFxuIFxcdHRyaXN0YXRlIFxcXCJQcm9jZXNzb3JcXFwiXFxuIFxcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVxcdCs9IGVjX3N5cy5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0JHUlQpXFx0XFx0Kz0gYmdydC5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0NQUENfTElCKVxcdCs9IGNwcGNfYWNwaS5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXFx0Kz0gc3Bjci5vXFxuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXFx0XFx0Kz0gcmFzMi5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXFx0Kz0gcHB0dC5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVxcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xcbisrKyBiL2RyaXZlcnMvYWNwaS9idXMuY1xcbkBAIC0zMSw2ICszMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NhY3BpL2FwZWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1c3BlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BybXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbkBAIC0xNjEwLDYgKzE2MTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2luaXQodm9pZClcXG4gXFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XFxuIFxcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcXG4gXFx0YWNwaV92aW90X2luaXQoKTtcXG4rXFx0YWNwaV9yYXMyX2luaXQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjYxZWExNGQ5YmI5ZTU0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcXG5AQCAtMCwwICsxLDUwOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcXG4rICogcHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBlLmcuLCBmb3IgSFctYmFzZWQgbWVtb3J5XFxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJBQ1BJIFJBUzI6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9wY2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXFxuKyAqIEBtYm94X2NsaWVudDpcXHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XFxuKyAqIEBwY2NfY2hhbjpcXHRcXHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXFxuKyAqIEBjb21tX2FkZHI6XFx0XFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZWxlbTpcXHRcXHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXFxuKyAqIEBwY2NfbG9jazpcXHRcXHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcXG4rICpcXHRcXHRcXHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBAZGVhZGxpbmVfdXM6XFx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXFxuKyAqXFx0XFx0XFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cXG4rICogQHBjY19tcGFyOlxcdFxcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxcbisgKiBAcGNjX21ydHQ6XFx0XFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXFxuKyAqXFx0XFx0XFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcXG4rICpcXHRcXHRcXHRpc3N1aW5nIG5leHQgY29tbWFuZFxcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxcbisgKiBAbGFzdF9tcGFyX3Jlc2V0OlxcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XFxuKyAqIEBtcGFyX2NvdW50OlxcdFxcdE1QQVIgY291bnRcXG4rICogQHBjY19pZDpcXHRcXHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxcbisgKiBAbGFzdF9jbWQ6XFx0XFx0TGFzdCBQQ0MgY29tbWFuZFxcbisgKiBAa3JlZjpcXHRcXHRrcmVmIG9iamVjdFxcbisgKi9cXG4rc3RydWN0IHJhczJfc3NwY2Mge1xcbitcXHRzdHJ1Y3QgbWJveF9jbGllbnRcXHRcXHRtYm94X2NsaWVudDtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW5cXHRcXHQqcGNjX2NoYW47XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVxcdCpjb21tX2FkZHI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRlbGVtO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRwY2NfbG9jaztcXG4rXFx0dTY0XFx0XFx0XFx0XFx0ZGVhZGxpbmVfdXM7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcGFyO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRwY2NfbXJ0dDtcXG4rXFx0a3RpbWVfdFxcdFxcdFxcdFxcdGxhc3RfY21kX2NtcGxfdGltZTtcXG4rXFx0a3RpbWVfdFxcdFxcdFxcdFxcdGxhc3RfbXBhcl9yZXNldDtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bXBhcl9jb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0XFx0cGNjX2lkO1xcbitcXHR1MTZcXHRcXHRcXHRcXHRsYXN0X2NtZDtcXG4rXFx0c3RydWN0IGtyZWZcXHRcXHRcXHRrcmVmO1xcbit9O1xcbitcXG4rLypcXG4rICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXFxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcXG4rICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXFxuKyAqL1xcbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcXG4rI2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxcbisjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXFxuK1xcbisjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXFxuKyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcXG4rXFxuKy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cXG4rc3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xcbitcXG4rc3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0dTMyIGNhcF9zdGF0dXM7XFxuK1xcdHUxNiBzdGF0dXM7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcXG4rXFx0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXFxuK1xcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxcbitcXHQgKlxcbitcXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXFxuK1xcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcXG4rXFx0ICogYml0IGlzIHNldC5cXG4rXFx0ICovXFxuK1xcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgc3RhdHVzLFxcbitcXHRcXHRcXHRcXHRcXHRzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcXG4rXFx0XFx0XFx0XFx0XFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiUENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCwgcmMpO1xcbitcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCk7XFxuK1xcdFxcdHN0YXR1cyBcXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcXG4rXFx0XFx0aW93cml0ZTE2KHN0YXR1cywgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdGlvd3JpdGUzMigweDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cXG4rXFx0cm1iKCk7XFxuK1xcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFx0c3dpdGNoIChjYXBfc3RhdHVzKSB7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDpcXG4rXFx0XFx0cmMgPSAtRVBFUk07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFDUElfUkFTMl9CVVNZOlxcbitcXHRcXHRyYyA9IC1FQlVTWTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxcbitcXHRcXHRyYyA9IC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGUzMigweDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbFxcbisgKiBAcmFzMl9jdHg6XFx0cG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZVxcbisgKiBAY21kOlxcdFJBUzIgY29tbWFuZCB0byBzZW5kXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXFxuKyAqL1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlO1xcbitcXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXHRzNjQgdGltZV9kZWx0YTtcXG4rXFx0dTE2IHZhbDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2hlY2sgZm9yIGNtZCBQQ0NfQ01EX0VYRUNfUkFTMiBhcyBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvblxcbitcXHQgKiBzdXBwb3J0cyBjb21tYW5kIFBDQ19DTURfRVhFQ19SQVMyIG9ubHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhczJfY3R4IHx8IGNtZCAhPSBQQ0NfQ01EX0VYRUNfUkFTMikge1xcbitcXHRcXHRwcl93YXJuKFxcXCIlczogSW52YWxpZCBwYXJhbWV0ZXJzIHJhczJfY3R4OiAlcCBjb21tYW5kOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHNzcGNjID0gcmFzMl9jdHgtXFx1MDAzZXNzcGNjO1xcbitcXHRnZW5fY29tbV9iYXNlID0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVxcdTAwM2VwY2NfY2hhbi1cXHUwMDNlbWNoYW47XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxcbitcXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXFxuK1xcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuK1xcdFxcdHRpbWVfZGVsdGEgPSBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XFxuK1xcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQgXFx1MDAzZSB0aW1lX2RlbHRhKVxcbitcXHRcXHRcXHRmc2xlZXAoc3NwY2MtXFx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZVxcbitcXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxcbitcXHQgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBub1xcbitcXHQgKiBsaW1pdGF0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0XFxuK1xcdCAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZVxcbitcXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXFxuK1xcdCAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVJcXG4rXFx0ICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcGFyKSB7XFxuK1xcdFxcdGlmICghc3NwY2MtXFx1MDAzZW1wYXJfY291bnQpIHtcXG4rXFx0XFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcXG4rXFx0XFx0XFx0aWYgKCh0aW1lX2RlbHRhIFxcdTAwM2MgNjAgKiBNU0VDX1BFUl9TRUMpIFxcdTAwMjZcXHUwMDI2IHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2RiZyhyYXMyX2N0eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiUENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFxcXCIsIGNtZCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cXHUwMDNlcGNjX21wYXI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQtLTtcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xcbitcXHRpb3dyaXRlMTYoY21kLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlY29tbWFuZCk7XFxuK1xcbitcXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cXG4rXFx0aW93cml0ZTE2KDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXG4rXFx0LyogUmluZyBkb29yYmVsbCAqL1xcbitcXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcXHUwMDI2Y21kKTtcXG4rXFx0LypcXG4rXFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxcbitcXHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbitcXHRcXHRkZXZfd2FybihyYXMyX2N0eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkVycm9yIHNlbmRpbmcgUENDIG1ib3ggbWVzc2FnZSBjb21tYW5kOiAweCV4LCByYzolZFxcXFxuXFxcIiwgY21kLCByYyk7XFxuK1xcdFxcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xcbitcXHRcXHR2YWwgPSBpb3JlYWQxNihcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xcbitcXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VsYXN0X2NtZCA9IGNtZDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gYW5kIGNoZWNrIGZvciBQQ0MgZXJyb3IgYml0ICovXFxuK1xcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtIHx8IHBjY19jaGFuLVxcdTAwM2VzaG1lbV9zaXplIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBhY3BpX3JhczJfc2htZW0pKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XFxuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVxcdTAwM2VpZCk7XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXFx1MDAzZXNzcGNjKTtcXG4rY3R4X2ZyZWU6XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MTYgdG90X3RibF9sZW47XFxuK1xcdHUxNiBpO1xcbitcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIFxcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xcbitcXHRpZiAocmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGggXFx1MDAzYyB0b3RfdGJsX2xlbikge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGN0eF9saXN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XFxuK1xcdFxcdGlmIChwY2NfZGVzY19saXN0LVxcdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXFx1MDAzZWNoYW5uZWxfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGNjX2Rlc2NfbGlzdC1cXHUwMDNlaW5zdGFuY2UpO1xcbitcXHRcXHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cXG4rXFx0XFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXFxcblxcXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcXG4rXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzZSAwOyBpLS0pIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXFxuK1xcdFxcdFxcdFxcdFxcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtmcmVlKHBjdHhfbGlzdCk7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcXG4rXFx0fVxcbitcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXFxuKyAqIG1lbW9yeSBmZWF0dXJlLlxcbisgKlxcbisgKiBSZXR1cm5zOiBub25lLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcXG4rXFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcXHUwMDI2cmFzMl90YWIpO1xcbitcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxcXG5cXFwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XFxuIFxcdFNDUlVCX0FERFJFU1MsXFxuIFxcdFNDUlVCX1NJWkUsXFxuIFxcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxcbitcXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxcbiBcXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcXG4gXFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFxcXCIweCVsbHhcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXFx0XFx0XFx0XFxcXFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBcXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDQ0NDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xcbitcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VzZXRfZW5hYmxlZF9vZClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxcbiBcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfbWluX2N5Y2xlKVxcbiBcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxcbiBcXHRcXHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXFxuK1xcdFxcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxcbiBcXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXFxuIFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuIFxcbitjb25maWcgTUVNX0FDUElfUkFTMlxcbitcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSV9SQVMyXFxuK1xcdGRlcGVuZHMgb24gRURBQ1xcbitcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4rXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4rXFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cXG4rXFx0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcXG4rXFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcbitcXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxcbitcXG4gZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXFxuQEAgLTIsNiArMiw3IEBAXFxuIG9iai0kKENPTkZJR19SQVMpXFx0Kz0gcmFzLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdCs9IGRlYnVnZnMub1xcbiBvYmotJChDT05GSUdfUkFTX0NFQylcXHQrPSBjZWMub1xcbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcXHQrPSBhY3BpX3JhczIub1xcbiBcXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVxcdCs9IGFtZC9mbXBtLm9cXG4gb2JqLXlcXHRcXHRcXHQrPSBhbWQvYXRsL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTFhZGZjZGRmYTk5YThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcXG5AQCAtMCwwICsxLDYyNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdClcXHRcXFwiQUNQSSBSQVMyIE1FTU9SWTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VkYWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcXG4rXFxuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcXG4rXFxuKy8qXFxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXFxuKyAqL1xcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcXG4rXFxuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcXG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXFxuK1xcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xcbit9O1xcbitcXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcXG4rXFxuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpb3dyaXRlOCgwLCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VzZXRfY2Fwc1swXSk7XFxuK1xcbitcXHRyZXR1cm4gaW9yZWFkOChcXHUwMDI2Y29tbW9uLVxcdTAwM2VmZWF0dXJlc1swXSkgXFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX291dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQWZ0ZXIgYmFja2dyb3VuZCBzY3J1YmJpbmcgc3RhcnRzLCB0aGUgdXNlciBtdXN0IHNldCB0aGUgYWRkcmVzc1xcbitcXHRcXHQgKiByYW5nZSBiZWZvcmUgaW5pdGlhdGluZyBhIG5ldyBkZW1hbmQgc2NydWJiaW5nIG9wZXJhdGlvbi4gVGhlXFxuK1xcdFxcdCAqIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlIGN1cnJlbnQgc2NydWJiaW5nXFxuK1xcdFxcdCAqIHJhbmdlLCBhcmUgbm90IHZhbGlkIGR1cmluZyBiYWNrZ3JvdW5kIHNjcnViYmluZyBhbmQgdGhlcmVmb3JlXFxuK1xcdFxcdCAqIGFyZSByZXNldCB3aGVuIGl0IHN0YXJ0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgIChpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIpIHtcXG4rXFx0XFx0KnJ1bm5pbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0KnJ1bm5pbmcgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcXG4rXFx0aWYgKCEoKnJ1bm5pbmcpKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YilcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXFxuK1xcdFxcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcXG4rXFx0XFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcbitcXHRcXHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFxuK1xcdFxcdGlmICghcnVubmluZykge1xcbitcXHRcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXFx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK2V4aXQ6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCptaW4gPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0Km1heCA9IHJhczJfY3R4LVxcdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXFxuK3tcXG4rXFx0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxcbitcXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KmVuYWJsZWQgPSByYXMyX2N0eC1cXHUwMDNlYmdfc2NydWI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdFxcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxcbitcXHRcXHQgKiBhcyB0aGUgQUkgcmV2aWV3IHRvb2wgc3VnZ2VzdGVkLCBpZiBpdCBpcyBub3QgcnVubmluZyEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xcbitcXHRcXHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCplbmFibGVkID0gcnVubmluZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heSBuZWVkIHRvIHJldHVybiB0aGUgZXJyb3IgY29kZSBmcm9tIGJlbG93IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIHVzZXJcXG4rXFx0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxcbitcXHQgKiBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseS5cXG4rXFx0ICovXFxuK1xcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcXG4rXFx0XFx0ICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0b1xcbitcXHRcXHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxcbitcXHRcXHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInJhczJfc2NydWJfbmlkJWRcXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eC1cXHUwMDNldGhyZWFkKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcXG4rXFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcXG4rXFx0XFx0XFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIGV4aXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rZXhpdDpcXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XFxuK1xcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcXG4rXFx0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxcbitcXHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcXG4rXFx0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXFxuK1xcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXFxuK1xcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXFxuK1xcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXFxuK1xcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXFxuK1xcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxcbitcXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxcbitcXHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQcmV2ZW50IHRoZSB0aHJlYWQncyBgdGFza19zdHJ1Y3RgIGZyb20gYmVpbmcgZnJlZWQgaWYgdGhlXFxuK1xcdFxcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGdldF90YXNrX3N0cnVjdChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcF9wdXQocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XFxuK1xcdGNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxcbitcXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xcbitcXHQgKiB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXMgaW4gdGhlIE5VTUEgZG9tYWluXFxuK1xcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcXG4rXFx0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xcbitcXHQgKiBhbHJlYWR5IHBlcmZvcm1lZCBpbiBhZGRfYXV4X2RldmljZSgpIGluIC9hY3BpL3JhczIuY1xcbitcXHQgKi9cXG4rXFx0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxcXG5cXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcml2ZXJfYWN0aXZlOlxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJpdmVyX2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjQ0LjA1NjM4NzA4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNjAyODAzMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBJdCByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBBQ1BJIHRhYmxlcyBhbmQgbWFpbGJveCBtZWNoYW5pc21zIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGRyaXZlciBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZXMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MWU0ZDhkMjFhZDI0ODc3NTA1YThlYWMyNDZmMWFlNWRmMTg0ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDc6MzE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li5jOTFlM2ZmMGUzZDI0MCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4rXHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICszMCwyMCBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxuIFx0XHQob24tZGVtYW5kIHNjcnViYmluZykuXG4gXG4rV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4rRGF0ZTpcdFx0SmFuIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ni4xOVxuK0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXG4rXHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4rXG4rXHRcdEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlXG4rXHRcdGFkZHJlc3MgcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZ1xuK1x0XHRvcGVyYXRpb24uIFRoZSBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZVxuK1x0XHRjdXJyZW50IHNjcnViYmluZyByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZFxuK1x0XHRzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZSBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuXG4rXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxuIFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcbitcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuK1xuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuK1xuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuK1xuKzBcbitcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXG4rXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszNjAwMFxuK1xuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cbitcbiszNjAwXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuK1xuKzg2NDAwXG4rXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cbitcbisjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuK1xuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4rXG4rIyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4rXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4rXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cbitcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuK1xuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuK1xuKzBcbitcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4rXG4rIyBlY2hvIDIxNjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxuK1xuKyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbitjb25maWcgQUNQSV9SQVMyXG4rXHRib29sIFwiQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuK1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4rXHRkZXBlbmRzIG9uIFBDQ1xuK1x0aGVscFxuK1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuK1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbitcbitcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbitcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwiUHJvY2Vzc29yXCJcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCs9IGVjX3N5cy5vXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcdFx0Kz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQrPSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQrPSBzcGNyLm9cbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQrPSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXHQrPSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FjcGkvYXBlaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJtdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuK1x0YWNwaV9yYXMyX2luaXQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MWVhMTRkOWJiOWU1NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xuQEAgLTAsMCArMSw1MDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJBQ1BJIFJBUzI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuKyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuKyAqIEBjb21tX2FkZHI6XHRcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cbisgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuKyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4rICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuKyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbisgKiBAcGNjX21wYXI6XHRcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxuKyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuKyAqXHRcdFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuKyAqIEBtcGFyX2NvdW50Olx0XHRNUEFSIGNvdW50XG4rICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbisgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbisgKiBAa3JlZjpcdFx0a3JlZiBvYmplY3RcbisgKi9cbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4rXHRzdHJ1Y3QgbWJveF9jbGllbnRcdFx0bWJveF9jbGllbnQ7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGVsZW07XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbitcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4rXHR1bnNpZ25lZCBpbnRcdFx0XHRwY2NfbXBhcjtcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9tcGFyX3Jlc2V0O1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bXBhcl9jb3VudDtcbitcdGludFx0XHRcdFx0cGNjX2lkO1xuK1x0dTE2XHRcdFx0XHRsYXN0X2NtZDtcbitcdHN0cnVjdCBrcmVmXHRcdFx0a3JlZjtcbit9O1xuK1xuKy8qXG4rICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxuKyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LlxuKyAqL1xuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxuKyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDBcbisjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4rXG4rI2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMFxuKyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbitcbisvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovXG4rc3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XG4rXG4rc3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0dTMyIGNhcF9zdGF0dXM7XG4rXHR1MTYgc3RhdHVzO1xuK1x0aW50IHJjO1xuK1xuK1x0LypcbitcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcbitcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuK1x0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXG4rXHQgKlxuK1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuK1x0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxuK1x0ICogYml0IGlzIHNldC5cbitcdCAqL1xuK1x0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuK1x0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuK1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbitcdGlmIChyYykge1xuK1x0XHRwcl93YXJuKFwiUENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kLCByYyk7XG4rXG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfRVJST1IpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwiLFxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQpO1xuK1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbitcdFx0aW93cml0ZTE2KHN0YXR1cywgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbitcdHJtYigpO1xuK1x0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuK1x0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDpcbitcdFx0cmMgPSAtRVBFUk07XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcbitcdFx0cmMgPSAtRUJVU1k7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQTpcbitcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJjID0gMDtcbitcdH1cbitcbitcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbFxuKyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbisgKiBAY21kOlx0UkFTMiBjb21tYW5kIHRvIHNlbmRcbisgKlxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4rICovXG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTtcbitcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1x0czY0IHRpbWVfZGVsdGE7XG4rXHR1MTYgdmFsO1xuK1x0aW50IHJjO1xuK1xuK1x0LypcbitcdCAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb25cbitcdCAqIHN1cHBvcnRzIGNvbW1hbmQgUENDX0NNRF9FWEVDX1JBUzIgb25seS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHtcbitcdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIHBhcmFtZXRlcnMgcmFzMl9jdHg6ICVwIGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKiBXYWl0IGZvciBjb21wbGV0aW9uIGFuZCBjaGVjayBmb3IgUENDIGVycm9yIGJpdCAqL1xuK1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dC5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbitcbitcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuK1x0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbitcbitcdHJldHVybiByYztcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCJhY3BpX3JhczJcIik7XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4rXHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSB8fCBwY2NfY2hhbi1cdTAwM2VzaG1lbV9zaXplIFx1MDAzYyBzaXplb2Yoc3RydWN0IGFjcGlfcmFzMl9zaG1lbSkpIHtcbitcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbitcdFx0a2ZyZWUoc3NwY2MpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHNzcGNjLVx1MDAzZXBjY19pZFx0XHQ9IHBjY19pZDtcbitcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4rXHRzc3BjYy1cdTAwM2Vjb21tX2FkZHJcdD0gcGNjX2NoYW4tXHUwMDNlc2htZW07XG4rXHRpZiAocGNjX2NoYW4tXHUwMDNlbGF0ZW5jeSlcbitcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuK1x0ZWxzZVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcbitcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbitcdHNzcGNjLVx1MDAzZXBjY19tcGFyXHRcdD0gcGNjX2NoYW4tXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xuK1x0c3NwY2MtXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXHQ9IHRydWU7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0sIFx1MDAyNnJhczJfc3NwY2MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9IHBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXG4rXHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbitcdGtmcmVlKHJhczJfY3R4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MzIgY29tcF9uaWQ7XG4rXHRpbnQgaWQsIHJjO1xuK1xuK1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4rXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XG4rXHRcdHByX2RlYnVnKFwiSW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4rXG4rXHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxcblwiLCBjaGFubmVsLFxuK1x0XHRcdCBweG1faW5zdCwgcmMpO1xuK1x0XHRnb3RvIGN0eF9mcmVlO1xuK1x0fVxuK1xuK1x0aWQgPSBpZGFfYWxsb2MoXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4rXHRcdHJjID0gaWQ7XG4rXHRcdGdvdG8gcGNjX2ZyZWU7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmlkXHRcdD0gaWQ7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5kZXYucmVsZWFzZVx0PSByYXMyX3JlbGVhc2U7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5wYXJlbnRcdD0gcmFzMl9jdHgtXHUwMDNlZGV2O1xuK1xuK1x0cmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gaWRhX2ZyZWU7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmFzMl9jdHg7XG4rXG4raWRhX2ZyZWU6XG4rXHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgaWQpO1xuK3BjY19mcmVlOlxuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK2N0eF9mcmVlOlxuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK1xuK1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZShcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqcGNjX2Rlc2NfbGlzdDtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHUxNiB0b3RfdGJsX2xlbjtcbitcdHUxNiBpO1xuK1xuK1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIkFDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgKyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyB0b3RfdGJsX2xlbikge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBjdHhfbGlzdClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XG4rXHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbitcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbitcdFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXG4rXHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4rXHRcdFx0cHJfd2FybihcIkZhaWxlZCB0byBhZGQgUkFTMiBhdXhpbGlhcnkgZGV2aWNlIHJjPSVsZFxcblwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XG4rXHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuK1x0XHRcdFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXG4rXHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuK1x0XHRcdH1cbitcdFx0XHRrZnJlZShwY3R4X2xpc3QpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbitcdFx0fVxuK1x0XHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcbitcdH1cbitcdGtmcmVlKHBjdHhfbGlzdCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbisgKlxuKyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXG4rICogbWVtb3J5IGZlYXR1cmUuXG4rICpcbisgKiBSZXR1cm5zOiBub25lLlxuKyAqL1xuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4rXHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbitcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCIsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCIpO1xuK1xuK1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmNcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuK1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFwiMHglbGx4XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwiMHglbGx4XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcIiV1XFxuXCIpXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtaW5fY3ljbGVfZHVyYXRpb24sIGdldF9taW5fY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwiJXVcXG5cIilcbkBAIC04NCw2ICs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4rRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcbiBcdFx0XHRcdHJldHVybiAwNDQ0O1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuK1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4rXHRcdFx0aWYgKG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZClcbitcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIDA0NDQ7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxuIFx0XHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXG4rXHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbisrKyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcbitcdHRyaXN0YXRlIFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcIlxuK1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbitcdGRlcGVuZHMgb24gRURBQ1xuK1x0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXG4rXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbitcdGhlbHBcbitcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXG4rXHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuK1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbitcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcbitcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4rXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgKzIsNyBAQFxuIG9iai0kKENPTkZJR19SQVMpXHQrPSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0Kz0gY2VjLm9cbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0Kz0gYW1kL2ZtcG0ub1xuIG9iai15XHRcdFx0Kz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUxYWRmY2RkZmE5OWE4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCArMSw2MjQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdClcdFwiQUNQSSBSQVMyIE1FTU9SWTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZGFjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcbitcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcbisjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuK1xuKy8qXG4rICogUkFTMiBwYXRyb2wgc2NydWJcbisgKi9cbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4rXG4rI2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuK1xuK3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcbit9O1xuK1xuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxuK1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbitcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4rXG4rc3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHI7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0aW93cml0ZTgoMCwgXHUwMDI2Y29tbW9uLVx1MDAzZXNldF9jYXBzWzBdKTtcbitcbitcdHJldHVybiBpb3JlYWQ4KFx1MDAyNmNvbW1vbi1cdTAwM2VmZWF0dXJlc1swXSkgXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xuK1x0aW50IHJldDtcbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdC8qXG4rXHRcdCAqIEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlIGFkZHJlc3NcbitcdFx0ICogcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZyBvcGVyYXRpb24uIFRoZVxuK1x0XHQgKiBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZSBjdXJyZW50IHNjcnViYmluZ1xuK1x0XHQgKiByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZCBzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZVxuK1x0XHQgKiBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuXG4rXHRcdCAqL1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4rXHRcdCpydW5uaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuK1x0aWYgKCEoKnJ1bm5pbmcpKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuK1x0XHRcdGdvdG8gZXhpdDtcbitcbitcdFx0LypcbitcdFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXG4rXHRcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcbitcdFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuK1x0XHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbitcdFx0ICovXG4rXHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdGlmICghcnVubmluZykge1xuK1x0XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cdTAwM2VkZXYsIHJhczJfY3R4LCB0cnVlKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiRmFpbGVkIHRvIGVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIHJldD0lZFxcblwiLCByZXQpO1xuK1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRtc2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitleGl0OlxuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUpXG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqbWF4ID0gcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxuK1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQvKlxuK1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuK1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuK1x0ICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqYmFzZSA9IHJhczJfY3R4LVx1MDAzZWJhc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KnNpemUgPSByYXMyX2N0eC1cdTAwM2VzaXplO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBiYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4rXHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4rXHRcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxuK1x0XHQgKiBhcyB0aGUgQUkgcmV2aWV3IHRvb2wgc3VnZ2VzdGVkLCBpZiBpdCBpcyBub3QgcnVubmluZyEuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwiLFxuK1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbitcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCplbmFibGVkID0gcnVubmluZztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVuYWJsZSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGV4aXQ7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbitcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4rXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4rXHQgKi9cbitcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbitcdFx0cmV0ID0gLUVSQU5HRTtcbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cIiwgcmV0KTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4rXG4rXHQvKlxuK1x0ICogTWF5IG5lZWQgdG8gcmV0dXJuIHRoZSBlcnJvciBjb2RlIGZyb20gYmVsb3cgZnVuY3Rpb24gY2FsbCB0byB0aGUgdXNlclxuK1x0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxuK1x0ICogZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHkuXG4rXHQgKi9cbitcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLFxuK1x0XHQgKiB0aGUgdGhyZWFkIG1heSBkZXRlcm1pbmUgdGhhdCBkZW1hbmQgc2NydWJiaW5nIGlzIG5vdCBydW5uaW5nLCBhdHRlbXB0IHRvXG4rXHRcdCAqIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcsIGFuZCB0aGVuIGV4aXQuIFRoaXMgY2FuIG9jY3VyIGJlY2F1c2UgdGhlXG4rXHRcdCAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuXG4rXHRcdCAqL1xuK1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcbitcdFx0XHRcdFx0ICAgICAgIFwicmFzMl9zY3J1Yl9uaWQlZFwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXG4rXHRcdFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcbitcdFx0XHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Z290byBleGl0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4rXHR9XG4rXG4rZXhpdDpcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuK1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuK1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuK1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4rXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbitcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4rXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuK1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbitcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4rXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4rXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4rXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuK1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmV2ZW50IHRoZSB0aHJlYWQncyBgdGFza19zdHJ1Y3RgIGZyb20gYmVpbmcgZnJlZWQgaWYgdGhlXG4rXHRcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cbitcdFx0ICovXG4rXHRcdGdldF90YXNrX3N0cnVjdChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRrdGhyZWFkX3N0b3BfcHV0KHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xuK1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuK1x0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxuK1x0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xuK1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbitcdCAqL1xuK1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbisgKi9cbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbitcdHZvaWRcdFx0XHRcdCpzc3BjYztcbitcdHN0cnVjdCBtdXRleFx0XHRcdCpwY2NfbG9jaztcbitcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuK1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbitcdHU2NFx0XHRcdFx0bWVtX3NpemU7XG4rXHR1NjRcdFx0XHRcdGJhc2U7XG4rXHR1NjRcdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdFx0c2NydWJfY3ljbGVfaHJzO1xuK1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWF4X3NjcnViX2N5Y2xlO1xuK1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4rXHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbitcdGJvb2xcdFx0XHRcdHJlZW5hYmxlX2JnX3NjcnViO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4rXHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbisgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4rXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuIFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcbiBcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XG4gXHRpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6NDQuMDU2Mzg5NDQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzNzM3MDQ5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBQ1BJIFJBUzIgU2NydWJiaW5nOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggYWRkaW5nIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBJdCdzIGdvdCBhIG5ldyBkcml2ZXIsIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCwgYW5kIGEgcmVsYXRlZCBvbmUgaW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCwgcGx1cyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9lZGFjL3NjcnViLmNgIGZvciBgZW5hYmxlX2RlbWFuZGAuIFRoZSB3aG9sZSB0aGluZyB1c2VzIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSwgd2hpY2ggaXMgYW4gQUNQSSB0aGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBDQyBzZWVtcyB0cmlja3kgYmVjYXVzZSBpdCByZWxpZXMgb24gbWFpbGJveGVzLiAgQUNQSSB0YWJsZXMgYXJlIG9mdGVuIHByb3ZpZGVkLCBidXQgdGhpcyBtYWlsYm94IHRoaW5nIGlzIGRpZmZlcmVudC5cblxuQWxyaWdodCwgbGV0J3MgZGlnIGludG8gYGRyaXZlcnMvYWNwaS9yYXMyLmNgLiAgTG9va3MgbGlrZSBpdCB1c2VzIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiAgTm93LCBRRU1VLi4uIFFFTVUgZG9lc24ndCBqdXN0IGhhbmQgeW91IEFDUEkgUkFTMiBvciBQQ0MgbWFpbGJveGVzIG91dCBvZiB0aGUgYm94IGZvciBlYXN5IGZ1enppbmcuIFN5emthbGxlciAqY2FuKiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzIG9yIHVzZSBzb2Z0d2FyZSBtYWlsYm94ZXMsIGlmIHRoZXkgZXhpc3QsIGJ1dCBQQ0MgbWFpbGJveGVzIGFyZSB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuICBJcyB0aGVyZSBhIHNvZnR3YXJlIFBDQyBtYWlsYm94IGhlcmUsIG9yIGlzIGl0IHB1cmVseSBoYXJkd2FyZT9cblxuQWhhISBgZHJpdmVycy9tYWlsYm94L3BjYy5jYCBzZWVtcyB0byBwcm92aWRlIGEgUENDIG1haWxib3ggKmNvbnRyb2xsZXIqLiBJdCByZWFkcyB0aGUgUENDVCBBQ1BJIHRhYmxlLiBTbywgaWYgc3l6a2FsbGVyIGNhbiBwcm92aWRlIGEgY3VzdG9tIFBDQ1QgdGFibGUsIGl0IG1pZ2h0IHRyaWdnZXIgdGhhdC5cblxuV2FpdCBhIHNlY29uZCwgdGhpcyBwYXRjaCAqYWxzbyogYWRkcyBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGNvbmZpZ3MuIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgZHJpdmVyIHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlLCByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSwgYW5kIHRoZW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCBwcm9iZXMgaXQuICBUaGVuIGl0IGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyB2aWEgRURBQy4gICpUaGF0KiBJIGNhbiBmdXp6LiBTeXprYWxsZXIgbG92ZXMgc3lzZnMuIExldCdzIHNlZS4uLiB3ZSBoYXZlIHRoaW5ncyBsaWtlIGBlbmFibGVfZGVtYW5kYCwgYGVuYWJsZV9iYWNrZ3JvdW5kYCwgYGFkZHJgLCBgc2l6ZWAsIGBjdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYWxsIGdvb2QgdGFyZ2V0cy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGByYXMyX2h3X3NjcnViX3JlYWRfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZWAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYC5cblxuQWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyAqaWYqIHRoZSBkZXZpY2UgaXMgcHJvYmVkLiBBbmQgZm9yIHRoZSBkZXZpY2UgdG8gcHJvYmUsIHdlIG5lZWQgdGhhdCBSQVMyIEFDUEkgdGFibGUuIENhbiBTeXprYWxsZXIgaW5qZWN0IEFDUEkgdGFibGVzP1xuXG5TeXprYWxsZXIgaXNuJ3QgbWFnaWMsIGl0IGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgQUNQSSB0YWJsZSBpbmplY3Rpb24gbWVjaGFuaXNtIHRoYXQgd29ya3MgcmVsaWFibHkgZm9yIGFsbCB0YWJsZXMgZHVyaW5nIGJvb3QuIFdlIGhhdmUgYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIHdoaWNoIG1pZ2h0IGFsbG93IG92ZXJyaWRpbmcgdmlhIGluaXRyZCwgb3IgY29uZmlnZnMgQUNQSSB0YWJsZSBpbmplY3Rpb24uXG5cbldhaXQgYSBtaW51dGUsIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgZHVyaW5nIGJvb3QuIExldCdzIHNlZSB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG52b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxue1xuXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcblx0YWNwaV9zdGF0dXMgc3RhdHVzO1xuXG5cdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcblx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCIsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcblx0XHRyZXR1cm47XG5cdH1cbi4uLlxuYGBgXG5cbklmIGl0IGRvZXNuJ3QgZmluZCB0aGUgdGFibGUsIGl0IGp1c3QgYmFpbHMuICBTbywgY2FuIHN5emthbGxlciAqcmVhY2gqIHRoaXM/ICBTeXprYWxsZXIgdXN1YWxseSBib290cyB3aXRoIGZpeGVkIEFDUEkgdGFibGVzIGZyb20gUUVNVSwgYW5kIFFFTVUgcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgUkFTMiB0YWJsZSB5ZXQuICBXZSBjYW4ndCB1c2UgY29uZmlnZnMgYmVjYXVzZSBgYWNwaV9yYXMyX2luaXRgIGlzIGBfX2luaXRgISAgSXQncyBhIG9uZS10aW1lIHRoaW5nIGF0IGJvb3QuIElmIFFFTVUgZG9lc24ndCBwcm92aWRlIHRoZSBSQVMyIHRhYmxlLCB0aGUgZHJpdmVyIG5ldmVyIGJpbmRzLCBhbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgbmV2ZXIgZ2V0IGNyZWF0ZWQuICBUaGVyZSdzIG5vIHdheVxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzI6MDAuNDMwMDk4MzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjI5Nzg5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X2VuYWJsZWRfb2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9lZGFjL3NjcnViLmM9ODg9RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuZHJpdmVycy9lZGFjL3NjcnViLmM6ODk6RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy05MC1FREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4tLVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jPTkyPXN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYy0xMjYtXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzoxMjc6XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI4LVxcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9Mzk0PXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNDA5LVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQxMDpzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNDExLXtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTUxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI1LVxcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM6NTI2OlxcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI3LVxcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTY3Mj1lbnVtIGVkYWNfZGV2X2ZlYXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg3LSAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbmluY2x1ZGUvbGludXgvZWRhYy5oOjY4ODogKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg5LSAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTY5ND1zdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNzAxLVxcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjcwMjpcXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMy1cXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMjowNy4xNTMwODM5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk4MzAxNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbGl6YXRpb24gb2YgYGFjcGlfcmFzMi5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYWNwaV9yYXMyLmNgIGRyaXZlciwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgaXNvbGF0ZWQuIFRoZSBvbmx5IHBsYWNlIEknbSBzZWVpbmcgYHNldF9lbmFibGVkX29kYCB1c2VkIGlzIHdpdGhpbiB0aGlzIG1vZHVsZS4gTm93LCB0aGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIEFDUEkgUkFTMiB0YWJsZXMsIGFuZCB0aG9zZSBhcmVuJ3QgZXZlbiBwcmVzZW50IGluIGEgUUVNVSBlbnZpcm9ubWVudC4gUGx1cywgUUVNVSBkb2Vzbid0IG1vZGVsIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9ucyBDaGFubmVsIChQQ0MpIG1haWxib3ggaGFyZHdhcmUgdGhhdCB0aGlzIGRyaXZlciB3b3VsZCB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBTbywgcmVhbGlzdGljYWxseSwgdGhpcyBkcml2ZXIgc2hvdWxkIGJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lLlxuXG5Ib2xkIG9uLCB0aG91Z2guIEknbSB3b25kZXJpbmcgaWYgSSBjYW4gdHJpY2sgaXQuIENhbiBJIHBvdGVudGlhbGx5IGxvYWQgYSBmYWtlIEFDUEkgdGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCBmb3JjZSBhIHByb2JlPyBXYWl0LCBubywgdGhhdCB3b24ndCB3b3JrLiBUaGUgYGFjcGlfcmFzMl9pbml0YCBmdW5jdGlvbiBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIG1lYW5pbmcgaXQgb25seSBnZXRzIGV4ZWN1dGVkIGR1cmluZyBib290LCB3aGlsZSB0aGUgY29uZmlnZnMgQUNQSSB0YWJsZSBsb2FkaW5nIGhhcHBlbnMgbGF0ZXIgaW4gdGhlIHByb2Nlc3MuXG5cbkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIGZha2UgdGFibGUgdXNpbmcgaW5pdHJkIOKAkyB3aGljaCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggc3l6a2FsbGVyLCBhbHRob3VnaCBpdCdzIG5vdCBjdXJyZW50bHkgc2V0IHVwIGZvciBSQVMyIOKAkyB0aGUgZHJpdmVyIHN0aWxsIHJlbGllcyBvbiB0aGF0IFBDQyBjaGFubmVsLiBJIHNob3VsZCBjaGVjayB0aGF0IGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgIGZ1bmN0aW9uIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDkwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMyOjEyLjA1MTM4ODQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI1NzMyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGF0YS1cXHUwMDNlZG9uZSk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XFx0ZGF0YS1cXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmRhdGEtXFx1MDAzZWNsLCBjdHgtXFx1MDAzZXN1YnNwYWNlX2lkKTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cXHRpZiAoSVNfRVJSKGRhdGEtXFx1MDAzZXBjY19jaGFuKSkge1xcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jPTU2Nj1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKGludCBwY2Nfc3NfaWR4KVxcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cXHRpZiAocGNjX3NzX2lkeCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTczLVxcbi0tXFxuZHJpdmVycy9hY3BpL3JhczIuYz0yODg9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA5LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzEwOlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XFxuZHJpdmVycy9hY3BpL3JhczIuYy0zMTEtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTA2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfcmVxdWVzdF9wY2NfY2hhbihzdHJ1Y3QgaGlzaV91bmNvcmVfZnJlcSAqdW5jb3JlKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTYtXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYzoxMTc6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnVuY29yZS1cXHUwMDNlY2wsIHVuY29yZS1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTgtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjktXFx0XFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0gc2xpbXByb19pMmNfcGNjX3J4X2NiO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgY3R4LVxcdTAwM2VtYm94X2lkeCk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlxcdFxcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlxcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0xNzM9c3RhdGljIGludCBoY2NzX3JlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjE4OTpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE5MC1cXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTM3PWV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmluY2x1ZGUvYWNwaS9wY2MuaC00My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMyOjE2LjM3NzEzMTQyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyODIwMTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggcHVyc3VpbmcgZm9yIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAsIGRlcGVuZHMgb24gYSByZWdpc3RlcmVkIFBDQyBjaGFubmVsLiBUaG9zZSBjaGFubmVscyBhcmUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZXN0YWJsaXNoZWQgdGhyb3VnaCB0aGUgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2AgY29kZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcGFyc2VzIHRoZSBQQ0NUIEFDUEkgdGFibGUuIFRoZSBjYXRjaD8gVGhpcyBlbnRpcmUgc2V0dXAgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgUENDVCBhbmQgUkFTMiBBQ1BJIHRhYmxlcy5cblxuU2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhhdCdzIGEgcHJvYmxlbS4gUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24ndCBlbXVsYXRlIHRoZXNlIEFDUEkgdGFibGVzLiBBbmQsIGtub3dpbmcgaG93IHN5emthbGxlciB3b3JrcywgaXQncyBub3QgaW5qZWN0aW5nIHRoZW0gZWl0aGVyLiBUaGF0IG1lYW5zIHRoZSBjb2RlIHBhdGggaW52b2x2aW5nIHRoZSBQQ0MgY2hhbm5lbCBhbmQgdGhlIEFDUEkgdGFibGVzIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBUaGVyZWZvcmUsIGZyb20gYSBwdXJlIHJlYWNoYWJpbGl0eSBzdGFuZHBvaW50LCBJIGhhdmUgdG8gY29uY2x1ZGUgYFdvcnRoRnV6emluZz1mYWxzZWAgaGVyZS5cblxuVG8gYmUgcHJlY2lzZSwgdGhlIHBhdGNoIGlzIGFkZGluZyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZywgd2hpY2ggZGlyZWN0bHkgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgbWFpbGJveCBtZWNoYW5pc20uIFRoZXNlIGFyZSwgYXMgbWVudGlvbmVkLCBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgQUNQSSB0YWJsZSBkcml2ZW4sIGFuZCBiZWNhdXNlIHRoZXkncmUgbm90IGVtdWxhdGVkLCB0aGUgY29kZSBpcyBkZWFkIGZvciBmdXp6aW5nIHB1cnBvc2VzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBPa2F5LCBJIHNlZSB0aGF0IGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgaXMgaW50cm9kdWNpbmcgdGhlIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUgdG8gRURBQyBzY3J1YiBzeXNmcy4gVGhhdCBzZWVtcyBnZW5lcmljIGVub3VnaCwgYnV0IGl0IG9ubHkgcmVhbGx5ICpkb2VzKiBhbnl0aGluZyBpZiB0aGUgYG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZGAgZnVuY3Rpb24gcG9pbnRlciBpcyBzZXQuIEZyb20gbXkgYW5hbHlzaXMsIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGBzZXRfZW5hYmxlZF9vZGAgaXMgKmFjdHVhbGx5KiBzZXQgaXMgd2l0aGluIGBhY3BpX3JhczIuY2AuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIFwiZ2VuZXJpY1wiIHN5c2ZzIGF0dHJpYnV0ZSBpcyB1c2VsZXNzIHVubGVzcyB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIGlzIGxvYWRlZC4gU2luY2UgYGFjcGlfcmFzMmAgcmVxdWlyZXMgdGhlIFBDQ1QgYW5kIFJBUzIgdGFibGVzICh3aGljaCBhcmVuJ3QgcHJlc2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQpLCB0aGF0IHN5c2ZzIGF0dHJpYnV0ZSBpcyBuZXZlciBjcmVhdGVkLlxuXG5JbiBjb25jbHVzaW9uLCBJJ20gY29uZmlkZW50IGluIHN0aWNraW5nIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgZGVwZW5kZW5jZSBvbiB0aG9zZSBtaXNzaW5nIEFDUEkgdGFibGVzIG1ha2VzIHRoZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGlzIHBhdGNoLCBpbmNsdWRpbmcgdGhhdCBuZXcgc3lzZnMgYXR0cmlidXRlLCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTMyLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMjoyNC42NTkxNTMyMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w9mz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 07:04:53 +0000 UTC FinishedAt: 2026-07-27 07:32:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MWU0ZDhkMjFhZDI0ODc3NTA1YThlYWMyNDZmMWFlNWRmMTg0ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDc6MzE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbiYjNDM7XHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICYjNDM7MzAsMjAgQEAgRGVzY3JpcHRpb246XG4gXHRcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbiBcdFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbiYjNDM7RGF0ZTpcdFx0SmFuIDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDYuMTlcbiYjNDM7Q29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0KFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpc1xuJiM0MztcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbiYjNDM7XG4mIzQzO1x0XHRBZnRlciBiYWNrZ3JvdW5kIHNjcnViYmluZyBzdGFydHMsIHRoZSB1c2VyIG11c3Qgc2V0IHRoZVxuJiM0MztcdFx0YWRkcmVzcyByYW5nZSBiZWZvcmUgaW5pdGlhdGluZyBhIG5ldyBkZW1hbmQgc2NydWJiaW5nXG4mIzQzO1x0XHRvcGVyYXRpb24uIFRoZSBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZVxuJiM0MztcdFx0Y3VycmVudCBzY3J1YmJpbmcgcmFuZ2UsIGFyZSBub3QgdmFsaWQgZHVyaW5nIGJhY2tncm91bmRcbiYjNDM7XHRcdHNjcnViYmluZyBhbmQgdGhlcmVmb3JlIGFyZSByZXNldCB3aGVuIGl0IHN0YXJ0cy5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgJiM0MzszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cbiBcbiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXG4mIzQzO1xuJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuJiM0MztcbiYjNDM7My4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4mIzQzO1xuJiM0MzszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7MFxuJiM0MztcbiYjNDM7My4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxuJiM0MztcbiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuJiM0MztzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbiYjNDM7XG4mIzQzOzM2MDAwXG4mIzQzO1xuJiM0MzszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cbiYjNDM7VGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0Mzs4NjQwMFxuJiM0MztcbiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbiYjNDM7NDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4mIzQzO1xuJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbiYjNDM7XG4mIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbiYjNDM7XG4mIzQzOyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbiYjNDM7XG4mIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy5cbiYjNDM7XG4mIzQzO1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4mIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4mIzQzO2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4mIzQzO1xuJiM0MzszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4mIzQzO1xuJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuJiM0MztcbiYjNDM7MFxuJiM0MztcbiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMFxuJiM0MztzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbiYjNDM7XG4mIzQzOyMgZWNobyAyMTYwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbiYjNDM7XG4mIzQzOzMuMi4zLiBTdGFydCAmIzM5O2JhY2tncm91bmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5AQCAtMjk0LDYgJiM0MzsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuJiM0Mztjb25maWcgQUNQSV9SQVMyXG4mIzQzO1x0Ym9vbCBcJiMzNDtBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiYjNDM7XHRkZXBlbmRzIG9uIE1BSUxCT1hcbiYjNDM7XHRkZXBlbmRzIG9uIFBDQ1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4mIzQzO1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuJiM0MztcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwmIzM0O1Byb2Nlc3NvclwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCYjNDM7PSBlY19zeXMub1xuIG9iai0kKENPTkZJR19BQ1BJX0JHUlQpXHRcdCYjNDM7PSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCYjNDM7PSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQmIzQzOz0gc3Bjci5vXG4mIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCYjNDM7PSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcub1xuIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIFx0JiM0Mzs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0JiM0Mzs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NhY3BpL2FwZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BybXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbkBAIC0xNjEwLDYgJiM0MzsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4mIzQzO1x0YWNwaV9yYXMyX2luaXQoKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjFlYTE0ZDliYjllNTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcbkBAIC0wLDAgJiM0MzsxLDUwOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbiYjNDM7ICogcHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBlLmcuLCBmb3IgSFctYmFzZWQgbWVtb3J5XG4mIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbiYjNDM7ICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O0FDUEkgUkFTMjogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcmFzMl9zc3BjYyAtIERhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxuJiM0MzsgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4mIzQzOyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4mIzQzOyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbiYjNDM7ICogQHBjY19tcGFyOlx0XHRNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKSBmb3IgUENDIGNoYW5uZWxcbiYjNDM7ICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbiYjNDM7ICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuJiM0MzsgKlx0XHRcdGlzc3VpbmcgbmV4dCBjb21tYW5kXG4mIzQzOyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuJiM0MzsgKiBAbXBhcl9jb3VudDpcdFx0TVBBUiBjb3VudFxuJiM0MzsgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuJiM0MzsgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbiYjNDM7ICogQGtyZWY6XHRcdGtyZWYgb2JqZWN0XG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2xpZW50XHRcdG1ib3hfY2xpZW50O1xuJiM0MztcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0XHRlbGVtO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuJiM0MztcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21wYXI7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4mIzQzO1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfbXBhcl9yZXNldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb25cbiYjNDM7XHQgKiBzdXBwb3J0cyBjb21tYW5kIFBDQ19DTURfRVhFQ19SQVMyIG9ubHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgcGFyYW1ldGVycyByYXMyX2N0eDogJXAgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIHJhczJfY3R4LCBjbWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuJiM0MztcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1xuJiM0MztcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cGNjX2NoYW5uZWwgPSBzc3BjYy1cdTAwM2VwY2NfY2hhbi1cdTAwM2VtY2hhbjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxuJiM0MztcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcbiYjNDM7XHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuJiM0MztcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0IFx1MDAzZSB0aW1lX2RlbHRhKVxuJiM0MztcdFx0XHRmc2xlZXAoc3NwY2MtXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4mIzQzO1x0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cbiYjNDM7XHQgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBub1xuJiM0MztcdCAqIGxpbWl0YXRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0XG4mIzQzO1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4mIzQzO1x0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxuJiM0MztcdCAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVJcbiYjNDM7XHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21wYXIpIHtcbiYjNDM7XHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuJiM0MztcdFx0XHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XG4mIzQzO1x0XHRcdGlmICgodGltZV9kZWx0YSBcdTAwM2MgNjAgKiBNU0VDX1BFUl9TRUMpIFx1MDAyNlx1MDAyNiBzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXRcJiMzNDssIGNtZCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cdTAwM2VwY2NfbXBhcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbiYjNDM7XHRpb3dyaXRlMTYoY21kLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZWNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbiYjNDM7XHRpb3dyaXRlMTYoMCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHQvKiBSaW5nIGRvb3JiZWxsICovXG4mIzQzO1x0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXHUwMDI2Y21kKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbiYjNDM7XHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X3dhcm4ocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCYjMzQ7LCBjbWQsIHJjKTtcbiYjNDM7XHRcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xuJiM0MztcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuJiM0MztcdFx0aW93cml0ZTE2KHZhbCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzc3BjYy1cdTAwM2VsYXN0X2NtZCA9IGNtZDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgY29tcGxldGlvbiBhbmQgY2hlY2sgZm9yIFBDQyBlcnJvciBiaXQgKi9cbiYjNDM7XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGVcbiYjNDM7XHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4mIzQzO1x0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1xuJiM0MztcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuJiM0MztcdFx0bWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcJiMzNDthY3BpX3JhczJcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuJiM0MztcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cdTAwM2VwY2NfY2hhbik7XG4mIzQzO1x0a2ZyZWUoc3NwY2MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRrcmVmX3B1dChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmLCAgXHUwMDI2cmFzMl9saXN0X3BjY19yZWxlYXNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX3NzcGNjX2dldChpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX2lkICE9IHBjY19pZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHNzcGNjO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcbiYjNDM7XHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbiYjNDM7XHRpZiAoc3NwY2MpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD1cbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MgPSBremFsbG9jKHNpemVvZigqc3NwY2MpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXNzcGNjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnNzcGNjLVx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xuJiM0MztcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4mIzQzO1x0XHRrZnJlZShzc3BjYyk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFuLVx1MDAzZXNobWVtIHx8IHBjY19jaGFuLVx1MDAzZXNobWVtX3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtKSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4mIzQzO1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7Y3R4X2ZyZWU6XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MTYgdG90X3RibF9sZW47XG4mIzQzO1x0dTE2IGk7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwY3R4X2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuJiM0MztcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbiYjNDM7XHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuJiM0MztcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTtcbiYjNDM7XHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuJiM0MztcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuJiM0MztcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4mIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbm9uZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbiYjNDM7XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuJiM0MztcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4mIzQzO1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwmIzM0OzB4JWxseFxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG5AQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4mIzQzO1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuJiM0MztcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4mIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuJiM0MztcdGRlcGVuZHMgb24gRURBQ1xuJiM0MztcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuJiM0MztcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuJiM0MztcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4mIzQzO1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbiYjNDM7XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbiYjNDM7XG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0JiM0Mzs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0JiM0Mzs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0JiM0Mzs9IGNlYy5vXG4mIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0JiM0Mzs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0JiM0Mzs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCYjNDM7PSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTFhZGZjZGRmYTk5YThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw2MjQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4mIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4mIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuJiM0MztcbiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlIGFkZHJlc3NcbiYjNDM7XHRcdCAqIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmcgb3BlcmF0aW9uLiBUaGVcbiYjNDM7XHRcdCAqIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlIGN1cnJlbnQgc2NydWJiaW5nXG4mIzQzO1x0XHQgKiByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZCBzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZVxuJiM0MztcdFx0ICogYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAgKGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIpIHtcbiYjNDM7XHRcdCpydW5uaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpydW5uaW5nID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XG4mIzQzO1x0aWYgKCEoKnJ1bm5pbmcpKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXG4mIzQzO1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4mIzQzO1x0XHQgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzQzO1x0XHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcnVubmluZykge1xuJiM0MztcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRtc2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7ZXhpdDpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSlcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqbWF4ID0gcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxuJiM0MztcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbiYjNDM7XHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpiYXNlID0gcmFzMl9jdHgtXHUwMDNlYmFzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqc2l6ZSA9IHJhczJfY3R4LVx1MDAzZXNpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBiYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHR1MzIgc2NydWJfcGFyYW1zX2luO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxuJiM0MztcdFx0ICogYXMgdGhlIEFJIHJldmlldyB0b29sIHN1Z2dlc3RlZCwgaWYgaXQgaXMgbm90IHJ1bm5pbmchLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4mIzQzO1x0XHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHZhbGlkaXR5IGNoZWNrcyBmb3IgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gc2NydWIgbmVlZCB0byBiZSB1cGRhdGVkXG4mIzQzO1x0ICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYVxuJiM0MztcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJhczJfY3R4LVx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXHUwMDNlYmFzZSBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0ID0gLUVSQU5HRTtcbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4mIzQzO1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZWJhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXkgbmVlZCB0byByZXR1cm4gdGhlIGVycm9yIGNvZGUgZnJvbSBiZWxvdyBmdW5jdGlvbiBjYWxsIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxuJiM0MztcdCAqIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcbiYjNDM7XHRcdCAqIHRoZSB0aHJlYWQgbWF5IGRldGVybWluZSB0aGF0IGRlbWFuZCBzY3J1YmJpbmcgaXMgbm90IHJ1bm5pbmcsIGF0dGVtcHQgdG9cbiYjNDM7XHRcdCAqIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcsIGFuZCB0aGVuIGV4aXQuIFRoaXMgY2FuIG9jY3VyIGJlY2F1c2UgdGhlXG4mIzQzO1x0XHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDtyYXMyX3NjcnViX25pZCVkXCYjMzQ7LCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbiYjNDM7XHRcdFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcbiYjNDM7XHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO2VuYWJsZV9iZ19zY3J1YjpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXhpdDpcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XG4mIzQzO1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuJiM0MztcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcbiYjNDM7XHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcbiYjNDM7XHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbiYjNDM7XHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxuJiM0MztcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXG4mIzQzO1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuJiM0MztcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbiYjNDM7XHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcbiYjNDM7XHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJldmVudCB0aGUgdGhyZWFkJiMzOTtzIGB0YXNrX3N0cnVjdGAgZnJvbSBiZWluZyBmcmVlZCBpZiB0aGVcbiYjNDM7XHRcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z2V0X3Rhc2tfc3RydWN0KHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0a3RocmVhZF9zdG9wX3B1dChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXG4mIzQzO1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuJiM0MztcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcbiYjNDM7XHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXG4mIzQzO1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHNjcnViX25hbWUsIFwmIzM0O2FjcGlfcmFzX21lbSVkXCYjMzQ7LCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcdD0gMDtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuJiM0MztcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXHUwMDI2YXV4ZGV2LVx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXHUwMDI2cmFzX2ZlYXR1cmVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4mIzQzO1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuJiM0MztcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuJiM0MztcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7QUNQSV9SQVMyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCAmIzQzOzEsODYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9IXG4mIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4mIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFwmIzM0O3JhczJcJiMzNDtcbiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSBcJiMzNDthY3BpX3JhczJfbWVtXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4mIzQzOyAqIEBhZGV2Olx0XHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4mIzQzOyAqIEBzc3BjYzpcdFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBzeXNfY29tcF9uaWQ6XHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXG4mIzQzOyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4mIzQzOyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuJiM0MzsgKlx0XHRcdEZpZWxkOiBJbnN0YW5jZVxuJiM0MzsgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAbWVtX3NpemVcdFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXG4mIzQzOyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4mIzQzOyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNpemU6XHRcdFNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZTpcdE1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbiYjNDM7ICogQGJnX3NjcnViOlx0XHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXG4mIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4mIzQzOyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4mIzQzOyAqIEB0aHJlYWQ6XHRcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcbiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgQUNQSSB0YWJsZXMgYW5kIG1haWxib3ggbWVjaGFuaXNtcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxZTRkOGQyMWFkMjQ4Nzc1MDVhOGVhYzI0NmYxYWU1ZGYxODRlOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAwNzozMTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgppbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIKQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOgk2LjE1CiBDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogRGVzY3JpcHRpb246CiAJCShSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZAotCQlmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuCi0JCVRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0LgotCi0JCVRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWQKLQkJb24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuCiYjNDM7CQlmb3IgZGVtYW5kIHNjcnViYmluZy4KIAogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplCiBEYXRlOgkJTWFyY2ggMjAyNQpAQCAtMzQsNiAmIzQzOzMwLDIwIEBAIERlc2NyaXB0aW9uOgogCQkoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCiAJCShvbi1kZW1hbmQgc2NydWJiaW5nKS4KIAomIzQzO1doYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2RlbWFuZAomIzQzO0RhdGU6CQlKYW4gMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTYuMTkKJiM0MztDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpcwomIzQzOwkJc3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC4KJiM0MzsKJiM0MzsJCUFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlCiYjNDM7CQlhZGRyZXNzIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsJCW9wZXJhdGlvbi4gVGhlIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlCiYjNDM7CQljdXJyZW50IHNjcnViYmluZyByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZAomIzQzOwkJc2NydWJiaW5nIGFuZCB0aGVyZWZvcmUgYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjFlYTE0ZDliYjllNTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJdW5zaWduZWQgaW50CQkJbXBhcl9jb3VudDsKJiM0MzsJaW50CQkJCXBjY19pZDsKJiM0MzsJdTE2CQkJCWxhc3RfY21kOwomIzQzOwlzdHJ1Y3Qga3JlZgkJCWtyZWY7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZQomIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGUKJiM0MzsgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTEwKJiM0MzsjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwCiYjNDM7I2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgMwomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDAKJiM0MzsjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwCiYjNDM7CiYjNDM7LyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqLwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsJdTMyIGNhcF9zdGF0dXM7CiYjNDM7CXUxNiBzdGF0dXM7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZQomIzQzOwkgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW4KJiM0MzsJICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uCiYjNDM7CSAqCiYjNDM7CSAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2YKJiM0MzsJICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZQomIzQzOwkgKiBiaXQgaXMgc2V0LgomIzQzOwkgKi8KJiM0MzsJcmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dCgmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cywgc3RhdHVzLAomIzQzOwkJCQkJc3RhdHVzICZhbXA7IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLAomIzQzOwkJCQkJUENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kLCByYyk7CiYjNDM7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0VSUk9SKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XG4mIzM0OywKJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2lkLCBzc3BjYy0mZ3Q7bGFzdF9jbWQpOwomIzQzOwkJc3RhdHVzICZhbXA7PSB+UENDX1NUQVRVU19FUlJPUjsKJiM0MzsJCWlvd3JpdGUxNihzdGF0dXMsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovCiYjNDM7CXJtYigpOwomIzQzOwljYXBfc3RhdHVzID0gaW9yZWFkMzIoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwlzd2l0Y2ggKGNhcF9zdGF0dXMpIHsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOgomIzQzOwljYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOgomIzQzOwkJcmMgPSAtRVBFUk07CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfQlVTWToKJiM0MzsJCXJjID0gLUVCVVNZOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0ZBSUxFRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOgomIzQzOwkJcmMgPSAtRUlOVkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyYyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTMyKDB4MCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWwKJiM0MzsgKiBAcmFzMl9jdHg6CXBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmUKJiM0MzsgKiBAY21kOglSQVMyIGNvbW1hbmQgdG8gc2VuZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7CiYjNDM7CXN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsOwomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CXM2NCB0aW1lX2RlbHRhOwomIzQzOwl1MTYgdmFsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24KJiM0MzsJICogc3VwcG9ydHMgY29tbWFuZCBQQ0NfQ01EX0VYRUNfUkFTMiBvbmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBwYXJhbWV0ZXJzIHJhczJfY3R4OiAlcCBjb21tYW5kOiAweCV4XG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXBjY19jaGFubmVsID0gc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW0KJiM0MzsJICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgomIzQzOwkgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJdGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lKTsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQgJmd0OyB0aW1lX2RlbHRhKQomIzQzOwkJCWZzbGVlcChzc3BjYy0mZ3Q7cGNjX21ydHQgLSB0aW1lX2RlbHRhKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGUKJiM0MzsJICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW4KJiM0MzsJICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm8KJiM0MzsJICogbGltaXRhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdAomIzQzOwkgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGUKJiM0MzsJICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZAomIzQzOwkgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSCiYjNDM7CSAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXBhcikgewomIzQzOwkJaWYgKCFzc3BjYy0mZ3Q7bXBhcl9jb3VudCkgewomIzQzOwkJCXRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCk7CiYjNDM7CQkJaWYgKCh0aW1lX2RlbHRhICZsdDsgNjAgKiBNU0VDX1BFUl9TRUMpICZhbXA7JmFtcDsgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCkgewomIzQzOwkJCQlkZXZfZGJnKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXQmIzM0OywgY21kKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU87CiYjNDM7CQkJfQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTsKJiM0MzsJCQlzc3BjYy0mZ3Q7bXBhcl9jb3VudCA9IHNzcGNjLSZndDtwY2NfbXBhcjsKJiM0MzsJCX0KJiM0MzsJCXNzcGNjLSZndDttcGFyX2NvdW50LS07CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqLwomIzQzOwlpb3dyaXRlMTYoY21kLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O2NvbW1hbmQpOwomIzQzOwomIzQzOwkvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi8KJiM0MzsJaW93cml0ZTE2KDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJLyogUmluZyBkb29yYmVsbCAqLwomIzQzOwlyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCAmYW1wO2NtZCk7CiYjNDM7CS8qCiYjNDM7CSAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb24KJiM0MzsJICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCWRldl93YXJuKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXG4mIzM0OywgY21kLCByYyk7CiYjNDM7CQkvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi8KJiM0MzsJCXZhbCA9IGlvcmVhZDE2KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTsKJiM0MzsJCWlvd3JpdGUxNih2YWwsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7bGFzdF9jbWQgPSBjbWQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gYW5kIGNoZWNrIGZvciBQQ0MgZXJyb3IgYml0ICovCiYjNDM7CXJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGUKJiM0MzsJICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZwomIzQzOwkgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dC4KJiM0MzsJICovCiYjNDM7CWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQpCiYjNDM7CQlzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW5uZWwtJmd0O21ib3gtJmd0O3R4ZG9uZV9pcnEpCiYjNDM7CQltYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCAmIzM0O2FjcGlfcmFzMiYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MgPQomIzQzOwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9kZWwoJmFtcDtzc3BjYy0mZ3Q7ZWxlbSk7CiYjNDM7CXBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy0mZ3Q7cGNjX2NoYW4pOwomIzQzOwlrZnJlZShzc3BjYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7c3NwY2MtJmd0O2tyZWYsICAmYW1wO3JhczJfbGlzdF9wY2NfcmVsZWFzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cmFzMl9wY2NfbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgJmFtcDtyYXMyX3NzcGNjLCBlbGVtKSB7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19pZCAhPSBwY2NfaWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7c3NwY2MtJmd0O2tyZWYpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0dXJuIHNzcGNjOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuOwomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CiYjNDM7CWlmIChwY2NfaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTsKJiM0MzsJaWYgKHNzcGNjKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyCT0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsJCXJhczJfY3R4LSZndDtkZXYJCT0KJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghc3NwY2MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoJmFtcDtzc3BjYy0mZ3Q7bWJveF9jbGllbnQsIHBjY19pZCk7CiYjNDM7CWlmIChJU19FUlIocGNjX2NoYW4pKSB7CiYjNDM7CQlrZnJlZShzc3BjYyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwY2NfY2hhbi0mZ3Q7c2htZW0gfHwgcGNjX2NoYW4tJmd0O3NobWVtX3NpemUgJmx0OyBzaXplb2Yoc3RydWN0IGFjcGlfcmFzMl9zaG1lbSkpIHsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7CiYjNDM7CQlrZnJlZShzc3BjYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2lkCQk9IHBjY19pZDsKJiM0MzsJc3NwY2MtJmd0O3BjY19jaGFuCQk9IHBjY19jaGFuOwomIzQzOwlzc3BjYy0mZ3Q7Y29tbV9hZGRyCT0gcGNjX2NoYW4tJmd0O3NobWVtOwomIzQzOwlpZiAocGNjX2NoYW4tJmd0O2xhdGVuY3kpCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi0mZ3Q7bGF0ZW5jeTsKJiM0MzsJZWxzZQomIzQzOwkJc3NwY2MtJmd0O2RlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX21ydHQJCT0gcGNjX2NoYW4tJmd0O21pbl90dXJuYXJvdW5kX3RpbWU7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXBhcgkJPSBwY2NfY2hhbi0mZ3Q7bWF4X2FjY2Vzc19yYXRlOwomIzQzOwlzc3BjYy0mZ3Q7bWJveF9jbGllbnQua25vd3NfdHhkb25lCT0gdHJ1ZTsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3NzcGNjLSZndDtwY2NfbG9jayk7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO3NzcGNjLSZndDtrcmVmKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfYWRkKCZhbXA7c3NwY2MtJmd0O2VsZW0sICZhbXA7cmFzMl9zc3BjYyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXJhczJfY3R4LSZndDtkZXYJCT0gcGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CXJhczJfY3R4LSZndDtwY2NfbG9jawk9ICZhbXA7c3NwY2MtJmd0O3BjY19sb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9JREEocmFzMl9pZGEpOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBhdXhkZXYtJmd0O2lkKTsKJiM0MzsJcmFzMl9zc3BjY19wdXQocmFzMl9jdHgtJmd0O3NzcGNjKTsKJiM0MzsJa2ZyZWUocmFzMl9jdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MzIgY29tcF9uaWQ7CiYjNDM7CWludCBpZCwgcmM7CiYjNDM7CiYjNDM7CWNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpOwomIzQzOwlpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXG4mIzM0OywgY2hhbm5lbCwgcHhtX2luc3QpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQgPSBjb21wX25pZDsKJiM0MzsKJiM0MzsJcmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7CiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXG4mIzM0OywgY2hhbm5lbCwKJiM0MzsJCQkgcHhtX2luc3QsIHJjKTsKJiM0MzsJCWdvdG8gY3R4X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBpZGFfYWxsb2MoJmFtcDtyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApIHsKJiM0MzsJCXJjID0gaWQ7CiYjNDM7CQlnb3RvIHBjY19mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmlkCQk9IGlkOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5uYW1lCQk9IG5hbWU7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5yZWxlYXNlCT0gcmFzMl9yZWxlYXNlOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucGFyZW50CT0gcmFzMl9jdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gaWRhX2ZyZWU7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhczJfY3R4OwomIzQzOwomIzQzO2lkYV9mcmVlOgomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBpZCk7CiYjNDM7cGNjX2ZyZWU6CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7Y3R4X2ZyZWU6CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVSUl9QVFIocmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CWlmICghcmFzMl9jdHgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqcGNjX2Rlc2NfbGlzdDsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7CiYjNDM7CXUxNiB0b3RfdGJsX2xlbjsKJiM0MzsJdTE2IGk7CiYjNDM7CiYjNDM7CWlmIChyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCAmbHQ7IHNpemVvZigqcmFzMl90YWIpKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICZndDsgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7Tm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyB0b3RfdGJsX2xlbikgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcywgcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcywgc2l6ZW9mKCpwY3R4X2xpc3QpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwY3R4X2xpc3QpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBjY19kZXNjX2xpc3QtJmd0O2ZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LSZndDtjaGFubmVsX2lkLAomIzQzOwkJCQkJICBwY2NfZGVzY19saXN0LSZndDtpbnN0YW5jZSk7CiYjNDM7CQkvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi8KJiM0MzsJCWlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4KSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcbiYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7CiYjNDM7CQkJZm9yICg7IGkgJmd0OyAwOyBpLS0pIHsKJiM0MzsJCQkJaWYgKHBjdHhfbGlzdFtpIC0gMV0pCiYjNDM7CQkJCQlyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTsKJiM0MzsJCQl9CiYjNDM7CQkJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7CiYjNDM7CQl9CiYjNDM7CQlwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDsKJiM0MzsJfQomIzQzOwlrZnJlZShwY3R4X2xpc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KJiM0MzsgKgomIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuCiYjNDM7ICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyCiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBub25lLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwomIzQzOwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZhbXA7cmFzMl90YWIpOwomIzQzOwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcbiYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKQomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwlhY3BpX3B1dF90YWJsZSgoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopcmFzMl90YWIpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmMKaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMgewogCVNDUlVCX0FERFJFU1MsCiAJU0NSVUJfU0laRSwKIAlTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCwKJiM0MzsJU0NSVUJfRU5BQkxFX0RFTUFORCwKIAlTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sCiAJU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTiwKQEAgLTU1LDYgJiM0Mzs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCAmIzM0OzB4JWxseFxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCAmIzM0OyV1XG4mIzM0OykKJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtaW5fY3ljbGVfZHVyYXRpb24sIGdldF9taW5fY3ljbGUsIHUzMiwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgJiMzNDsldVxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgJiMzNDsldVxuJiMzNDspCkBAIC04NCw2ICYjNDM7ODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsCQkJXAogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQogCiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKQpAQCAtMTE5LDYgJiM0MzsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQKIAkJCQlyZXR1cm4gMDQ0NDsKIAkJfQogCQlicmVhazsKJiM0MzsJY2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOgomIzQzOwkJaWYgKG9wcy0mZ3Q7Z2V0X2VuYWJsZWRfb2QpIHsKJiM0MzsJCQlpZiAob3BzLSZndDtzZXRfZW5hYmxlZF9vZCkKJiM0MzsJCQkJcmV0dXJuIGEtJmd0O21vZGU7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlyZXR1cm4gMDQ0NDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOgogCQlpZiAob3BzLSZndDtnZXRfbWluX2N5Y2xlKQogCQkJcmV0dXJuIGEtJmd0O21vZGU7CkBAIC0xNjQsNiAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LAogCQlbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLAogCQlbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLAogCQlbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksCiYjNDM7CQlbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLAogCQlbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSwKIAkJW1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWcKaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWcKQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE0KIAkgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uCiAJICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy4KIAomIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyCiYjNDM7CXRyaXN0YXRlICYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlkZXBlbmRzIG9uIEFDUElfUkFTMgomIzQzOwlkZXBlbmRzIG9uIEVEQUMKJiM0MzsJZGVwZW5kcyBvbiBFREFDX1NDUlVCCiYjNDM7CXNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTwomIzQzOwloZWxwCiYjNDM7CSAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyCiYjNDM7CSAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvCiYjNDM7CSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzCiYjNDM7CSAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIKJiM0MzsJICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4KJiM0MzsKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGUKQEAgLTIsNiAmIzQzOzIsNyBAQAogb2JqLSQoQ09ORklHX1JBUykJJiM0Mzs9IHJhcy5vCiBvYmotJChDT05GSUdfREVCVUdfRlMpCSYjNDM7PSBkZWJ1Z2ZzLm8KIG9iai0kKENPTkZJR19SQVNfQ0VDKQkmIzQzOz0gY2VjLm8KJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMikJJiM0Mzs9IGFjcGlfcmFzMi5vCiAKIG9iai0kKENPTkZJR19SQVNfRk1QTSkJJiM0Mzs9IGFtZC9mbXBtLm8KIG9iai15CQkJJiM0Mzs9IGFtZC9hdGwvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41MWFkZmNkZGZhOTlhOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDYyNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuCiYjNDM7ICoKJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KQkmIzM0O0FDUEkgUkFTMiBNRU1PUlk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZGFjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcmFzMi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMCkKJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxCiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyCiYjNDM7I2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDMKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJBUzIgcGF0cm9sIHNjcnViCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNikKJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjgKJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDAKJiM0MzsKJiM0MztzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFwKJiM0MzsJY29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbikKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LSZndDtjb21tX2FkZHI7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlpb3dyaXRlOCgwLCAmYW1wO2NvbW1vbi0mZ3Q7c2V0X2NhcHNbMF0pOwomIzQzOwomIzQzOwlyZXR1cm4gaW9yZWFkOCgmYW1wO2NvbW1vbi0mZ3Q7ZmVhdHVyZXNbMF0pICZhbXA7IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9CiYjNDM7CQlUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtJmd0O2NvbW1fYWRkcik7CiYjNDM7CXUzMiBzY3J1Yl9wYXJhbXNfb3V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CXJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKgomIzQzOwkJICogQWZ0ZXIgYmFja2dyb3VuZCBzY3J1YmJpbmcgc3RhcnRzLCB0aGUgdXNlciBtdXN0IHNldCB0aGUgYWRkcmVzcwomIzQzOwkJICogcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZyBvcGVyYXRpb24uIFRoZQomIzQzOwkJICogYWRkcmVzcyByYW5nZSBhdHRyaWJ1dGVzLCB3aGljaCBpbmRpY2F0ZSB0aGUgY3VycmVudCBzY3J1YmJpbmcKJiM0MzsJCSAqIHJhbmdlLCBhcmUgbm90IHZhbGlkIGR1cmluZyBiYWNrZ3JvdW5kIHNjcnViYmluZyBhbmQgdGhlcmVmb3JlCiYjNDM7CQkgKiBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kCiYjNDM7CQkgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsCiYjNDM7CQkgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nCiYjNDM7CQkgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJCWlmICghcnVubmluZykgewomIzQzOwkJCXJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC0mZ3Q7ZGV2LCByYXMyX2N0eCwgdHJ1ZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCW1zbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7ZXhpdDoKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlKQomIzQzOwkJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSptaW4gPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1heCA9IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChydW5uaW5nKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJaWYgKHNjcnViX2N5Y2xlX2hycyAmbHQ7IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgfHwKJiM0MzsJICAgIHNjcnViX2N5Y2xlX2hycyAmZ3Q7IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hyczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC4KJiM0MzsJICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKmJhc2UgPSByYXMyX2N0eC0mZ3Q7YmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSpzaXplID0gcmFzMl9jdHgtJmd0O3NpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YmFzZSA9IGJhc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChydW5uaW5nKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3NpemUgPSBzaXplOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKmVuYWJsZWQgPSByYXMyX2N0eC0mZ3Q7Ymdfc2NydWI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgfHwgcnVubmluZykKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkJaW93cml0ZTY0KDAsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSzsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwkJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8gc3RvcCBiYWNrZ3JvdW5kIHNjcnViYmluZywKJiM0MzsJCSAqIGFzIHRoZSBBSSByZXZpZXcgdG9vbCBzdWdnZXN0ZWQsIGlmIGl0IGlzIG5vdCBydW5uaW5nIS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZAomIzQzOwkgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpICZndDsgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYQomIzQzOwkgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtzaXplIHx8IHJhczJfY3R4LSZndDtiYXNlICZsdDsgcmFzMl9jdHgtJmd0O21lbV9iYXNlKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIHJhczJfY3R4LSZndDtiYXNlLCByYXMyX2N0eC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXQgPSAtRVJBTkdFOwomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CWlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sICZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7c2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBlbmFibGU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1heSBuZWVkIHRvIHJldHVybiB0aGUgZXJyb3IgY29kZSBmcm9tIGJlbG93IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIHVzZXIKJiM0MzsJICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZQomIzQzOwkgKiBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseS4KJiM0MzsJICovCiYjNDM7CXJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViICZhbXA7JmFtcDsgcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgJmFtcDsmYW1wOyAhcmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLAomIzQzOwkJICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0bwomIzQzOwkJICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7ZW5hYmxlX2JnX3NjcnViOgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTsKJiM0MzsJCV9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzO2V4aXQ6CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gZmFsc2U7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUHJldmVudCB0aGUgdGhyZWFkJiMzOTtzIGB0YXNrX3N0cnVjdGAgZnJvbSBiZWluZyBmcmVlZCBpZiB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy4KJiM0MzsJCSAqLwomIzQzOwkJZ2V0X3Rhc2tfc3RydWN0KHJhczJfY3R4LSZndDt0aHJlYWQpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlrdGhyZWFkX3N0b3BfcHV0KHJhczJfY3R4LSZndDt0aHJlYWQpOwomIzQzOwkJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7CiYjNDM7CXN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlczsKJiM0MzsJY2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGUKJiM0MzsJICogJiMzOTtSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZSYjMzk7LCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSUwomIzQzOwkgKiB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXMgaW4gdGhlIE5VTUEgZG9tYWluCiYjNDM7CSAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmQKJiM0MzsJICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpcwomIzQzOwkgKiBhbHJlYWR5IHBlcmZvcm1lZCBpbiBhZGRfYXV4X2RldmljZSgpIGluIC9hY3BpL3JhczIuYwomIzQzOwkgKi8KJiM0MzsJc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CW51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwlpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcbiYjMzQ7LCByYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyAmZ3Q7IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hyczsKJiM0MzsJZWxzZQomIzQzOwkJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGU7CiYjNDM7CiYjNDM7CXNwcmludGYoc2NydWJfbmFtZSwgJiMzNDthY3BpX3Jhc19tZW0lZCYjMzQ7LCBhdXhkZXYtJmd0O2lkKTsKJiM0MzsKJiM0MzsJcmFzX2ZlYXR1cmVzLmZ0X3R5cGUJPSBSQVNfRkVBVF9TQ1JVQjsKJiM0MzsJcmFzX2ZlYXR1cmVzLmluc3RhbmNlCT0gMDsKJiM0MzsJcmFzX2ZlYXR1cmVzLnNjcnViX29wcwk9ICZhbXA7cmFzMl9zY3J1Yl9vcHM7CiYjNDM7CXJhc19mZWF0dXJlcy5jdHgJPSByYXMyX2N0eDsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoJmFtcDthdXhkZXYtJmd0O2Rldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgJmFtcDtyYXNfZmVhdHVyZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgcmFzMl9tZW1fZGV2X2lkX3RhYmxlW10gPSB7CiYjNDM7CXsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSAmIzM0Oy4mIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0gewomIzQzOwkubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLAomIzQzOwkucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLAomIzQzOwkuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsCiYjNDM7fTsKJiM0Mzttb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtBQ1BJX1JBUzImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7QUNQSSBSQVMyIG1lbW9yeSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcmFzMi5oCkBAIC0wLDAgJiM0MzsxLDg2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfQUNQSV9SQVMyX0gKJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hY3BpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2F1eGlsaWFyeV9idXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5CiYjNDM7ICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSAmIzM0O3JhczImIzM0OwomIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgJiMzNDthY3BpX3JhczJfbWVtJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXMKJiM0MzsgKiBAYWRldjoJCUF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0CiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZGV2OgkJUG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0MKJiM0MzsgKiBAc3NwY2M6CQlQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvbgomIzQzOyAqIEBwY2NfbG9jazoJCVBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzCiYjNDM7ICoJCQl0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIEBzeXNfY29tcF9uaWQ6CU5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmUKJiM0MzsgKgkJCWlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMgomIzQzOyAqCQkJUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LAomIzQzOyAqCQkJRmllbGQ6IEluc3RhbmNlCiYjNDM7ICogQG1lbV9iYXNlOgkJQmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAbWVtX3NpemUJCVNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZQomIzQzOyAqCQkJb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluCiYjNDM7ICogQGJhc2U6CQlCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIKJiM0MzsgKiBAc2l6ZToJCVNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIKJiM0MzsgKiBAc2NydWJfY3ljbGVfaHJzOglDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnMKJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOglTY3J1YiByYXRlIHRvIHNldCBpbiBob3VycwomIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6CU1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAbWF4X3NjcnViX2N5Y2xlOglNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkCiYjNDM7ICogQG9kX3NjcnViOgkJU3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pCiYjNDM7ICogQGJnX3NjcnViOgkJU3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZwomIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjoJRmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmQKJiM0MzsgKgkJCXNjcnViYmluZyBpcyBmaW5pc2hlZAomIzQzOyAqIEB0aHJlYWQ6CQlEZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkCiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6CUZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCByYXMyX21lbV9jdHggewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZQkJYWRldjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtCSpjb21tX2FkZHI7CiYjNDM7CXN0cnVjdCBkZXZpY2UJCQkqZGV2OwomIzQzOwl2b2lkCQkJCSpzc3BjYzsKJiM0MzsJc3RydWN0IG11dGV4CQkJKnBjY19sb2NrOwomIzQzOwl1MzIJCQkJc3lzX2NvbXBfbmlkOwomIzQzOwl1NjQJCQkJbWVtX2Jhc2U7CiYjNDM7CXU2NAkJCQltZW1fc2l6ZTsKJiM0MzsJdTY0CQkJCWJhc2U7CiYjNDM7CXU2NAkJCQlzaXplOwomIzQzOwl1OAkJCQlzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CXU4CQkJCXNldF9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWluX3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltYXhfc2NydWJfY3ljbGU7CiYjNDM7CWJvb2wJCQkJb2Rfc2NydWI7CiYjNDM7CWJvb2wJCQkJYmdfc2NydWI7CiYjNDM7CWJvb2wJCQkJcmVlbmFibGVfYmdfc2NydWI7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKJiM0MzsJYm9vbAkJCQlkcml2ZXJfYWN0aXZlOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzIKJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTsKJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaApAQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQgewogICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS4KICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi4KICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLgomIzQzOyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLgomIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi4KICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7CiAJaW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpOwogCWludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwogCWludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CWludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwomIzQzOwlpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwogCWludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7CiAJaW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTsKIAlpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBQ1BJIFJBUzIgU2NydWJiaW5nOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIGFkZGluZyBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQmIzM5O3MgZ290IGEgbmV3IGRyaXZlciwgYGRyaXZlcnMvYWNwaS9yYXMyLmNgLCBhbmQgYSByZWxhdGVkIG9uZSBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBwbHVzIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgZm9yIGBlbmFibGVfZGVtYW5kYC4gVGhlIHdob2xlIHRoaW5nIHVzZXMgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIHRvIHRhbGsgdG8gdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBhbiBBQ1BJIHRoaW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBDQyBzZWVtcyB0cmlja3kgYmVjYXVzZSBpdCByZWxpZXMgb24gbWFpbGJveGVzLiAgQUNQSSB0YWJsZXMgYXJlIG9mdGVuIHByb3ZpZGVkLCBidXQgdGhpcyBtYWlsYm94IHRoaW5nIGlzIGRpZmZlcmVudC4KCkFscmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byBgZHJpdmVycy9hY3BpL3JhczIuY2AuICBMb29rcyBsaWtlIGl0IHVzZXMgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuICBOb3csIFFFTVUuLi4gUUVNVSBkb2VzbiYjMzk7dCBqdXN0IGhhbmQgeW91IEFDUEkgUkFTMiBvciBQQ0MgbWFpbGJveGVzIG91dCBvZiB0aGUgYm94IGZvciBlYXN5IGZ1enppbmcuIFN5emthbGxlciAqY2FuKiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzIG9yIHVzZSBzb2Z0d2FyZSBtYWlsYm94ZXMsIGlmIHRoZXkgZXhpc3QsIGJ1dCBQQ0MgbWFpbGJveGVzIGFyZSB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuICBJcyB0aGVyZSBhIHNvZnR3YXJlIFBDQyBtYWlsYm94IGhlcmUsIG9yIGlzIGl0IHB1cmVseSBoYXJkd2FyZT8KCkFoYSEgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2Agc2VlbXMgdG8gcHJvdmlkZSBhIFBDQyBtYWlsYm94ICpjb250cm9sbGVyKi4gSXQgcmVhZHMgdGhlIFBDQ1QgQUNQSSB0YWJsZS4gU28sIGlmIHN5emthbGxlciBjYW4gcHJvdmlkZSBhIGN1c3RvbSBQQ0NUIHRhYmxlLCBpdCBtaWdodCB0cmlnZ2VyIHRoYXQuCgpXYWl0IGEgc2Vjb25kLCB0aGlzIHBhdGNoICphbHNvKiBhZGRzIGBBQ1BJX1JBUzJgIGFuZCBgTUVNX0FDUElfUkFTMmAgY29uZmlncy4gSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/CgpUaGUgZHJpdmVyIHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlLCByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSwgYW5kIHRoZW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCBwcm9iZXMgaXQuICBUaGVuIGl0IGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyB2aWEgRURBQy4gICpUaGF0KiBJIGNhbiBmdXp6LiBTeXprYWxsZXIgbG92ZXMgc3lzZnMuIExldCYjMzk7cyBzZWUuLi4gd2UgaGF2ZSB0aGluZ3MgbGlrZSBgZW5hYmxlX2RlbWFuZGAsIGBlbmFibGVfYmFja2dyb3VuZGAsIGBhZGRyYCwgYHNpemVgLCBgY3VycmVudF9jeWNsZV9kdXJhdGlvbmAsIGFsbCBnb29kIHRhcmdldHMuIFRoZSBmdW5jdGlvbnMgYXJlOiBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfcmVhZF9zaXplYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZGAsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYCwgYHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZWAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWRgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZWAuCgpBbGwgdGhvc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzICppZiogdGhlIGRldmljZSBpcyBwcm9iZWQuIEFuZCBmb3IgdGhlIGRldmljZSB0byBwcm9iZSwgd2UgbmVlZCB0aGF0IFJBUzIgQUNQSSB0YWJsZS4gQ2FuIFN5emthbGxlciBpbmplY3QgQUNQSSB0YWJsZXM/CgpTeXprYWxsZXIgaXNuJiMzOTt0IG1hZ2ljLCBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBBQ1BJIHRhYmxlIGluamVjdGlvbiBtZWNoYW5pc20gdGhhdCB3b3JrcyByZWxpYWJseSBmb3IgYWxsIHRhYmxlcyBkdXJpbmcgYm9vdC4gV2UgaGF2ZSBgY29uZmlnIEFDUElfVEFCTEVfVVBHUkFERWAgd2hpY2ggbWlnaHQgYWxsb3cgb3ZlcnJpZGluZyB2aWEgaW5pdHJkLCBvciBjb25maWdmcyBBQ1BJIHRhYmxlIGluamVjdGlvbi4KCldhaXQgYSBtaW51dGUsIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgZHVyaW5nIGJvb3QuIExldCYjMzk7cyBzZWUgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCkKewoJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CglhY3BpX3N0YXR1cyBzdGF0dXM7CgoJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewoJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcbiYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CgkJcmV0dXJuOwoJfQouLi4KYGBgCgpJZiBpdCBkb2VzbiYjMzk7dCBmaW5kIHRoZSB0YWJsZSwgaXQganVzdCBiYWlscy4gIFNvLCBjYW4gc3l6a2FsbGVyICpyZWFjaCogdGhpcz8gIFN5emthbGxlciB1c3VhbGx5IGJvb3RzIHdpdGggZml4ZWQgQUNQSSB0YWJsZXMgZnJvbSBRRU1VLCBhbmQgUUVNVSBwcm9iYWJseSBkb2VzbiYjMzk7dCBoYXZlIGEgUkFTMiB0YWJsZSB5ZXQuICBXZSBjYW4mIzM5O3QgdXNlIGNvbmZpZ2ZzIGJlY2F1c2UgYGFjcGlfcmFzMl9pbml0YCBpcyBgX19pbml0YCEgIEl0JiMzOTtzIGEgb25lLXRpbWUgdGhpbmcgYXQgYm9vdC4gSWYgUUVNVSBkb2VzbiYjMzk7dCBwcm92aWRlIHRoZSBSQVMyIHRhYmxlLCB0aGUgZHJpdmVyIG5ldmVyIGJpbmRzLCBhbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgbmV2ZXIgZ2V0IGNyZWF0ZWQuICBUaGVyZSYjMzk7cyBubyB3YXkKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9lbmFibGVkX29kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZWRhYy9zY3J1Yi5jPTg4PUVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuZHJpdmVycy9lZGFjL3NjcnViLmM6ODk6RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTkwLUVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jPTkyPXN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI2LVx0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG5kcml2ZXJzL2VkYWMvc2NydWIuYzoxMjc6XHRcdFx0aWYgKG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyOC1cdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4tLVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9Mzk0PXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQwOS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQxMDpzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00MTEte1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTUxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTUyNS1cdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo1MjY6XHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI3LVx0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oPTY3Mj1lbnVtIGVkYWNfZGV2X2ZlYXQge1xuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4Ny0gKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbmluY2x1ZGUvbGludXgvZWRhYy5oOjY4ODogKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02ODktICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oPTY5ND1zdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMS1cdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuaW5jbHVkZS9saW51eC9lZGFjLmg6NzAyOlx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMy1cdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBvZiBgYWNwaV9yYXMyLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGFjcGlfcmFzMi5jYCBkcml2ZXIsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBpc29sYXRlZC4gVGhlIG9ubHkgcGxhY2UgSSYjMzk7bSBzZWVpbmcgYHNldF9lbmFibGVkX29kYCB1c2VkIGlzIHdpdGhpbiB0aGlzIG1vZHVsZS4gTm93LCB0aGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIEFDUEkgUkFTMiB0YWJsZXMsIGFuZCB0aG9zZSBhcmVuJiMzOTt0IGV2ZW4gcHJlc2VudCBpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFBsdXMsIFFFTVUgZG9lc24mIzM5O3QgbW9kZWwgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb25zIENoYW5uZWwgKFBDQykgbWFpbGJveCBoYXJkd2FyZSB0aGF0IHRoaXMgZHJpdmVyIHdvdWxkIHVzZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUuIFNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGRyaXZlciBzaG91bGQgYmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUuCgpIb2xkIG9uLCB0aG91Z2guIEkmIzM5O20gd29uZGVyaW5nIGlmIEkgY2FuIHRyaWNrIGl0LiBDYW4gSSBwb3RlbnRpYWxseSBsb2FkIGEgZmFrZSBBQ1BJIHRhYmxlIHZpYSBjb25maWdmcyBhbmQgZm9yY2UgYSBwcm9iZT8gV2FpdCwgbm8sIHRoYXQgd29uJiMzOTt0IHdvcmsuIFRoZSBgYWNwaV9yYXMyX2luaXRgIGZ1bmN0aW9uIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCBvbmx5IGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3QsIHdoaWxlIHRoZSBjb25maWdmcyBBQ1BJIHRhYmxlIGxvYWRpbmcgaGFwcGVucyBsYXRlciBpbiB0aGUgcHJvY2Vzcy4KCkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIGZha2UgdGFibGUgdXNpbmcgaW5pdHJkIOKAkyB3aGljaCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggc3l6a2FsbGVyLCBhbHRob3VnaCBpdCYjMzk7cyBub3QgY3VycmVudGx5IHNldCB1cCBmb3IgUkFTMiDigJMgdGhlIGRyaXZlciBzdGlsbCByZWxpZXMgb24gdGhhdCBQQ0MgY2hhbm5lbC4gSSBzaG91bGQgY2hlY2sgdGhhdCBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYCBmdW5jdGlvbiB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3JlcXVlc3RfY2hhbm5lbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02Ny1cdGluaXRfY29tcGxldGlvbihcdTAwMjZkYXRhLVx1MDAzZWRvbmUpO1xuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XHRkYXRhLVx1MDAzZXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmRhdGEtXHUwMDNlY2wsIGN0eC1cdTAwM2VzdWJzcGFjZV9pZCk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cdGlmIChJU19FUlIoZGF0YS1cdTAwM2VwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM9NTY2PXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoaW50IHBjY19zc19pZHgpXG4tLVxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cdGlmIChwY2Nfc3NfaWR4IFx1MDAzZT0gMCkge1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYy01NzMtXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYz0yODg9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMwOS1cbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzEwOlx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2c3NwY2MtXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMxMS1cdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4tLVxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYz0xMDY9c3RhdGljIGludCBoaXNpX3VuY29yZV9yZXF1ZXN0X3BjY19jaGFuKHN0cnVjdCBoaXNpX3VuY29yZV9mcmVxICp1bmNvcmUpXG4tLVxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTYtXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jOjExNzpcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnVuY29yZS1cdTAwM2VjbCwgdW5jb3JlLVx1MDAzZWNoYW5faWQpO1xuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTgtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHhnZW5lX2h3bW9uX3BjY19yeF9jYjtcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XHRcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXHUwMDNlbWJveF9pZHgpO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTY2OS1cdFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz00MzY9c3RhdGljIGludCB4Z2VuZV9zbGltcHJvX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTQ3Ny1cdFx0Y2wtXHUwMDNlcnhfY2FsbGJhY2sgPSBzbGltcHJvX2kyY19wY2NfcnhfY2I7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzo0Nzg6XHRcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXHUwMDNlbWJveF9pZHgpO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzEzPXN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM0OTogKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNTAtICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNjE6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNjIte1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTItfVxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5MzpFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpO1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk4LSAqIEBwY2hhbjogUG9pbnRlciB0byB0aGUgUENDIG1haWxib3ggY2hhbm5lbCBhcyByZXR1cm5lZCBieVxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlx0ICAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy00MDAtICovXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jPTE3Mz1zdGF0aWMgaW50IGhjY3NfcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IGhjY3NfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM6MTg5Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGhkZXYtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmMtMTkwLVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5pbmNsdWRlL2FjcGkvcGNjLmg9Mzc9ZXh0ZXJuIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmluY2x1ZGUvYWNwaS9wY2MuaDozODpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD00MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuaW5jbHVkZS9hY3BpL3BjYy5oLTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUzMgoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggcHVyc3VpbmcgZm9yIGZ1enppbmcsIGFuZCBoZXJlJiMzOTtzIHdoeS4gVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHksIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLCBkZXBlbmRzIG9uIGEgcmVnaXN0ZXJlZCBQQ0MgY2hhbm5lbC4gVGhvc2UgY2hhbm5lbHMgYXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGVzdGFibGlzaGVkIHRocm91Z2ggdGhlIGBkcml2ZXJzL21haWxib3gvcGNjLmNgIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGl0IHBhcnNlcyB0aGUgUENDVCBBQ1BJIHRhYmxlLiBUaGUgY2F0Y2g/IFRoaXMgZW50aXJlIHNldHVwIGhpbmdlcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDQ1QgYW5kIFJBUzIgQUNQSSB0YWJsZXMuCgpTaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhhdCYjMzk7cyBhIHByb2JsZW0uIFFFTVUsIGFzIGZhciBhcyBJIGtub3csIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgQUNQSSB0YWJsZXMuIEFuZCwga25vd2luZyBob3cgc3l6a2FsbGVyIHdvcmtzLCBpdCYjMzk7cyBub3QgaW5qZWN0aW5nIHRoZW0gZWl0aGVyLiBUaGF0IG1lYW5zIHRoZSBjb2RlIHBhdGggaW52b2x2aW5nIHRoZSBQQ0MgY2hhbm5lbCBhbmQgdGhlIEFDUEkgdGFibGVzIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBUaGVyZWZvcmUsIGZyb20gYSBwdXJlIHJlYWNoYWJpbGl0eSBzdGFuZHBvaW50LCBJIGhhdmUgdG8gY29uY2x1ZGUgYFdvcnRoRnV6emluZz1mYWxzZWAgaGVyZS4KClRvIGJlIHByZWNpc2UsIHRoZSBwYXRjaCBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcsIHdoaWNoIGRpcmVjdGx5IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIG1haWxib3ggbWVjaGFuaXNtLiBUaGVzZSBhcmUsIGFzIG1lbnRpb25lZCwgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIEFDUEkgdGFibGUgZHJpdmVuLCBhbmQgYmVjYXVzZSB0aGV5JiMzOTtyZSBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIGlzIGRlYWQgZm9yIGZ1enppbmcgcHVycG9zZXMuCgpMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBPa2F5LCBJIHNlZSB0aGF0IGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgaXMgaW50cm9kdWNpbmcgdGhlIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUgdG8gRURBQyBzY3J1YiBzeXNmcy4gVGhhdCBzZWVtcyBnZW5lcmljIGVub3VnaCwgYnV0IGl0IG9ubHkgcmVhbGx5ICpkb2VzKiBhbnl0aGluZyBpZiB0aGUgYG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2RgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgc2V0LiBGcm9tIG15IGFuYWx5c2lzLCB0aGUgb25seSBwbGFjZSB3aGVyZSBgc2V0X2VuYWJsZWRfb2RgIGlzICphY3R1YWxseSogc2V0IGlzIHdpdGhpbiBgYWNwaV9yYXMyLmNgLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgJiMzNDtnZW5lcmljJiMzNDsgc3lzZnMgYXR0cmlidXRlIGlzIHVzZWxlc3MgdW5sZXNzIHRoZSBgYWNwaV9yYXMyYCBkcml2ZXIgaXMgbG9hZGVkLiBTaW5jZSBgYWNwaV9yYXMyYCByZXF1aXJlcyB0aGUgUENDVCBhbmQgUkFTMiB0YWJsZXMgKHdoaWNoIGFyZW4mIzM5O3QgcHJlc2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQpLCB0aGF0IHN5c2ZzIGF0dHJpYnV0ZSBpcyBuZXZlciBjcmVhdGVkLgoKSW4gY29uY2x1c2lvbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc3RpY2tpbmcgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBkZXBlbmRlbmNlIG9uIHRob3NlIG1pc3NpbmcgQUNQSSB0YWJsZXMgbWFrZXMgdGhlIGNyaXRpY2FsIHBhcnRzIG9mIHRoaXMgcGF0Y2gsIGluY2x1ZGluZyB0aGF0IG5ldyBzeXNmcyBhdHRyaWJ1dGUsIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTo0Mi42ODU0ODU3ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk3MzcxNDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gSXQgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgQUNQSSB0YWJsZXMgYW5kIG1haWxib3ggbWVjaGFuaXNtcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6NDIuNjg1NDkyMTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5ODU4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTFlNGQ4ZDIxYWQyNDg3NzUwNWE4ZWFjMjQ2ZjFhZTVkZjE4NGU5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNzozMTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uYzkxZTNmZjBlM2QyNDAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMjAgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbitcXHRcXHRBZnRlciBiYWNrZ3JvdW5kIHNjcnViYmluZyBzdGFydHMsIHRoZSB1c2VyIG11c3Qgc2V0IHRoZVxcbitcXHRcXHRhZGRyZXNzIHJhbmdlIGJlZm9yZSBpbml0aWF0aW5nIGEgbmV3IGRlbWFuZCBzY3J1YmJpbmdcXG4rXFx0XFx0b3BlcmF0aW9uLiBUaGUgYWRkcmVzcyByYW5nZSBhdHRyaWJ1dGVzLCB3aGljaCBpbmRpY2F0ZSB0aGVcXG4rXFx0XFx0Y3VycmVudCBzY3J1YmJpbmcgcmFuZ2UsIGFyZSBub3QgdmFsaWQgZHVyaW5nIGJhY2tncm91bmRcXG4rXFx0XFx0c2NydWJiaW5nIGFuZCB0aGVyZWZvcmUgYXJlIHJlc2V0IHdoZW4gaXQgc3RhcnRzLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcXG4gRGF0ZTpcXHRcXHRNYXJjaCAyMDI1XFxuIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXFxuIFxcbiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluXFxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxcbitcXG4rMy4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcXG4rXFxuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxcbitcXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcXG4rXFxuKzBcXG4rXFxuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cXG4rXFxuK0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwMFxcbitcXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXFxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxcbitcXG4rMzYwMFxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxcbitcXG4rODY0MDBcXG4rXFxuKzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XFxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxcbitcXG4rIyBlY2hvIDQzMjAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS5cXG4rXFxuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHg4MDAwMDAwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXFxuK1xcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxcbitcXG4rIyBlY2hvIDB4MjAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcXG4rXFxuKzMuMS42LiBTdGFydCAnZGVtYW5kIHNjcnViYmluZycuXFxuK1xcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xcbit3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cXG4rXFxuKyMgZWNobyAxIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcXG4rXFxuKzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnlcXG4rXFxuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXFxuK1xcbiswXFxuK1xcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXFxuK3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLlxcbitcXG4rIyBlY2hvIDIxNjAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcXG4gXFx0ICBJZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgQ1BQQyBpbiBmaXJtd2FyZSxcXG4gXFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4gXFxuK2NvbmZpZyBBQ1BJX1JBUzJcXG4rXFx0Ym9vbCBcXFwiQUNQSSBSQVMyIGRyaXZlclxcXCJcXG4rXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4rXFx0ZGVwZW5kcyBvbiBNQUlMQk9YXFxuK1xcdGRlcGVuZHMgb24gUENDXFxuK1xcdGhlbHBcXG4rXFx0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxcbitcXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxcbitcXG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXFxuIFxcdHRyaXN0YXRlIFxcXCJQcm9jZXNzb3JcXFwiXFxuIFxcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVxcdCs9IGVjX3N5cy5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0JHUlQpXFx0XFx0Kz0gYmdydC5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0NQUENfTElCKVxcdCs9IGNwcGNfYWNwaS5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXFx0Kz0gc3Bjci5vXFxuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXFx0XFx0Kz0gcmFzMi5vXFxuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXFx0Kz0gcHB0dC5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVxcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xcbisrKyBiL2RyaXZlcnMvYWNwaS9idXMuY1xcbkBAIC0zMSw2ICszMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NhY3BpL2FwZWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1c3BlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BybXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbkBAIC0xNjEwLDYgKzE2MTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2luaXQodm9pZClcXG4gXFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XFxuIFxcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcXG4gXFx0YWNwaV92aW90X2luaXQoKTtcXG4rXFx0YWNwaV9yYXMyX2luaXQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjYxZWExNGQ5YmI5ZTU0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcXG5AQCAtMCwwICsxLDUwOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcXG4rICogcHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBlLmcuLCBmb3IgSFctYmFzZWQgbWVtb3J5XFxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJBQ1BJIFJBUzI6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9wY2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXFxuKyAqIEBtYm94X2NsaWVudDpcXHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XFxuKyAqIEBwY2NfY2hhbjpcXHRcXHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXFxuKyAqIEBjb21tX2FkZHI6XFx0XFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZWxlbTpcXHRcXHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXFxuKyAqIEBwY2NfbG9jazpcXHRcXHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcXG4rICpcXHRcXHRcXHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBAZGVhZGxpbmVfdXM6XFx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXFxuKyAqXFx0XFx0XFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cXG4rICogQHBjY19tcGFyOlxcdFxcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxcbisgKiBAcGNjX21ydHQ6XFx0XFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXFxuKyAqXFx0XFx0XFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcXG4rICpcXHRcXHRcXHRpc3N1aW5nIG5leHQgY29tbWFuZFxcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxcbisgKiBAbGFzdF9tcGFyX3Jlc2V0OlxcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XFxuKyAqIEBtcGFyX2NvdW50OlxcdFxcdE1QQVIgY291bnRcXG4rICogQHBjY19pZDpcXHRcXHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxcbisgKiBAbGFzdF9jbWQ6XFx0XFx0TGFzdCBQQ0MgY29tbWFuZFxcbisgKiBAa3JlZjpcXHRcXHRrcmVmIG9iamVjdFxcbisgKi9cXG4rc3RydWN0IHJhczJfc3NwY2Mge1xcbitcXHRzdHJ1Y3QgbWJveF9jbGllbnRcXHRcXHRtYm94X2NsaWVudDtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW5cXHRcXHQqcGNjX2NoYW47XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVxcdCpjb21tX2FkZHI7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRlbGVtO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRwY2NfbG9jaztcXG4rXFx0dTY0XFx0XFx0XFx0XFx0ZGVhZGxpbmVfdXM7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcGFyO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRwY2NfbXJ0dDtcXG4rXFx0a3RpbWVfdFxcdFxcdFxcdFxcdGxhc3RfY21kX2NtcGxfdGltZTtcXG4rXFx0a3RpbWVfdFxcdFxcdFxcdFxcdGxhc3RfbXBhcl9yZXNldDtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bXBhcl9jb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0XFx0cGNjX2lkO1xcbitcXHR1MTZcXHRcXHRcXHRcXHRsYXN0X2NtZDtcXG4rXFx0c3RydWN0IGtyZWZcXHRcXHRcXHRrcmVmO1xcbit9O1xcbitcXG4rLypcXG4rICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXFxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcXG4rICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXFxuKyAqL1xcbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcXG4rI2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxcbisjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXFxuK1xcbisjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXFxuKyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcXG4rXFxuKy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cXG4rc3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xcbitcXG4rc3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0dTMyIGNhcF9zdGF0dXM7XFxuK1xcdHUxNiBzdGF0dXM7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcXG4rXFx0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXFxuK1xcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxcbitcXHQgKlxcbitcXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXFxuK1xcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcXG4rXFx0ICogYml0IGlzIHNldC5cXG4rXFx0ICovXFxuK1xcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgc3RhdHVzLFxcbitcXHRcXHRcXHRcXHRcXHRzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcXG4rXFx0XFx0XFx0XFx0XFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiUENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCwgcmMpO1xcbitcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCk7XFxuK1xcdFxcdHN0YXR1cyBcXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcXG4rXFx0XFx0aW93cml0ZTE2KHN0YXR1cywgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdGlvd3JpdGUzMigweDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cXG4rXFx0cm1iKCk7XFxuK1xcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFx0c3dpdGNoIChjYXBfc3RhdHVzKSB7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDpcXG4rXFx0XFx0cmMgPSAtRVBFUk07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFDUElfUkFTMl9CVVNZOlxcbitcXHRcXHRyYyA9IC1FQlVTWTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxcbitcXHRcXHRyYyA9IC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGUzMigweDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbFxcbisgKiBAcmFzMl9jdHg6XFx0cG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZVxcbisgKiBAY21kOlxcdFJBUzIgY29tbWFuZCB0byBzZW5kXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXFxuKyAqL1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlO1xcbitcXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXHRzNjQgdGltZV9kZWx0YTtcXG4rXFx0dTE2IHZhbDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ2hlY2sgZm9yIGNtZCBQQ0NfQ01EX0VYRUNfUkFTMiBhcyBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvblxcbitcXHQgKiBzdXBwb3J0cyBjb21tYW5kIFBDQ19DTURfRVhFQ19SQVMyIG9ubHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhczJfY3R4IHx8IGNtZCAhPSBQQ0NfQ01EX0VYRUNfUkFTMikge1xcbitcXHRcXHRwcl93YXJuKFxcXCIlczogSW52YWxpZCBwYXJhbWV0ZXJzIHJhczJfY3R4OiAlcCBjb21tYW5kOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHNzcGNjID0gcmFzMl9jdHgtXFx1MDAzZXNzcGNjO1xcbitcXHRnZW5fY29tbV9iYXNlID0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVxcdTAwM2VwY2NfY2hhbi1cXHUwMDNlbWNoYW47XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxcbitcXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXFxuK1xcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuK1xcdFxcdHRpbWVfZGVsdGEgPSBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XFxuK1xcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQgXFx1MDAzZSB0aW1lX2RlbHRhKVxcbitcXHRcXHRcXHRmc2xlZXAoc3NwY2MtXFx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZVxcbitcXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxcbitcXHQgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBub1xcbitcXHQgKiBsaW1pdGF0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0XFxuK1xcdCAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZVxcbitcXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXFxuK1xcdCAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVJcXG4rXFx0ICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcGFyKSB7XFxuK1xcdFxcdGlmICghc3NwY2MtXFx1MDAzZW1wYXJfY291bnQpIHtcXG4rXFx0XFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcXG4rXFx0XFx0XFx0aWYgKCh0aW1lX2RlbHRhIFxcdTAwM2MgNjAgKiBNU0VDX1BFUl9TRUMpIFxcdTAwMjZcXHUwMDI2IHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2RiZyhyYXMyX2N0eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiUENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFxcXCIsIGNtZCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cXHUwMDNlcGNjX21wYXI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQtLTtcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xcbitcXHRpb3dyaXRlMTYoY21kLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlY29tbWFuZCk7XFxuK1xcbitcXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cXG4rXFx0aW93cml0ZTE2KDAsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXG4rXFx0LyogUmluZyBkb29yYmVsbCAqL1xcbitcXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcXHUwMDI2Y21kKTtcXG4rXFx0LypcXG4rXFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxcbitcXHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbitcXHRcXHRkZXZfd2FybihyYXMyX2N0eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkVycm9yIHNlbmRpbmcgUENDIG1ib3ggbWVzc2FnZSBjb21tYW5kOiAweCV4LCByYzolZFxcXFxuXFxcIiwgY21kLCByYyk7XFxuK1xcdFxcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xcbitcXHRcXHR2YWwgPSBpb3JlYWQxNihcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xcbitcXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VsYXN0X2NtZCA9IGNtZDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gYW5kIGNoZWNrIGZvciBQQ0MgZXJyb3IgYml0ICovXFxuK1xcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtIHx8IHBjY19jaGFuLVxcdTAwM2VzaG1lbV9zaXplIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBhY3BpX3JhczJfc2htZW0pKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XFxuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVxcdTAwM2VpZCk7XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXFx1MDAzZXNzcGNjKTtcXG4rY3R4X2ZyZWU6XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MTYgdG90X3RibF9sZW47XFxuK1xcdHUxNiBpO1xcbitcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIFxcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xcbitcXHRpZiAocmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGggXFx1MDAzYyB0b3RfdGJsX2xlbikge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGN0eF9saXN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XFxuK1xcdFxcdGlmIChwY2NfZGVzY19saXN0LVxcdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXFx1MDAzZWNoYW5uZWxfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGNjX2Rlc2NfbGlzdC1cXHUwMDNlaW5zdGFuY2UpO1xcbitcXHRcXHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cXG4rXFx0XFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXFxcblxcXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcXG4rXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzZSAwOyBpLS0pIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXFxuK1xcdFxcdFxcdFxcdFxcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtmcmVlKHBjdHhfbGlzdCk7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcXG4rXFx0fVxcbitcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXFxuKyAqIG1lbW9yeSBmZWF0dXJlLlxcbisgKlxcbisgKiBSZXR1cm5zOiBub25lLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcXG4rXFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcXHUwMDI2cmFzMl90YWIpO1xcbitcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxcXG5cXFwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XFxuIFxcdFNDUlVCX0FERFJFU1MsXFxuIFxcdFNDUlVCX1NJWkUsXFxuIFxcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxcbitcXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxcbiBcXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcXG4gXFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFxcXCIweCVsbHhcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXFx0XFx0XFx0XFxcXFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBcXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDQ0NDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xcbitcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VzZXRfZW5hYmxlZF9vZClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxcbiBcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfbWluX2N5Y2xlKVxcbiBcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxcbiBcXHRcXHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXFxuK1xcdFxcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxcbiBcXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXFxuIFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuIFxcbitjb25maWcgTUVNX0FDUElfUkFTMlxcbitcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSV9SQVMyXFxuK1xcdGRlcGVuZHMgb24gRURBQ1xcbitcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4rXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4rXFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cXG4rXFx0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcXG4rXFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcbitcXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxcbitcXG4gZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXFxuQEAgLTIsNiArMiw3IEBAXFxuIG9iai0kKENPTkZJR19SQVMpXFx0Kz0gcmFzLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdCs9IGRlYnVnZnMub1xcbiBvYmotJChDT05GSUdfUkFTX0NFQylcXHQrPSBjZWMub1xcbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcXHQrPSBhY3BpX3JhczIub1xcbiBcXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVxcdCs9IGFtZC9mbXBtLm9cXG4gb2JqLXlcXHRcXHRcXHQrPSBhbWQvYXRsL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTFhZGZjZGRmYTk5YThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcXG5AQCAtMCwwICsxLDYyNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdClcXHRcXFwiQUNQSSBSQVMyIE1FTU9SWTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VkYWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcXG4rXFxuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcXG4rXFxuKy8qXFxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXFxuKyAqL1xcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcXG4rXFxuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcXG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXFxuK1xcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xcbit9O1xcbitcXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcXG4rXFxuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpb3dyaXRlOCgwLCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VzZXRfY2Fwc1swXSk7XFxuK1xcbitcXHRyZXR1cm4gaW9yZWFkOChcXHUwMDI2Y29tbW9uLVxcdTAwM2VmZWF0dXJlc1swXSkgXFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX291dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQWZ0ZXIgYmFja2dyb3VuZCBzY3J1YmJpbmcgc3RhcnRzLCB0aGUgdXNlciBtdXN0IHNldCB0aGUgYWRkcmVzc1xcbitcXHRcXHQgKiByYW5nZSBiZWZvcmUgaW5pdGlhdGluZyBhIG5ldyBkZW1hbmQgc2NydWJiaW5nIG9wZXJhdGlvbi4gVGhlXFxuK1xcdFxcdCAqIGFkZHJlc3MgcmFuZ2UgYXR0cmlidXRlcywgd2hpY2ggaW5kaWNhdGUgdGhlIGN1cnJlbnQgc2NydWJiaW5nXFxuK1xcdFxcdCAqIHJhbmdlLCBhcmUgbm90IHZhbGlkIGR1cmluZyBiYWNrZ3JvdW5kIHNjcnViYmluZyBhbmQgdGhlcmVmb3JlXFxuK1xcdFxcdCAqIGFyZSByZXNldCB3aGVuIGl0IHN0YXJ0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgIChpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIpIHtcXG4rXFx0XFx0KnJ1bm5pbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0KnJ1bm5pbmcgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcXG4rXFx0aWYgKCEoKnJ1bm5pbmcpKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YilcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXFxuK1xcdFxcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcXG4rXFx0XFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcbitcXHRcXHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFxuK1xcdFxcdGlmICghcnVubmluZykge1xcbitcXHRcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXFx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK2V4aXQ6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCptaW4gPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0Km1heCA9IHJhczJfY3R4LVxcdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXFxuK3tcXG4rXFx0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxcbitcXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KmVuYWJsZWQgPSByYXMyX2N0eC1cXHUwMDNlYmdfc2NydWI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdFxcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxcbitcXHRcXHQgKiBhcyB0aGUgQUkgcmV2aWV3IHRvb2wgc3VnZ2VzdGVkLCBpZiBpdCBpcyBub3QgcnVubmluZyEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xcbitcXHRcXHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCplbmFibGVkID0gcnVubmluZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heSBuZWVkIHRvIHJldHVybiB0aGUgZXJyb3IgY29kZSBmcm9tIGJlbG93IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIHVzZXJcXG4rXFx0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxcbitcXHQgKiBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseS5cXG4rXFx0ICovXFxuK1xcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcXG4rXFx0XFx0ICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0b1xcbitcXHRcXHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxcbitcXHRcXHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInJhczJfc2NydWJfbmlkJWRcXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eC1cXHUwMDNldGhyZWFkKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcXG4rXFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcXG4rXFx0XFx0XFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIGV4aXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rZXhpdDpcXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XFxuK1xcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcXG4rXFx0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxcbitcXHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcXG4rXFx0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXFxuK1xcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXFxuK1xcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXFxuK1xcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXFxuK1xcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXFxuK1xcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxcbitcXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxcbitcXHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQcmV2ZW50IHRoZSB0aHJlYWQncyBgdGFza19zdHJ1Y3RgIGZyb20gYmVpbmcgZnJlZWQgaWYgdGhlXFxuK1xcdFxcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGdldF90YXNrX3N0cnVjdChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcF9wdXQocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XFxuK1xcdGNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxcbitcXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xcbitcXHQgKiB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXMgaW4gdGhlIE5VTUEgZG9tYWluXFxuK1xcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcXG4rXFx0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xcbitcXHQgKiBhbHJlYWR5IHBlcmZvcm1lZCBpbiBhZGRfYXV4X2RldmljZSgpIGluIC9hY3BpL3JhczIuY1xcbitcXHQgKi9cXG4rXFx0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxcXG5cXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcml2ZXJfYWN0aXZlOlxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJpdmVyX2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjQ0LjA1NjM4NzA4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNjAyODAzMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBJdCByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBBQ1BJIHRhYmxlcyBhbmQgbWFpbGJveCBtZWNoYW5pc21zIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGRyaXZlciBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZXMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MWU0ZDhkMjFhZDI0ODc3NTA1YThlYWMyNDZmMWFlNWRmMTg0ZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMDc6MzE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li5jOTFlM2ZmMGUzZDI0MCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4rXHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICszMCwyMCBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxuIFx0XHQob24tZGVtYW5kIHNjcnViYmluZykuXG4gXG4rV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4rRGF0ZTpcdFx0SmFuIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ni4xOVxuK0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXG4rXHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4rXG4rXHRcdEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlXG4rXHRcdGFkZHJlc3MgcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZ1xuK1x0XHRvcGVyYXRpb24uIFRoZSBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZVxuK1x0XHRjdXJyZW50IHNjcnViYmluZyByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZFxuK1x0XHRzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZSBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuXG4rXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxuIFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcbitcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuK1xuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuK1xuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuK1xuKzBcbitcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXG4rXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszNjAwMFxuK1xuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cbitcbiszNjAwXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuK1xuKzg2NDAwXG4rXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cbitcbisjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuK1xuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4rXG4rIyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4rXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4rXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cbitcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuK1xuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuK1xuKzBcbitcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4rXG4rIyBlY2hvIDIxNjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxuK1xuKyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbitjb25maWcgQUNQSV9SQVMyXG4rXHRib29sIFwiQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuK1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4rXHRkZXBlbmRzIG9uIFBDQ1xuK1x0aGVscFxuK1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuK1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbitcbitcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbitcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwiUHJvY2Vzc29yXCJcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCs9IGVjX3N5cy5vXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcdFx0Kz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQrPSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQrPSBzcGNyLm9cbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQrPSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXHQrPSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FjcGkvYXBlaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJtdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuK1x0YWNwaV9yYXMyX2luaXQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MWVhMTRkOWJiOWU1NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xuQEAgLTAsMCArMSw1MDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJBQ1BJIFJBUzI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuKyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuKyAqIEBjb21tX2FkZHI6XHRcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cbisgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuKyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4rICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuKyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbisgKiBAcGNjX21wYXI6XHRcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxuKyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuKyAqXHRcdFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuKyAqIEBtcGFyX2NvdW50Olx0XHRNUEFSIGNvdW50XG4rICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbisgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbisgKiBAa3JlZjpcdFx0a3JlZiBvYmplY3RcbisgKi9cbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4rXHRzdHJ1Y3QgbWJveF9jbGllbnRcdFx0bWJveF9jbGllbnQ7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGVsZW07XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbitcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4rXHR1bnNpZ25lZCBpbnRcdFx0XHRwY2NfbXBhcjtcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9tcGFyX3Jlc2V0O1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bXBhcl9jb3VudDtcbitcdGludFx0XHRcdFx0cGNjX2lkO1xuK1x0dTE2XHRcdFx0XHRsYXN0X2NtZDtcbitcdHN0cnVjdCBrcmVmXHRcdFx0a3JlZjtcbit9O1xuK1xuKy8qXG4rICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxuKyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LlxuKyAqL1xuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxuKyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDBcbisjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4rXG4rI2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMFxuKyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbitcbisvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovXG4rc3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XG4rXG4rc3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0dTMyIGNhcF9zdGF0dXM7XG4rXHR1MTYgc3RhdHVzO1xuK1x0aW50IHJjO1xuK1xuK1x0LypcbitcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcbitcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuK1x0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXG4rXHQgKlxuK1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuK1x0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxuK1x0ICogYml0IGlzIHNldC5cbitcdCAqL1xuK1x0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuK1x0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuK1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbitcdGlmIChyYykge1xuK1x0XHRwcl93YXJuKFwiUENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kLCByYyk7XG4rXG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfRVJST1IpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwiLFxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQpO1xuK1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbitcdFx0aW93cml0ZTE2KHN0YXR1cywgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbitcdHJtYigpO1xuK1x0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuK1x0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDpcbitcdFx0cmMgPSAtRVBFUk07XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcbitcdFx0cmMgPSAtRUJVU1k7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQTpcbitcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJjID0gMDtcbitcdH1cbitcbitcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbFxuKyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbisgKiBAY21kOlx0UkFTMiBjb21tYW5kIHRvIHNlbmRcbisgKlxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4rICovXG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTtcbitcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1x0czY0IHRpbWVfZGVsdGE7XG4rXHR1MTYgdmFsO1xuK1x0aW50IHJjO1xuK1xuK1x0LypcbitcdCAqIENoZWNrIGZvciBjbWQgUENDX0NNRF9FWEVDX1JBUzIgYXMgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb25cbitcdCAqIHN1cHBvcnRzIGNvbW1hbmQgUENDX0NNRF9FWEVDX1JBUzIgb25seS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eCB8fCBjbWQgIT0gUENDX0NNRF9FWEVDX1JBUzIpIHtcbitcdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIHBhcmFtZXRlcnMgcmFzMl9jdHg6ICVwIGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRfX2Z1bmNfXywgcmFzMl9jdHgsIGNtZCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKiBXYWl0IGZvciBjb21wbGV0aW9uIGFuZCBjaGVjayBmb3IgUENDIGVycm9yIGJpdCAqL1xuK1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dC5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbitcbitcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuK1x0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbitcbitcdHJldHVybiByYztcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCJhY3BpX3JhczJcIik7XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4rXHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSB8fCBwY2NfY2hhbi1cdTAwM2VzaG1lbV9zaXplIFx1MDAzYyBzaXplb2Yoc3RydWN0IGFjcGlfcmFzMl9zaG1lbSkpIHtcbitcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbitcdFx0a2ZyZWUoc3NwY2MpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHNzcGNjLVx1MDAzZXBjY19pZFx0XHQ9IHBjY19pZDtcbitcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4rXHRzc3BjYy1cdTAwM2Vjb21tX2FkZHJcdD0gcGNjX2NoYW4tXHUwMDNlc2htZW07XG4rXHRpZiAocGNjX2NoYW4tXHUwMDNlbGF0ZW5jeSlcbitcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuK1x0ZWxzZVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcbitcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbitcdHNzcGNjLVx1MDAzZXBjY19tcGFyXHRcdD0gcGNjX2NoYW4tXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xuK1x0c3NwY2MtXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXHQ9IHRydWU7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0sIFx1MDAyNnJhczJfc3NwY2MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9IHBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXG4rXHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbitcdGtmcmVlKHJhczJfY3R4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MzIgY29tcF9uaWQ7XG4rXHRpbnQgaWQsIHJjO1xuK1xuK1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4rXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XG4rXHRcdHByX2RlYnVnKFwiSW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4rXG4rXHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxcblwiLCBjaGFubmVsLFxuK1x0XHRcdCBweG1faW5zdCwgcmMpO1xuK1x0XHRnb3RvIGN0eF9mcmVlO1xuK1x0fVxuK1xuK1x0aWQgPSBpZGFfYWxsb2MoXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4rXHRcdHJjID0gaWQ7XG4rXHRcdGdvdG8gcGNjX2ZyZWU7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmlkXHRcdD0gaWQ7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5kZXYucmVsZWFzZVx0PSByYXMyX3JlbGVhc2U7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5wYXJlbnRcdD0gcmFzMl9jdHgtXHUwMDNlZGV2O1xuK1xuK1x0cmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gaWRhX2ZyZWU7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmFzMl9jdHg7XG4rXG4raWRhX2ZyZWU6XG4rXHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgaWQpO1xuK3BjY19mcmVlOlxuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK2N0eF9mcmVlOlxuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK1xuK1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZShcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqcGNjX2Rlc2NfbGlzdDtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHUxNiB0b3RfdGJsX2xlbjtcbitcdHUxNiBpO1xuK1xuK1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIkFDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgKyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyB0b3RfdGJsX2xlbikge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBjdHhfbGlzdClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XG4rXHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbitcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbitcdFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXG4rXHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4rXHRcdFx0cHJfd2FybihcIkZhaWxlZCB0byBhZGQgUkFTMiBhdXhpbGlhcnkgZGV2aWNlIHJjPSVsZFxcblwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XG4rXHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuK1x0XHRcdFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXG4rXHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuK1x0XHRcdH1cbitcdFx0XHRrZnJlZShwY3R4X2xpc3QpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbitcdFx0fVxuK1x0XHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcbitcdH1cbitcdGtmcmVlKHBjdHhfbGlzdCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbisgKlxuKyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXG4rICogbWVtb3J5IGZlYXR1cmUuXG4rICpcbisgKiBSZXR1cm5zOiBub25lLlxuKyAqL1xuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4rXHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbitcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCIsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCIpO1xuK1xuK1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmNcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuK1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFwiMHglbGx4XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwiMHglbGx4XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcIiV1XFxuXCIpXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtaW5fY3ljbGVfZHVyYXRpb24sIGdldF9taW5fY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwiJXVcXG5cIilcbkBAIC04NCw2ICs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4rRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcbiBcdFx0XHRcdHJldHVybiAwNDQ0O1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuK1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4rXHRcdFx0aWYgKG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZClcbitcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIDA0NDQ7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxuIFx0XHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXG4rXHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbisrKyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcbitcdHRyaXN0YXRlIFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcIlxuK1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbitcdGRlcGVuZHMgb24gRURBQ1xuK1x0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXG4rXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbitcdGhlbHBcbitcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXG4rXHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuK1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbitcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcbitcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4rXG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgKzIsNyBAQFxuIG9iai0kKENPTkZJR19SQVMpXHQrPSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0Kz0gY2VjLm9cbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0Kz0gYW1kL2ZtcG0ub1xuIG9iai15XHRcdFx0Kz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUxYWRmY2RkZmE5OWE4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCArMSw2MjQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdClcdFwiQUNQSSBSQVMyIE1FTU9SWTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZGFjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcbitcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcbisjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuK1xuKy8qXG4rICogUkFTMiBwYXRyb2wgc2NydWJcbisgKi9cbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4rXG4rI2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuK1xuK3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcbit9O1xuK1xuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxuK1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbitcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4rXG4rc3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHI7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0aW93cml0ZTgoMCwgXHUwMDI2Y29tbW9uLVx1MDAzZXNldF9jYXBzWzBdKTtcbitcbitcdHJldHVybiBpb3JlYWQ4KFx1MDAyNmNvbW1vbi1cdTAwM2VmZWF0dXJlc1swXSkgXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xuK1x0aW50IHJldDtcbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdC8qXG4rXHRcdCAqIEFmdGVyIGJhY2tncm91bmQgc2NydWJiaW5nIHN0YXJ0cywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlIGFkZHJlc3NcbitcdFx0ICogcmFuZ2UgYmVmb3JlIGluaXRpYXRpbmcgYSBuZXcgZGVtYW5kIHNjcnViYmluZyBvcGVyYXRpb24uIFRoZVxuK1x0XHQgKiBhZGRyZXNzIHJhbmdlIGF0dHJpYnV0ZXMsIHdoaWNoIGluZGljYXRlIHRoZSBjdXJyZW50IHNjcnViYmluZ1xuK1x0XHQgKiByYW5nZSwgYXJlIG5vdCB2YWxpZCBkdXJpbmcgYmFja2dyb3VuZCBzY3J1YmJpbmcgYW5kIHRoZXJlZm9yZVxuK1x0XHQgKiBhcmUgcmVzZXQgd2hlbiBpdCBzdGFydHMuXG4rXHRcdCAqL1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4rXHRcdCpydW5uaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuK1x0aWYgKCEoKnJ1bm5pbmcpKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuK1x0XHRcdGdvdG8gZXhpdDtcbitcbitcdFx0LypcbitcdFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXG4rXHRcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcbitcdFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuK1x0XHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbitcdFx0ICovXG4rXHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdGlmICghcnVubmluZykge1xuK1x0XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cdTAwM2VkZXYsIHJhczJfY3R4LCB0cnVlKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiRmFpbGVkIHRvIGVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIHJldD0lZFxcblwiLCByZXQpO1xuK1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRtc2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitleGl0OlxuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUpXG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1pbilcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqbWF4ID0gcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyIHNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxuK1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQvKlxuK1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuK1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuK1x0ICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqYmFzZSA9IHJhczJfY3R4LVx1MDAzZWJhc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KnNpemUgPSByYXMyX2N0eC1cdTAwM2VzaXplO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBiYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4rXHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4rXHRcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBzdG9wIGJhY2tncm91bmQgc2NydWJiaW5nLFxuK1x0XHQgKiBhcyB0aGUgQUkgcmV2aWV3IHRvb2wgc3VnZ2VzdGVkLCBpZiBpdCBpcyBub3QgcnVubmluZyEuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwiLFxuK1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbitcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCplbmFibGVkID0gcnVubmluZztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVuYWJsZSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGV4aXQ7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbitcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4rXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4rXHQgKi9cbitcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbitcdFx0cmV0ID0gLUVSQU5HRTtcbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cIiwgcmV0KTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4rXG4rXHQvKlxuK1x0ICogTWF5IG5lZWQgdG8gcmV0dXJuIHRoZSBlcnJvciBjb2RlIGZyb20gYmVsb3cgZnVuY3Rpb24gY2FsbCB0byB0aGUgdXNlclxuK1x0ICogaWYgdGhlIGJlbG93IGZ1bmN0aW9uIGZhaWwgdG8gdXBkYXRlIGN1cnJlbnQgc2NydWIgcGFyYW1ldGVycyBldmVuIHRoZVxuK1x0ICogZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHkuXG4rXHQgKi9cbitcdHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLFxuK1x0XHQgKiB0aGUgdGhyZWFkIG1heSBkZXRlcm1pbmUgdGhhdCBkZW1hbmQgc2NydWJiaW5nIGlzIG5vdCBydW5uaW5nLCBhdHRlbXB0IHRvXG4rXHRcdCAqIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcsIGFuZCB0aGVuIGV4aXQuIFRoaXMgY2FuIG9jY3VyIGJlY2F1c2UgdGhlXG4rXHRcdCAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuXG4rXHRcdCAqL1xuK1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcbitcdFx0XHRcdFx0ICAgICAgIFwicmFzMl9zY3J1Yl9uaWQlZFwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXG4rXHRcdFx0ICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWRcbitcdFx0XHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Z290byBleGl0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4rXHR9XG4rXG4rZXhpdDpcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuK1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuK1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuK1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4rXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbitcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4rXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuK1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbitcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4rXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4rXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4rXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuK1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmV2ZW50IHRoZSB0aHJlYWQncyBgdGFza19zdHJ1Y3RgIGZyb20gYmVpbmcgZnJlZWQgaWYgdGhlXG4rXHRcdCAqIHRocmVhZCBmdW5jdGlvbiBleGl0cy5cbitcdFx0ICovXG4rXHRcdGdldF90YXNrX3N0cnVjdChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRrdGhyZWFkX3N0b3BfcHV0KHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xuK1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuK1x0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxuK1x0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xuK1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbitcdCAqL1xuK1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbisgKi9cbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbitcdHZvaWRcdFx0XHRcdCpzc3BjYztcbitcdHN0cnVjdCBtdXRleFx0XHRcdCpwY2NfbG9jaztcbitcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuK1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbitcdHU2NFx0XHRcdFx0bWVtX3NpemU7XG4rXHR1NjRcdFx0XHRcdGJhc2U7XG4rXHR1NjRcdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdFx0c2NydWJfY3ljbGVfaHJzO1xuK1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWF4X3NjcnViX2N5Y2xlO1xuK1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4rXHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbitcdGJvb2xcdFx0XHRcdHJlZW5hYmxlX2JnX3NjcnViO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4rXHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbisgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4rXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuIFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcbiBcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XG4gXHRpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6NDQuMDU2Mzg5NDQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzNzM3MDQ5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBQ1BJIFJBUzIgU2NydWJiaW5nOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggYWRkaW5nIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBJdCdzIGdvdCBhIG5ldyBkcml2ZXIsIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCwgYW5kIGEgcmVsYXRlZCBvbmUgaW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCwgcGx1cyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9lZGFjL3NjcnViLmNgIGZvciBgZW5hYmxlX2RlbWFuZGAuIFRoZSB3aG9sZSB0aGluZyB1c2VzIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSwgd2hpY2ggaXMgYW4gQUNQSSB0aGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBDQyBzZWVtcyB0cmlja3kgYmVjYXVzZSBpdCByZWxpZXMgb24gbWFpbGJveGVzLiAgQUNQSSB0YWJsZXMgYXJlIG9mdGVuIHByb3ZpZGVkLCBidXQgdGhpcyBtYWlsYm94IHRoaW5nIGlzIGRpZmZlcmVudC5cblxuQWxyaWdodCwgbGV0J3MgZGlnIGludG8gYGRyaXZlcnMvYWNwaS9yYXMyLmNgLiAgTG9va3MgbGlrZSBpdCB1c2VzIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiAgTm93LCBRRU1VLi4uIFFFTVUgZG9lc24ndCBqdXN0IGhhbmQgeW91IEFDUEkgUkFTMiBvciBQQ0MgbWFpbGJveGVzIG91dCBvZiB0aGUgYm94IGZvciBlYXN5IGZ1enppbmcuIFN5emthbGxlciAqY2FuKiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzIG9yIHVzZSBzb2Z0d2FyZSBtYWlsYm94ZXMsIGlmIHRoZXkgZXhpc3QsIGJ1dCBQQ0MgbWFpbGJveGVzIGFyZSB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuICBJcyB0aGVyZSBhIHNvZnR3YXJlIFBDQyBtYWlsYm94IGhlcmUsIG9yIGlzIGl0IHB1cmVseSBoYXJkd2FyZT9cblxuQWhhISBgZHJpdmVycy9tYWlsYm94L3BjYy5jYCBzZWVtcyB0byBwcm92aWRlIGEgUENDIG1haWxib3ggKmNvbnRyb2xsZXIqLiBJdCByZWFkcyB0aGUgUENDVCBBQ1BJIHRhYmxlLiBTbywgaWYgc3l6a2FsbGVyIGNhbiBwcm92aWRlIGEgY3VzdG9tIFBDQ1QgdGFibGUsIGl0IG1pZ2h0IHRyaWdnZXIgdGhhdC5cblxuV2FpdCBhIHNlY29uZCwgdGhpcyBwYXRjaCAqYWxzbyogYWRkcyBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGNvbmZpZ3MuIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgZHJpdmVyIHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlLCByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSwgYW5kIHRoZW4gYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCBwcm9iZXMgaXQuICBUaGVuIGl0IGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyB2aWEgRURBQy4gICpUaGF0KiBJIGNhbiBmdXp6LiBTeXprYWxsZXIgbG92ZXMgc3lzZnMuIExldCdzIHNlZS4uLiB3ZSBoYXZlIHRoaW5ncyBsaWtlIGBlbmFibGVfZGVtYW5kYCwgYGVuYWJsZV9iYWNrZ3JvdW5kYCwgYGFkZHJgLCBgc2l6ZWAsIGBjdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYWxsIGdvb2QgdGFyZ2V0cy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGByYXMyX2h3X3NjcnViX3JlYWRfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZWAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYC5cblxuQWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyAqaWYqIHRoZSBkZXZpY2UgaXMgcHJvYmVkLiBBbmQgZm9yIHRoZSBkZXZpY2UgdG8gcHJvYmUsIHdlIG5lZWQgdGhhdCBSQVMyIEFDUEkgdGFibGUuIENhbiBTeXprYWxsZXIgaW5qZWN0IEFDUEkgdGFibGVzP1xuXG5TeXprYWxsZXIgaXNuJ3QgbWFnaWMsIGl0IGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgQUNQSSB0YWJsZSBpbmplY3Rpb24gbWVjaGFuaXNtIHRoYXQgd29ya3MgcmVsaWFibHkgZm9yIGFsbCB0YWJsZXMgZHVyaW5nIGJvb3QuIFdlIGhhdmUgYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIHdoaWNoIG1pZ2h0IGFsbG93IG92ZXJyaWRpbmcgdmlhIGluaXRyZCwgb3IgY29uZmlnZnMgQUNQSSB0YWJsZSBpbmplY3Rpb24uXG5cbldhaXQgYSBtaW51dGUsIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgZHVyaW5nIGJvb3QuIExldCdzIHNlZSB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG52b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxue1xuXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcblx0YWNwaV9zdGF0dXMgc3RhdHVzO1xuXG5cdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcblx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCIsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcblx0XHRyZXR1cm47XG5cdH1cbi4uLlxuYGBgXG5cbklmIGl0IGRvZXNuJ3QgZmluZCB0aGUgdGFibGUsIGl0IGp1c3QgYmFpbHMuICBTbywgY2FuIHN5emthbGxlciAqcmVhY2gqIHRoaXM/ICBTeXprYWxsZXIgdXN1YWxseSBib290cyB3aXRoIGZpeGVkIEFDUEkgdGFibGVzIGZyb20gUUVNVSwgYW5kIFFFTVUgcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgUkFTMiB0YWJsZSB5ZXQuICBXZSBjYW4ndCB1c2UgY29uZmlnZnMgYmVjYXVzZSBgYWNwaV9yYXMyX2luaXRgIGlzIGBfX2luaXRgISAgSXQncyBhIG9uZS10aW1lIHRoaW5nIGF0IGJvb3QuIElmIFFFTVUgZG9lc24ndCBwcm92aWRlIHRoZSBSQVMyIHRhYmxlLCB0aGUgZHJpdmVyIG5ldmVyIGJpbmRzLCBhbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgbmV2ZXIgZ2V0IGNyZWF0ZWQuICBUaGVyZSdzIG5vIHdheVxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzI6MDAuNDMwMDk4MzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjI5Nzg5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X2VuYWJsZWRfb2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9lZGFjL3NjcnViLmM9ODg9RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuZHJpdmVycy9lZGFjL3NjcnViLmM6ODk6RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy05MC1FREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4tLVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jPTkyPXN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYy0xMjYtXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzoxMjc6XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI4LVxcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9Mzk0PXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNDA5LVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQxMDpzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNDExLXtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTUxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI1LVxcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM6NTI2OlxcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtNTI3LVxcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTY3Mj1lbnVtIGVkYWNfZGV2X2ZlYXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg3LSAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbmluY2x1ZGUvbGludXgvZWRhYy5oOjY4ODogKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg5LSAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTY5ND1zdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNzAxLVxcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjcwMjpcXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMy1cXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMjowNy4xNTMwODM5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk4MzAxNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbGl6YXRpb24gb2YgYGFjcGlfcmFzMi5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYWNwaV9yYXMyLmNgIGRyaXZlciwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgaXNvbGF0ZWQuIFRoZSBvbmx5IHBsYWNlIEknbSBzZWVpbmcgYHNldF9lbmFibGVkX29kYCB1c2VkIGlzIHdpdGhpbiB0aGlzIG1vZHVsZS4gTm93LCB0aGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIEFDUEkgUkFTMiB0YWJsZXMsIGFuZCB0aG9zZSBhcmVuJ3QgZXZlbiBwcmVzZW50IGluIGEgUUVNVSBlbnZpcm9ubWVudC4gUGx1cywgUUVNVSBkb2Vzbid0IG1vZGVsIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9ucyBDaGFubmVsIChQQ0MpIG1haWxib3ggaGFyZHdhcmUgdGhhdCB0aGlzIGRyaXZlciB3b3VsZCB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBTbywgcmVhbGlzdGljYWxseSwgdGhpcyBkcml2ZXIgc2hvdWxkIGJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lLlxuXG5Ib2xkIG9uLCB0aG91Z2guIEknbSB3b25kZXJpbmcgaWYgSSBjYW4gdHJpY2sgaXQuIENhbiBJIHBvdGVudGlhbGx5IGxvYWQgYSBmYWtlIEFDUEkgdGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCBmb3JjZSBhIHByb2JlPyBXYWl0LCBubywgdGhhdCB3b24ndCB3b3JrLiBUaGUgYGFjcGlfcmFzMl9pbml0YCBmdW5jdGlvbiBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIG1lYW5pbmcgaXQgb25seSBnZXRzIGV4ZWN1dGVkIGR1cmluZyBib290LCB3aGlsZSB0aGUgY29uZmlnZnMgQUNQSSB0YWJsZSBsb2FkaW5nIGhhcHBlbnMgbGF0ZXIgaW4gdGhlIHByb2Nlc3MuXG5cbkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIGZha2UgdGFibGUgdXNpbmcgaW5pdHJkIOKAkyB3aGljaCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggc3l6a2FsbGVyLCBhbHRob3VnaCBpdCdzIG5vdCBjdXJyZW50bHkgc2V0IHVwIGZvciBSQVMyIOKAkyB0aGUgZHJpdmVyIHN0aWxsIHJlbGllcyBvbiB0aGF0IFBDQyBjaGFubmVsLiBJIHNob3VsZCBjaGVjayB0aGF0IGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgIGZ1bmN0aW9uIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDkwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMyOjEyLjA1MTM4ODQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI1NzMyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGF0YS1cXHUwMDNlZG9uZSk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XFx0ZGF0YS1cXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmRhdGEtXFx1MDAzZWNsLCBjdHgtXFx1MDAzZXN1YnNwYWNlX2lkKTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cXHRpZiAoSVNfRVJSKGRhdGEtXFx1MDAzZXBjY19jaGFuKSkge1xcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jPTU2Nj1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKGludCBwY2Nfc3NfaWR4KVxcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cXHRpZiAocGNjX3NzX2lkeCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTczLVxcbi0tXFxuZHJpdmVycy9hY3BpL3JhczIuYz0yODg9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA5LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzEwOlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XFxuZHJpdmVycy9hY3BpL3JhczIuYy0zMTEtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTA2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfcmVxdWVzdF9wY2NfY2hhbihzdHJ1Y3QgaGlzaV91bmNvcmVfZnJlcSAqdW5jb3JlKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTYtXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYzoxMTc6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnVuY29yZS1cXHUwMDNlY2wsIHVuY29yZS1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTgtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjktXFx0XFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0gc2xpbXByb19pMmNfcGNjX3J4X2NiO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgY3R4LVxcdTAwM2VtYm94X2lkeCk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlxcdFxcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlxcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0xNzM9c3RhdGljIGludCBoY2NzX3JlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjE4OTpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE5MC1cXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTM3PWV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmluY2x1ZGUvYWNwaS9wY2MuaC00My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMyOjE2LjM3NzEzMTQyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyODIwMTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggcHVyc3VpbmcgZm9yIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAsIGRlcGVuZHMgb24gYSByZWdpc3RlcmVkIFBDQyBjaGFubmVsLiBUaG9zZSBjaGFubmVscyBhcmUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZXN0YWJsaXNoZWQgdGhyb3VnaCB0aGUgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2AgY29kZSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcGFyc2VzIHRoZSBQQ0NUIEFDUEkgdGFibGUuIFRoZSBjYXRjaD8gVGhpcyBlbnRpcmUgc2V0dXAgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgUENDVCBhbmQgUkFTMiBBQ1BJIHRhYmxlcy5cblxuU2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhhdCdzIGEgcHJvYmxlbS4gUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24ndCBlbXVsYXRlIHRoZXNlIEFDUEkgdGFibGVzLiBBbmQsIGtub3dpbmcgaG93IHN5emthbGxlciB3b3JrcywgaXQncyBub3QgaW5qZWN0aW5nIHRoZW0gZWl0aGVyLiBUaGF0IG1lYW5zIHRoZSBjb2RlIHBhdGggaW52b2x2aW5nIHRoZSBQQ0MgY2hhbm5lbCBhbmQgdGhlIEFDUEkgdGFibGVzIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLiBUaGVyZWZvcmUsIGZyb20gYSBwdXJlIHJlYWNoYWJpbGl0eSBzdGFuZHBvaW50LCBJIGhhdmUgdG8gY29uY2x1ZGUgYFdvcnRoRnV6emluZz1mYWxzZWAgaGVyZS5cblxuVG8gYmUgcHJlY2lzZSwgdGhlIHBhdGNoIGlzIGFkZGluZyBzdXBwb3J0IGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZywgd2hpY2ggZGlyZWN0bHkgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQQ0MgbWFpbGJveCBtZWNoYW5pc20uIFRoZXNlIGFyZSwgYXMgbWVudGlvbmVkLCBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgQUNQSSB0YWJsZSBkcml2ZW4sIGFuZCBiZWNhdXNlIHRoZXkncmUgbm90IGVtdWxhdGVkLCB0aGUgY29kZSBpcyBkZWFkIGZvciBmdXp6aW5nIHB1cnBvc2VzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBPa2F5LCBJIHNlZSB0aGF0IGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgaXMgaW50cm9kdWNpbmcgdGhlIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUgdG8gRURBQyBzY3J1YiBzeXNmcy4gVGhhdCBzZWVtcyBnZW5lcmljIGVub3VnaCwgYnV0IGl0IG9ubHkgcmVhbGx5ICpkb2VzKiBhbnl0aGluZyBpZiB0aGUgYG9wcy1cdTAwM2VzZXRfZW5hYmxlZF9vZGAgZnVuY3Rpb24gcG9pbnRlciBpcyBzZXQuIEZyb20gbXkgYW5hbHlzaXMsIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGBzZXRfZW5hYmxlZF9vZGAgaXMgKmFjdHVhbGx5KiBzZXQgaXMgd2l0aGluIGBhY3BpX3JhczIuY2AuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIFwiZ2VuZXJpY1wiIHN5c2ZzIGF0dHJpYnV0ZSBpcyB1c2VsZXNzIHVubGVzcyB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIGlzIGxvYWRlZC4gU2luY2UgYGFjcGlfcmFzMmAgcmVxdWlyZXMgdGhlIFBDQ1QgYW5kIFJBUzIgdGFibGVzICh3aGljaCBhcmVuJ3QgcHJlc2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQpLCB0aGF0IHN5c2ZzIGF0dHJpYnV0ZSBpcyBuZXZlciBjcmVhdGVkLlxuXG5JbiBjb25jbHVzaW9uLCBJJ20gY29uZmlkZW50IGluIHN0aWNraW5nIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgZGVwZW5kZW5jZSBvbiB0aG9zZSBtaXNzaW5nIEFDUEkgdGFibGVzIG1ha2VzIHRoZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGlzIHBhdGNoLCBpbmNsdWRpbmcgdGhhdCBuZXcgc3lzZnMgYXR0cmlidXRlLCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTMyLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMjoyNC42NTkxNTMyMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIEFDUEkgdGFibGVzIGFuZCBtYWlsYm94IG1lY2hhbmlzbXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgZHJpdmVyIGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w9mz[1] Phase: Running StartedAt: 2026-07-27 07:32:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w9mz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 07:32:42 +0000 UTC FinishedAt: 2026-07-27 07:33:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}