Name: series-workflow8dvq8 Phase: Failed StartedAt: 2026-09-08 19:20:52 +0000 UTC FinishedAt: 2026-09-08 19:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dvq8[0] Phase: Succeeded StartedAt: 2026-09-08 19:20:52 +0000 UTC FinishedAt: 2026-09-08 19:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dvq8[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 19:20:52 +0000 UTC FinishedAt: 2026-09-08 19:23:29 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODk1YjRiY2I0YWQ1MGUxMWEwNjljMWE5ZTRlODAzYWFjNTdlZWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNDQzMzFkODAzMTViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5AQCAtMCwwICYjNDM7MSwxMTkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xuJiM0MzsgIGZpcm13YXJlIGZyb20gdm9sYXRpbGUgUkFNLiBUaGUgY2hpcCBhbnN3ZXJzIGFuIE1ESU8gYWRkcmVzcyBmcm9tXG4mIzQzOyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXG4mIzQzOyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cbiYjNDM7XG4mIzQzOyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxuJiM0MzsgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcbiYjNDM7ICBidXMsIGFuZCBvbmx5IHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcuXG4mIzQzO1xuJiM0MzsgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcbiYjNDM7ICBmaXJtd2FyZSBSQU0uIEl0IHRoZXJlZm9yZSBiZWxvbmdzIHRvIHRoaXMgbm9kZTogYSByZXNldCBkZXNjcmliZWQgb25cbiYjNDM7ICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlclxuJiM0MzsgIHRoZSBjb3JlIGlzIGRvaW5nLlxuJiM0MztcbiYjNDM7ICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG4mIzQzOyAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm1cbiYjNDM7ICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbiYjNDM7ICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICAkbm9kZW5hbWU6XG4mIzQzOyAgICBwYXR0ZXJuOiBcJiMzNDtebWN1QFswLTlhLWZdJiM0MzskXCYjMzQ7XG4mIzQzO1xuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWdwaW9zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXG4mIzQzOyAgICAgIE1EMzIgY29yZS5cbiYjNDM7XG4mIzQzOyAgcmVzZXQtYXNzZXJ0LXVzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4mIzQzOyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cbiYjNDM7XG4mIzQzOyAgcmVzZXQtZGVhc3NlcnQtdXM6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4mIzQzO1xuJiM0MzsgIG1kaW86XG4mIzQzOyAgICAkcmVmOiBtZGlvLnlhbWwjXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXRcbiYjNDM7ICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxuJiM0MzsgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cbiYjNDM7XG4mIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgJiMzOTteZXRoZXJuZXQtcGh5QFswLTlhLWZdJiM0MzskJiMzOTs6XG4mIzQzOyAgICAgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICAgICAgJHJlZjogYWlyb2hhLGVuODgxMWgueWFtbCNcbiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbiYjNDM7ICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcbiYjNDM7ICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXRzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXG4mIzQzOyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4mIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxuJiM0MztcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBtZGlvXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgbWN1QGQge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1XCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2cGlvIDE0IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBldGhlcm5ldC1waHlAZCB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOlx0U3VwcG9ydGVkXG4gRjpcdGZzL2Fpby5jXG4gRjpcdGluY2x1ZGUvbGludXgvKmFpbyouaFxuIFxuJiM0MztBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbiYjNDM7TTpcdEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuJiM0MztGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuJiM0MztcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBXG4gXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gXHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuIFxuJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX01ESU9cbiYjNDM7XHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuJiM0MztcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuJiM0MztcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXG4mIzQzO1x0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcbiYjNDM7XHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbiYjNDM7XHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxuJiM0MztcdCAgbGVmdCBydW5uaW5nLlxuJiM0MztcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjRpIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbiBvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuIFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcdFx0JiM0Mzs9IG1kaW8tYWlyb2hhLm9cbiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpXHQmIzQzOz0gbWRpby1haXJvaGEtZW44ODExaC5vXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0JiM0Mzs9IG1kaW8tYmNtLWlwcm9jLm9cbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzIyNDU1ODkxNDcyN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbkBAIC0wLDAgJiM0MzsxLDM4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbiYjNDM7ICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVNcdDEwMDBcbiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1x0NjAwMDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbjg4MTFoX21jdSB7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBvbGxfbXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbiYjNDM7XHR1MzIgZndfdmVyc2lvbjtcbiYjNDM7XHRib29sIHdhcm5lZDtcbiYjNDM7XHRib29sIGZ3X3J1bm5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0aW50IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuJiM0MztcdFx0XHRcdFx0dmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4mIzQzO1x0ICogZGV0YWNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWJ1cykge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O2Fpcm9oYS1lbjg4MTFoXCYjMzQ7O1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUoZGV2KSk7XG4mIzQzO1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4mIzQzO1x0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWQpIHtcbiYjNDM7XHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxuJiM0MztcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1jdS1cdTAwM2VidXMgPSBidXM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXG4mIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWN1LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1cylcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnVzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKSB7XG4mIzQzO1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4mIzQzO1x0XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAhIWNoaXApO1xuJiM0MztcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWN1LVx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cdTAwM2V3YWl0ZWRfbXMpO1xuJiM0MztcdFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcbiYjNDM7XHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4mIzQzO1x0XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0XHRtY3UtXHUwMDNld2FpdGVkX21zID0gMDtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbiYjNDM7XHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzXG4mIzQzO1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbWN1LVx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdGlmICghbWN1LVx1MDAzZXdhcm5lZCBcdTAwMjZcdTAwMjYgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xuJiM0MztcdFx0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4mIzQzO1x0XHRcdFx0IEVOODgxMUhfTUQzMl9EU1AsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbiYjNDM7XHRcdFx0XHQgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcbiYjNDM7XHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuJiM0MztcdCAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlXG4mIzQzO1x0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1jdS1cdTAwM2Vmd19ydW5uaW5nIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZXBvbGxfbXMgPSBtaW4obWN1LVx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcbiYjNDM7XHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbiYjNDM7XHRtY3UtXHUwMDNld2FpdGVkX21zICYjNDM7PSBtY3UtXHUwMDNlcG9sbF9tcztcbiYjNDM7XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4mIzQzO1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVx1MDAzZXBvbGxfbXMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtXHUwMDNlbWRpb2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbWN1LVx1MDAzZXJlc2V0X2dwaW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXHUwMDNlcmVzZXRfZ3BpbykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyZXNldC1hc3NlcnQtdXNcJiMzNDssIFx1MDAyNmFzc2VydF91cyk7XG4mIzQzO1x0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7cmVzZXQtZGVhc3NlcnQtdXNcJiMzNDssIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXHUwMDNlcmVzZXRfZ3BpbywgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbiYjNDM7XHRpZiAoZGVhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtY3UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVFxuJiM0MztcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFVixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXG5cJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xuJiM0MztcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfQVNJUyk7XG4mIzQzO1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LVx1MDAzZXJlc2V0X2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuJiM0MztcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVx1MDAzZXJlc2V0X2dwaW8sIFwmIzM0O0VOODgxMUggcmVzZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xuJiM0MztcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuJiM0MztcdCAqIGEgc3VzcGVuZGluZyBidXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VidXMpIHtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2VidXMgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBvbmUgYW5kIGNhbGxzIHBoeV9pbml0X2h3KCksIHdoaWNoIG5lZWRzIHRoZSBmaXJtd2FyZSBieSB0aGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgISFjaGlwKTtcbiYjNDM7XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4mIzQzO1x0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbiYjNDM7XHRcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcbiYjNDM7XHRcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0bWN1LVx1MDAzZWZ3X3J1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgPSAwO1xuJiM0MztcdFx0bWN1LVx1MDAzZXdhcm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuJiM0MztcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXG4mIzQzO1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbiYjNDM7XHRcdC8qIFRlYXJpbmcgdGhlIGNoaWxkIGJ1cyBkb3duIHVuZGVyIGFuIGF0dGFjaGVkIFBIWSBpcyBub3RcbiYjNDM7XHRcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSAmIzQzOzIwLDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpblwmIzM0O1xuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVx0XCYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwmIzM0O2Fpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXCYjMzQ7XG4gXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVx0MHgwMDAwMDAwMFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXHQweDAwMTAwMDAwXG4tXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1x0XHQweDFkXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1x0R0VOTUFTSyg0LCAyKVxuQEAgLTQ0LDggJiM0MzszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCAmIzQzOzEwMCw2IEBAXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXHRcdDB4M2IzMFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcdFx0XHRCSVQoMClcbiBcbi0jZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2Ncbi1cbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcdFx0MHhjYTBmOFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFx0XHRCSVQoMClcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXHRcdEJJVCgxKVxuQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBAXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cdFx0XHQweGNmOTU4XG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cdFx0XHRCSVQoMjYpXG4gXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVx0XHQweDBmMDAxOFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFx0XHQweDBcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcdFx0MHg4MDAwMDBcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcdFx0QklUKDExKVxuLVxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcdFx0MHhmMDIwY1xuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcdFx0MHhmMDIxOFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcdFx0MHhmMDIxY1xuQEAgLTI3MCw4NiAmIzQzOzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCAmIzQzOz0gNCkge1xuLVx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXQgJiM0MzsgMl0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmZ3LVx1MDAzZWRhdGFbb2Zmc2V0XSk7XG4tXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLXtcbi1cdGludCBzYXZlZF9wYWdlO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4tXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbi1cbi1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGZhbHNlKTtcbiBcbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xuLVx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuLVx0XHRcdFx0XHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcbi1cdFx0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuLVx0XHRcdFx0XHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XFxuXCYjMzQ7LCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuQEAgLTQxMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbiYjNDM7XHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01MDcsNTQgJiM0Mzs0MTksMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIFx1MDAyNnByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFxuQEAgLTExNTYsOCAmIzQzOzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbi1cdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbiYjNDM7XHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcbiBcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbkBAIC04LDM3ICYjNDM7OCw0MiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4mIzQzO1x0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiBcdGlmIChwYnVzX2RhdGFfaGlnaCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xuIFxuLVx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuJiM0MztcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiYjNDM7XHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4mIzQzO1x0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4gXHRpZiAocGJ1c19kYXRhX2xvdyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XG4gXG5AQCAtMTEyLDIzICYjNDM7MTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuJiM0MztcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0xNDQsNyAmIzQzOzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbkBAIC0xODMsOCAmIzQzOzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4gXHRcdFx0XHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XG5AQCAtMTk0LDYgJiM0MzsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTtcbiBcbiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuJiM0MztcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc2F2ZWRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuJiM0MztcdFx0XHRcdFx0ICBzYXZlZF9wYWdlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZXN0b3JlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByZXN0b3JlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmVzdGVkKVxuJiM0MztcdFx0bWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgZnctXHUwMDNlc2l6ZSkge1xuJiM0MztcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuJiM0MztcbiYjNDM7XHRcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmdy1cdTAwM2VkYXRhICYjNDM7IGRvbmUsIGNodW5rKTtcbiYjNDM7XHRcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGJ1c19kYXRhKTtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogbW1kX3BoeV9yZWFkKCkgZHJvcHMgdGhlIGVycm9ycyBmcm9tIHRoZSB0aHJlZSB3cml0ZXMgdGhhdCBzZWxlY3QgdGhlXG4mIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfbW1kX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MTYgZGV2YWQsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IGFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxuJiM0MztcdFx0XHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XG4mIzQzO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXG4mIzQzO1x0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlIFx1MDAzYyAwIHx8XG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuJiM0MztcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZWdfdmFsdWUgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcbiYjNDM7XG4mIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0XHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICpmd192ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxuJiM0MztcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcXG5cJiMzNDssICpmd192ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xuJiM0MztcbiYjNDM7YWlyX2Z3X2Rvd25sb2FkX3JlbDE6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXJcbiYjNDM7XHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4mIzQzO1xuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuQEAgLTEwLDEyICYjNDM7MTAsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcdFx0MHgxZlxuIFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXHRcdDB4MDAwMFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0MHgwMDAxXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFx0XHQweDAwMDRcbiBcbiYjNDM7LyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cbiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1x0XHQyMzA0XG4mIzQzO1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgJiM0MzszNiwyMCBAQFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFx0XHQweDE3XG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcdFx0MHgxOFxuIFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNXHRcdFx0MHgwMDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4mIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXHRcdDB4ODAwOVxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2NcbiYjNDM7XG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgYWlyX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiBcbiYjNDM7c3RydWN0IGZpcm13YXJlO1xuJiM0MztcbiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcdTAwM2Nsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZGlvX2RldmljZTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluXCYjMzQ7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XHRcJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxuJiM0MztcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdF9fcHJpbnRmKDIsIDMpO1xuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NWI0YmNiNGFkNTBlMTFhMDY5YzFhOWU0ZTgwM2FhYzU3ZWVmNTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE5OjIyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjQ0MzMxZDgwMzE1YgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKQEAgLTAsMCAmIzQzOzEsMTE5IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzCiYjNDM7ICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbQomIzQzOyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuCiYjNDM7ICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLgomIzQzOwomIzQzOyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZAomIzQzOyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudAomIzQzOyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLgomIzQzOwomIzQzOyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZQomIzQzOyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uCiYjNDM7ICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlcgomIzQzOyAgdGhlIGNvcmUgaXMgZG9pbmcuCiYjNDM7CiYjNDM7ICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuCiYjNDM7ICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybQomIzQzOyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzCiYjNDM7ICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICAkbm9kZW5hbWU6CiYjNDM7ICAgIHBhdHRlcm46ICYjMzQ7Xm1jdUBbMC05YS1mXSYjNDM7JCYjMzQ7CiYjNDM7CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1CiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByZXNldC1ncGlvczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhlIEdQSU8gcGhhbmRsZSBhbmQgc3BlY2lmaWVyIGZvciB0aGUgcmVzZXQgc2lnbmFsIHdpcmVkIHRvIHRoZQomIzQzOyAgICAgIE1EMzIgY29yZS4KJiM0MzsKJiM0MzsgIHJlc2V0LWFzc2VydC11czoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXMKJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuCiYjNDM7CiYjNDM7ICByZXNldC1kZWFzc2VydC11czoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpcwomIzQzOyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC4KJiM0MzsKJiM0MzsgIG1kaW86CiYjNDM7ICAgICRyZWY6IG1kaW8ueWFtbCMKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXQKJiM0MzsgICAgICB0aGUgc2FtZSBhZGRyZXNzIHRoaXMgbm9kZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50IGJ1cy4gT25seSB0aGF0CiYjNDM7ICAgICAgb25lIGFkZHJlc3MgaXMgcGFzc2VkIHRocm91Z2guCiYjNDM7CiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICYjMzk7XmV0aGVybmV0LXBoeUBbMC05YS1mXSYjNDM7JCYjMzk7OgomIzQzOyAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAkcmVmOiBhaXJvaGEsZW44ODExaC55YW1sIwomIzQzOyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzOyAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgcmVzZXQtZ3Bpb3M6IGZhbHNlCiYjNDM7ICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXM6IGZhbHNlCiYjNDM7ICAgICAgICAgIHJlc2V0czogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkCiYjNDM7ICAgICAgICAgIGhlcmUgd291bGQgYmUgcHVsc2VkIGJ5IHRoaXMgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCBhbmQgdGhhdCBlcmFzZXMKJiM0MzsgICAgICAgICAgdGhlIGZpcm13YXJlIHRoYXQgY3JlYXRlZCB0aGlzIFBIWS4KJiM0MzsKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSBtZGlvCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIG1jdUBkIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDthaXJvaGEsZW44ODExaC1tY3UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MHhkJmd0OzsKJiM0MzsgICAgICAgICAgICByZXNldC1ncGlvcyA9ICZsdDsmYW1wO3BpbyAxNCBHUElPX0FDVElWRV9MT1cmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlc2V0LWFzc2VydC11cyA9ICZsdDsxMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSAmbHQ7MjAwMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIG1kaW8gewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMSYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzB4ZCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gJmx0OyZhbXA7cGlvIDE1IElSUV9UWVBFX0xFVkVMX0xPVyZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOglTdXBwb3J0ZWQKIEY6CWZzL2Fpby5jCiBGOglpbmNsdWRlL2xpbnV4LyphaW8qLmgKIAomIzQzO0FJUk9IQSBFTjg4MTFIIE1DVSBNRElPIERSSVZFUgomIzQzO006CUFsZWtzZWkgU3Zpcmlka2luICZsdDtmQGxleC5sYSZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwomIzQzO0Y6CWluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmgKJiM0MzsKIEFJUk9IQSBFVEhFUk5FVCBEUklWRVIKIE06CUxvcmVuem8gQmlhbmNvbmkgJmx0O2xvcmVuem9Aa2VybmVsLm9yZyZndDsKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKaW5kZXggZDQ0Mjc4ZjI2ZmFiZS4uMzNlZmM2YmM4NzVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQQogCSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBNRElPIGJ1c3NlcyBmb3VuZCBpbiB0aGUKIAkgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLgogCiYjNDM7Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUgKJiM0MzsJdHJpc3RhdGUgJiMzNDtBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBzdXBwb3J0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBPRl9NRElPCiYjNDM7CWRlcGVuZHMgb24gRldfTE9BREVSCiYjNDM7CXNlbGVjdCBBSVJfTkVUX1BIWUxJQgomIzQzOwlpbXBseSBBSVJfRU44ODExSF9QSFkKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuCiYjNDM7CSAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5CiYjNDM7CSAgYmVjb21lcyBhbiBFdGhlcm5ldCBQSFkgYWZ0ZXJ3YXJkcy4gVGhlIGRyaXZlciBkb3dubG9hZHMgdGhhdAomIzQzOwkgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlcgomIzQzOwkgIGxlZnQgcnVubmluZy4KJiM0MzsKIGNvbmZpZyBNRElPX1NVTjRJCiAJdHJpc3RhdGUgJiMzNDtBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydCYjMzQ7CiAJZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUKaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlCkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKQkmIzQzOz0gZndub2RlX21kaW8ubwogb2JqLSQoQ09ORklHX09GX01ESU8pCQkmIzQzOz0gb2ZfbWRpby5vCiAKIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSkJCSYjNDM7PSBtZGlvLWFpcm9oYS5vCiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpCSYjNDM7PSBtZGlvLWFpcm9oYS1lbjg4MTFoLm8KIG9iai0kKENPTkZJR19NRElPX0FTUEVFRCkJCSYjNDM7PSBtZGlvLWFzcGVlZC5vCiBvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpCQkmIzQzOz0gbWRpby1iY20taXByb2Mubwogb2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQykJCSYjNDM7PSBtZGlvLWJjbS11bmltYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43MjI0NTU4OTE0NzI3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMKQEAgLTAsMCAmIzQzOzEsMzgyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwomIzQzOy8qCiYjNDM7ICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8KJiM0MzsgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVMJMTAwMAomIzQzOyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01BWF9NUwkzMDAwMAomIzQzOyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TCTYwMDAwCiYjNDM7CiYjNDM7c3RydWN0IGVuODgxMWhfbWN1IHsKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3BvbGw7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CXVuc2lnbmVkIGludCBwb2xsX21zOwomIzQzOwl1bnNpZ25lZCBpbnQgd2FpdGVkX21zOwomIzQzOwl1MzIgZndfdmVyc2lvbjsKJiM0MzsJYm9vbCB3YXJuZWQ7CiYjNDM7CWJvb2wgZndfcnVubmluZzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LSZndDttZGlvZGV2LSZndDtidXMsIGFkZHIsIHJlZ251bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgcmVnbnVtLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsCiYjNDM7CQkJCWludCByZWdudW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX2M0NV9yZWFkX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsCiYjNDM7CQkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChhZGRyICE9IG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpb2J1c19jNDVfd3JpdGVfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLAomIzQzOwkJCQkJdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LSZndDttZGlvZGV2LSZndDtidXM7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWN1LSZndDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LSZndDtvZl9ub2RlLCAmIzM0O21kaW8mIzM0Oyk7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogTm90IGRldm06IHRoaXMgaXMgcmV0cmllZCwgYW5kIGEgZGV2bSBidXMgd291bGQgb25seSBiZSBmcmVlZCBhdAomIzQzOwkgKiBkZXRhY2guCiYjNDM7CSAqLwomIzQzOwlidXMgPSBtZGlvYnVzX2FsbG9jKCk7CiYjNDM7CWlmICghYnVzKSB7CiYjNDM7CQlvZl9ub2RlX3B1dChucCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlidXMtJmd0O25hbWUgPSAmIzM0O2Fpcm9oYS1lbjg4MTFoJiMzNDs7CiYjNDM7CXNucHJpbnRmKGJ1cy0mZ3Q7aWQsIE1JSV9CVVNfSURfU0laRSwgJiMzNDslcyYjMzQ7LCBkZXZfbmFtZShkZXYpKTsKJiM0MzsJYnVzLSZndDtwcml2ID0gbWN1OwomIzQzOwlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJaWYgKHBhcmVudC0mZ3Q7cmVhZCkgewomIzQzOwkJYnVzLSZndDtyZWFkID0gZW44ODExaF9tY3VfcmVhZDsKJiM0MzsJCWJ1cy0mZ3Q7d3JpdGUgPSBlbjg4MTFoX21jdV93cml0ZTsKJiM0MzsJfQomIzQzOwlpZiAocGFyZW50LSZndDtyZWFkX2M0NSkgewomIzQzOwkJYnVzLSZndDtyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1OwomIzQzOwkJYnVzLSZndDt3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTsKJiM0MzsJb2Zfbm9kZV9wdXQobnApOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7ICFtZGlvYnVzX2dldF9waHkoYnVzLCBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpKSB7CiYjNDM7CQkvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZQomIzQzOwkJICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LgomIzQzOwkJICovCiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWRpb2J1c19mcmVlKGJ1cyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7YnVzID0gYnVzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2VyaWFsaXNlIHdpdGggdGhlIFBIWSBiZWxvdywgd2hpY2ggcmVhY2hlcyB0aGUgc2FtZSByZWdpc3RlcnMgdW5kZXIKJiM0MzsgKiB0aGlzIGxvY2sgdGhyb3VnaCBwaHlfc2VsZWN0X3BhZ2UoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IG1paV9idXMgKmVuODgxMWhfbWN1X2NoaXBfbG9jayhzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtJmd0O2J1czsKJiM0MzsKJiM0MzsJaWYgKGJ1cykKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBidXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpCiYjNDM7ewomIzQzOwlpZiAoYnVzKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKJiM0MzsJCQkJCSAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21jdS0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqY2hpcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFtY3UtJmd0O2Z3X3J1bm5pbmcpIHsKJiM0MzsJCWNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTsKJiM0MzsJCXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS0mZ3Q7bWRpb2RldiwgJmFtcDttY3UtJmd0O2Z3X3ZlcnNpb24sCiYjNDM7CQkJCQkgICAgICAhIWNoaXApOwomIzQzOwkJZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7ZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcbiYjMzQ7LAomIzQzOwkJCW1jdS0mZ3Q7ZndfdmVyc2lvbiwgbWN1LSZndDt3YWl0ZWRfbXMpOwomIzQzOwkJcmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzoKJiM0MzsJCSAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2RiZyhkZXYsICYjMzQ7bm90IGNhY2hlZCwgcmVzdW1lIHdpbGwgd2FudCB0aGUgZmlsZXM6ICVwZVxuJiMzNDssCiYjNDM7CQkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQltY3UtJmd0O2Z3X3J1bm5pbmcgPSB0cnVlOwomIzQzOwkJbWN1LSZndDtwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUzsKJiM0MzsJCW1jdS0mZ3Q7d2FpdGVkX21zID0gMDsKJiM0MzsJCW1jdS0mZ3Q7d2FybmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVzdW1lIHJlLXJ1bnMgdGhlIGRvd25sb2FkLCBzbyB0aGUgYnVzIGNhbiBhbHJlYWR5IGJlIGhlcmUsIGFuZAomIzQzOwkgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzCiYjNDM7CSAqIG1pc3NpbmcsIHNvIGEgZmFpbHVyZSBpcyBub3QgbmVjZXNzYXJpbHkgcGVybWFuZW50LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbWN1LSZndDtidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwlpZiAoIW1jdS0mZ3Q7d2FybmVkICZhbXA7JmFtcDsgbWN1LSZndDt3YWl0ZWRfbXMgJmd0Oz0gRU44ODExSF9GV19XQVJOX01TKSB7CiYjNDM7CQlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bm8gZmlybXdhcmUgYWZ0ZXIgJXVtcyBvZiB3YWl0aW5nIGZvciAlcyBhbmQgJXM6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBtY3UtJmd0O3dhaXRlZF9tcywgRU44ODExSF9NRDMyX0RNLAomIzQzOwkJCQkgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIsIG1jdS0mZ3Q7d2FpdGVkX21zLAomIzQzOwkJCQkgRVJSX1BUUihyZXQpKTsKJiM0MzsJCW1jdS0mZ3Q7d2FybmVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYXN0IGl0cyBidWRnZXQsIG9ubHkgYSBkZWZlcnJhbCB3aWxsIGNoYW5nZSBvbiBpdHMgb3duOiBldmVyeQomIzQzOwkgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJTwomIzQzOwkgKiBjb3JlIGFuZCBpdHMgdWV2ZW50cyBmb3IgdGhlIHVwdGltZS4gRmlybXdhcmUgZmlsZXMgYXJlIHRoZQomIzQzOwkgKiBleGNlcHRpb24sIHNpbmNlIHRoZXkgY2FuIGJlIGluc3RhbGxlZCBhdCBhbnkgdGltZS4KJiM0MzsJICovCiYjNDM7CWlmIChtY3UtJmd0O2Z3X3J1bm5pbmcgJmFtcDsmYW1wOyByZXQgIT0gLUVQUk9CRV9ERUZFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBtY3UtJmd0O3dhaXRlZF9tcyAmZ3Q7PSBFTjg4MTFIX0ZXX1dBUk5fTVMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7cG9sbF9tcyA9IG1pbihtY3UtJmd0O3BvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTsKJiM0MzsJLyogQ291bnQgdGhlIHNsZWVwIGFoZWFkOiB0aGUgZmlyc3QgcnVuIHdhcyBpbW1lZGlhdGUuICovCiYjNDM7CW1jdS0mZ3Q7d2FpdGVkX21zICYjNDM7PSBtY3UtJmd0O3BvbGxfbXM7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmYW1wO21jdS0mZ3Q7ZndfcG9sbCwKJiM0MzsJCQkgICBtc2Vjc190b19qaWZmaWVzKG1jdS0mZ3Q7cG9sbF9tcykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqLwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gbWN1LSZndDttZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJdTMyIGFzc2VydF91cyA9IDAsIGRlYXNzZXJ0X3VzID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFtY3UtJmd0O3Jlc2V0X2dwaW8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXQKJiM0MzsJICogaXMgYWxyZWFkeSBkZWFzc2VydGVkLiBBbiBhc3NlcnRlZCBvbmUgaXMgd2h5IHRoZSByZWFkIGZhaWxlZC4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS0mZ3Q7cmVzZXRfZ3BpbykgJmx0Oz0gMCkgewomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcbiYjMzQ7LAomIzQzOwkJCXJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgJiMzNDtyZXNldC1hc3NlcnQtdXMmIzM0OywgJmFtcDthc3NlcnRfdXMpOwomIzQzOwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O3Jlc2V0LWRlYXNzZXJ0LXVzJiMzNDssICZhbXA7ZGVhc3NlcnRfdXMpOwomIzQzOwomIzQzOwlyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KG1jdS0mZ3Q7cmVzZXRfZ3BpbywgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFzc2VydF91cykKJiM0MzsJCWZzbGVlcChhc3NlcnRfdXMpOwomIzQzOwomIzQzOwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LSZndDtyZXNldF9ncGlvLCAwKTsKJiM0MzsJaWYgKGRlYXNzZXJ0X3VzKQomIzQzOwkJZnNsZWVwKGRlYXNzZXJ0X3VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3U7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CiYjNDM7CW1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbWN1KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7bWRpb2RldiA9IG1kaW9kZXY7CiYjNDM7CW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTsKJiM0MzsKJiM0MzsJLyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVAomIzQzOwkgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLgomIzQzOwkgKi8KJiM0MzsJbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7bWRpbyYjMzQ7KTsKJiM0MzsJaWYgKCFucCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKJiM0MzsJCQkJICAgICAmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcbiYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQobnApOwomIzQzOwomIzQzOwkvKiBUaGUgY29yZSBjbGFpbXMgcmVzZXQtZ3Bpb3Mgb25seSBmb3IgZGV2aWNlcyBmbGFnZ2VkIGFzIFBIWXMuICovCiYjNDM7CW1jdS0mZ3Q7cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgJiMzNDtyZXNldCYjMzQ7LCBHUElPRF9BU0lTKTsKJiM0MzsJaWYgKElTX0VSUihtY3UtJmd0O3Jlc2V0X2dwaW8pKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKG1jdS0mZ3Q7cmVzZXRfZ3BpbyksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHJlc2V0IEdQSU9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG1jdS0mZ3Q7cmVzZXRfZ3BpbykKJiM0MzsJCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKG1jdS0mZ3Q7cmVzZXRfZ3BpbywgJiMzNDtFTjg4MTFIIHJlc2V0JiMzNDspOwomIzQzOwomIzQzOwllbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpOwomIzQzOwomIzQzOwltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO21jdS0mZ3Q7ZndfcG9sbCwgZW44ODExaF9tY3VfZndfcG9sbCk7CiYjNDM7CS8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvbgomIzQzOwkgKiBhIHN1c3BlbmRpbmcgYnVzLgomIzQzOwkgKi8KJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7CiYjNDM7CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO21jdS0mZ3Q7ZndfcG9sbCk7CiYjNDM7CWlmIChtY3UtJmd0O2J1cykgewomIzQzOwkJbWRpb2J1c191bnJlZ2lzdGVyKG1jdS0mZ3Q7YnVzKTsKJiM0MzsJCW1kaW9idXNfZnJlZShtY3UtJmd0O2J1cyk7CiYjNDM7CQltY3UtJmd0O2J1cyA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmNoaXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgdG8gcmVkbzogdGhlIHBvbGwgaXMgYXJtZWQgYW5kIHRoYXdzIHdpdGggZXZlcnl0aGluZyBlbHNlLiAqLwomIzQzOwlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBOb3Qgb24gdGhlIHdvcmtxdWV1ZTogYSBEU0EgcG9ydCYjMzk7cyBQSFkgcmVzdW1lcyByaWdodCBhZnRlciB0aGlzCiYjNDM7CSAqIG9uZSBhbmQgY2FsbHMgcGh5X2luaXRfaHcoKSwgd2hpY2ggbmVlZHMgdGhlIGZpcm13YXJlIGJ5IHRoZW4uCiYjNDM7CSAqLwomIzQzOwljaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7CiYjNDM7CWVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCAhIWNoaXApOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtJmd0O21kaW9kZXYsICZhbXA7bWN1LSZndDtmd192ZXJzaW9uLCAhIWNoaXApOwomIzQzOwllbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCS8qIFRoZSByZWxvYWQgcmVzdG9yZXMgdGhpcyBjaGlwLCBub3QgdGhlIFBIWSBiZWxvdyBpdDogaXRzCiYjNDM7CQkgKiBvd24gcmVzdW1lIGhhcyBhbHJlYWR5IGZhaWxlZCBieSB0aGVuIGFuZCBub3RoaW5nIGNhbGxzCiYjNDM7CQkgKiBwaHlfaW5pdF9odygpIHR3aWNlLgomIzQzOwkJICovCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKHJldCkpOwomIzQzOwkJbWN1LSZndDtmd19ydW5uaW5nID0gZmFsc2U7CiYjNDM7CQltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwkJbWN1LSZndDt3YWl0ZWRfbXMgPSAwOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSBmYWxzZTsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmYW1wO21jdS0mZ3Q7ZndfcG9sbCwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoZW44ODExaF9tY3VfcG1fb3BzLCBOVUxMLCBlbjg4MTFoX21jdV9yZXN1bWUpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IGVuODgxMWhfbWN1X3JlbW92ZSwKJiM0MzsJLm1kaW9kcnYuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O2Fpcm9oYS1lbjg4MTFoLW1jdSYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsCiYjNDM7CQkucG0gPSBwbV9zbGVlcF9wdHIoJmFtcDtlbjg4MTFoX21jdV9wbV9vcHMpLAomIzQzOwkJLyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdAomIzQzOwkJICogc29tZXRoaW5nIHRoaXMgZHJpdmVyIGNhbiBtYWtlIHNhZmUgb24gaXRzIG93bi4KJiM0MzsJCSAqLwomIzQzOwkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9ETSk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMTZhOTE3MWNiODM4NC4uNjVmYTE3MDdmNTdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTIwLDIxICYjNDM7MjAsMTUgQEAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthaXJfcGh5X2xpYi5oJiMzNDsKIAogI2RlZmluZSBFTjg4MTFIX1BIWV9JRAkJMHgwM2EyYTQxMQogI2RlZmluZSBBTjg4MTFIQl9QSFlfSUQJCTB4YzBmZjA0YTAKIAotI2RlZmluZSBFTjg4MTFIX01EMzJfRE0JCSYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluJiMzNDsKLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUAkmIzM0O2Fpcm9oYS9FdGhNRDMyLkRTUC5iaW4mIzM0OwogI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNCSYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpbiYjMzQ7CiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRFNQCSYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW4mIzM0OwogCi0jZGVmaW5lIEFJUl9GV19BRERSX0RNCTB4MDAwMDAwMDAKLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQCTB4MDAxMDAwMDAKLQogLyogTUlJIFJlZ2lzdGVycyAqLwogI2RlZmluZSBBSVJfQVVYX0NUUkxfU1RBVFVTCQkweDFkCiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLCUdFTk1BU0soNCwgMikKQEAgLTQ0LDggJiM0MzszOCw2IEBACiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwCTB4YwogCiAvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi8KLSNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTCQkweDgwMDkKLSNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWQkJCTB4MDIKIAogI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMAkJMHg4MDBiCiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8xCQkweDgwMGMKQEAgLTEwOCw4ICYjNDM7MTAwLDYgQEAKICNkZWZpbmUgRU44ODExSF8yUDVHX0xQQQkJMHgzYjMwCiAjZGVmaW5lICAgRU44ODExSF8yUDVHX0xQQV8yUDVHCQkJQklUKDApCiAKLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OCQkweDNiM2MKLQogI2RlZmluZSBFTjg4MTFIX1BPTEFSSVRZCQkweGNhMGY4CiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9UWF9OT1JNQUwJCUJJVCgwKQogI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRQkJQklUKDEpCkBAIC0xMjIsMTIgJiM0MzsxMTIsNiBAQAogI2RlZmluZSBFTjg4MTFIX0NMS19DR00JCQkweGNmOTU4CiAjZGVmaW5lICAgRU44ODExSF9DTEtfQ0dNX0NLTwkJCUJJVCgyNikKIAotI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMQkJMHgwZjAwMTgKLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVAkJMHgwCi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNICQkweDEKLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzIJCTB4ODAwMDAwCi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcJCUJJVCgxMSkKLQogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fU0VUMQkJMHhmMDIwYwogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fTU9OMgkJMHhmMDIxOAogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fTU9OMwkJMHhmMDIxYwpAQCAtMjcwLDg2ICYjNDM7MjU0LDE0IEBAIHN0YXRpYyBpbnQgX19haXJfcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJICAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLAotCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKLXsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQ7Ci0JdTE2IHZhbDsKLQotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfSU5DUik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgJmx0OyBmdy0mZ3Q7c2l6ZTsgb2Zmc2V0ICYjNDM7PSA0KSB7Ci0JCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2Z3LSZndDtkYXRhW29mZnNldCAmIzQzOyAyXSk7Ci0JCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2Z3LSZndDtkYXRhW29mZnNldF0pOwotCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsCi0JCQkgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKLXsKLQlpbnQgc2F2ZWRfcGFnZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmdy0mZ3Q7c2l6ZSAlIDQpIHsKLQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxuJiMzNDssCi0JCQkgICBmdy0mZ3Q7c2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7Ci0KLQlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgIGFkZHJlc3MsIHJldCk7Ci0JfQotCi0JcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBzYXZlZF9wYWdlLCByZXQpOwotfQotCiBzdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQlpbnQgcmV0LCByZWdfdmFsdWU7CiYjNDM7CWludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgZmFsc2UpOwogCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKLQkJCQkJIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqLwotCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwKLQkJCQkJRU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsCi0JCQkJCXJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSwKLQkJCQkJMjAwMDAsIDc1MDAwMDAsIHRydWUpOwotCWlmIChyZXQpIHsKLQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7TUNVIG5vdCByZWFkeTogMHgleFxuJiMzNDssIHJlZ192YWx1ZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLApAQCAtNDExLDcgJiM0MzszMjMsNyBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsICBmdyk7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUwNyw1NCAmIzQzOzQxOSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAogc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO2Z3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsCi0JCQkJCSBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLAotCQkJCQkgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLAotCQkJCQkgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDApOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7Ci0KLQlyZXQgPSBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCWVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpOwotCi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OgotCXJlbGVhc2VfZmlybXdhcmUoZncyKTsKLQotZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6Ci0JcmVsZWFzZV9maXJtd2FyZShmdzEpOwotCiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKCZhbXA7cGh5ZGV2LSZndDttZGlvLCAmYW1wO3ByaXYtJmd0O2Zpcm13YXJlX3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIGZhbHNlKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKIApAQCAtMTE1Niw4ICYjNDM7MTAyNSw4IEBAIHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovCi0JcHJpdi0mZ3Q7bWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTsKJiM0MzsJLyogQWRvcHRlZCBmaXJtd2FyZSB3YXMgbmV2ZXIgcmVzdGFydGVkIGhlcmUuICovCiYjNDM7CXByaXYtJmd0O21jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTsKIAogCS8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi8KIAlwaHlkZXYtJmd0O2M0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCkBAIC04LDM3ICYjNDM7OCw0MiBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthaXJfcGh5X2xpYi5oJiMzNDsKIAotc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJCSAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKQogewogCWludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKJiM0MzsJcGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKIAlpZiAocGJ1c19kYXRhX2hpZ2ggJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7CiAKLQlwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiYjNDM7CXBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwogCWlmIChwYnVzX2RhdGFfbG93ICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9sb3c7CiAKQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQkgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YSkpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkJICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCkKIHsKIAlpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7CiAJdTMyIHBidXNfZGF0YV9vbGQsIHBidXNfZGF0YV9uZXc7CiAJaW50IHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsCiYjNDM7CQkJICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7CiYjNDM7CXBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7CiAJaWYgKHBidXNfZGF0YV9oaWdoICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9oaWdoOwogCi0JcGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwomIzQzOwlwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTsKIAlpZiAocGJ1c19kYXRhX2xvdyAmbHQ7IDApCiAJCXJldHVybiBwYnVzX2RhdGFfbG93OwogCkBAIC0xMTIsMjMgJiM0MzsxMTksMjMgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJaWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0NCw3ICYjNDM7MTUxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAlzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwogCiAJaWYgKHNhdmVkX3BhZ2UgJmd0Oz0gMCkgewotCQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIHBidXNfYWRkcmVzcywgcGJ1c19kYXRhKTsKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBwYnVzX2FkZHJlc3MsCiYjNDM7CQkJCQkgICAgICBwYnVzX2RhdGEpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXG4mIzM0OywgX19mdW5jX18sCiAJCQkJICAgcGJ1c19hZGRyZXNzLCByZXQpOwpAQCAtMTYzLDcgJiM0MzsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAlzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwogCiAJaWYgKHNhdmVkX3BhZ2UgJmd0Oz0gMCkgewotCQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsCiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIHBidXNfYWRkcmVzcywKIAkJCQkJICAgICAgIHBidXNfZGF0YSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKQEAgLTE4Myw4ICYjNDM7MTkxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIG1hc2ssCi0JCQkJCQlzZXQpOwomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJCW1hc2ssIHNldCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCQkgICBwYnVzX2FkZHJlc3MsIHJldCk7CkBAIC0xOTQsNiAmIzQzOzIwMiwzNDMgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTsKIAomIzQzO3N0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkJICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MTYgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsCiYjNDM7CQkJICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0ICZsdDsgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHsKJiM0MzsJCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2RhdGFbb2Zmc2V0ICYjNDM7IDJdKTsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2RhdGFbb2Zmc2V0XSk7CiYjNDM7CQlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcGh5X3NlbGVjdF9wYWdlKCkgbmVlZHMgYSBwaHlfZGV2aWNlLCB3aGljaCBkb2VzIG5vdCBleGlzdCB5ZXQuICovCiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7CiYjNDM7CWlmIChzYXZlZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBzYXZlZF9wYWdlOwomIzQzOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAhPSBwYWdlKSB7CiYjNDM7CQlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzYXZlZF9wYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKJiM0MzsJCQkJICAgaW50IHNhdmVkX3BhZ2UsIGludCBwYWdlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmU7CiYjNDM7CiYjNDM7CWlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHsKJiM0MzsJCXJlc3RvcmUgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywKJiM0MzsJCQkJCSAgc2F2ZWRfcGFnZSk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByZXN0b3JlICZsdDsgMCkKJiM0MzsJCQlyZXQgPSByZXN0b3JlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpZiAobmVzdGVkKQomIzQzOwkJbWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbWRpb2Rldl9sb2NrKG1kaW9kZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLAomIzQzOwkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBjaHVuaywgZG9uZSA9IDA7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAlIDQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDttZGlvZGV2LSZndDtkZXYsICYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxuJiMzNDssCiYjNDM7CQkJZnctJmd0O3NpemUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGRvbmUgJmx0OyBmdy0mZ3Q7c2l6ZSkgewomIzQzOwkJY2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LSZndDtzaXplIC0gZG9uZSwgQUlSX0ZXX0NIVU5LX0JZVEVTKTsKJiM0MzsKJiM0MzsJCWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJCXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsCiYjNDM7CQkJCQkJICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJCWlmIChzYXZlZF9wYWdlICZsdDsgMCkgewomIzQzOwkJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsCiYjNDM7CQkJCQkgICAgICBmdy0mZ3Q7ZGF0YSAmIzQzOyBkb25lLCBjaHVuayk7CiYjNDM7CQkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCQkgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwKJiM0MzsJCQkJCQkgICAgICByZXQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJZG9uZSAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9md193cml0ZV9idWYpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSwKJiM0MzsJCQkJICAgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzYXZlZF9wYWdlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCSAgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhLAomIzQzOwkJCQkgICAgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzYXZlZF9wYWdlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCSAgICAgICBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkJdTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsCiYjNDM7CQkJCQlib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCQltYXNrLCBzZXQpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBtbWRfcGh5X3JlYWQoKSBkcm9wcyB0aGUgZXJyb3JzIGZyb20gdGhlIHRocmVlIHdyaXRlcyB0aGF0IHNlbGVjdCB0aGUKJiM0MzsgKiByZWdpc3Rlciwgc28gYSBmYWlsZWQgc2VsZWN0aW9uIHJlYWRzIGEgZGlmZmVyZW50IG9uZSBiYWNrIGFzIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX2Fpcl9tbWRfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUxNiBkZXZhZCwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LSZndDtidXM7CiYjNDM7CWludCBhZGRyID0gbWRpb2Rldi0mZ3Q7YWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBLCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwKJiM0MzsJCQkgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX21kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9NTURfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IGFpcl9tbWRfc3RhdHVzX3JlYWQobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID09IEVOODgxMUhfUEhZX1JFQURZOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCByZWdfdmFsdWU7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKJiM0MzsJCQkJCSAgRU44ODExSF9GV19DVFJMXzFfRklOSVNILCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWQKJiM0MzsJICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSwKJiM0MzsJCQkJcmVnX3ZhbHVlICZsdDsgMCB8fAomIzQzOwkJCQlyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksCiYjNDM7CQkJCTIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmVnX3ZhbHVlICZsdDsgMCkKJiM0MzsJCXJldHVybiByZWdfdmFsdWU7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9kYmcoJmFtcDttZGlvZGV2LSZndDtkZXYsICYjMzQ7TUNVIG5vdCByZWFkeTogMHgleFxuJiMzNDssIHJlZ192YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpOwomIzQzOwomIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbiwKJiM0MzsJCQkgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLAomIzQzOwkJCQkJCSBmd192ZXJzaW9uLCBuZXN0ZWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWRldl9pbmZvKGRldiwgJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxuJiMzNDssCiYjNDM7CQkJICpmd192ZXJzaW9uKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzIsIEVOODgxMUhfTUQzMl9EU1AsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfcmVsMTsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLAomIzQzOwkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLAomIzQzOwkJCQkJICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRE0sIGZ3MSwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLAomIzQzOwkJCQkJICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCwKJiM0MzsJCQkJCSAgIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLAomIzQzOwkJCQkJIGZ3X3ZlcnNpb24sIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlkZXZfaW5mbyhkZXYsICYjMzQ7TUQzMiBmaXJtd2FyZSB2ZXJzaW9uOiAlMDh4XG4mIzM0OywgKmZ3X3ZlcnNpb24pOwomIzQzOwomIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoZncyKTsKJiM0MzsKJiM0MzthaXJfZndfZG93bmxvYWRfcmVsMToKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdzEpOwomIzQzOwomIzQzOwkvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXIKJiM0MzsJICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfZndfZG93bmxvYWQpOwomIzQzOwogaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKQEAgLTEwLDEyICYjNDM7MTAsMTkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oJmd0OwomIzQzOwogI2RlZmluZSBBSVJfRVhUX1BBR0VfQUNDRVNTCQkweDFmCiAKICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJECQkweDAwMDAKICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzEJCTB4MDAwMQogI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNAkJMHgwMDA0CiAKJiM0MzsvKiBCeXRlcyB3cml0dGVuIGJldHdlZW4gYnVzIHJlbGVhc2VzLCBzbyB0aGUgb3RoZXIgUEhZcyBvbiBpdCBnZXQgYSB0dXJuLgomIzQzOyAqIEF0IGEgMi41IE1IeiBNREMgdGhpcyBzaXplIGhvbGRzIHRoZSBidXMgZm9yIGFib3V0IDMwIG1zLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQUlSX0ZXX0NIVU5LX0JZVEVTCQkyMzA0CiYjNDM7CiAvKiBNSUkgUmVnaXN0ZXJzIFBhZ2UgNCovCiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFCQkJMHgxMAogI2RlZmluZSAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQJCTB4MDAwMApAQCAtMjksNiAmIzQzOzM2LDIwIEBACiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gJCTB4MTcKICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfTE9XCQkweDE4CiAKJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNCQkJMHgwMDAwMDAwMAomIzQzOyNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQCQkJMHgwMDEwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzEJCTB4MGYwMDE4CiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUCQkweDAKJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNICQkweDEKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yCQkweDgwMDAwMAomIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HCQlCSVQoMTEpCiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVMJCTB4ODAwOQomIzQzOyNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWQkJCTB4MDIKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTgkJMHgzYjNjCiYjNDM7CiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiAJCQkJdTMyIG1hc2ssIHUzMiBzZXQpOwogaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKQEAgLTM4LDQgJiM0Mzs1OSwxMCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpOwogCiYjNDM7c3RydWN0IGZpcm13YXJlOwomIzQzOwomIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTsKJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7CiYjNDM7CiAjZW5kaWYgLyogX19BSVJfUEhZX0xJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40NDk0ZGM2YzEwMjJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaApAQCAtMCwwICYjNDM7MSwyNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBaXJvaGEgVGVjaG5vbG9neSBDb3JwLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICBMb3Vpcy1BbGV4aXMgRXlyYXVkICZsdDtsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0gKJiM0MzsjZGVmaW5lIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG1kaW9fZGV2aWNlOwomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNCQkJJiMzNDthaXJvaGEvRXRoTUQzMi5kbS5iaW4mIzM0OwomIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUAkJJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluJiMzNDsKJiM0MzsKJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi8KJiM0MztpbnQgYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7CiYjNDM7LyogUmV0dXJucyAxIHdoZW4gaXQgYWRvcHRlZCBmaXJtd2FyZSB0aGF0IHdhcyBhbHJlYWR5IHJ1bm5pbmcuICovCiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLAomIzQzOwkJCSAgICBib29sIG5lc3RlZCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIyODQsNiAmIzQzOzIyODQsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAltdXRleF91bmxvY2soJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCV9fcHJpbnRmKDIsIDMpOwogY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzI5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyaWFnZSBUaW1lOiBBaXJvaGEgTURJTyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYW4gQWlyb2hhIEVOODgxMUggTUNVIE1ESU8gZHJpdmVyLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG5ldyBkcml2ZXIgZmlsZSAoYG1kaW8tYWlyb2hhLWVuODgxMWguY2ApLCBzb21lIFBIWSBkcml2ZXIgcmVmYWN0b3JpbmcgKGBhaXJfcGh5X2xpYi5jYCwgYGFpcl9lbjg4MTFoLmNgKSwgRFQgYmluZGluZ3MgKGBhaXJvaGEsZW44ODExaC1tY3UueWFtbGApLCBhbmQgc29tZSBNRElPIGFuZCBQSFktcmVsYXRlZCBoZWxwZXIgYWRkaXRpb25zIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgoKTm93LCB0cmlhZ2UgdGltZSEgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyByZWFjaGFiaWxpdHkgYW5kIGZ1enphYmlsaXR5LiBUaGUgc3Vic3lzdGVtcyB0b3VjaGVkIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiAobm9uLWV4ZWN1dGFibGUsIHRoYW5rZnVsbHkpLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHNvIG5vdCBleGVjdXRhYmxlKSwgYW5kIGEgaGFuZGZ1bCBvZiBkcml2ZXIgYW5kIGhlYWRlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGFuZCBgaW5jbHVkZS9saW51eC9gIHRyZWVzLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCB3aGF0IGFyZSB3ZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZT8gIGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgIGlzIGFuIE1ESU8gZGV2aWNlIGRyaXZlciBmb3IgYW4gQWlyb2hhIEVOODgxMUggUEhZIE1DVS4gVGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIGlzIHRoZSBQSFkgZHJpdmVyIGZvciB0aGF0IHNhbWUgQWlyb2hhIGNoaXAuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYW4gTURJTyBkcml2ZXIgdGhhdCAqdGFsa3MqIHRvIGEgc3BlY2lmaWMgUEhZLgoKVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gd2UgYWN0dWFsbHkgKmdldCogdG8gdGhpcyBpbiBhIHN0YW5kYXJkLCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyAgUmVtZW1iZXIgb3VyIHRyaWFnZSBwaGlsb3NvcGh5IOKAkyByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IE1ESU8gYW5kIFBIWSBkcml2ZXJzLiBXZSBjYW4mIzM5O3QgZnV6eiBjb2RlIHRoYXQgZG9lc24mIzM5O3QgcnVuLgoKTGV0JiMzOTtzIHNlZS4uLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemVzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgaGF2ZSB0byBhc2s6IGRvIHdlIGhhdmUgYWNjZXNzIHRvIHBoeXNpY2FsIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIHRvIHRlc3QgdGhpcz8gUHJvYmFibHkgbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciDigJMgd2UgbmVlZCBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2VzLiBTbywgaXMgYW4gTURJTyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IElzIHRoZXJlIHNvbWUgd2F5IHRvIGNyZWF0ZSBpdCBvciBtb2NrIGl0IGluIHVzZXJzcGFjZT8KClNvLCBiYWNrIHRvIHRoZSBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgYGVuODgxMWhfbWN1X2RyaXZlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhbiBNRElPIGRyaXZlci4gTURJTyBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgZGlzY292ZXJlZCB0aHJvdWdoIERldmljZSBUcmVlICh3aGljaCB3ZSBoYXZlIGEgYmluZGluZyBmb3IhKSwgQUNQSSwgb3IgYSBwbGF0Zm9ybSBNRElPIGJ1cy4gT2theSwgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24geDg2XzY0L2FtZDY0LiAgV2l0aG91dCBhIGRlZGljYXRlZCBEZXZpY2UgVHJlZSBub2RlIG9yIGFuIE1ESU8gYnVzIGluc3RhbnRpYXRlZCwgdGhpcyBkcml2ZXIgd29uJiMzOTt0IGJlIHByb2JlZCBpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4KCldlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNRElPIGRldmljZXMgb3IgUEhZIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBvciBtb2NrZWQgaW4gTGludXggZnJvbSB1c2Vyc3BhY2UuIElmIG5vdCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGhhcmQgJiMzNDtubyYjMzQ7IGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY3VycmVudCB0cmlhZ2UgZ3VpZGVsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGEsZW44ODExaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbD0xMj1kZXNjcmlwdGlvbjogfFxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjctICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjI4OiAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjktICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sPTMyPXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0zNi0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjM3OiAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTM4LVxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtNjctICAgICAgICB0eXBlOiBvYmplY3RcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw6Njg6ICAgICAgICAkcmVmOiBhaXJvaGEsZW44ODExaC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC02OS0gICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sPTkyPWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMTAxLSAgICAgICAgbWN1QGQge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDoxMDI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMTAzLSAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtMy0tLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbi0tXG5NQUlOVEFJTkVSUz03NTY9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjc1NzpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuTUFJTlRBSU5FUlMtNzU4LUY6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jPTM1NT1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM6MzU2Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMtMzU3LVx0eyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyOTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQSFkgQWJzdHJhY3Rpb24gTGF5ZXImIzM5O3MgTG9ja2luZyBNZWNoYW5pc21zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgdXNlZCB3aXRoaW4gdGhlIFBIWSBhYnN0cmFjdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IHdoYXQmIzM5O3MgYmVlbiBhZGRlZCBpbiBgaW5jbHVkZS9saW51eC9waHkuaGAuIEZyb20gd2hhdCBJIHNlZSBoZXJlLCBpdCYjMzk7cyBkZWZpbmluZyBhIGZldyBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgbXV0ZXggYXNzb2NpYXRlZCB3aXRoIGFuIE1ESU8gYnVzLiBUaGVzZSBhcmUgY3J1Y2lhbDogYG1kaW9kZXZfbG9ja2AsIGBtZGlvZGV2X2xvY2tfbmVzdGVkYCwgYW5kIGBtZGlvZGV2X3VubG9ja2AuIFRoZXkgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgYG1kaW9fbG9ja2AgbXV0ZXggdGhhdCBiZWxvbmdzIHRvIHRoZSBNRElPIGJ1cy4gVGhlIGBuZXN0ZWRgIHZlcnNpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZSBwb3RlbnRpYWwgZm9yIG5lc3RlZCBsb2NraW5nLCB3aGljaCBJJiMzOTtkIGV4cGVjdCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYnVzIGFjY2Vzc2VkIHRocm91Z2ggYW5vdGhlciBidXMsIGxpa2Ugd2hhdCB5b3UmIzM5O2Qgc2VlIGluIHRoZSBgbWRpb2J1c19yZWFkX25lc3RlZCgpYCBmdW5jdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlaW5nIHVzZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgTURJTyBmcmFtZXdvcmsuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBhbmQgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlaXIgdXNhZ2UgdG8gY2hlY2sgd2hlcmUgdGhlIGxvY2tzIGFyZSB1c2VkIGFuZCBpbiB3aGljaCBzaXR1YXRpb25zLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvZGV2Xyhsb2NrfHVubG9jaykmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3NS0vKiBOZXN0ZWQgd2hlbiB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdGhlIGJ1cyB0aGlzIGNoaXAgaGFuZ3MgYmVsb3cuICovXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc3LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3OC1cdGlmIChuZXN0ZWQpXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzk6XHRcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yODAtXHRlbHNlXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XHRcdG1kaW9kZXZfbG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9Mjg0PWludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjk4LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjk5Olx0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMDAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzEyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzEzOlx0XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMxNC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zMjQ9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzI5LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzMwOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzMxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM0MC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM0MTpcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzQyLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zNDU9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM1MC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM1MTpcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNjItXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNjM6XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM2NC1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzcyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzc0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM4NC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM4NTpcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzg2LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz00MTQ9c3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE3LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6NDE4Olx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE5LVx0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MjA6XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQyMS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODYtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyOTctXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTg6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfdW5sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipBbmFseXppbmcgYG1kaW9kZXZgIExvY2tpbmcgaW4gdGhlIFBIWSBEcml2ZXIgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzOiBgbWRpb2Rldl9sb2NrYCwgYG1kaW9kZXZfdW5sb2NrYCwgYW5kIGBtZGlvZGV2X2xvY2tfbmVzdGVkYC4gVGhlIGNvZGUgaXMgcG9pbnRpbmcgb3V0IHRoYXQgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYXMgaW5saW5lIGhlbHBlcnMsIGFuZCB0aGV5JiMzOTtyZSAqb25seSogdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYC4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgaW1tZWRpYXRlbHkuIEZpcnN0LCB0aGVzZSBhcmUgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gdGhlIEFpclBIWSBpbXBsZW1lbnRhdGlvbi4gU2Vjb25kLCBiZWluZyBpbmxpbmUgbWVhbnMgdGhlcmUmIzM5O3MgcG90ZW50aWFsbHkgbGVzcyBvdmVyaGVhZCwgYXMgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSB0aGVtIG1vcmUgYWdncmVzc2l2ZWx5IGJhc2VkIG9uIHRoZWlyIHVzYWdlLiBUaGlyZCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBBaXJQSFkgbGlicmFyeSB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGxvY2tzIGFyZSBuZWNlc3NhcnkgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBmb2N1cyBpcyBvbiBmaW5kaW5nIG91dCB3aGF0IGZpbGVzIHVzZSBgYWlyX3BoeV9saWIuY2AsIGFzIHdlbGwgYXMgYGFpcl9lbjg4MTFoLmNgIGFuZCBgbWRpby1haXJvaGEtZW44ODExaC5jYCwgcHJvYmFibHkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGxpYnJhcnkgYW5kIHRoZXJlZm9yZSwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBsb2NraW5nIGxvZ2ljIGlzLiBLbm93aW5nIHdoYXQgY2FsbHMgdGhpcyBjb2RlIGRpcmVjdGx5IGlzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBjb25jdXJyZW5jeSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JrIFBIWSBkcml2ZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9ORVRfUEhZTElCfEFJUl9FTjg4MTFIX1BIWXxhaXJfcGh5X2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MzI9Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUhcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzUtXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM2Olx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzc6XHRpbXBseSBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEFOODgwMSBHaWdhYml0IFBIWVwmIzM0O1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTU6XHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMDE6XHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMi1cdHNlbGVjdCBQSFlfQ09NTU9OX1BST1BTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTA2OmNvbmZpZyBBSVJfTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgJiM0Mzs9IGFpcl9lbjg4MTFoLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXHQmIzQzOz0gYWlyX3BoeV9saWIub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19BTURfUEhZKVx0XHQmIzQzOz0gYW1kLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoyMjojaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIzLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjQ6I2luY2x1ZGUgXCYjMzQ7YWlyX3BoeV9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMTgtXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoxOTojaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyMwoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAxMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2AgaXMgdGhlIE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGFuZCB3ZSBhbHNvIGhhdmUgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIHNhbWUuIFRoZXJlJiMzOTtzIGFsc28gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYCwgd2hpY2ggaXMgdGhlIEFpcm9oYSBQSFkgbGlicmFyeSwgYW5kIGBhaXJfYW44ODAxLmNgLgoKTXkgZmlyc3QgZ3V0IGNoZWNrIGlzIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgcGllY2VzIG9mIGNvZGUgYXJlIGV2ZW4gcmVtb3RlbHkgYWNjZXNzaWJsZSBpbiB0aGUgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UgdXNlIChRRU1VIG9yIEdDRSBvbiB4ODZfNjQpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIG9yIE1ESU8gYnVzZXMgYXJlIGVtdWxhdGVkIGluIFFFTVUuIFRoZW4sIEkgbmVlZCB0byBrbm93IGlmIHVzZXJzcGFjZSBjYW4gY3JlYXRlIG9yIGF0dGFjaCBNRElPIG9yIFBIWSBkZXZpY2VzLgoKRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgTURJTyBidXMgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgYnkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXJzLCBvciBieSBPRiBwbGF0Zm9ybSBkcml2ZXJzLiBQSFkgZGV2aWNlcyBhcmUgcHJvYmVkIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGFkZHJlc3NlcywgcmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVycywgb3IgcGFyc2luZyB0aGUgRGV2aWNlIFRyZWUuIFNwZWNpZmljYWxseSwgdGhlc2UgQWlyb2hhIE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSBgb2ZfbWRpb2AuCgpUaGUgcHJvYmxlbSBpcywgYXMgZmFyIGFzIEkga25vdywgbm9uZSBvZiB0aGlzIGhhcmR3YXJlIGV4aXN0cyBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBWTXMuIFN5emthbGxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBpbnN0YW50aWF0ZSBhbiBhcmJpdHJhcnkgTURJTyBvciBQSFkgZGV2aWNlIHdpdGhvdXQgdmlydHVhbCBoYXJkd2FyZSBvciBtb2NrIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMuIFNlY3Rpb24gMiBjbGVhcmx5IHN0YXRlcyB0aGF0IHdlIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHdoZW4gYWxsIHRoZSBtb2RpZmllZCBjb2RlIHN0cmljdGx5IGZhbGxzIGludG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBpbmNsdWRlOiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIG5vbi1rZXJuZWwvbm9uLWV4ZWN1dGFibGUgY2hhbmdlcy4gU2VjdGlvbiAxIGFsc28gc3RhdGVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSAqcHJpbWFyeSogZ2F0ZS4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBtYXAgdGhlbSBiYWNrIHRvIHRob3NlIGNyaXRlcmlhOgoKMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sYDogRGV2aWNlIHRyZWUgc2NoZW1hIGRvY3VtZW50YXRpb24uIFRoYXQmIzM5O3Mgbm9uLWV4ZWN1dGFibGUsIGRvY3VtZW50YXRpb24uCjIuICBgTUFJTlRBSU5FUlNgOiBNYWludGFpbmVycyBmaWxlIHVwZGF0ZS4gQWdhaW4sIG5vbi1leGVjdXRhYmxlLgozLiAgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2A6IEFkZGVkIGBDT05GSUdfTURJT19BSVJPSEFfRU44ODExSGAuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuCjQuICBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWA6IEJ1aWxkIHJ1bGUuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuCjUuICBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgOiBOZXcgTURJTyBkcml2ZXIsIGJ1dCAqZm9yKiBhIHNwZWNpZmljIEFpcm9oYSBNQ1UuIFRoaXMgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudHMuCjYuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOiBEcml2ZXIgZm9yIGEgKnNwZWNpZmljKiBBaXJvaGEgUEhZLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCjcuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNgOiBMaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgQWlyb2hhIFBIWXMuIEZ1bmN0aW9uYWxpdHkgaXMgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLCBzbyB0aGlzIGlzIGFsc28gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgo4LiAgYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oYDogSW50ZXJuYWwgaGVhZGVyIGZvciBBaXJvaGEgUEhZcy4KOS4gYGluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhgOiBIZWFkZXIgZm9yIEFpcm9oYSBFTjg4MTFIIE1DVSBkcml2ZXIuCjEwLiBgaW5jbHVkZS9saW51eC9waHkuaGA6IEFkZHMgaW5saW5lIGxvY2sgaGVscGVycy4gT25seSB1c2VkIGJ5IHRoZSBBaXJvaGEgUEhZIGxpYnJhcnksIHNvIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkl0JiMzOTtzIGNsZWFyIHRvIG1lIHRoYXQgYWxsIG1vZGlmaWVkIGNvZGUgaXMgZWl0aGVyIG5vbi1rZXJuZWwgLyBub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcvTWFrZWZpbGUpIG9yIHNwZWNpZmljIHRvIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgaGFyZHdhcmUgKGFuIE1ESU8gbWljcm9jb250cm9sbGVyIC8gRXRoZXJuZXQgUEhZIGNoaXApLiBBbmQgd2UgKmtub3cqIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBgZmFsc2VgLgoKRm9yIGBzZXQtcmVzdWx0c2AsIEkmIzM5O2xsIHNldCB0aGUgZm9sbG93aW5nOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgY2hhbmdlcyBhZGQgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIE1ESU8gZHJpdmVyIChgbWRpby1haXJvaGEtZW44ODExaC5jYCkgYW5kIHJlZmFjdG9yIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMgaW4gdGhlIEFpcm9oYSBQSFkgZHJpdmVyIGxpYnJhcnkgKGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgKS4gVGhpcyBoYXJkd2FyZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGRldmljZSB0cmVlIGJpbmRpbmcgYW5kIGEgbmV3IE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZIE1DVSAobWRpby1haXJvaGEtZW44ODExaC5jKSwgd2hpbGUgcmVmYWN0b3JpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgTURJTyByZWdpc3RlciBhY2Nlc3MgaGVscGVycyBpbiB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5IChhaXJfZW44ODExaC5jLCBhaXJfcGh5X2xpYi5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIEFpcm9oYSBwaHlzaWNhbCBBU0lDL1BIWSBoYXJkd2FyZSBhbmQgZGV2aWNlLXRyZWUgYmluZGluZ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgZXhlY3V0YWJsZSBjaGFuZ2VzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0MS4yNjY2NDMzMTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk0MDg1NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MjI6NDEuMjY2NjU1ODg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU4ODExNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTViNGJjYjRhZDUwZTExYTA2OWMxYTllNGU4MDNhYWM1N2VlZjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0NDMzMWQ4MDMxNWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbkBAIC0wLDAgKzEsMTE5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEFsZWtzZWkgU3Zpcmlka2luIFxcdTAwM2NmQGxleC5sYVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xcbisgIGZpcm13YXJlIGZyb20gdm9sYXRpbGUgUkFNLiBUaGUgY2hpcCBhbnN3ZXJzIGFuIE1ESU8gYWRkcmVzcyBmcm9tXFxuKyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXFxuKyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cXG4rXFxuKyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxcbisgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcXG4rICBidXMsIGFuZCBvbmx5IHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcuXFxuK1xcbisgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcXG4rICBmaXJtd2FyZSBSQU0uIEl0IHRoZXJlZm9yZSBiZWxvbmdzIHRvIHRoaXMgbm9kZTogYSByZXNldCBkZXNjcmliZWQgb25cXG4rICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSdzIG93biBsaWZlY3ljbGUsIHdoYXRldmVyXFxuKyAgdGhlIGNvcmUgaXMgZG9pbmcuXFxuK1xcbisgIEEgYm9hcmQgdGhhdCBoYXMgZmlybXdhcmUgaW4gaGFuZCB3aGlsZSBpdHMgTURJTyBidXMgaXMgZW51bWVyYXRlZCBjYW5cXG4rICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybVxcbisgIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlc1xcbisgIGxhdGVyLCBzbyB0aGF0IHRoZXJlIGlzIG5vIFBIWSB0byBkZXNjcmliZSB1bnRpbCB0aGUgY29yZSBoYXMgaXQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgICRub2RlbmFtZTpcXG4rICAgIHBhdHRlcm46IFxcXCJebWN1QFswLTlhLWZdKyRcXFwiXFxuK1xcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XFxuK1xcbisgIHJlZzpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHJlc2V0LWdwaW9zOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXFxuKyAgICAgIE1EMzIgY29yZS5cXG4rXFxuKyAgcmVzZXQtYXNzZXJ0LXVzOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXFxuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cXG4rXFxuKyAgcmVzZXQtZGVhc3NlcnQtdXM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xcbisgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXFxuK1xcbisgIG1kaW86XFxuKyAgICAkcmVmOiBtZGlvLnlhbWwjXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXRcXG4rICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxcbisgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cXG4rXFxuKyAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgJ15ldGhlcm5ldC1waHlAWzAtOWEtZl0rJCc6XFxuKyAgICAgICAgdHlwZTogb2JqZWN0XFxuKyAgICAgICAgJHJlZjogYWlyb2hhLGVuODgxMWgueWFtbCNcXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxcbisgICAgICAgICAgcmVzZXRzOiBmYWxzZVxcbisgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXFxuKyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUncyBvd24gbGlmZWN5Y2xlLCBhbmQgdGhhdCBlcmFzZXNcXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXFxuK1xcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIG1kaW9cXG4rXFxuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcXHUwMDNlXFxuK1xcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIG1jdUBkIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW44ODExaC1tY3VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHhkXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtZ3Bpb3MgPSBcXHUwMDNjXFx1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbisgICAgICAgICAgICByZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMTAwMDBcXHUwMDNlO1xcbisgICAgICAgICAgICByZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MyMDAwMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBtZGlvIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgZXRoZXJuZXQtcGh5QGQge1xcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDNhMi5hNDExXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHhkXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXFx1MDAzY1xcdTAwMjZwaW8gMTUgSVJRX1RZUEVfTEVWRUxfTE9XXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBiMjNmYjZmMmY0ZWY0Li4zYmQ4NmRmMmJlNTcxIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNzUwLDYgKzc1MCwxNCBAQCBTOlxcdFN1cHBvcnRlZFxcbiBGOlxcdGZzL2Fpby5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC8qYWlvKi5oXFxuIFxcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcXG4rTTpcXHRBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFxuK1xcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXFxuIE06XFx0TG9yZW56byBCaWFuY29uaSBcXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXFx1MDAzZVxcbiBMOlxcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxcbiBcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXFxuIFxcdCAgQWlyb2hhIEFONzU4MyBTb0Mncy5cXG4gXFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXFxuK1xcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBzdXBwb3J0XFxcIlxcbitcXHRkZXBlbmRzIG9uIE9GX01ESU9cXG4rXFx0ZGVwZW5kcyBvbiBGV19MT0FERVJcXG4rXFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuK1xcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cXG4rXFx0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcXG4rXFx0ICBiZWNvbWVzIGFuIEV0aGVybmV0IFBIWSBhZnRlcndhcmRzLiBUaGUgZHJpdmVyIGRvd25sb2FkcyB0aGF0XFxuK1xcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXFxuK1xcdCAgbGVmdCBydW5uaW5nLlxcbitcXG4gY29uZmlnIE1ESU9fU1VONElcXG4gXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBzdW40aSBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiBcXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXFxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbkBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbiBvYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG4gXFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcXHRcXHQrPSBtZGlvLWFpcm9oYS5vXFxuK29iai0kKENPTkZJR19NRElPX0FJUk9IQV9FTjg4MTFIKVxcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xcbiBvYmotJChDT05GSUdfTURJT19BU1BFRUQpXFx0XFx0Kz0gbWRpby1hc3BlZWQub1xcbiBvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpXFx0XFx0Kz0gbWRpby1iY20taXByb2Mub1xcbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVxcdFxcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3MjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG5AQCAtMCwwICsxLDM4MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4rLypcXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXFxuKyAqXFxuKyAqIFRoZSBFTjg4MTFIIGlzIGFuIE1EMzIgbWljcm9jb250cm9sbGVyIHVudGlsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgaW50b1xcbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXFx0MTAwMFxcbisjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NQVhfTVNcXHQzMDAwMFxcbisjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1xcdDYwMDAwXFxuK1xcbitzdHJ1Y3QgZW44ODExaF9tY3Uge1xcbitcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgZndfcG9sbDtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cztcXG4rXFx0dW5zaWduZWQgaW50IHBvbGxfbXM7XFxuK1xcdHVuc2lnbmVkIGludCB3YWl0ZWRfbXM7XFxuK1xcdHUzMiBmd192ZXJzaW9uO1xcbitcXHRib29sIHdhcm5lZDtcXG4rXFx0Ym9vbCBmd19ydW5uaW5nO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXFxuK1xcdFxcdFxcdFxcdGludCByZWdudW0pXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoYWRkciAhPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcXG4rXFx0XFx0XFx0XFx0IGludCByZWdudW0sIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoYWRkciAhPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0dXJuIG1kaW9idXNfYzQ1X3dyaXRlX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0XFx0dmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKnBhcmVudCA9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XFxuK1xcdCAqIGRldGFjaC5cXG4rXFx0ICovXFxuK1xcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4rXFx0aWYgKCFidXMpIHtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcImFpcm9oYS1lbjg4MTFoXFxcIjtcXG4rXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4rXFx0YnVzLVxcdTAwM2Vwcml2ID0gbWN1O1xcbitcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0aWYgKHBhcmVudC1cXHUwMDNlcmVhZCkge1xcbitcXHRcXHRidXMtXFx1MDAzZXJlYWQgPSBlbjg4MTFoX21jdV9yZWFkO1xcbitcXHRcXHRidXMtXFx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmVudC1cXHUwMDNlcmVhZF9jNDUpIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xcbitcXHRcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IGVuODgxMWhfbWN1X3dyaXRlX2M0NTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG4rXFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSkge1xcbitcXHRcXHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxcbitcXHRcXHQgKiBQSFkgYWJzZW50OyBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkgcmV0dXJucyAwIGVpdGhlciB3YXkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0fVxcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1kaW9idXNfZnJlZShidXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRtY3UtXFx1MDAzZWJ1cyA9IGJ1cztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXFxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1jdS1cXHUwMDNlYnVzO1xcbitcXG4rXFx0aWYgKGJ1cylcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGJ1cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfY2hpcF91bmxvY2soc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRpZiAoYnVzKVxcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfZndfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGVuODgxMWhfbWN1LCBmd19wb2xsKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghbWN1LVxcdTAwM2Vmd19ydW5uaW5nKSB7XFxuK1xcdFxcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcXG4rXFx0XFx0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQobWN1LVxcdTAwM2VtZGlvZGV2LCBcXHUwMDI2bWN1LVxcdTAwM2Vmd192ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAhIWNoaXApO1xcbitcXHRcXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcImZpcm13YXJlICUwOHggcnVubmluZyBhZnRlciAldW1zXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtY3UtXFx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cXHUwMDNld2FpdGVkX21zKTtcXG4rXFx0XFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcXG4rXFx0XFx0ICAgICAgZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9EU1ApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIm5vdCBjYWNoZWQsIHJlc3VtZSB3aWxsIHdhbnQgdGhlIGZpbGVzOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlZndfcnVubmluZyA9IHRydWU7XFxuK1xcdFxcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FpdGVkX21zID0gMDtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVzdW1lIHJlLXJ1bnMgdGhlIGRvd25sb2FkLCBzbyB0aGUgYnVzIGNhbiBhbHJlYWR5IGJlIGhlcmUsIGFuZFxcbitcXHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJ3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXNcXG4rXFx0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBtY3UtXFx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK3JldHJ5OlxcbitcXHRpZiAoIW1jdS1cXHUwMDNld2FybmVkIFxcdTAwMjZcXHUwMDI2IG1jdS1cXHUwMDNld2FpdGVkX21zIFxcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xcbitcXHRcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZylcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibm8gZmlybXdhcmUgYWZ0ZXIgJXVtcyBvZiB3YWl0aW5nIGZvciAlcyBhbmQgJXM6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG1jdS1cXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXFxuK1xcdFxcdFxcdFxcdCBFTjg4MTFIX01EMzJfRFNQLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm5vIFBIWSBhdCBhZGRyZXNzICVkLCAldW1zIGFmdGVyIHRoZSBmaXJtd2FyZSBzdGFydGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIsIG1jdS1cXHUwMDNld2FpdGVkX21zLFxcbitcXHRcXHRcXHRcXHQgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYXN0IGl0cyBidWRnZXQsIG9ubHkgYSBkZWZlcnJhbCB3aWxsIGNoYW5nZSBvbiBpdHMgb3duOiBldmVyeVxcbitcXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xcbitcXHQgKiBjb3JlIGFuZCBpdHMgdWV2ZW50cyBmb3IgdGhlIHVwdGltZS4gRmlybXdhcmUgZmlsZXMgYXJlIHRoZVxcbitcXHQgKiBleGNlcHRpb24sIHNpbmNlIHRoZXkgY2FuIGJlIGluc3RhbGxlZCBhdCBhbnkgdGltZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtY3UtXFx1MDAzZWZ3X3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUFJPQkVfREVGRVIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1jdS1cXHUwMDNld2FpdGVkX21zIFxcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWN1LVxcdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cXHUwMDNlcG9sbF9tcyAqIDIsIEVOODgxMUhfRldfUE9MTF9NQVhfTVMpO1xcbitcXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cXG4rXFx0bWN1LVxcdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVxcdTAwM2Vwb2xsX21zO1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXFx1MDAyNm1jdS1cXHUwMDNlZndfcG9sbCxcXG4rXFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXFx1MDAzZXBvbGxfbXMpKTtcXG4rfVxcbitcXG4rLyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gbWN1LVxcdTAwM2VtZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJNRDMyIGFscmVhZHkgcnVubmluZywgbGVhdmluZyByZXNldCBhbG9uZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFtY3UtXFx1MDAzZXJlc2V0X2dwaW8pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcXG4rXFx0ICogaXMgYWxyZWFkeSBkZWFzc2VydGVkLiBBbiBhc3NlcnRlZCBvbmUgaXMgd2h5IHRoZSByZWFkIGZhaWxlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXFx1MDAzZXJlc2V0X2dwaW8pIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcXFwicmVzZXQtYXNzZXJ0LXVzXFxcIiwgXFx1MDAyNmFzc2VydF91cyk7XFxuK1xcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFxcXCJyZXNldC1kZWFzc2VydC11c1xcXCIsIFxcdTAwMjZkZWFzc2VydF91cyk7XFxuK1xcbitcXHRyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KG1jdS1cXHUwMDNlcmVzZXRfZ3BpbywgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFzc2VydF91cylcXG4rXFx0XFx0ZnNsZWVwKGFzc2VydF91cyk7XFxuK1xcbitcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVxcdTAwM2VyZXNldF9ncGlvLCAwKTtcXG4rXFx0aWYgKGRlYXNzZXJ0X3VzKVxcbitcXHRcXHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFxuK1xcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbWN1KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XFxuK1xcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcXG4rXFxuK1xcdC8qIFJlZ2lzdHJhdGlvbiBuZWVkcyB0aGlzIG9ubHkgb25jZSB0aGUgZmlybXdhcmUgcnVucywgYnV0IGEgRFRcXG4rXFx0ICogaG9sZSBzaG91bGQgZmFpbCB0aGUgYmluZCBub3csIG5vdCBhcyBhIHdvcmstaXRlbSBlcnJvciBsYXRlci5cXG4rXFx0ICovXFxuK1xcdG5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbitcXHRpZiAoIW5wKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXFxcblxcXCIpO1xcbitcXHRvZl9ub2RlX3B1dChucCk7XFxuK1xcbitcXHQvKiBUaGUgY29yZSBjbGFpbXMgcmVzZXQtZ3Bpb3Mgb25seSBmb3IgZGV2aWNlcyBmbGFnZ2VkIGFzIFBIWXMuICovXFxuK1xcdG1jdS1cXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgXFxcInJlc2V0XFxcIiwgR1BJT0RfQVNJUyk7XFxuK1xcdGlmIChJU19FUlIobWN1LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbyksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobWN1LVxcdTAwM2VyZXNldF9ncGlvKVxcbitcXHRcXHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXFx1MDAzZXJlc2V0X2dwaW8sIFxcXCJFTjg4MTFIIHJlc2V0XFxcIik7XFxuK1xcbitcXHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xcbitcXG4rXFx0bWN1LVxcdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1jdS1cXHUwMDNlZndfcG9sbCwgZW44ODExaF9tY3VfZndfcG9sbCk7XFxuK1xcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxcbitcXHQgKiBhIHN1c3BlbmRpbmcgYnVzLlxcbitcXHQgKi9cXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwpO1xcbitcXHRpZiAobWN1LVxcdTAwM2VidXMpIHtcXG4rXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKG1jdS1cXHUwMDNlYnVzKTtcXG4rXFx0XFx0bWRpb2J1c19mcmVlKG1jdS1cXHUwMDNlYnVzKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2VidXMgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIE5vdGhpbmcgdG8gcmVkbzogdGhlIHBvbGwgaXMgYXJtZWQgYW5kIHRoYXdzIHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xcbitcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBOb3Qgb24gdGhlIHdvcmtxdWV1ZTogYSBEU0EgcG9ydCdzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcXG4rXFx0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cXG4rXFx0ICovXFxuK1xcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcXG4rXFx0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cXHUwMDNlbWRpb2RldiwgXFx1MDAyNm1jdS1cXHUwMDNlZndfdmVyc2lvbiwgISFjaGlwKTtcXG4rXFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdC8qIFRoZSByZWxvYWQgcmVzdG9yZXMgdGhpcyBjaGlwLCBub3QgdGhlIFBIWSBiZWxvdyBpdDogaXRzXFxuK1xcdFxcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcXG4rXFx0XFx0ICogcGh5X2luaXRfaHcoKSB0d2ljZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XFxuK1xcdFxcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FpdGVkX21zID0gMDtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSBmYWxzZTtcXG4rXFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhlbjg4MTFoX21jdV9wbV9vcHMsIE5VTEwsIGVuODgxMWhfbWN1X3Jlc3VtZSk7XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjg4MTFoLW1jdVxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGVuODgxMWhfbWN1X29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xcbitcXHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IGVuODgxMWhfbWN1X3JlbW92ZSxcXG4rXFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhaXJvaGEtZW44ODExaC1tY3VcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBlbjg4MTFoX21jdV9vZl9tYXRjaCxcXG4rXFx0XFx0LnBtID0gcG1fc2xlZXBfcHRyKFxcdTAwMjZlbjg4MTFoX21jdV9wbV9vcHMpLFxcbitcXHRcXHQvKiBUZWFyaW5nIHRoZSBjaGlsZCBidXMgZG93biB1bmRlciBhbiBhdHRhY2hlZCBQSFkgaXMgbm90XFxuK1xcdFxcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuK1xcdH0sXFxuK307XFxuK1xcbittZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbitNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbkBAIC0yMCwyMSArMjAsMTUgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEVOODgxMUhfUEhZX0lEXFx0XFx0MHgwM2EyYTQxMVxcbiAjZGVmaW5lIEFOODgxMUhCX1BIWV9JRFxcdFxcdDB4YzBmZjA0YTBcXG4gXFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLmRtLmJpblxcXCJcXG4tI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXFx0XFxcImFpcm9oYS9FdGhNRDMyLkRTUC5iaW5cXFwiXFxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVxcdFxcXCJhaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRE0uYmluXFxcIlxcbiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRFNQXFx0XFxcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXFxcIlxcbiBcXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVxcdDB4MDAwMDAwMDBcXG4tI2RlZmluZSBBSVJfRldfQUREUl9EU1BcXHQweDAwMTAwMDAwXFxuLVxcbiAvKiBNSUkgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1xcdFxcdDB4MWRcXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1xcdEdFTk1BU0soNCwgMilcXG5AQCAtNDQsOCArMzgsNiBAQFxcbiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwXFx0MHhjXFxuIFxcbiAvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi9cXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcXHRcXHQweDgwMDlcXG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXFx0XFx0XFx0MHgwMlxcbiBcXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMFxcdFxcdDB4ODAwYlxcbiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8xXFx0XFx0MHg4MDBjXFxuQEAgLTEwOCw4ICsxMDAsNiBAQFxcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcXHRcXHQweDNiMzBcXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1xcdFxcdFxcdEJJVCgwKVxcbiBcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cXHRcXHQweDNiM2NcXG4tXFxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVxcdFxcdDB4Y2EwZjhcXG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXFx0XFx0QklUKDApXFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcXHRcXHRCSVQoMSlcXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxcbiAjZGVmaW5lIEVOODgxMUhfQ0xLX0NHTVxcdFxcdFxcdDB4Y2Y5NThcXG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cXHRcXHRcXHRCSVQoMjYpXFxuIFxcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXFx0XFx0MHgwZjAwMThcXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXFx0XFx0MHgwXFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcXHRcXHQweDFcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlxcdFxcdDB4ODAwMDAwXFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJfTE9BRElOR1xcdFxcdEJJVCgxMSlcXG4tXFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcXHRcXHQweGYwMjBjXFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcXHRcXHQweGYwMjE4XFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcXHRcXHQweGYwMjFjXFxuQEAgLTI3MCw4NiArMjU0LDE0IEBAIHN0YXRpYyBpbnQgX19haXJfcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLXtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTE2IHZhbDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfSU5DUik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFxcdTAwM2MgZnctXFx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XFxuLVxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0ICsgMl0pO1xcbi1cXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZmdy1cXHUwMDNlZGF0YVtvZmZzZXRdKTtcXG4tXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4te1xcbi1cXHRpbnQgc2F2ZWRfcGFnZTtcXG4tXFx0aW50IHJldCA9IDA7XFxuLVxcbi1cXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuLVxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgZnctXFx1MDAzZXNpemUpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4tXFxuLVxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdFxcdFxcdCAgIGFkZHJlc3MsIHJldCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgc2F2ZWRfcGFnZSwgcmV0KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4tXFx0aW50IHJldCwgcmVnX3ZhbHVlO1xcbitcXHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgZmFsc2UpO1xcbiBcXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4tXFx0XFx0XFx0XFx0XFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHQvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMgKi9cXG4tXFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbi1cXHRcXHRcXHRcXHRcXHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxcbi1cXHRcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAweCV4XFxcXG5cXFwiLCByZWdfdmFsdWUpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFx0fVxcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhbjg4MTFoYl9jaGVja19jcmMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHNldDEsXFxuQEAgLTQxMSw3ICszMjMsNyBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCAgZncpO1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE7XFxuLVxcbi1cXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxcbi1cXHRcXHRcXHRcXHRcXHQgRU44ODExSF9GV19DVFJMXzFfU1RBUlQpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRlbjg4MTFoX3ByaW50X2Z3X3ZlcnNpb24ocGh5ZGV2KTtcXG4tXFxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XFxuLVxcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcXG4tXFxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOlxcbi1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XFxuLVxcbitcXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBcXHUwMDI2cHJpdi1cXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgZmFsc2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJMb2FkIGZpcm13YXJlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcbkBAIC0xMTU2LDggKzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cXG4tXFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4rXFx0LyogQWRvcHRlZCBmaXJtd2FyZSB3YXMgbmV2ZXIgcmVzdGFydGVkIGhlcmUuICovXFxuK1xcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcXG4gXFxuIFxcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cXG4gXFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXFxuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXFxuQEAgLTgsMzcgKzgsNDIgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSlcXG4ge1xcbiBcXHRpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4rXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9oaWdoIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xcbiBcXG4tXFx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbitcXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9sb3cgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcXG4gXFxuQEAgLTQ2LDY0ICs1MSw2NiBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuIHtcXG4gXFx0aW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoO1xcbiBcXHR1MzIgcGJ1c19kYXRhX29sZCwgcGJ1c19kYXRhX25ldztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXFxuK1xcdFxcdFxcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHBidXNfZGF0YV9oaWdoID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xcbitcXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xcbiBcXHRpZiAocGJ1c19kYXRhX2hpZ2ggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XFxuIFxcbi1cXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XFxuK1xcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbiBcXHRpZiAocGJ1c19kYXRhX2xvdyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwYnVzX2RhdGFfbG93O1xcbiBcXG5AQCAtMTEyLDIzICsxMTksMjMgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChwYnVzX2RhdGFfbmV3ID09IHBidXNfZGF0YV9vbGQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTE0NCw3ICsxNTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIHBidXNfYWRkcmVzcywgcGJ1c19kYXRhKTtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwYnVzX2RhdGEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcXG5AQCAtMTYzLDcgKzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwYnVzX2RhdGEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuQEAgLTE4Myw4ICsxOTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIFxcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuIFxcbiBcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIG1hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNldCk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtYXNrLCBzZXQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcXG5AQCAtMTk0LDYgKzIwMiwzNDMgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XFxuIFxcbitzdGF0aWMgaW50IF9fYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHRcXHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MTYgdmFsO1xcbitcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGxlbjsgb2Zmc2V0ICs9IDQpIHtcXG4rXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZkYXRhW29mZnNldF0pO1xcbitcXHRcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIHBoeV9zZWxlY3RfcGFnZSgpIG5lZWRzIGEgcGh5X2RldmljZSwgd2hpY2ggZG9lcyBub3QgZXhpc3QgeWV0LiAqL1xcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBzYXZlZF9wYWdlO1xcbitcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xcbitcXHRcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc2F2ZWRfcGFnZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcXG4re1xcbitcXHRpbnQgcmVzdG9yZTtcXG4rXFxuK1xcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcXG4rXFx0XFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNhdmVkX3BhZ2UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgcmVzdG9yZSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldCA9IHJlc3RvcmU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG4rc3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGlmIChuZXN0ZWQpXFxuK1xcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbit9XFxuK1xcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHNpemVfdCBjaHVuaywgZG9uZSA9IDA7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgXFxcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgZnctXFx1MDAzZXNpemUpIHtcXG4rXFx0XFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVxcdTAwM2VzaXplIC0gZG9uZSwgQUlSX0ZXX0NIVU5LX0JZVEVTKTtcXG4rXFxuK1xcdFxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdFxcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBfX2Fpcl93cml0ZV9idWYobWRpb2RldiwgYWRkcmVzcyArIGRvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGZ3LVxcdTAwM2VkYXRhICsgZG9uZSwgY2h1bmspO1xcbitcXHRcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmV0KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0ZG9uZSArPSBjaHVuaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XFxuK1xcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcGJ1c19kYXRhKTtcXG4rXFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHNhdmVkX3BhZ2UsIHJldDtcXG4rXFxuK1xcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHNhdmVkX3BhZ2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtYXNrLCBzZXQpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxcbisgKiByZWdpc3Rlciwgc28gYSBmYWlsZWQgc2VsZWN0aW9uIHJlYWRzIGEgZGlmZmVyZW50IG9uZSBiYWNrIGFzIHN1Y2Nlc3MuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuK1xcdGludCBhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgIGRldmFkIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldCA9IGFpcl9tbWRfc3RhdHVzX3JlYWQobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XFxuK1xcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgcmV0LCByZWdfdmFsdWU7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzFfRklOSVNILCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcXG4rXFx0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcXG4rXFx0XFx0XFx0XFx0cmVnX3ZhbHVlIFxcdTAwM2MgMCB8fFxcbitcXHRcXHRcXHRcXHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXFxuK1xcdFxcdFxcdFxcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmVnX3ZhbHVlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJlZ192YWx1ZTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZGJnKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAweCV4XFxcXG5cXFwiLCByZWdfdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xcbitcXG4raW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxcbitcXHRcXHRcXHQgICAgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICpmd192ZXJzaW9uKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXFxuK1xcdFxcdFxcdFxcdFxcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0ZGV2X2luZm8oZGV2LCBcXFwiTUQzMiBmaXJtd2FyZSB2ZXJzaW9uOiAlMDh4XFxcXG5cXFwiLCAqZndfdmVyc2lvbik7XFxuK1xcbithaXJfZndfZG93bmxvYWRfb3V0OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XFxuK1xcbithaXJfZndfZG93bmxvYWRfcmVsMTpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xcbitcXG4rXFx0LyogTm8gZXJyb3IgcHJpbnQ6IGNhbGxlcnMgbG9nIG9uIHRoZWlyIG93biB0ZXJtcywgYW5kIGEgcG9sbGVyXFxuK1xcdCAqIHdvdWxkIHJlcGVhdCBpdCBvbiBldmVyeSByZXRyeS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfZndfZG93bmxvYWQpO1xcbitcXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxcbmluZGV4IDAxYmIzMmU3YzdjOTUuLjU2YmE5ODdhNjhjYzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxcbkBAIC0xMCwxMiArMTAsMTkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1xcdFxcdDB4MWZcXG4gXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXFx0XFx0MHgwMDAwXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcXHRcXHQweDAwMDFcXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFxcdFxcdDB4MDAwNFxcbiBcXG4rLyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXFxuKyAqL1xcbisjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1xcdFxcdDIzMDRcXG4rXFxuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cXG4gI2RlZmluZSBBSVJfQlBCVVNfTU9ERVxcdFxcdFxcdDB4MTBcXG4gI2RlZmluZSAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRURcXHRcXHQweDAwMDBcXG5AQCAtMjksNiArMzYsMjAgQEBcXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXFx0XFx0MHgxN1xcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1xcdFxcdDB4MThcXG4gXFxuKyNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cXHRcXHRcXHQweDAwMDAwMDAwXFxuKyNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXFx0XFx0XFx0MHgwMDEwMDAwMFxcbitcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVxcdFxcdDB4MGYwMDE4XFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFxcdFxcdDB4MFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXFx0XFx0MHgxXFxuKyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcXHRcXHQweDgwMDAwMFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElOR1xcdFxcdEJJVCgxMSlcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXFx0XFx0MHg4MDA5XFxuKyNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWVxcdFxcdFxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXFx0XFx0MHgzYjNjXFxuK1xcbiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdHUzMiBtYXNrLCB1MzIgc2V0KTtcXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGFpcl9waHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSk7XFxuIFxcbitzdHJ1Y3QgZmlybXdhcmU7XFxuK1xcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcXG4raW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xcbitcXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFxuQEAgLTAsMCArMSwyNSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxcbisgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxcbisjZGVmaW5lIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBtZGlvX2RldmljZTtcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXFx0XFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLmRtLmJpblxcXCJcXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLkRTUC5iaW5cXFwiXFxuK1xcbisvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xcbisvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cXG4raW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxcbitcXHRcXHRcXHQgICAgYm9vbCBuZXN0ZWQpO1xcbitcXG4rI2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZTc0YThmNWNmNWM2NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMjg0LDYgKzIyODQsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK31cXG4rXFxuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbit9XFxuK1xcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0X19wcmludGYoMiwgMyk7XFxuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0Mi4wNDM0MDg0NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MTY0MDc0Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGRldmljZSB0cmVlIGJpbmRpbmcgYW5kIGEgbmV3IE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZIE1DVSAobWRpby1haXJvaGEtZW44ODExaC5jKSwgd2hpbGUgcmVmYWN0b3JpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgTURJTyByZWdpc3RlciBhY2Nlc3MgaGVscGVycyBpbiB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5IChhaXJfZW44ODExaC5jLCBhaXJfcGh5X2xpYi5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIEFpcm9oYSBwaHlzaWNhbCBBU0lDL1BIWSBoYXJkd2FyZSBhbmQgZGV2aWNlLXRyZWUgYmluZGluZ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgZXhlY3V0YWJsZSBjaGFuZ2VzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk1YjRiY2I0YWQ1MGUxMWEwNjljMWE5ZTRlODAzYWFjNTdlZWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0NDMzMWQ4MDMxNWJcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbkBAIC0wLDAgKzEsMTE5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcbitcbittYWludGFpbmVyczpcbisgIC0gQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xuKyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb21cbisgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlblxuKyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cbitcbisgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGRcbisgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcbisgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy5cbitcbisgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcbisgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvblxuKyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUncyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlclxuKyAgdGhlIGNvcmUgaXMgZG9pbmcuXG4rXG4rICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG4rICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybVxuKyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXG4rICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICAkbm9kZW5hbWU6XG4rICAgIHBhdHRlcm46IFwiXm1jdUBbMC05YS1mXSskXCJcbitcbisgIGNvbXBhdGlibGU6XG4rICAgIGNvbnN0OiBhaXJvaGEsZW44ODExaC1tY3VcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIHJlc2V0LWdwaW9zOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXG4rICAgICAgTUQzMiBjb3JlLlxuK1xuKyAgcmVzZXQtYXNzZXJ0LXVzOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cbitcbisgIHJlc2V0LWRlYXNzZXJ0LXVzOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGRlYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuK1xuKyAgbWRpbzpcbisgICAgJHJlZjogbWRpby55YW1sI1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgYnVzIHRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLCBhdFxuKyAgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhpcyBub2RlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQgYnVzLiBPbmx5IHRoYXRcbisgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cbitcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgJ15ldGhlcm5ldC1waHlAWzAtOWEtZl0rJCc6XG4rICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgICRyZWY6IGFpcm9oYSxlbjg4MTFoLnlhbWwjXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbisgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2VcbisgICAgICAgICAgcmVzZXRzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1uYW1lczogZmFsc2VcbitcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWRcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXG4rXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gbWRpb1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWN1QGQge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImFpcm9oYSxlbjg4MTFoLW1jdVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbisgICAgICAgICAgICByZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MyMDAwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBtZGlvIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwiO1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMHhkXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcdFN1cHBvcnRlZFxuIEY6XHRmcy9haW8uY1xuIEY6XHRpbmNsdWRlL2xpbnV4LyphaW8qLmhcbiBcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbitNOlx0QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbitGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuK1xuIEFJUk9IQSBFVEhFUk5FVCBEUklWRVJcbiBNOlx0TG9yZW56byBCaWFuY29uaSBcdTAwM2Nsb3JlbnpvQGtlcm5lbC5vcmdcdTAwM2VcbiBMOlx0bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxuIFx0ICBBaXJvaGEgQU43NTgzIFNvQydzLlxuIFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXG4rXHR0cmlzdGF0ZSBcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBPRl9NRElPXG4rXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuK1x0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG4rXHRpbXBseSBBSVJfRU44ODExSF9QSFlcbitcdGhlbHBcbitcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cbitcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XG4rXHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbitcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXG4rXHQgIGxlZnQgcnVubmluZy5cbitcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0Kz0gZndub2RlX21kaW8ub1xuIG9iai0kKENPTkZJR19PRl9NRElPKVx0XHQrPSBvZl9tZGlvLm9cbiBcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCs9IG1kaW8tYWlyb2hhLm9cbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xuIG9iai0kKENPTkZJR19NRElPX0FTUEVFRClcdFx0Kz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0Kz0gbWRpby1iY20taXByb2Mub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3Mjdcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5AQCAtMCwwICsxLDM4MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8qXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXHQxMDAwXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuKyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TXHQ2MDAwMFxuK1xuK3N0cnVjdCBlbjg4MTFoX21jdSB7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHVuc2lnbmVkIGludCBwb2xsX21zO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbitcdHUzMiBmd192ZXJzaW9uO1xuK1x0Ym9vbCB3YXJuZWQ7XG4rXHRib29sIGZ3X3J1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4re1xuK1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxuK1x0XHRcdFx0aW50IHJlZ251bSlcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKGFkZHIgIT0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gbWRpb2J1c19jNDVfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcbitcdFx0XHRcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuK1x0XHRcdFx0XHR2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSlcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCJtZGlvXCIpO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4rXHQgKiBkZXRhY2guXG4rXHQgKi9cbitcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbitcdGlmICghYnVzKSB7XG4rXHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiYWlyb2hhLWVuODgxMWhcIjtcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcIiVzXCIsIGRldl9uYW1lKGRldikpO1xuK1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0aWYgKHBhcmVudC1cdTAwM2VyZWFkKSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbitcdFx0YnVzLVx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XG4rXHR9XG4rXHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xuK1x0XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gZW44ODExaF9tY3Vfd3JpdGVfYzQ1O1xuK1x0fVxuK1xuK1x0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcbitcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuK1x0XHQgKi9cbitcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHR9XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1kaW9idXNfZnJlZShidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWN1LVx1MDAzZWJ1cyA9IGJ1cztcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXHUwMDNlYnVzO1xuK1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdHJldHVybiBidXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZykge1xuK1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4rXHRcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cdTAwM2VtZGlvZGV2LCBcdTAwMjZtY3UtXHUwMDNlZndfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgISFjaGlwKTtcbitcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0ZGV2X2RiZyhkZXYsIFwiZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcXG5cIixcbitcdFx0XHRtY3UtXHUwMDNlZndfdmVyc2lvbiwgbWN1LVx1MDAzZXdhaXRlZF9tcyk7XG4rXHRcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XG4rXHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZGJnKGRldiwgXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbitcdCAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUncyBpbnRlcnJ1cHQgY29udHJvbGxlciBpc1xuK1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4rXHQgKi9cbitcdHJldCA9IG1jdS1cdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuO1xuK1xuK3JldHJ5OlxuK1x0aWYgKCFtY3UtXHUwMDNld2FybmVkIFx1MDAyNlx1MDAyNiBtY3UtXHUwMDNld2FpdGVkX21zIFx1MDAzZT0gRU44ODExSF9GV19XQVJOX01TKSB7XG4rXHRcdGlmICghbWN1LVx1MDAzZWZ3X3J1bm5pbmcpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXG5cIixcbitcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4rXHRcdFx0XHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbitcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNld2FybmVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5XG4rXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuK1x0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcbitcdCAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLlxuK1x0ICovXG4rXHRpZiAobWN1LVx1MDAzZWZ3X3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1jdS1cdTAwM2V3YWl0ZWRfbXMgXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXG4rXHRcdHJldHVybjtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cdTAwM2Vwb2xsX21zICogMiwgRU44ODExSF9GV19QT0xMX01BWF9NUyk7XG4rXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbitcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVx1MDAzZXBvbGxfbXM7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4rXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXHUwMDNlcG9sbF9tcykpO1xuK31cbitcbisvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqL1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cdTAwM2VtZGlvZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4rXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcIk1EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIW1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuK1x0ICovXG4rXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8pIFx1MDAzYz0gMCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcblwiLFxuK1x0XHRcdHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicmVzZXQtYXNzZXJ0LXVzXCIsIFx1MDAyNmFzc2VydF91cyk7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJlc2V0LWRlYXNzZXJ0LXVzXCIsIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbitcbitcdHJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGFzc2VydF91cylcbitcdFx0ZnNsZWVwKGFzc2VydF91cyk7XG4rXG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDApO1xuK1x0aWYgKGRlYXNzZXJ0X3VzKVxuK1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1jdSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3UtXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XG4rXG4rXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXG4rXHQgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLlxuK1x0ICovXG4rXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcIm1kaW9cIik7XG4rXHRpZiAoIW5wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXG4rXHRcdFx0XHQgICAgIFwibm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxcblwiKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcbitcdC8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi9cbitcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcInJlc2V0XCIsIEdQSU9EX0FTSVMpO1xuK1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCIpO1xuK1xuK1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXHUwMDNlcmVzZXRfZ3BpbywgXCJFTjg4MTFIIHJlc2V0XCIpO1xuK1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTtcbitcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuK1x0ICogYSBzdXNwZW5kaW5nIGJ1cy5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4rXHRpZiAobWN1LVx1MDAzZWJ1cykge1xuK1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIobWN1LVx1MDAzZWJ1cyk7XG4rXHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbitcdFx0bWN1LVx1MDAzZWJ1cyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovXG4rXHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0J3MgUEhZIHJlc3VtZXMgcmlnaHQgYWZ0ZXIgdGhpc1xuK1x0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cbitcdCAqL1xuK1x0Y2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpO1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4rXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbitcdFx0ICogb3duIHJlc3VtZSBoYXMgYWxyZWFkeSBmYWlsZWQgYnkgdGhlbiBhbmQgbm90aGluZyBjYWxsc1xuK1x0XHQgKiBwaHlfaW5pdF9odygpIHR3aWNlLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdG1jdS1cdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiYWlyb2hhLGVuODgxMWgtbWN1XCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXG4rXHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuK1x0Lm1kaW9kcnYuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwiYWlyb2hhLWVuODgxMWgtbWN1XCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGVuODgxMWhfbWN1X29mX21hdGNoLFxuK1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbitcdFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxuK1x0XHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxuK1x0XHQgKi9cbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuK1x0fSxcbit9O1xuK1xuK21kaW9fbW9kdWxlX2RyaXZlcihlbjg4MTFoX21jdV9kcml2ZXIpO1xuK1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRFNQKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSArMjAsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyX3BoeV9saWIuaFwiXG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwiYWlyb2hhL0V0aE1EMzIuZG0uYmluXCJcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9EU1BcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNXHRcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5ETS5iaW5cIlxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW5cIlxuIFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cdDB4MDAwMDAwMDBcbi0jZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0MHgwMDEwMDAwMFxuLVxuIC8qIE1JSSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcdFx0MHgxZFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcdEdFTk1BU0soNCwgMilcbkBAIC00NCw4ICszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCArMTAwLDYgQEBcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcdFx0MHgzYjMwXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1x0XHRcdEJJVCgwKVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXHRcdDB4M2IzY1xuLVxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVx0XHQweGNhMGY4XG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXHRcdEJJVCgwKVxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcdFx0QklUKDEpXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxuICNkZWZpbmUgRU44ODExSF9DTEtfQ0dNXHRcdFx0MHhjZjk1OFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXHRcdFx0QklUKDI2KVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcdFx0MHgwXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFx0XHQweDFcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbi1cbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXHRcdDB4ZjAyMGNcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXHRcdDB4ZjAyMThcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXHRcdDB4ZjAyMWNcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCArIDJdKTtcbi1cdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldF0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcbi1cdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHRpbnQgc2F2ZWRfcGFnZTtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0aWYgKGZ3LVx1MDAzZXNpemUgJSA0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cIixcbi1cdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuLVxuLVx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbitcdGludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZmFsc2UpO1xuIFxuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbi1cdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4tXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tXHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuLVx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4tXHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTUNVIG5vdCByZWFkeTogMHgleFxcblwiLCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk1DVSBub3QgcmVhZHk6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NoZWNrX2NyYyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgc2V0MSxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbitcdHJldCA9IGFpcl9md193cml0ZV9idWYoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgXHUwMDI2cHJpdi1cdTAwM2VmaXJtd2FyZV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4tXHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4rXHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbitcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpO1xuIFxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuQEAgLTgsMzcgKzgsNDIgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcl9waHlfbGliLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbitcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4rXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4rXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbiBcdGlmIChwYnVzX2RhdGFfbG93IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcbiBcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbitcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4gXHRpZiAocGJ1c19kYXRhX2hpZ2ggXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcbiBcbi1cdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbitcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbitcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTQ0LDcgKzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuK1x0XHRcdFx0XHQgICAgICBwYnVzX2RhdGEpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICAgcGJ1c19hZGRyZXNzLCByZXQpO1xuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXG5cIiwgX19mdW5jX18sXG5AQCAtMTgzLDggKzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xOTQsNiArMjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XG4gXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbitcdFx0XHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuK1x0aW50IHJldDtcbitcdHUxNiB2YWw7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4rXHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XG4rXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcbitcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4rXHRcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzYXZlZF9wYWdlO1xuK1xuK1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuK1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBzYXZlZF9wYWdlO1xuK31cbitcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcbit7XG4rXHRpbnQgcmVzdG9yZTtcbitcbitcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcbitcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuK1x0XHRcdFx0XHQgIHNhdmVkX3BhZ2UpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmVzdG9yZSBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByZXN0b3JlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpZiAobmVzdGVkKVxuK1x0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuK1x0ZWxzZVxuK1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4rfVxuK1xuK2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4rXHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpXG4re1xuK1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGZ3LVx1MDAzZXNpemUpIHtcbitcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuK1xuK1x0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXG4rXHRcdFx0XHRcdFx0ICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICsgZG9uZSxcbitcdFx0XHRcdFx0ICAgICAgZnctXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcbitcdFx0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LFxuK1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4rXHRcdH1cbitcbitcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0ZG9uZSArPSBjaHVuaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZndfd3JpdGVfYnVmKTtcbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbitcbitcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbitcbitcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4rXHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuK1x0fVxuK1xuK1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcbitcdFx0XHRcdCAgICAgICBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgICBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbitcdH1cbitcbitcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXG4rXHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4rXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbitcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4rXHR9XG4rXG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxuKyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXG4rXHRcdFx0ICAgICAgZGV2YWQgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xuK1xuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQsIHJlZ192YWx1ZTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcbitcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcbitcdFx0XHRcdHJlZ192YWx1ZSBcdTAwM2MgMCB8fFxuK1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuK1x0XHRcdFx0MjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmVnX3ZhbHVlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcIk1DVSBub3QgcmVhZHk6IDB4JXhcXG5cIiwgcmVnX3ZhbHVlKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xuK1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuK1x0XHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGRldl9pbmZvKGRldiwgXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwiLFxuK1x0XHRcdCAqZndfdmVyc2lvbik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbitcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcbitcdFx0XHRcdFx0ICAgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXG4rXHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0ZGV2X2luZm8oZGV2LCBcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcblwiLCAqZndfdmVyc2lvbik7XG4rXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcbitcbithaXJfZndfZG93bmxvYWRfcmVsMTpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcbitcbitcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxuK1x0ICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LlxuK1x0ICovXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4rXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaCBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5AQCAtMTAsMTIgKzEwLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuK1xuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1x0XHQweDFmXG4gXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkRcdFx0MHgwMDAwXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMVx0XHQweDAwMDFcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80XHRcdDB4MDAwNFxuIFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4rICovXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcdFx0MjMwNFxuK1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgKzM2LDIwIEBAXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXHRcdDB4MTdcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1x0XHQweDE4XG4gXG4rI2RlZmluZSBBSVJfRldfQUREUl9ETVx0XHRcdDB4MDAwMDAwMDBcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbitcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXHRcdDB4MGYwMDE4XG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcdFx0MHgxXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlx0XHQweDgwMDAwMFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbitcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1x0XHQweDgwMDlcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cdFx0MHgzYjNjXG4rXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xuIFxuK3N0cnVjdCBmaXJtd2FyZTtcbitcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4rXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuQEAgLTAsMCArMSwyNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XG4rXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRE1cdFx0XHRcImFpcm9oYS9FdGhNRDMyLmRtLmJpblwiXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXHRcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4rXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuKy8qIFJldHVybnMgMSB3aGVuIGl0IGFkb3B0ZWQgZmlybXdhcmUgdGhhdCB3YXMgYWxyZWFkeSBydW5uaW5nLiAqL1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyODQsNiArMjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0X19wcmludGYoMiwgMyk7XG4gY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0Mi4wNDM0MDk5MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTM2OTUzMDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmlhZ2UgVGltZTogQWlyb2hhIE1ESU8gRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFuIEFpcm9oYSBFTjg4MTFIIE1DVSBNRElPIGRyaXZlci4gV2UncmUgdGFsa2luZyBhYm91dCBhIG5ldyBkcml2ZXIgZmlsZSAoYG1kaW8tYWlyb2hhLWVuODgxMWguY2ApLCBzb21lIFBIWSBkcml2ZXIgcmVmYWN0b3JpbmcgKGBhaXJfcGh5X2xpYi5jYCwgYGFpcl9lbjg4MTFoLmNgKSwgRFQgYmluZGluZ3MgKGBhaXJvaGEsZW44ODExaC1tY3UueWFtbGApLCBhbmQgc29tZSBNRElPIGFuZCBQSFktcmVsYXRlZCBoZWxwZXIgYWRkaXRpb25zIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLlxuXG5Ob3csIHRyaWFnZSB0aW1lISBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoZSBzdWJzeXN0ZW1zIHRvdWNoZWQgaW5jbHVkZSBkb2N1bWVudGF0aW9uIChub24tZXhlY3V0YWJsZSwgdGhhbmtmdWxseSksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgKGFsc28gbm90IGV4ZWN1dGFibGUpLCBhbmQgYSBoYW5kZnVsIG9mIGRyaXZlciBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2AgYW5kIGBpbmNsdWRlL2xpbnV4L2AgdHJlZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBhcmUgd2UgYWN0dWFsbHkgZGVhbGluZyB3aXRoIGhlcmU/ICBgbWRpby1haXJvaGEtZW44ODExaC5jYCBpcyBhbiBNRElPIGRldmljZSBkcml2ZXIgZm9yIGFuIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UuIFRoZSBgYWlyX2VuODgxMWguY2AgZmlsZSBpcyB0aGUgUEhZIGRyaXZlciBmb3IgdGhhdCBzYW1lIEFpcm9oYSBjaGlwLiAgRXNzZW50aWFsbHksIGl0J3MgYW4gTURJTyBkcml2ZXIgdGhhdCAqdGFsa3MqIHRvIGEgc3BlY2lmaWMgUEhZLlxuXG5UaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSAqZ2V0KiB0byB0aGlzIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/ICBSZW1lbWJlciBvdXIgdHJpYWdlIHBoaWxvc29waHkg4oCTIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiAgV2UncmUgdGFsa2luZyBhYm91dCBNRElPIGFuZCBQSFkgZHJpdmVycy4gV2UgY2FuJ3QgZnV6eiBjb2RlIHRoYXQgZG9lc24ndCBydW4uXG5cbkxldCdzIHNlZS4uLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemVzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgaGF2ZSB0byBhc2s6IGRvIHdlIGhhdmUgYWNjZXNzIHRvIHBoeXNpY2FsIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIHRvIHRlc3QgdGhpcz8gUHJvYmFibHkgbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciDigJMgd2UgbmVlZCBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2VzLiBTbywgaXMgYW4gTURJTyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IElzIHRoZXJlIHNvbWUgd2F5IHRvIGNyZWF0ZSBpdCBvciBtb2NrIGl0IGluIHVzZXJzcGFjZT9cblxuU28sIGJhY2sgdG8gdGhlIGRyaXZlci4gSXQgbG9va3MgbGlrZSBgZW44ODExaF9tY3VfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFzIGFuIE1ESU8gZHJpdmVyLiBNRElPIGRldmljZXMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHRocm91Z2ggRGV2aWNlIFRyZWUgKHdoaWNoIHdlIGhhdmUgYSBiaW5kaW5nIGZvciEpLCBBQ1BJLCBvciBhIHBsYXRmb3JtIE1ESU8gYnVzLiBPa2F5LCBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQvYW1kNjQuICBXaXRob3V0IGEgZGVkaWNhdGVkIERldmljZSBUcmVlIG5vZGUgb3IgYW4gTURJTyBidXMgaW5zdGFudGlhdGVkLCB0aGlzIGRyaXZlciB3b24ndCBiZSBwcm9iZWQgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuXG5cbldlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNRElPIGRldmljZXMgb3IgUEhZIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBvciBtb2NrZWQgaW4gTGludXggZnJvbSB1c2Vyc3BhY2UuIElmIG5vdCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGhhcmQgXCJub1wiIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY3VycmVudCB0cmlhZ2UgZ3VpZGVsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo1My40MTI5NDI1NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDI0MzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGEsZW44ODExaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTMtLS0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw9MTI9ZGVzY3JpcHRpb246IHxcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjctICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDoyODogIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0yOS0gIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbD0zMj1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0zNi0gIGNvbXBhdGlibGU6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDozNzogICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTY3LSAgICAgICAgdHlwZTogb2JqZWN0XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDo2ODogICAgICAgICRyZWY6IGFpcm9oYSxlbjg4MTFoLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC02OS0gICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw9OTI9ZXhhbXBsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTEwMS0gICAgICAgIG1jdUBkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjEwMjogICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjg4MTFoLW1jdVxcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0xMDMtICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9haXJvaGEsZW44ODExaC55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuTUFJTlRBSU5FUlM9NzU2PVM6XFx0TWFpbnRhaW5lZFxcbk1BSU5UQUlORVJTOjc1NzpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcXG5NQUlOVEFJTkVSUy03NTgtRjpcXHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM9MzU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM6MzU2OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuODgxMWgtbWN1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jLTM1Ny1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MjI6NTUuODc3MTk0MTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDQwOTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBIWSBBYnN0cmFjdGlvbiBMYXllcidzIExvY2tpbmcgTWVjaGFuaXNtcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIHdpdGhpbiB0aGUgUEhZIGFic3RyYWN0aW9uIGxheWVyLCBzcGVjaWZpY2FsbHkgd2hhdCdzIGJlZW4gYWRkZWQgaW4gYGluY2x1ZGUvbGludXgvcGh5LmhgLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgaXQncyBkZWZpbmluZyBhIGZldyBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgbXV0ZXggYXNzb2NpYXRlZCB3aXRoIGFuIE1ESU8gYnVzLiBUaGVzZSBhcmUgY3J1Y2lhbDogYG1kaW9kZXZfbG9ja2AsIGBtZGlvZGV2X2xvY2tfbmVzdGVkYCwgYW5kIGBtZGlvZGV2X3VubG9ja2AuIFRoZXkgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgYG1kaW9fbG9ja2AgbXV0ZXggdGhhdCBiZWxvbmdzIHRvIHRoZSBNRElPIGJ1cy4gVGhlIGBuZXN0ZWRgIHZlcnNpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZSBwb3RlbnRpYWwgZm9yIG5lc3RlZCBsb2NraW5nLCB3aGljaCBJJ2QgZXhwZWN0IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJ1cyBhY2Nlc3NlZCB0aHJvdWdoIGFub3RoZXIgYnVzLCBsaWtlIHdoYXQgeW91J2Qgc2VlIGluIHRoZSBgbWRpb2J1c19yZWFkX25lc3RlZCgpYCBmdW5jdGlvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogYmVpbmcgdXNlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBNRElPIGZyYW1ld29yay4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIGFuZCBnZXQgYSBsaXN0IG9mIGFsbCB0aGVpciB1c2FnZSB0byBjaGVjayB3aGVyZSB0aGUgbG9ja3MgYXJlIHVzZWQgYW5kIGluIHdoaWNoIHNpdHVhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo1OC45Njc2MDc5MzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1MDA1NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvZGV2Xyhsb2NrfHVubG9jaylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc1LS8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc4LVxcdGlmIChuZXN0ZWQpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5OlxcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0yODQ9aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyOTk6XFx0XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMxMi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMTM6XFx0XFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzI0PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzI5LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjMzMDpcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzMxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzQwLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM0MTpcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTM0NT1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzUxOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNjItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzYzOlxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM2NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNzItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNzQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zODQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mzg1OlxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM4Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9NDE0PXN0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjQxODpcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE5LVxcdHJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjQyMDpcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI4Ni1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjg4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXFxuaW5jbHVkZS9saW51eC9waHkuaDoyMjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X2xvY2tfbmVzdGVkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk3LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjI5ODpzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjAxLjkxNzY3MDY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDk0OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBtZGlvZGV2YCBMb2NraW5nIGluIHRoZSBQSFkgRHJpdmVyIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXM6IGBtZGlvZGV2X2xvY2tgLCBgbWRpb2Rldl91bmxvY2tgLCBhbmQgYG1kaW9kZXZfbG9ja19uZXN0ZWRgLiBUaGUgY29kZSBpcyBwb2ludGluZyBvdXQgdGhhdCB0aGV5J3JlIGFsbCBkZWZpbmVkIGFzIGlubGluZSBoZWxwZXJzLCBhbmQgdGhleSdyZSAqb25seSogdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYC4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgaW1tZWRpYXRlbHkuIEZpcnN0LCB0aGVzZSBhcmUgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gdGhlIEFpclBIWSBpbXBsZW1lbnRhdGlvbi4gU2Vjb25kLCBiZWluZyBpbmxpbmUgbWVhbnMgdGhlcmUncyBwb3RlbnRpYWxseSBsZXNzIG92ZXJoZWFkLCBhcyB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIHRoZW0gbW9yZSBhZ2dyZXNzaXZlbHkgYmFzZWQgb24gdGhlaXIgdXNhZ2UuIFRoaXJkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQWlyUEhZIGxpYnJhcnkgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBsb2NrcyBhcmUgbmVjZXNzYXJ5IGFuZCBob3cgdGhleSdyZSBiZWluZyB1c2VkLlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGZvY3VzIGlzIG9uIGZpbmRpbmcgb3V0IHdoYXQgZmlsZXMgdXNlIGBhaXJfcGh5X2xpYi5jYCwgYXMgd2VsbCBhcyBgYWlyX2VuODgxMWguY2AgYW5kIGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBsaWJyYXJ5IGFuZCB0aGVyZWZvcmUsIGludGVyYWN0aW5nIHdpdGggdGhlIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9ja2luZyBsb2dpYyBpcy4gS25vd2luZyB3aGF0IGNhbGxzIHRoaXMgY29kZSBkaXJlY3RseSBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBjb25jdXJyZW5jeSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JrIFBIWSBkcml2ZXIgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjA0Ljc4MjYyMzg2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3NTA0MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFJUl9ORVRfUEhZTElCfEFJUl9FTjg4MTFIX1BIWXxhaXJfcGh5X2xpYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MzI9Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUhcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzozNjpcXHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzc6XFx0aW1wbHkgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTkzPWNvbmZpZyBBSVJfQU44ODAxX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk1OlxcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMDE6XFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAyLVxcdHNlbGVjdCBQSFlfQ09NTU9OX1BST1BTXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDUtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTA2OmNvbmZpZyBBSVJfTkVUX1BIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcXHQrPSBhaXJfYW44ODAxLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICArPSBhaXJfZW44ODExaC5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcXHQrPSBhaXJfcGh5X2xpYi5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19BTURfUEhZKVxcdFxcdCs9IGFtZC5vXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIxLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MjI6I2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0yMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIzLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI0OiNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMTgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MTk6I2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjA3Ljc1MDEzNjQzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU3MzAwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJDYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50P1wiIExldCdzIGJyZWFrIGl0IGRvd246IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2AgaXMgdGhlIE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGFuZCB3ZSBhbHNvIGhhdmUgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIHNhbWUuIFRoZXJlJ3MgYWxzbyBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNgLCB3aGljaCBpcyB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5LCBhbmQgYGFpcl9hbjg4MDEuY2AuXG5cbk15IGZpcnN0IGd1dCBjaGVjayBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHBpZWNlcyBvZiBjb2RlIGFyZSBldmVuIHJlbW90ZWx5IGFjY2Vzc2libGUgaW4gdGhlIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSAoUUVNVSBvciBHQ0Ugb24geDg2XzY0KS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBBaXJvaGEgRU44ODExSCBoYXJkd2FyZSBvciBNRElPIGJ1c2VzIGFyZSBlbXVsYXRlZCBpbiBRRU1VLiBUaGVuLCBJIG5lZWQgdG8ga25vdyBpZiB1c2Vyc3BhY2UgY2FuIGNyZWF0ZSBvciBhdHRhY2ggTURJTyBvciBQSFkgZGV2aWNlcy5cblxuRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgTURJTyBidXMgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgYnkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXJzLCBvciBieSBPRiBwbGF0Zm9ybSBkcml2ZXJzLiBQSFkgZGV2aWNlcyBhcmUgcHJvYmVkIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGFkZHJlc3NlcywgcmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVycywgb3IgcGFyc2luZyB0aGUgRGV2aWNlIFRyZWUuIFNwZWNpZmljYWxseSwgdGhlc2UgQWlyb2hhIE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSBgb2ZfbWRpb2AuXG5cblRoZSBwcm9ibGVtIGlzLCBhcyBmYXIgYXMgSSBrbm93LCBub25lIG9mIHRoaXMgaGFyZHdhcmUgZXhpc3RzIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIFZNcy4gU3l6a2FsbGVyIHdvbid0IGJlIGFibGUgdG8gaW5zdGFudGlhdGUgYW4gYXJiaXRyYXJ5IE1ESU8gb3IgUEhZIGRldmljZSB3aXRob3V0IHZpcnR1YWwgaGFyZHdhcmUgb3IgbW9jayBkZXZpY2VzLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGNsZWFybHkgc3RhdGVzIHRoYXQgd2UgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgd2hlbiBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgc3RyaWN0bHkgZmFsbHMgaW50byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGluY2x1ZGU6IFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBhbmQgbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSBjaGFuZ2VzLiBTZWN0aW9uIDEgYWxzbyBzdGF0ZXMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlICpwcmltYXJ5KiBnYXRlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBtYXAgdGhlbSBiYWNrIHRvIHRob3NlIGNyaXRlcmlhOlxuXG4xLiAgYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxgOiBEZXZpY2UgdHJlZSBzY2hlbWEgZG9jdW1lbnRhdGlvbi4gVGhhdCdzIG5vbi1leGVjdXRhYmxlLCBkb2N1bWVudGF0aW9uLlxuMi4gIGBNQUlOVEFJTkVSU2A6IE1haW50YWluZXJzIGZpbGUgdXBkYXRlLiBBZ2Fpbiwgbm9uLWV4ZWN1dGFibGUuXG4zLiAgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2A6IEFkZGVkIGBDT05GSUdfTURJT19BSVJPSEFfRU44ODExSGAuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuXG40LiAgYGRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVgOiBCdWlsZCBydWxlLiBCdWlsZCBzeXN0ZW0gY2hhbmdlLlxuNS4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2A6IE5ldyBNRElPIGRyaXZlciwgYnV0ICpmb3IqIGEgc3BlY2lmaWMgQWlyb2hhIE1DVS4gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy5cbjYuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOiBEcml2ZXIgZm9yIGEgKnNwZWNpZmljKiBBaXJvaGEgUEhZLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG43LiAgYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYDogTGlicmFyeSBmdW5jdGlvbnMgZm9yIEFpcm9oYSBQSFlzLiBGdW5jdGlvbmFsaXR5IGlzIHNwZWNpZmljIHRvIEFpcm9oYSBoYXJkd2FyZSwgc28gdGhpcyBpcyBhbHNvIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cbjguICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhgOiBJbnRlcm5hbCBoZWFkZXIgZm9yIEFpcm9oYSBQSFlzLlxuOS4gYGluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhgOiBIZWFkZXIgZm9yIEFpcm9oYSBFTjg4MTFIIE1DVSBkcml2ZXIuXG4xMC4gYGluY2x1ZGUvbGludXgvcGh5LmhgOiBBZGRzIGlubGluZSBsb2NrIGhlbHBlcnMuIE9ubHkgdXNlZCBieSB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5LCBzbyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cbkl0J3MgY2xlYXIgdG8gbWUgdGhhdCBhbGwgbW9kaWZpZWQgY29kZSBpcyBlaXRoZXIgbm9uLWtlcm5lbCAvIG5vbi1leGVjdXRhYmxlIChEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZy9NYWtlZmlsZSkgb3Igc3BlY2lmaWMgdG8gQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBoYXJkd2FyZSAoYW4gTURJTyBtaWNyb2NvbnRyb2xsZXIgLyBFdGhlcm5ldCBQSFkgY2hpcCkuIEFuZCB3ZSAqa25vdyogdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIG11c3QgYmUgYGZhbHNlYC5cblxuRm9yIGBzZXQtcmVzdWx0c2AsIEknbGwgc2V0IHRoZSBmb2xsb3dpbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBjaGFuZ2VzIGFkZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSBhbmQgcmVmYWN0b3IgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcyBpbiB0aGUgQWlyb2hhIFBIWSBkcml2ZXIgbGlicmFyeSAoYGFpcl9lbjg4MTFoLmNgLCBgYWlyX3BoeV9saWIuY2ApLiBUaGlzIGhhcmR3YXJlXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyMywiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjE4LjIwNzQ0MDEwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMzoxOC4yMDc0ODUzMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8dvq8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 19:20:52 +0000 UTC FinishedAt: 2026-09-08 19:23:20 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODk1YjRiY2I0YWQ1MGUxMWEwNjljMWE5ZTRlODAzYWFjNTdlZWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNDQzMzFkODAzMTViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5AQCAtMCwwICYjNDM7MSwxMTkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xuJiM0MzsgIGZpcm13YXJlIGZyb20gdm9sYXRpbGUgUkFNLiBUaGUgY2hpcCBhbnN3ZXJzIGFuIE1ESU8gYWRkcmVzcyBmcm9tXG4mIzQzOyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXG4mIzQzOyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cbiYjNDM7XG4mIzQzOyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxuJiM0MzsgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcbiYjNDM7ICBidXMsIGFuZCBvbmx5IHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcuXG4mIzQzO1xuJiM0MzsgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcbiYjNDM7ICBmaXJtd2FyZSBSQU0uIEl0IHRoZXJlZm9yZSBiZWxvbmdzIHRvIHRoaXMgbm9kZTogYSByZXNldCBkZXNjcmliZWQgb25cbiYjNDM7ICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlclxuJiM0MzsgIHRoZSBjb3JlIGlzIGRvaW5nLlxuJiM0MztcbiYjNDM7ICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG4mIzQzOyAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm1cbiYjNDM7ICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbiYjNDM7ICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICAkbm9kZW5hbWU6XG4mIzQzOyAgICBwYXR0ZXJuOiBcJiMzNDtebWN1QFswLTlhLWZdJiM0MzskXCYjMzQ7XG4mIzQzO1xuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWdwaW9zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXG4mIzQzOyAgICAgIE1EMzIgY29yZS5cbiYjNDM7XG4mIzQzOyAgcmVzZXQtYXNzZXJ0LXVzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4mIzQzOyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cbiYjNDM7XG4mIzQzOyAgcmVzZXQtZGVhc3NlcnQtdXM6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4mIzQzO1xuJiM0MzsgIG1kaW86XG4mIzQzOyAgICAkcmVmOiBtZGlvLnlhbWwjXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXRcbiYjNDM7ICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxuJiM0MzsgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cbiYjNDM7XG4mIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgJiMzOTteZXRoZXJuZXQtcGh5QFswLTlhLWZdJiM0MzskJiMzOTs6XG4mIzQzOyAgICAgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICAgICAgJHJlZjogYWlyb2hhLGVuODgxMWgueWFtbCNcbiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbiYjNDM7ICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcbiYjNDM7ICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXRzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXG4mIzQzOyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4mIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxuJiM0MztcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBtZGlvXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgbWN1QGQge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1XCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2cGlvIDE0IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBldGhlcm5ldC1waHlAZCB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOlx0U3VwcG9ydGVkXG4gRjpcdGZzL2Fpby5jXG4gRjpcdGluY2x1ZGUvbGludXgvKmFpbyouaFxuIFxuJiM0MztBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbiYjNDM7TTpcdEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuJiM0MztGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuJiM0MztcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBXG4gXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gXHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuIFxuJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX01ESU9cbiYjNDM7XHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuJiM0MztcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuJiM0MztcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXG4mIzQzO1x0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcbiYjNDM7XHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbiYjNDM7XHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxuJiM0MztcdCAgbGVmdCBydW5uaW5nLlxuJiM0MztcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjRpIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbiBvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuIFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcdFx0JiM0Mzs9IG1kaW8tYWlyb2hhLm9cbiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpXHQmIzQzOz0gbWRpby1haXJvaGEtZW44ODExaC5vXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0JiM0Mzs9IG1kaW8tYmNtLWlwcm9jLm9cbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzIyNDU1ODkxNDcyN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbkBAIC0wLDAgJiM0MzsxLDM4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbiYjNDM7ICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVNcdDEwMDBcbiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1x0NjAwMDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbjg4MTFoX21jdSB7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBvbGxfbXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbiYjNDM7XHR1MzIgZndfdmVyc2lvbjtcbiYjNDM7XHRib29sIHdhcm5lZDtcbiYjNDM7XHRib29sIGZ3X3J1bm5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0aW50IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuJiM0MztcdFx0XHRcdFx0dmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4mIzQzO1x0ICogZGV0YWNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWJ1cykge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O2Fpcm9oYS1lbjg4MTFoXCYjMzQ7O1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUoZGV2KSk7XG4mIzQzO1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4mIzQzO1x0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWQpIHtcbiYjNDM7XHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxuJiM0MztcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1jdS1cdTAwM2VidXMgPSBidXM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXG4mIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWN1LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1cylcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnVzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKSB7XG4mIzQzO1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4mIzQzO1x0XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAhIWNoaXApO1xuJiM0MztcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWN1LVx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cdTAwM2V3YWl0ZWRfbXMpO1xuJiM0MztcdFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcbiYjNDM7XHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4mIzQzO1x0XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0XHRtY3UtXHUwMDNld2FpdGVkX21zID0gMDtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbiYjNDM7XHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzXG4mIzQzO1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbWN1LVx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdGlmICghbWN1LVx1MDAzZXdhcm5lZCBcdTAwMjZcdTAwMjYgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xuJiM0MztcdFx0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4mIzQzO1x0XHRcdFx0IEVOODgxMUhfTUQzMl9EU1AsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbiYjNDM7XHRcdFx0XHQgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcbiYjNDM7XHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuJiM0MztcdCAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlXG4mIzQzO1x0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1jdS1cdTAwM2Vmd19ydW5uaW5nIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZXBvbGxfbXMgPSBtaW4obWN1LVx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcbiYjNDM7XHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbiYjNDM7XHRtY3UtXHUwMDNld2FpdGVkX21zICYjNDM7PSBtY3UtXHUwMDNlcG9sbF9tcztcbiYjNDM7XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4mIzQzO1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVx1MDAzZXBvbGxfbXMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtXHUwMDNlbWRpb2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbWN1LVx1MDAzZXJlc2V0X2dwaW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXHUwMDNlcmVzZXRfZ3BpbykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyZXNldC1hc3NlcnQtdXNcJiMzNDssIFx1MDAyNmFzc2VydF91cyk7XG4mIzQzO1x0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7cmVzZXQtZGVhc3NlcnQtdXNcJiMzNDssIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXHUwMDNlcmVzZXRfZ3BpbywgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbiYjNDM7XHRpZiAoZGVhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtY3UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVFxuJiM0MztcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFVixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXG5cJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xuJiM0MztcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfQVNJUyk7XG4mIzQzO1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LVx1MDAzZXJlc2V0X2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuJiM0MztcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVx1MDAzZXJlc2V0X2dwaW8sIFwmIzM0O0VOODgxMUggcmVzZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xuJiM0MztcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuJiM0MztcdCAqIGEgc3VzcGVuZGluZyBidXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VidXMpIHtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2VidXMgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBvbmUgYW5kIGNhbGxzIHBoeV9pbml0X2h3KCksIHdoaWNoIG5lZWRzIHRoZSBmaXJtd2FyZSBieSB0aGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgISFjaGlwKTtcbiYjNDM7XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4mIzQzO1x0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbiYjNDM7XHRcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcbiYjNDM7XHRcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0bWN1LVx1MDAzZWZ3X3J1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgPSAwO1xuJiM0MztcdFx0bWN1LVx1MDAzZXdhcm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuJiM0MztcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXG4mIzQzO1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbiYjNDM7XHRcdC8qIFRlYXJpbmcgdGhlIGNoaWxkIGJ1cyBkb3duIHVuZGVyIGFuIGF0dGFjaGVkIFBIWSBpcyBub3RcbiYjNDM7XHRcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSAmIzQzOzIwLDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpblwmIzM0O1xuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVx0XCYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwmIzM0O2Fpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXCYjMzQ7XG4gXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVx0MHgwMDAwMDAwMFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXHQweDAwMTAwMDAwXG4tXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1x0XHQweDFkXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1x0R0VOTUFTSyg0LCAyKVxuQEAgLTQ0LDggJiM0MzszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCAmIzQzOzEwMCw2IEBAXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXHRcdDB4M2IzMFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcdFx0XHRCSVQoMClcbiBcbi0jZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2Ncbi1cbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcdFx0MHhjYTBmOFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFx0XHRCSVQoMClcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXHRcdEJJVCgxKVxuQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBAXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cdFx0XHQweGNmOTU4XG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cdFx0XHRCSVQoMjYpXG4gXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVx0XHQweDBmMDAxOFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFx0XHQweDBcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcdFx0MHg4MDAwMDBcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcdFx0QklUKDExKVxuLVxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcdFx0MHhmMDIwY1xuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcdFx0MHhmMDIxOFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcdFx0MHhmMDIxY1xuQEAgLTI3MCw4NiAmIzQzOzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCAmIzQzOz0gNCkge1xuLVx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXQgJiM0MzsgMl0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmZ3LVx1MDAzZWRhdGFbb2Zmc2V0XSk7XG4tXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLXtcbi1cdGludCBzYXZlZF9wYWdlO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4tXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbi1cbi1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGZhbHNlKTtcbiBcbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xuLVx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuLVx0XHRcdFx0XHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcbi1cdFx0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuLVx0XHRcdFx0XHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XFxuXCYjMzQ7LCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuQEAgLTQxMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbiYjNDM7XHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01MDcsNTQgJiM0Mzs0MTksMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIFx1MDAyNnByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFxuQEAgLTExNTYsOCAmIzQzOzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbi1cdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbiYjNDM7XHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcbiBcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbkBAIC04LDM3ICYjNDM7OCw0MiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4mIzQzO1x0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiBcdGlmIChwYnVzX2RhdGFfaGlnaCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xuIFxuLVx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuJiM0MztcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiYjNDM7XHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4mIzQzO1x0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4gXHRpZiAocGJ1c19kYXRhX2xvdyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XG4gXG5AQCAtMTEyLDIzICYjNDM7MTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuJiM0MztcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0xNDQsNyAmIzQzOzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbkBAIC0xODMsOCAmIzQzOzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4gXHRcdFx0XHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XG5AQCAtMTk0LDYgJiM0MzsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTtcbiBcbiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuJiM0MztcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc2F2ZWRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuJiM0MztcdFx0XHRcdFx0ICBzYXZlZF9wYWdlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZXN0b3JlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByZXN0b3JlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmVzdGVkKVxuJiM0MztcdFx0bWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgZnctXHUwMDNlc2l6ZSkge1xuJiM0MztcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuJiM0MztcbiYjNDM7XHRcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmdy1cdTAwM2VkYXRhICYjNDM7IGRvbmUsIGNodW5rKTtcbiYjNDM7XHRcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGJ1c19kYXRhKTtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogbW1kX3BoeV9yZWFkKCkgZHJvcHMgdGhlIGVycm9ycyBmcm9tIHRoZSB0aHJlZSB3cml0ZXMgdGhhdCBzZWxlY3QgdGhlXG4mIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfbW1kX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MTYgZGV2YWQsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IGFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxuJiM0MztcdFx0XHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XG4mIzQzO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXG4mIzQzO1x0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlIFx1MDAzYyAwIHx8XG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuJiM0MztcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZWdfdmFsdWUgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcbiYjNDM7XG4mIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0XHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICpmd192ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxuJiM0MztcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcXG5cJiMzNDssICpmd192ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xuJiM0MztcbiYjNDM7YWlyX2Z3X2Rvd25sb2FkX3JlbDE6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXJcbiYjNDM7XHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4mIzQzO1xuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuQEAgLTEwLDEyICYjNDM7MTAsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcdFx0MHgxZlxuIFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXHRcdDB4MDAwMFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0MHgwMDAxXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFx0XHQweDAwMDRcbiBcbiYjNDM7LyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cbiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1x0XHQyMzA0XG4mIzQzO1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgJiM0MzszNiwyMCBAQFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFx0XHQweDE3XG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcdFx0MHgxOFxuIFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNXHRcdFx0MHgwMDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4mIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXHRcdDB4ODAwOVxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2NcbiYjNDM7XG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgYWlyX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiBcbiYjNDM7c3RydWN0IGZpcm13YXJlO1xuJiM0MztcbiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcdTAwM2Nsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZGlvX2RldmljZTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluXCYjMzQ7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XHRcJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxuJiM0MztcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdF9fcHJpbnRmKDIsIDMpO1xuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NWI0YmNiNGFkNTBlMTFhMDY5YzFhOWU0ZTgwM2FhYzU3ZWVmNTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE5OjIyOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjQ0MzMxZDgwMzE1YgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKQEAgLTAsMCAmIzQzOzEsMTE5IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzCiYjNDM7ICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbQomIzQzOyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuCiYjNDM7ICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLgomIzQzOwomIzQzOyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZAomIzQzOyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudAomIzQzOyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLgomIzQzOwomIzQzOyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZQomIzQzOyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uCiYjNDM7ICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlcgomIzQzOyAgdGhlIGNvcmUgaXMgZG9pbmcuCiYjNDM7CiYjNDM7ICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuCiYjNDM7ICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybQomIzQzOyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzCiYjNDM7ICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICAkbm9kZW5hbWU6CiYjNDM7ICAgIHBhdHRlcm46ICYjMzQ7Xm1jdUBbMC05YS1mXSYjNDM7JCYjMzQ7CiYjNDM7CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1CiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICByZXNldC1ncGlvczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhlIEdQSU8gcGhhbmRsZSBhbmQgc3BlY2lmaWVyIGZvciB0aGUgcmVzZXQgc2lnbmFsIHdpcmVkIHRvIHRoZQomIzQzOyAgICAgIE1EMzIgY29yZS4KJiM0MzsKJiM0MzsgIHJlc2V0LWFzc2VydC11czoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXMKJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuCiYjNDM7CiYjNDM7ICByZXNldC1kZWFzc2VydC11czoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpcwomIzQzOyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC4KJiM0MzsKJiM0MzsgIG1kaW86CiYjNDM7ICAgICRyZWY6IG1kaW8ueWFtbCMKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXQKJiM0MzsgICAgICB0aGUgc2FtZSBhZGRyZXNzIHRoaXMgbm9kZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50IGJ1cy4gT25seSB0aGF0CiYjNDM7ICAgICAgb25lIGFkZHJlc3MgaXMgcGFzc2VkIHRocm91Z2guCiYjNDM7CiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICYjMzk7XmV0aGVybmV0LXBoeUBbMC05YS1mXSYjNDM7JCYjMzk7OgomIzQzOyAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAkcmVmOiBhaXJvaGEsZW44ODExaC55YW1sIwomIzQzOyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzOyAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgcmVzZXQtZ3Bpb3M6IGZhbHNlCiYjNDM7ICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXM6IGZhbHNlCiYjNDM7ICAgICAgICAgIHJlc2V0czogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkCiYjNDM7ICAgICAgICAgIGhlcmUgd291bGQgYmUgcHVsc2VkIGJ5IHRoaXMgbm9kZSYjMzk7cyBvd24gbGlmZWN5Y2xlLCBhbmQgdGhhdCBlcmFzZXMKJiM0MzsgICAgICAgICAgdGhlIGZpcm13YXJlIHRoYXQgY3JlYXRlZCB0aGlzIFBIWS4KJiM0MzsKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSBtZGlvCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIG1jdUBkIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDthaXJvaGEsZW44ODExaC1tY3UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MHhkJmd0OzsKJiM0MzsgICAgICAgICAgICByZXNldC1ncGlvcyA9ICZsdDsmYW1wO3BpbyAxNCBHUElPX0FDVElWRV9MT1cmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlc2V0LWFzc2VydC11cyA9ICZsdDsxMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSAmbHQ7MjAwMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIG1kaW8gewomIzQzOyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMSYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzB4ZCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gJmx0OyZhbXA7cGlvIDE1IElSUV9UWVBFX0xFVkVMX0xPVyZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOglTdXBwb3J0ZWQKIEY6CWZzL2Fpby5jCiBGOglpbmNsdWRlL2xpbnV4LyphaW8qLmgKIAomIzQzO0FJUk9IQSBFTjg4MTFIIE1DVSBNRElPIERSSVZFUgomIzQzO006CUFsZWtzZWkgU3Zpcmlka2luICZsdDtmQGxleC5sYSZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwomIzQzO0Y6CWluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmgKJiM0MzsKIEFJUk9IQSBFVEhFUk5FVCBEUklWRVIKIE06CUxvcmVuem8gQmlhbmNvbmkgJmx0O2xvcmVuem9Aa2VybmVsLm9yZyZndDsKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKaW5kZXggZDQ0Mjc4ZjI2ZmFiZS4uMzNlZmM2YmM4NzVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQQogCSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBNRElPIGJ1c3NlcyBmb3VuZCBpbiB0aGUKIAkgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLgogCiYjNDM7Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUgKJiM0MzsJdHJpc3RhdGUgJiMzNDtBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBzdXBwb3J0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBPRl9NRElPCiYjNDM7CWRlcGVuZHMgb24gRldfTE9BREVSCiYjNDM7CXNlbGVjdCBBSVJfTkVUX1BIWUxJQgomIzQzOwlpbXBseSBBSVJfRU44ODExSF9QSFkKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuCiYjNDM7CSAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5CiYjNDM7CSAgYmVjb21lcyBhbiBFdGhlcm5ldCBQSFkgYWZ0ZXJ3YXJkcy4gVGhlIGRyaXZlciBkb3dubG9hZHMgdGhhdAomIzQzOwkgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlcgomIzQzOwkgIGxlZnQgcnVubmluZy4KJiM0MzsKIGNvbmZpZyBNRElPX1NVTjRJCiAJdHJpc3RhdGUgJiMzNDtBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydCYjMzQ7CiAJZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUKaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlCkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKQkmIzQzOz0gZndub2RlX21kaW8ubwogb2JqLSQoQ09ORklHX09GX01ESU8pCQkmIzQzOz0gb2ZfbWRpby5vCiAKIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSkJCSYjNDM7PSBtZGlvLWFpcm9oYS5vCiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpCSYjNDM7PSBtZGlvLWFpcm9oYS1lbjg4MTFoLm8KIG9iai0kKENPTkZJR19NRElPX0FTUEVFRCkJCSYjNDM7PSBtZGlvLWFzcGVlZC5vCiBvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpCQkmIzQzOz0gbWRpby1iY20taXByb2Mubwogb2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQykJCSYjNDM7PSBtZGlvLWJjbS11bmltYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43MjI0NTU4OTE0NzI3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMKQEAgLTAsMCAmIzQzOzEsMzgyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwomIzQzOy8qCiYjNDM7ICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8KJiM0MzsgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVMJMTAwMAomIzQzOyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01BWF9NUwkzMDAwMAomIzQzOyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TCTYwMDAwCiYjNDM7CiYjNDM7c3RydWN0IGVuODgxMWhfbWN1IHsKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3BvbGw7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CXVuc2lnbmVkIGludCBwb2xsX21zOwomIzQzOwl1bnNpZ25lZCBpbnQgd2FpdGVkX21zOwomIzQzOwl1MzIgZndfdmVyc2lvbjsKJiM0MzsJYm9vbCB3YXJuZWQ7CiYjNDM7CWJvb2wgZndfcnVubmluZzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LSZndDttZGlvZGV2LSZndDtidXMsIGFkZHIsIHJlZ251bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgcmVnbnVtLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsCiYjNDM7CQkJCWludCByZWdudW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX2M0NV9yZWFkX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsCiYjNDM7CQkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChhZGRyICE9IG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpb2J1c19jNDVfd3JpdGVfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLAomIzQzOwkJCQkJdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LSZndDttZGlvZGV2LSZndDtidXM7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWN1LSZndDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LSZndDtvZl9ub2RlLCAmIzM0O21kaW8mIzM0Oyk7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogTm90IGRldm06IHRoaXMgaXMgcmV0cmllZCwgYW5kIGEgZGV2bSBidXMgd291bGQgb25seSBiZSBmcmVlZCBhdAomIzQzOwkgKiBkZXRhY2guCiYjNDM7CSAqLwomIzQzOwlidXMgPSBtZGlvYnVzX2FsbG9jKCk7CiYjNDM7CWlmICghYnVzKSB7CiYjNDM7CQlvZl9ub2RlX3B1dChucCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlidXMtJmd0O25hbWUgPSAmIzM0O2Fpcm9oYS1lbjg4MTFoJiMzNDs7CiYjNDM7CXNucHJpbnRmKGJ1cy0mZ3Q7aWQsIE1JSV9CVVNfSURfU0laRSwgJiMzNDslcyYjMzQ7LCBkZXZfbmFtZShkZXYpKTsKJiM0MzsJYnVzLSZndDtwcml2ID0gbWN1OwomIzQzOwlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJaWYgKHBhcmVudC0mZ3Q7cmVhZCkgewomIzQzOwkJYnVzLSZndDtyZWFkID0gZW44ODExaF9tY3VfcmVhZDsKJiM0MzsJCWJ1cy0mZ3Q7d3JpdGUgPSBlbjg4MTFoX21jdV93cml0ZTsKJiM0MzsJfQomIzQzOwlpZiAocGFyZW50LSZndDtyZWFkX2M0NSkgewomIzQzOwkJYnVzLSZndDtyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1OwomIzQzOwkJYnVzLSZndDt3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTsKJiM0MzsJb2Zfbm9kZV9wdXQobnApOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7ICFtZGlvYnVzX2dldF9waHkoYnVzLCBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpKSB7CiYjNDM7CQkvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZQomIzQzOwkJICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LgomIzQzOwkJICovCiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWRpb2J1c19mcmVlKGJ1cyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7YnVzID0gYnVzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2VyaWFsaXNlIHdpdGggdGhlIFBIWSBiZWxvdywgd2hpY2ggcmVhY2hlcyB0aGUgc2FtZSByZWdpc3RlcnMgdW5kZXIKJiM0MzsgKiB0aGlzIGxvY2sgdGhyb3VnaCBwaHlfc2VsZWN0X3BhZ2UoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IG1paV9idXMgKmVuODgxMWhfbWN1X2NoaXBfbG9jayhzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtJmd0O2J1czsKJiM0MzsKJiM0MzsJaWYgKGJ1cykKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBidXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpCiYjNDM7ewomIzQzOwlpZiAoYnVzKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKJiM0MzsJCQkJCSAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21jdS0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqY2hpcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFtY3UtJmd0O2Z3X3J1bm5pbmcpIHsKJiM0MzsJCWNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTsKJiM0MzsJCXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS0mZ3Q7bWRpb2RldiwgJmFtcDttY3UtJmd0O2Z3X3ZlcnNpb24sCiYjNDM7CQkJCQkgICAgICAhIWNoaXApOwomIzQzOwkJZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7ZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcbiYjMzQ7LAomIzQzOwkJCW1jdS0mZ3Q7ZndfdmVyc2lvbiwgbWN1LSZndDt3YWl0ZWRfbXMpOwomIzQzOwkJcmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzoKJiM0MzsJCSAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2RiZyhkZXYsICYjMzQ7bm90IGNhY2hlZCwgcmVzdW1lIHdpbGwgd2FudCB0aGUgZmlsZXM6ICVwZVxuJiMzNDssCiYjNDM7CQkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQltY3UtJmd0O2Z3X3J1bm5pbmcgPSB0cnVlOwomIzQzOwkJbWN1LSZndDtwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUzsKJiM0MzsJCW1jdS0mZ3Q7d2FpdGVkX21zID0gMDsKJiM0MzsJCW1jdS0mZ3Q7d2FybmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVzdW1lIHJlLXJ1bnMgdGhlIGRvd25sb2FkLCBzbyB0aGUgYnVzIGNhbiBhbHJlYWR5IGJlIGhlcmUsIGFuZAomIzQzOwkgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzCiYjNDM7CSAqIG1pc3NpbmcsIHNvIGEgZmFpbHVyZSBpcyBub3QgbmVjZXNzYXJpbHkgcGVybWFuZW50LgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbWN1LSZndDtidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwlpZiAoIW1jdS0mZ3Q7d2FybmVkICZhbXA7JmFtcDsgbWN1LSZndDt3YWl0ZWRfbXMgJmd0Oz0gRU44ODExSF9GV19XQVJOX01TKSB7CiYjNDM7CQlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bm8gZmlybXdhcmUgYWZ0ZXIgJXVtcyBvZiB3YWl0aW5nIGZvciAlcyBhbmQgJXM6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBtY3UtJmd0O3dhaXRlZF9tcywgRU44ODExSF9NRDMyX0RNLAomIzQzOwkJCQkgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlkZXZfd2FybihkZXYsICYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIsIG1jdS0mZ3Q7d2FpdGVkX21zLAomIzQzOwkJCQkgRVJSX1BUUihyZXQpKTsKJiM0MzsJCW1jdS0mZ3Q7d2FybmVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYXN0IGl0cyBidWRnZXQsIG9ubHkgYSBkZWZlcnJhbCB3aWxsIGNoYW5nZSBvbiBpdHMgb3duOiBldmVyeQomIzQzOwkgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJTwomIzQzOwkgKiBjb3JlIGFuZCBpdHMgdWV2ZW50cyBmb3IgdGhlIHVwdGltZS4gRmlybXdhcmUgZmlsZXMgYXJlIHRoZQomIzQzOwkgKiBleGNlcHRpb24sIHNpbmNlIHRoZXkgY2FuIGJlIGluc3RhbGxlZCBhdCBhbnkgdGltZS4KJiM0MzsJICovCiYjNDM7CWlmIChtY3UtJmd0O2Z3X3J1bm5pbmcgJmFtcDsmYW1wOyByZXQgIT0gLUVQUk9CRV9ERUZFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBtY3UtJmd0O3dhaXRlZF9tcyAmZ3Q7PSBFTjg4MTFIX0ZXX1dBUk5fTVMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7cG9sbF9tcyA9IG1pbihtY3UtJmd0O3BvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTsKJiM0MzsJLyogQ291bnQgdGhlIHNsZWVwIGFoZWFkOiB0aGUgZmlyc3QgcnVuIHdhcyBpbW1lZGlhdGUuICovCiYjNDM7CW1jdS0mZ3Q7d2FpdGVkX21zICYjNDM7PSBtY3UtJmd0O3BvbGxfbXM7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmYW1wO21jdS0mZ3Q7ZndfcG9sbCwKJiM0MzsJCQkgICBtc2Vjc190b19qaWZmaWVzKG1jdS0mZ3Q7cG9sbF9tcykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqLwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gbWN1LSZndDttZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJdTMyIGFzc2VydF91cyA9IDAsIGRlYXNzZXJ0X3VzID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFtY3UtJmd0O3Jlc2V0X2dwaW8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXQKJiM0MzsJICogaXMgYWxyZWFkeSBkZWFzc2VydGVkLiBBbiBhc3NlcnRlZCBvbmUgaXMgd2h5IHRoZSByZWFkIGZhaWxlZC4KJiM0MzsJICovCiYjNDM7CWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS0mZ3Q7cmVzZXRfZ3BpbykgJmx0Oz0gMCkgewomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcbiYjMzQ7LAomIzQzOwkJCXJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgJiMzNDtyZXNldC1hc3NlcnQtdXMmIzM0OywgJmFtcDthc3NlcnRfdXMpOwomIzQzOwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O3Jlc2V0LWRlYXNzZXJ0LXVzJiMzNDssICZhbXA7ZGVhc3NlcnRfdXMpOwomIzQzOwomIzQzOwlyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KG1jdS0mZ3Q7cmVzZXRfZ3BpbywgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFzc2VydF91cykKJiM0MzsJCWZzbGVlcChhc3NlcnRfdXMpOwomIzQzOwomIzQzOwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LSZndDtyZXNldF9ncGlvLCAwKTsKJiM0MzsJaWYgKGRlYXNzZXJ0X3VzKQomIzQzOwkJZnNsZWVwKGRlYXNzZXJ0X3VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3U7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiYjNDM7CiYjNDM7CW1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbWN1KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7bWRpb2RldiA9IG1kaW9kZXY7CiYjNDM7CW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTsKJiM0MzsKJiM0MzsJLyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVAomIzQzOwkgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLgomIzQzOwkgKi8KJiM0MzsJbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7bWRpbyYjMzQ7KTsKJiM0MzsJaWYgKCFucCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKJiM0MzsJCQkJICAgICAmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcbiYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQobnApOwomIzQzOwomIzQzOwkvKiBUaGUgY29yZSBjbGFpbXMgcmVzZXQtZ3Bpb3Mgb25seSBmb3IgZGV2aWNlcyBmbGFnZ2VkIGFzIFBIWXMuICovCiYjNDM7CW1jdS0mZ3Q7cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgJiMzNDtyZXNldCYjMzQ7LCBHUElPRF9BU0lTKTsKJiM0MzsJaWYgKElTX0VSUihtY3UtJmd0O3Jlc2V0X2dwaW8pKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKG1jdS0mZ3Q7cmVzZXRfZ3BpbyksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHJlc2V0IEdQSU9cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG1jdS0mZ3Q7cmVzZXRfZ3BpbykKJiM0MzsJCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKG1jdS0mZ3Q7cmVzZXRfZ3BpbywgJiMzNDtFTjg4MTFIIHJlc2V0JiMzNDspOwomIzQzOwomIzQzOwllbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpOwomIzQzOwomIzQzOwltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO21jdS0mZ3Q7ZndfcG9sbCwgZW44ODExaF9tY3VfZndfcG9sbCk7CiYjNDM7CS8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvbgomIzQzOwkgKiBhIHN1c3BlbmRpbmcgYnVzLgomIzQzOwkgKi8KJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7CiYjNDM7CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO21jdS0mZ3Q7ZndfcG9sbCk7CiYjNDM7CWlmIChtY3UtJmd0O2J1cykgewomIzQzOwkJbWRpb2J1c191bnJlZ2lzdGVyKG1jdS0mZ3Q7YnVzKTsKJiM0MzsJCW1kaW9idXNfZnJlZShtY3UtJmd0O2J1cyk7CiYjNDM7CQltY3UtJmd0O2J1cyA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmNoaXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgdG8gcmVkbzogdGhlIHBvbGwgaXMgYXJtZWQgYW5kIHRoYXdzIHdpdGggZXZlcnl0aGluZyBlbHNlLiAqLwomIzQzOwlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBOb3Qgb24gdGhlIHdvcmtxdWV1ZTogYSBEU0EgcG9ydCYjMzk7cyBQSFkgcmVzdW1lcyByaWdodCBhZnRlciB0aGlzCiYjNDM7CSAqIG9uZSBhbmQgY2FsbHMgcGh5X2luaXRfaHcoKSwgd2hpY2ggbmVlZHMgdGhlIGZpcm13YXJlIGJ5IHRoZW4uCiYjNDM7CSAqLwomIzQzOwljaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7CiYjNDM7CWVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCAhIWNoaXApOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtJmd0O21kaW9kZXYsICZhbXA7bWN1LSZndDtmd192ZXJzaW9uLCAhIWNoaXApOwomIzQzOwllbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCS8qIFRoZSByZWxvYWQgcmVzdG9yZXMgdGhpcyBjaGlwLCBub3QgdGhlIFBIWSBiZWxvdyBpdDogaXRzCiYjNDM7CQkgKiBvd24gcmVzdW1lIGhhcyBhbHJlYWR5IGZhaWxlZCBieSB0aGVuIGFuZCBub3RoaW5nIGNhbGxzCiYjNDM7CQkgKiBwaHlfaW5pdF9odygpIHR3aWNlLgomIzQzOwkJICovCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKHJldCkpOwomIzQzOwkJbWN1LSZndDtmd19ydW5uaW5nID0gZmFsc2U7CiYjNDM7CQltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwkJbWN1LSZndDt3YWl0ZWRfbXMgPSAwOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSBmYWxzZTsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCAmYW1wO21jdS0mZ3Q7ZndfcG9sbCwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoZW44ODExaF9tY3VfcG1fb3BzLCBOVUxMLCBlbjg4MTFoX21jdV9yZXN1bWUpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IGVuODgxMWhfbWN1X3JlbW92ZSwKJiM0MzsJLm1kaW9kcnYuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O2Fpcm9oYS1lbjg4MTFoLW1jdSYjMzQ7LAomIzQzOwkJLm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsCiYjNDM7CQkucG0gPSBwbV9zbGVlcF9wdHIoJmFtcDtlbjg4MTFoX21jdV9wbV9vcHMpLAomIzQzOwkJLyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdAomIzQzOwkJICogc29tZXRoaW5nIHRoaXMgZHJpdmVyIGNhbiBtYWtlIHNhZmUgb24gaXRzIG93bi4KJiM0MzsJCSAqLwomIzQzOwkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9ETSk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMTZhOTE3MWNiODM4NC4uNjVmYTE3MDdmNTdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTIwLDIxICYjNDM7MjAsMTUgQEAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthaXJfcGh5X2xpYi5oJiMzNDsKIAogI2RlZmluZSBFTjg4MTFIX1BIWV9JRAkJMHgwM2EyYTQxMQogI2RlZmluZSBBTjg4MTFIQl9QSFlfSUQJCTB4YzBmZjA0YTAKIAotI2RlZmluZSBFTjg4MTFIX01EMzJfRE0JCSYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluJiMzNDsKLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUAkmIzM0O2Fpcm9oYS9FdGhNRDMyLkRTUC5iaW4mIzM0OwogI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNCSYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpbiYjMzQ7CiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRFNQCSYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW4mIzM0OwogCi0jZGVmaW5lIEFJUl9GV19BRERSX0RNCTB4MDAwMDAwMDAKLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQCTB4MDAxMDAwMDAKLQogLyogTUlJIFJlZ2lzdGVycyAqLwogI2RlZmluZSBBSVJfQVVYX0NUUkxfU1RBVFVTCQkweDFkCiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLCUdFTk1BU0soNCwgMikKQEAgLTQ0LDggJiM0MzszOCw2IEBACiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwCTB4YwogCiAvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi8KLSNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTCQkweDgwMDkKLSNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWQkJCTB4MDIKIAogI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMAkJMHg4MDBiCiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8xCQkweDgwMGMKQEAgLTEwOCw4ICYjNDM7MTAwLDYgQEAKICNkZWZpbmUgRU44ODExSF8yUDVHX0xQQQkJMHgzYjMwCiAjZGVmaW5lICAgRU44ODExSF8yUDVHX0xQQV8yUDVHCQkJQklUKDApCiAKLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OCQkweDNiM2MKLQogI2RlZmluZSBFTjg4MTFIX1BPTEFSSVRZCQkweGNhMGY4CiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9UWF9OT1JNQUwJCUJJVCgwKQogI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfUlhfUkVWRVJTRQkJQklUKDEpCkBAIC0xMjIsMTIgJiM0MzsxMTIsNiBAQAogI2RlZmluZSBFTjg4MTFIX0NMS19DR00JCQkweGNmOTU4CiAjZGVmaW5lICAgRU44ODExSF9DTEtfQ0dNX0NLTwkJCUJJVCgyNikKIAotI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMQkJMHgwZjAwMTgKLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVAkJMHgwCi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNICQkweDEKLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzIJCTB4ODAwMDAwCi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcJCUJJVCgxMSkKLQogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fU0VUMQkJMHhmMDIwYwogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fTU9OMgkJMHhmMDIxOAogI2RlZmluZSBBTjg4MTFIQl9DUkNfUE1fTU9OMwkJMHhmMDIxYwpAQCAtMjcwLDg2ICYjNDM7MjU0LDE0IEBAIHN0YXRpYyBpbnQgX19haXJfcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJICAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLAotCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKLXsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQ7Ci0JdTE2IHZhbDsKLQotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfSU5DUik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgJmx0OyBmdy0mZ3Q7c2l6ZTsgb2Zmc2V0ICYjNDM7PSA0KSB7Ci0JCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2Z3LSZndDtkYXRhW29mZnNldCAmIzQzOyAyXSk7Ci0JCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2Z3LSZndDtkYXRhW29mZnNldF0pOwotCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsCi0JCQkgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKLXsKLQlpbnQgc2F2ZWRfcGFnZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmdy0mZ3Q7c2l6ZSAlIDQpIHsKLQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxuJiMzNDssCi0JCQkgICBmdy0mZ3Q7c2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7Ci0KLQlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgIGFkZHJlc3MsIHJldCk7Ci0JfQotCi0JcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBzYXZlZF9wYWdlLCByZXQpOwotfQotCiBzdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQlpbnQgcmV0LCByZWdfdmFsdWU7CiYjNDM7CWludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgZmFsc2UpOwogCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKLQkJCQkJIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqLwotCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwKLQkJCQkJRU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsCi0JCQkJCXJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSwKLQkJCQkJMjAwMDAsIDc1MDAwMDAsIHRydWUpOwotCWlmIChyZXQpIHsKLQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7TUNVIG5vdCByZWFkeTogMHgleFxuJiMzNDssIHJlZ192YWx1ZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLApAQCAtNDExLDcgJiM0MzszMjMsNyBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsICBmdyk7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUwNyw1NCAmIzQzOzQxOSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAogc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO2Z3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsCi0JCQkJCSBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLAotCQkJCQkgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLAotCQkJCQkgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDApOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7Ci0KLQlyZXQgPSBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCWVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpOwotCi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OgotCXJlbGVhc2VfZmlybXdhcmUoZncyKTsKLQotZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6Ci0JcmVsZWFzZV9maXJtd2FyZShmdzEpOwotCiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKCZhbXA7cGh5ZGV2LSZndDttZGlvLCAmYW1wO3ByaXYtJmd0O2Zpcm13YXJlX3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIGZhbHNlKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKIApAQCAtMTE1Niw4ICYjNDM7MTAyNSw4IEBAIHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovCi0JcHJpdi0mZ3Q7bWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTsKJiM0MzsJLyogQWRvcHRlZCBmaXJtd2FyZSB3YXMgbmV2ZXIgcmVzdGFydGVkIGhlcmUuICovCiYjNDM7CXByaXYtJmd0O21jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTsKIAogCS8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi8KIAlwaHlkZXYtJmd0O2M0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jCkBAIC04LDM3ICYjNDM7OCw0MiBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDthaXJfcGh5X2xpYi5oJiMzNDsKIAotc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJCSAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKQogewogCWludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKJiM0MzsJcGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKIAlpZiAocGJ1c19kYXRhX2hpZ2ggJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7CiAKLQlwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiYjNDM7CXBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwogCWlmIChwYnVzX2RhdGFfbG93ICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9sb3c7CiAKQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQkgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YSkpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkJICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCkKIHsKIAlpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7CiAJdTMyIHBidXNfZGF0YV9vbGQsIHBidXNfZGF0YV9uZXc7CiAJaW50IHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsCiYjNDM7CQkJICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7CiYjNDM7CXBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7CiAJaWYgKHBidXNfZGF0YV9oaWdoICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9oaWdoOwogCi0JcGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwomIzQzOwlwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTsKIAlpZiAocGJ1c19kYXRhX2xvdyAmbHQ7IDApCiAJCXJldHVybiBwYnVzX2RhdGFfbG93OwogCkBAIC0xMTIsMjMgJiM0MzsxMTksMjMgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJaWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0NCw3ICYjNDM7MTUxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAlzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwogCiAJaWYgKHNhdmVkX3BhZ2UgJmd0Oz0gMCkgewotCQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIHBidXNfYWRkcmVzcywgcGJ1c19kYXRhKTsKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBwYnVzX2FkZHJlc3MsCiYjNDM7CQkJCQkgICAgICBwYnVzX2RhdGEpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXG4mIzM0OywgX19mdW5jX18sCiAJCQkJICAgcGJ1c19hZGRyZXNzLCByZXQpOwpAQCAtMTYzLDcgJiM0MzsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAlzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwogCiAJaWYgKHNhdmVkX3BhZ2UgJmd0Oz0gMCkgewotCQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsCiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIHBidXNfYWRkcmVzcywKIAkJCQkJICAgICAgIHBidXNfZGF0YSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKQEAgLTE4Myw4ICYjNDM7MTkxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIG1hc2ssCi0JCQkJCQlzZXQpOwomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJCW1hc2ssIHNldCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCQkgICBwYnVzX2FkZHJlc3MsIHJldCk7CkBAIC0xOTQsNiAmIzQzOzIwMiwzNDMgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTsKIAomIzQzO3N0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkJICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MTYgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsCiYjNDM7CQkJICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0ICZsdDsgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHsKJiM0MzsJCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2RhdGFbb2Zmc2V0ICYjNDM7IDJdKTsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXZhbCA9IGdldF91bmFsaWduZWRfbGUxNigmYW1wO2RhdGFbb2Zmc2V0XSk7CiYjNDM7CQlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcGh5X3NlbGVjdF9wYWdlKCkgbmVlZHMgYSBwaHlfZGV2aWNlLCB3aGljaCBkb2VzIG5vdCBleGlzdCB5ZXQuICovCiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7CiYjNDM7CWlmIChzYXZlZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBzYXZlZF9wYWdlOwomIzQzOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAhPSBwYWdlKSB7CiYjNDM7CQlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzYXZlZF9wYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKJiM0MzsJCQkJICAgaW50IHNhdmVkX3BhZ2UsIGludCBwYWdlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmU7CiYjNDM7CiYjNDM7CWlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHsKJiM0MzsJCXJlc3RvcmUgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywKJiM0MzsJCQkJCSAgc2F2ZWRfcGFnZSk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByZXN0b3JlICZsdDsgMCkKJiM0MzsJCQlyZXQgPSByZXN0b3JlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpZiAobmVzdGVkKQomIzQzOwkJbWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbWRpb2Rldl9sb2NrKG1kaW9kZXYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLAomIzQzOwkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBjaHVuaywgZG9uZSA9IDA7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAlIDQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDttZGlvZGV2LSZndDtkZXYsICYjMzQ7ZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxuJiMzNDssCiYjNDM7CQkJZnctJmd0O3NpemUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGRvbmUgJmx0OyBmdy0mZ3Q7c2l6ZSkgewomIzQzOwkJY2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LSZndDtzaXplIC0gZG9uZSwgQUlSX0ZXX0NIVU5LX0JZVEVTKTsKJiM0MzsKJiM0MzsJCWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJCXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsCiYjNDM7CQkJCQkJICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJCWlmIChzYXZlZF9wYWdlICZsdDsgMCkgewomIzQzOwkJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsCiYjNDM7CQkJCQkgICAgICBmdy0mZ3Q7ZGF0YSAmIzQzOyBkb25lLCBjaHVuayk7CiYjNDM7CQkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCQkgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwKJiM0MzsJCQkJCQkgICAgICByZXQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJZG9uZSAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9md193cml0ZV9idWYpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSwKJiM0MzsJCQkJICAgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzYXZlZF9wYWdlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCSAgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhLAomIzQzOwkJCQkgICAgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgc2F2ZWRfcGFnZSwgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzYXZlZF9wYWdlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCSAgICAgICBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkJdTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsCiYjNDM7CQkJCQlib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCQltYXNrLCBzZXQpOwomIzQzOwkJcmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSwKJiM0MzsJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBtbWRfcGh5X3JlYWQoKSBkcm9wcyB0aGUgZXJyb3JzIGZyb20gdGhlIHRocmVlIHdyaXRlcyB0aGF0IHNlbGVjdCB0aGUKJiM0MzsgKiByZWdpc3Rlciwgc28gYSBmYWlsZWQgc2VsZWN0aW9uIHJlYWRzIGEgZGlmZmVyZW50IG9uZSBiYWNrIGFzIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX2Fpcl9tbWRfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUxNiBkZXZhZCwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LSZndDtidXM7CiYjNDM7CWludCBhZGRyID0gbWRpb2Rldi0mZ3Q7YWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBLCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwKJiM0MzsJCQkgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX21kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9NTURfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IGFpcl9tbWRfc3RhdHVzX3JlYWQobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID09IEVOODgxMUhfUEhZX1JFQURZOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCByZWdfdmFsdWU7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKJiM0MzsJCQkJCSAgRU44ODExSF9GV19DVFJMXzFfRklOSVNILCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWQKJiM0MzsJICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSwKJiM0MzsJCQkJcmVnX3ZhbHVlICZsdDsgMCB8fAomIzQzOwkJCQlyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksCiYjNDM7CQkJCTIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmVnX3ZhbHVlICZsdDsgMCkKJiM0MzsJCXJldHVybiByZWdfdmFsdWU7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9kYmcoJmFtcDttZGlvZGV2LSZndDtkZXYsICYjMzQ7TUNVIG5vdCByZWFkeTogMHgleFxuJiMzNDssIHJlZ192YWx1ZSk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpOwomIzQzOwomIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbiwKJiM0MzsJCQkgICAgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLAomIzQzOwkJCQkJCSBmd192ZXJzaW9uLCBuZXN0ZWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWRldl9pbmZvKGRldiwgJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxuJiMzNDssCiYjNDM7CQkJICpmd192ZXJzaW9uKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzIsIEVOODgxMUhfTUQzMl9EU1AsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfcmVsMTsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLAomIzQzOwkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLAomIzQzOwkJCQkJICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRE0sIGZ3MSwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLAomIzQzOwkJCQkJICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCwKJiM0MzsJCQkJCSAgIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLAomIzQzOwkJCQkJIGZ3X3ZlcnNpb24sIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlkZXZfaW5mbyhkZXYsICYjMzQ7TUQzMiBmaXJtd2FyZSB2ZXJzaW9uOiAlMDh4XG4mIzM0OywgKmZ3X3ZlcnNpb24pOwomIzQzOwomIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoZncyKTsKJiM0MzsKJiM0MzthaXJfZndfZG93bmxvYWRfcmVsMToKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdzEpOwomIzQzOwomIzQzOwkvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXIKJiM0MzsJICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfZndfZG93bmxvYWQpOwomIzQzOwogaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmgKQEAgLTEwLDEyICYjNDM7MTAsMTkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oJmd0OwomIzQzOwogI2RlZmluZSBBSVJfRVhUX1BBR0VfQUNDRVNTCQkweDFmCiAKICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJECQkweDAwMDAKICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzEJCTB4MDAwMQogI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNAkJMHgwMDA0CiAKJiM0MzsvKiBCeXRlcyB3cml0dGVuIGJldHdlZW4gYnVzIHJlbGVhc2VzLCBzbyB0aGUgb3RoZXIgUEhZcyBvbiBpdCBnZXQgYSB0dXJuLgomIzQzOyAqIEF0IGEgMi41IE1IeiBNREMgdGhpcyBzaXplIGhvbGRzIHRoZSBidXMgZm9yIGFib3V0IDMwIG1zLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgQUlSX0ZXX0NIVU5LX0JZVEVTCQkyMzA0CiYjNDM7CiAvKiBNSUkgUmVnaXN0ZXJzIFBhZ2UgNCovCiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFCQkJMHgxMAogI2RlZmluZSAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQJCTB4MDAwMApAQCAtMjksNiAmIzQzOzM2LDIwIEBACiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gJCTB4MTcKICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfTE9XCQkweDE4CiAKJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNCQkJMHgwMDAwMDAwMAomIzQzOyNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQCQkJMHgwMDEwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzEJCTB4MGYwMDE4CiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUCQkweDAKJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNICQkweDEKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yCQkweDgwMDAwMAomIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HCQlCSVQoMTEpCiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVMJCTB4ODAwOQomIzQzOyNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWQkJCTB4MDIKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTgkJMHgzYjNjCiYjNDM7CiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiAJCQkJdTMyIG1hc2ssIHUzMiBzZXQpOwogaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKQEAgLTM4LDQgJiM0Mzs1OSwxMCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpOwogCiYjNDM7c3RydWN0IGZpcm13YXJlOwomIzQzOwomIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTsKJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7CiYjNDM7CiAjZW5kaWYgLyogX19BSVJfUEhZX0xJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40NDk0ZGM2YzEwMjJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaApAQCAtMCwwICYjNDM7MSwyNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBaXJvaGEgVGVjaG5vbG9neSBDb3JwLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICBMb3Vpcy1BbGV4aXMgRXlyYXVkICZsdDtsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0gKJiM0MzsjZGVmaW5lIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG1kaW9fZGV2aWNlOwomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNCQkJJiMzNDthaXJvaGEvRXRoTUQzMi5kbS5iaW4mIzM0OwomIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUAkJJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluJiMzNDsKJiM0MzsKJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi8KJiM0MztpbnQgYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7CiYjNDM7LyogUmV0dXJucyAxIHdoZW4gaXQgYWRvcHRlZCBmaXJtd2FyZSB0aGF0IHdhcyBhbHJlYWR5IHJ1bm5pbmcuICovCiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLAomIzQzOwkJCSAgICBib29sIG5lc3RlZCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIyODQsNiAmIzQzOzIyODQsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAltdXRleF91bmxvY2soJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzO30KJiM0MzsKIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCV9fcHJpbnRmKDIsIDMpOwogY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzI5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyaWFnZSBUaW1lOiBBaXJvaGEgTURJTyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYW4gQWlyb2hhIEVOODgxMUggTUNVIE1ESU8gZHJpdmVyLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG5ldyBkcml2ZXIgZmlsZSAoYG1kaW8tYWlyb2hhLWVuODgxMWguY2ApLCBzb21lIFBIWSBkcml2ZXIgcmVmYWN0b3JpbmcgKGBhaXJfcGh5X2xpYi5jYCwgYGFpcl9lbjg4MTFoLmNgKSwgRFQgYmluZGluZ3MgKGBhaXJvaGEsZW44ODExaC1tY3UueWFtbGApLCBhbmQgc29tZSBNRElPIGFuZCBQSFktcmVsYXRlZCBoZWxwZXIgYWRkaXRpb25zIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLgoKTm93LCB0cmlhZ2UgdGltZSEgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyByZWFjaGFiaWxpdHkgYW5kIGZ1enphYmlsaXR5LiBUaGUgc3Vic3lzdGVtcyB0b3VjaGVkIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiAobm9uLWV4ZWN1dGFibGUsIHRoYW5rZnVsbHkpLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHNvIG5vdCBleGVjdXRhYmxlKSwgYW5kIGEgaGFuZGZ1bCBvZiBkcml2ZXIgYW5kIGhlYWRlciBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGFuZCBgaW5jbHVkZS9saW51eC9gIHRyZWVzLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCB3aGF0IGFyZSB3ZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZT8gIGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgIGlzIGFuIE1ESU8gZGV2aWNlIGRyaXZlciBmb3IgYW4gQWlyb2hhIEVOODgxMUggUEhZIE1DVS4gVGhlIGBhaXJfZW44ODExaC5jYCBmaWxlIGlzIHRoZSBQSFkgZHJpdmVyIGZvciB0aGF0IHNhbWUgQWlyb2hhIGNoaXAuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYW4gTURJTyBkcml2ZXIgdGhhdCAqdGFsa3MqIHRvIGEgc3BlY2lmaWMgUEhZLgoKVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gd2UgYWN0dWFsbHkgKmdldCogdG8gdGhpcyBpbiBhIHN0YW5kYXJkLCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyAgUmVtZW1iZXIgb3VyIHRyaWFnZSBwaGlsb3NvcGh5IOKAkyByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IE1ESU8gYW5kIFBIWSBkcml2ZXJzLiBXZSBjYW4mIzM5O3QgZnV6eiBjb2RlIHRoYXQgZG9lc24mIzM5O3QgcnVuLgoKTGV0JiMzOTtzIHNlZS4uLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemVzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgaGF2ZSB0byBhc2s6IGRvIHdlIGhhdmUgYWNjZXNzIHRvIHBoeXNpY2FsIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIHRvIHRlc3QgdGhpcz8gUHJvYmFibHkgbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciDigJMgd2UgbmVlZCBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2VzLiBTbywgaXMgYW4gTURJTyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IElzIHRoZXJlIHNvbWUgd2F5IHRvIGNyZWF0ZSBpdCBvciBtb2NrIGl0IGluIHVzZXJzcGFjZT8KClNvLCBiYWNrIHRvIHRoZSBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgYGVuODgxMWhfbWN1X2RyaXZlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhbiBNRElPIGRyaXZlci4gTURJTyBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgZGlzY292ZXJlZCB0aHJvdWdoIERldmljZSBUcmVlICh3aGljaCB3ZSBoYXZlIGEgYmluZGluZyBmb3IhKSwgQUNQSSwgb3IgYSBwbGF0Zm9ybSBNRElPIGJ1cy4gT2theSwgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24geDg2XzY0L2FtZDY0LiAgV2l0aG91dCBhIGRlZGljYXRlZCBEZXZpY2UgVHJlZSBub2RlIG9yIGFuIE1ESU8gYnVzIGluc3RhbnRpYXRlZCwgdGhpcyBkcml2ZXIgd29uJiMzOTt0IGJlIHByb2JlZCBpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4KCldlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNRElPIGRldmljZXMgb3IgUEhZIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBvciBtb2NrZWQgaW4gTGludXggZnJvbSB1c2Vyc3BhY2UuIElmIG5vdCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGhhcmQgJiMzNDtubyYjMzQ7IGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY3VycmVudCB0cmlhZ2UgZ3VpZGVsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGEsZW44ODExaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbD0xMj1kZXNjcmlwdGlvbjogfFxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjctICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjI4OiAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjktICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sPTMyPXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0zNi0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjM3OiAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTM4LVxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtNjctICAgICAgICB0eXBlOiBvYmplY3RcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw6Njg6ICAgICAgICAkcmVmOiBhaXJvaGEsZW44ODExaC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC02OS0gICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sPTkyPWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMTAxLSAgICAgICAgbWN1QGQge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDoxMDI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMTAzLSAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtMy0tLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbi0tXG5NQUlOVEFJTkVSUz03NTY9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjc1NzpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuTUFJTlRBSU5FUlMtNzU4LUY6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jPTM1NT1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM6MzU2Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMtMzU3LVx0eyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyOTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQSFkgQWJzdHJhY3Rpb24gTGF5ZXImIzM5O3MgTG9ja2luZyBNZWNoYW5pc21zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgdXNlZCB3aXRoaW4gdGhlIFBIWSBhYnN0cmFjdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IHdoYXQmIzM5O3MgYmVlbiBhZGRlZCBpbiBgaW5jbHVkZS9saW51eC9waHkuaGAuIEZyb20gd2hhdCBJIHNlZSBoZXJlLCBpdCYjMzk7cyBkZWZpbmluZyBhIGZldyBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgbXV0ZXggYXNzb2NpYXRlZCB3aXRoIGFuIE1ESU8gYnVzLiBUaGVzZSBhcmUgY3J1Y2lhbDogYG1kaW9kZXZfbG9ja2AsIGBtZGlvZGV2X2xvY2tfbmVzdGVkYCwgYW5kIGBtZGlvZGV2X3VubG9ja2AuIFRoZXkgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgYG1kaW9fbG9ja2AgbXV0ZXggdGhhdCBiZWxvbmdzIHRvIHRoZSBNRElPIGJ1cy4gVGhlIGBuZXN0ZWRgIHZlcnNpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZSBwb3RlbnRpYWwgZm9yIG5lc3RlZCBsb2NraW5nLCB3aGljaCBJJiMzOTtkIGV4cGVjdCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYnVzIGFjY2Vzc2VkIHRocm91Z2ggYW5vdGhlciBidXMsIGxpa2Ugd2hhdCB5b3UmIzM5O2Qgc2VlIGluIHRoZSBgbWRpb2J1c19yZWFkX25lc3RlZCgpYCBmdW5jdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlaW5nIHVzZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgTURJTyBmcmFtZXdvcmsuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBhbmQgZ2V0IGEgbGlzdCBvZiBhbGwgdGhlaXIgdXNhZ2UgdG8gY2hlY2sgd2hlcmUgdGhlIGxvY2tzIGFyZSB1c2VkIGFuZCBpbiB3aGljaCBzaXR1YXRpb25zLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvZGV2Xyhsb2NrfHVubG9jaykmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3NS0vKiBOZXN0ZWQgd2hlbiB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdGhlIGJ1cyB0aGlzIGNoaXAgaGFuZ3MgYmVsb3cuICovXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc3LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3OC1cdGlmIChuZXN0ZWQpXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzk6XHRcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yODAtXHRlbHNlXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XHRcdG1kaW9kZXZfbG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9Mjg0PWludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjk4LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjk5Olx0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMDAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzEyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzEzOlx0XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMxNC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zMjQ9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzI5LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzMwOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzMxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM0MC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM0MTpcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzQyLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zNDU9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM1MC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM1MTpcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNjItXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNjM6XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM2NC1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzcyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzc0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM4NC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM4NTpcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzg2LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz00MTQ9c3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE3LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6NDE4Olx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE5LVx0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MjA6XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQyMS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODYtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyOTctXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTg6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfdW5sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzOgoKKipBbmFseXppbmcgYG1kaW9kZXZgIExvY2tpbmcgaW4gdGhlIFBIWSBEcml2ZXIgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzOiBgbWRpb2Rldl9sb2NrYCwgYG1kaW9kZXZfdW5sb2NrYCwgYW5kIGBtZGlvZGV2X2xvY2tfbmVzdGVkYC4gVGhlIGNvZGUgaXMgcG9pbnRpbmcgb3V0IHRoYXQgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYXMgaW5saW5lIGhlbHBlcnMsIGFuZCB0aGV5JiMzOTtyZSAqb25seSogdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYC4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgaW1tZWRpYXRlbHkuIEZpcnN0LCB0aGVzZSBhcmUgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gdGhlIEFpclBIWSBpbXBsZW1lbnRhdGlvbi4gU2Vjb25kLCBiZWluZyBpbmxpbmUgbWVhbnMgdGhlcmUmIzM5O3MgcG90ZW50aWFsbHkgbGVzcyBvdmVyaGVhZCwgYXMgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSB0aGVtIG1vcmUgYWdncmVzc2l2ZWx5IGJhc2VkIG9uIHRoZWlyIHVzYWdlLiBUaGlyZCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBBaXJQSFkgbGlicmFyeSB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGxvY2tzIGFyZSBuZWNlc3NhcnkgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBmb2N1cyBpcyBvbiBmaW5kaW5nIG91dCB3aGF0IGZpbGVzIHVzZSBgYWlyX3BoeV9saWIuY2AsIGFzIHdlbGwgYXMgYGFpcl9lbjg4MTFoLmNgIGFuZCBgbWRpby1haXJvaGEtZW44ODExaC5jYCwgcHJvYmFibHkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGxpYnJhcnkgYW5kIHRoZXJlZm9yZSwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBsb2NraW5nIGxvZ2ljIGlzLiBLbm93aW5nIHdoYXQgY2FsbHMgdGhpcyBjb2RlIGRpcmVjdGx5IGlzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBjb25jdXJyZW5jeSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JrIFBIWSBkcml2ZXIgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9ORVRfUEhZTElCfEFJUl9FTjg4MTFIX1BIWXxhaXJfcGh5X2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MzI9Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUhcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzUtXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM2Olx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzc6XHRpbXBseSBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEFOODgwMSBHaWdhYml0IFBIWVwmIzM0O1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTU6XHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMDE6XHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMi1cdHNlbGVjdCBQSFlfQ09NTU9OX1BST1BTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTA2OmNvbmZpZyBBSVJfTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgJiM0Mzs9IGFpcl9lbjg4MTFoLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXHQmIzQzOz0gYWlyX3BoeV9saWIub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19BTURfUEhZKVx0XHQmIzQzOz0gYW1kLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoyMjojaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIzLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjQ6I2luY2x1ZGUgXCYjMzQ7YWlyX3BoeV9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMTgtXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoxOTojaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyMwoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAxMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2AgaXMgdGhlIE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGFuZCB3ZSBhbHNvIGhhdmUgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIHNhbWUuIFRoZXJlJiMzOTtzIGFsc28gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYCwgd2hpY2ggaXMgdGhlIEFpcm9oYSBQSFkgbGlicmFyeSwgYW5kIGBhaXJfYW44ODAxLmNgLgoKTXkgZmlyc3QgZ3V0IGNoZWNrIGlzIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgcGllY2VzIG9mIGNvZGUgYXJlIGV2ZW4gcmVtb3RlbHkgYWNjZXNzaWJsZSBpbiB0aGUgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UgdXNlIChRRU1VIG9yIEdDRSBvbiB4ODZfNjQpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIG9yIE1ESU8gYnVzZXMgYXJlIGVtdWxhdGVkIGluIFFFTVUuIFRoZW4sIEkgbmVlZCB0byBrbm93IGlmIHVzZXJzcGFjZSBjYW4gY3JlYXRlIG9yIGF0dGFjaCBNRElPIG9yIFBIWSBkZXZpY2VzLgoKRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgTURJTyBidXMgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgYnkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXJzLCBvciBieSBPRiBwbGF0Zm9ybSBkcml2ZXJzLiBQSFkgZGV2aWNlcyBhcmUgcHJvYmVkIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGFkZHJlc3NlcywgcmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVycywgb3IgcGFyc2luZyB0aGUgRGV2aWNlIFRyZWUuIFNwZWNpZmljYWxseSwgdGhlc2UgQWlyb2hhIE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSBgb2ZfbWRpb2AuCgpUaGUgcHJvYmxlbSBpcywgYXMgZmFyIGFzIEkga25vdywgbm9uZSBvZiB0aGlzIGhhcmR3YXJlIGV4aXN0cyBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBWTXMuIFN5emthbGxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBpbnN0YW50aWF0ZSBhbiBhcmJpdHJhcnkgTURJTyBvciBQSFkgZGV2aWNlIHdpdGhvdXQgdmlydHVhbCBoYXJkd2FyZSBvciBtb2NrIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMuIFNlY3Rpb24gMiBjbGVhcmx5IHN0YXRlcyB0aGF0IHdlIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHdoZW4gYWxsIHRoZSBtb2RpZmllZCBjb2RlIHN0cmljdGx5IGZhbGxzIGludG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBpbmNsdWRlOiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIG5vbi1rZXJuZWwvbm9uLWV4ZWN1dGFibGUgY2hhbmdlcy4gU2VjdGlvbiAxIGFsc28gc3RhdGVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSAqcHJpbWFyeSogZ2F0ZS4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBtYXAgdGhlbSBiYWNrIHRvIHRob3NlIGNyaXRlcmlhOgoKMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sYDogRGV2aWNlIHRyZWUgc2NoZW1hIGRvY3VtZW50YXRpb24uIFRoYXQmIzM5O3Mgbm9uLWV4ZWN1dGFibGUsIGRvY3VtZW50YXRpb24uCjIuICBgTUFJTlRBSU5FUlNgOiBNYWludGFpbmVycyBmaWxlIHVwZGF0ZS4gQWdhaW4sIG5vbi1leGVjdXRhYmxlLgozLiAgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2A6IEFkZGVkIGBDT05GSUdfTURJT19BSVJPSEFfRU44ODExSGAuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuCjQuICBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWA6IEJ1aWxkIHJ1bGUuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuCjUuICBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgOiBOZXcgTURJTyBkcml2ZXIsIGJ1dCAqZm9yKiBhIHNwZWNpZmljIEFpcm9oYSBNQ1UuIFRoaXMgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudHMuCjYuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOiBEcml2ZXIgZm9yIGEgKnNwZWNpZmljKiBBaXJvaGEgUEhZLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCjcuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNgOiBMaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgQWlyb2hhIFBIWXMuIEZ1bmN0aW9uYWxpdHkgaXMgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLCBzbyB0aGlzIGlzIGFsc28gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgo4LiAgYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oYDogSW50ZXJuYWwgaGVhZGVyIGZvciBBaXJvaGEgUEhZcy4KOS4gYGluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhgOiBIZWFkZXIgZm9yIEFpcm9oYSBFTjg4MTFIIE1DVSBkcml2ZXIuCjEwLiBgaW5jbHVkZS9saW51eC9waHkuaGA6IEFkZHMgaW5saW5lIGxvY2sgaGVscGVycy4gT25seSB1c2VkIGJ5IHRoZSBBaXJvaGEgUEhZIGxpYnJhcnksIHNvIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkl0JiMzOTtzIGNsZWFyIHRvIG1lIHRoYXQgYWxsIG1vZGlmaWVkIGNvZGUgaXMgZWl0aGVyIG5vbi1rZXJuZWwgLyBub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcvTWFrZWZpbGUpIG9yIHNwZWNpZmljIHRvIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgaGFyZHdhcmUgKGFuIE1ESU8gbWljcm9jb250cm9sbGVyIC8gRXRoZXJuZXQgUEhZIGNoaXApLiBBbmQgd2UgKmtub3cqIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBgZmFsc2VgLgoKRm9yIGBzZXQtcmVzdWx0c2AsIEkmIzM5O2xsIHNldCB0aGUgZm9sbG93aW5nOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgY2hhbmdlcyBhZGQgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIE1ESU8gZHJpdmVyIChgbWRpby1haXJvaGEtZW44ODExaC5jYCkgYW5kIHJlZmFjdG9yIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMgaW4gdGhlIEFpcm9oYSBQSFkgZHJpdmVyIGxpYnJhcnkgKGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgKS4gVGhpcyBoYXJkd2FyZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGRldmljZSB0cmVlIGJpbmRpbmcgYW5kIGEgbmV3IE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZIE1DVSAobWRpby1haXJvaGEtZW44ODExaC5jKSwgd2hpbGUgcmVmYWN0b3JpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgTURJTyByZWdpc3RlciBhY2Nlc3MgaGVscGVycyBpbiB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5IChhaXJfZW44ODExaC5jLCBhaXJfcGh5X2xpYi5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIEFpcm9oYSBwaHlzaWNhbCBBU0lDL1BIWSBoYXJkd2FyZSBhbmQgZGV2aWNlLXRyZWUgYmluZGluZ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgZXhlY3V0YWJsZSBjaGFuZ2VzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0MS4yNjY2NDMzMTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk0MDg1NzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MjI6NDEuMjY2NjU1ODg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU4ODExNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTViNGJjYjRhZDUwZTExYTA2OWMxYTllNGU4MDNhYWM1N2VlZjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0NDMzMWQ4MDMxNWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbkBAIC0wLDAgKzEsMTE5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEFsZWtzZWkgU3Zpcmlka2luIFxcdTAwM2NmQGxleC5sYVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xcbisgIGZpcm13YXJlIGZyb20gdm9sYXRpbGUgUkFNLiBUaGUgY2hpcCBhbnN3ZXJzIGFuIE1ESU8gYWRkcmVzcyBmcm9tXFxuKyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXFxuKyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cXG4rXFxuKyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxcbisgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcXG4rICBidXMsIGFuZCBvbmx5IHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcuXFxuK1xcbisgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcXG4rICBmaXJtd2FyZSBSQU0uIEl0IHRoZXJlZm9yZSBiZWxvbmdzIHRvIHRoaXMgbm9kZTogYSByZXNldCBkZXNjcmliZWQgb25cXG4rICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSdzIG93biBsaWZlY3ljbGUsIHdoYXRldmVyXFxuKyAgdGhlIGNvcmUgaXMgZG9pbmcuXFxuK1xcbisgIEEgYm9hcmQgdGhhdCBoYXMgZmlybXdhcmUgaW4gaGFuZCB3aGlsZSBpdHMgTURJTyBidXMgaXMgZW51bWVyYXRlZCBjYW5cXG4rICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybVxcbisgIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlc1xcbisgIGxhdGVyLCBzbyB0aGF0IHRoZXJlIGlzIG5vIFBIWSB0byBkZXNjcmliZSB1bnRpbCB0aGUgY29yZSBoYXMgaXQuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgICRub2RlbmFtZTpcXG4rICAgIHBhdHRlcm46IFxcXCJebWN1QFswLTlhLWZdKyRcXFwiXFxuK1xcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogYWlyb2hhLGVuODgxMWgtbWN1XFxuK1xcbisgIHJlZzpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIHJlc2V0LWdwaW9zOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXFxuKyAgICAgIE1EMzIgY29yZS5cXG4rXFxuKyAgcmVzZXQtYXNzZXJ0LXVzOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXFxuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cXG4rXFxuKyAgcmVzZXQtZGVhc3NlcnQtdXM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBkZWFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xcbisgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXFxuK1xcbisgIG1kaW86XFxuKyAgICAkcmVmOiBtZGlvLnlhbWwjXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgVGhlIGJ1cyB0aGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZywgYXRcXG4rICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxcbisgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cXG4rXFxuKyAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgJ15ldGhlcm5ldC1waHlAWzAtOWEtZl0rJCc6XFxuKyAgICAgICAgdHlwZTogb2JqZWN0XFxuKyAgICAgICAgJHJlZjogYWlyb2hhLGVuODgxMWgueWFtbCNcXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxcbisgICAgICAgICAgcmVzZXRzOiBmYWxzZVxcbisgICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXFxuKyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUncyBvd24gbGlmZWN5Y2xlLCBhbmQgdGhhdCBlcmFzZXNcXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXFxuK1xcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIG1kaW9cXG4rXFxuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcXHUwMDNlXFxuK1xcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIG1jdUBkIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW44ODExaC1tY3VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHhkXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtZ3Bpb3MgPSBcXHUwMDNjXFx1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbisgICAgICAgICAgICByZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMTAwMDBcXHUwMDNlO1xcbisgICAgICAgICAgICByZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MyMDAwMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICBtZGlvIHtcXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgICAgICAgICAgZXRoZXJuZXQtcGh5QGQge1xcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDNhMi5hNDExXFxcIjtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHhkXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXFx1MDAzY1xcdTAwMjZwaW8gMTUgSVJRX1RZUEVfTEVWRUxfTE9XXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBiMjNmYjZmMmY0ZWY0Li4zYmQ4NmRmMmJlNTcxIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNzUwLDYgKzc1MCwxNCBAQCBTOlxcdFN1cHBvcnRlZFxcbiBGOlxcdGZzL2Fpby5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC8qYWlvKi5oXFxuIFxcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcXG4rTTpcXHRBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXFxuK0Y6XFx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFxuK1xcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXFxuIE06XFx0TG9yZW56byBCaWFuY29uaSBcXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXFx1MDAzZVxcbiBMOlxcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXFxuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxcbiBcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXFxuIFxcdCAgQWlyb2hhIEFONzU4MyBTb0Mncy5cXG4gXFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXFxuK1xcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBzdXBwb3J0XFxcIlxcbitcXHRkZXBlbmRzIG9uIE9GX01ESU9cXG4rXFx0ZGVwZW5kcyBvbiBGV19MT0FERVJcXG4rXFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuK1xcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cXG4rXFx0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcXG4rXFx0ICBiZWNvbWVzIGFuIEV0aGVybmV0IFBIWSBhZnRlcndhcmRzLiBUaGUgZHJpdmVyIGRvd25sb2FkcyB0aGF0XFxuK1xcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXFxuK1xcdCAgbGVmdCBydW5uaW5nLlxcbitcXG4gY29uZmlnIE1ESU9fU1VONElcXG4gXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBzdW40aSBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiBcXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXFxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbkBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbiBvYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG4gXFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcXHRcXHQrPSBtZGlvLWFpcm9oYS5vXFxuK29iai0kKENPTkZJR19NRElPX0FJUk9IQV9FTjg4MTFIKVxcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xcbiBvYmotJChDT05GSUdfTURJT19BU1BFRUQpXFx0XFx0Kz0gbWRpby1hc3BlZWQub1xcbiBvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpXFx0XFx0Kz0gbWRpby1iY20taXByb2Mub1xcbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVxcdFxcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3MjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcXG5AQCAtMCwwICsxLDM4MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4rLypcXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXFxuKyAqXFxuKyAqIFRoZSBFTjg4MTFIIGlzIGFuIE1EMzIgbWljcm9jb250cm9sbGVyIHVudGlsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgaW50b1xcbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXFx0MTAwMFxcbisjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NQVhfTVNcXHQzMDAwMFxcbisjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1xcdDYwMDAwXFxuK1xcbitzdHJ1Y3QgZW44ODExaF9tY3Uge1xcbitcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgZndfcG9sbDtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cztcXG4rXFx0dW5zaWduZWQgaW50IHBvbGxfbXM7XFxuK1xcdHVuc2lnbmVkIGludCB3YWl0ZWRfbXM7XFxuK1xcdHUzMiBmd192ZXJzaW9uO1xcbitcXHRib29sIHdhcm5lZDtcXG4rXFx0Ym9vbCBmd19ydW5uaW5nO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXFxuK1xcdFxcdFxcdFxcdGludCByZWdudW0pXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoYWRkciAhPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcXG4rXFx0XFx0XFx0XFx0IGludCByZWdudW0sIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoYWRkciAhPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0dXJuIG1kaW9idXNfYzQ1X3dyaXRlX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0XFx0dmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKnBhcmVudCA9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XFxuK1xcdCAqIGRldGFjaC5cXG4rXFx0ICovXFxuK1xcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4rXFx0aWYgKCFidXMpIHtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcImFpcm9oYS1lbjg4MTFoXFxcIjtcXG4rXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4rXFx0YnVzLVxcdTAwM2Vwcml2ID0gbWN1O1xcbitcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0aWYgKHBhcmVudC1cXHUwMDNlcmVhZCkge1xcbitcXHRcXHRidXMtXFx1MDAzZXJlYWQgPSBlbjg4MTFoX21jdV9yZWFkO1xcbitcXHRcXHRidXMtXFx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XFxuK1xcdH1cXG4rXFx0aWYgKHBhcmVudC1cXHUwMDNlcmVhZF9jNDUpIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xcbitcXHRcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IGVuODgxMWhfbWN1X3dyaXRlX2M0NTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG4rXFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSkge1xcbitcXHRcXHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxcbitcXHRcXHQgKiBQSFkgYWJzZW50OyBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkgcmV0dXJucyAwIGVpdGhlciB3YXkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0fVxcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1kaW9idXNfZnJlZShidXMpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRtY3UtXFx1MDAzZWJ1cyA9IGJ1cztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXFxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1jdS1cXHUwMDNlYnVzO1xcbitcXG4rXFx0aWYgKGJ1cylcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGJ1cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfY2hpcF91bmxvY2soc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRpZiAoYnVzKVxcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfZndfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGVuODgxMWhfbWN1LCBmd19wb2xsKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghbWN1LVxcdTAwM2Vmd19ydW5uaW5nKSB7XFxuK1xcdFxcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcXG4rXFx0XFx0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQobWN1LVxcdTAwM2VtZGlvZGV2LCBcXHUwMDI2bWN1LVxcdTAwM2Vmd192ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAhIWNoaXApO1xcbitcXHRcXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcImZpcm13YXJlICUwOHggcnVubmluZyBhZnRlciAldW1zXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRtY3UtXFx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cXHUwMDNld2FpdGVkX21zKTtcXG4rXFx0XFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcXG4rXFx0XFx0ICAgICAgZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9EU1ApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIm5vdCBjYWNoZWQsIHJlc3VtZSB3aWxsIHdhbnQgdGhlIGZpbGVzOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlZndfcnVubmluZyA9IHRydWU7XFxuK1xcdFxcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FpdGVkX21zID0gMDtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVzdW1lIHJlLXJ1bnMgdGhlIGRvd25sb2FkLCBzbyB0aGUgYnVzIGNhbiBhbHJlYWR5IGJlIGhlcmUsIGFuZFxcbitcXHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJ3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXNcXG4rXFx0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBtY3UtXFx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK3JldHJ5OlxcbitcXHRpZiAoIW1jdS1cXHUwMDNld2FybmVkIFxcdTAwMjZcXHUwMDI2IG1jdS1cXHUwMDNld2FpdGVkX21zIFxcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xcbitcXHRcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZylcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwibm8gZmlybXdhcmUgYWZ0ZXIgJXVtcyBvZiB3YWl0aW5nIGZvciAlcyBhbmQgJXM6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG1jdS1cXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXFxuK1xcdFxcdFxcdFxcdCBFTjg4MTFIX01EMzJfRFNQLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm5vIFBIWSBhdCBhZGRyZXNzICVkLCAldW1zIGFmdGVyIHRoZSBmaXJtd2FyZSBzdGFydGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIsIG1jdS1cXHUwMDNld2FpdGVkX21zLFxcbitcXHRcXHRcXHRcXHQgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYXN0IGl0cyBidWRnZXQsIG9ubHkgYSBkZWZlcnJhbCB3aWxsIGNoYW5nZSBvbiBpdHMgb3duOiBldmVyeVxcbitcXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xcbitcXHQgKiBjb3JlIGFuZCBpdHMgdWV2ZW50cyBmb3IgdGhlIHVwdGltZS4gRmlybXdhcmUgZmlsZXMgYXJlIHRoZVxcbitcXHQgKiBleGNlcHRpb24sIHNpbmNlIHRoZXkgY2FuIGJlIGluc3RhbGxlZCBhdCBhbnkgdGltZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtY3UtXFx1MDAzZWZ3X3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUFJPQkVfREVGRVIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1jdS1cXHUwMDNld2FpdGVkX21zIFxcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWN1LVxcdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cXHUwMDNlcG9sbF9tcyAqIDIsIEVOODgxMUhfRldfUE9MTF9NQVhfTVMpO1xcbitcXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cXG4rXFx0bWN1LVxcdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVxcdTAwM2Vwb2xsX21zO1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXFx1MDAyNm1jdS1cXHUwMDNlZndfcG9sbCxcXG4rXFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXFx1MDAzZXBvbGxfbXMpKTtcXG4rfVxcbitcXG4rLyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cXG4rc3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gbWN1LVxcdTAwM2VtZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJNRDMyIGFscmVhZHkgcnVubmluZywgbGVhdmluZyByZXNldCBhbG9uZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFtY3UtXFx1MDAzZXJlc2V0X2dwaW8pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcXG4rXFx0ICogaXMgYWxyZWFkeSBkZWFzc2VydGVkLiBBbiBhc3NlcnRlZCBvbmUgaXMgd2h5IHRoZSByZWFkIGZhaWxlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXFx1MDAzZXJlc2V0X2dwaW8pIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcXFwicmVzZXQtYXNzZXJ0LXVzXFxcIiwgXFx1MDAyNmFzc2VydF91cyk7XFxuK1xcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFxcXCJyZXNldC1kZWFzc2VydC11c1xcXCIsIFxcdTAwMjZkZWFzc2VydF91cyk7XFxuK1xcbitcXHRyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KG1jdS1cXHUwMDNlcmVzZXRfZ3BpbywgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFzc2VydF91cylcXG4rXFx0XFx0ZnNsZWVwKGFzc2VydF91cyk7XFxuK1xcbitcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVxcdTAwM2VyZXNldF9ncGlvLCAwKTtcXG4rXFx0aWYgKGRlYXNzZXJ0X3VzKVxcbitcXHRcXHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFxuK1xcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbWN1KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XFxuK1xcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcXG4rXFxuK1xcdC8qIFJlZ2lzdHJhdGlvbiBuZWVkcyB0aGlzIG9ubHkgb25jZSB0aGUgZmlybXdhcmUgcnVucywgYnV0IGEgRFRcXG4rXFx0ICogaG9sZSBzaG91bGQgZmFpbCB0aGUgYmluZCBub3csIG5vdCBhcyBhIHdvcmstaXRlbSBlcnJvciBsYXRlci5cXG4rXFx0ICovXFxuK1xcdG5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbitcXHRpZiAoIW5wKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXFxcblxcXCIpO1xcbitcXHRvZl9ub2RlX3B1dChucCk7XFxuK1xcbitcXHQvKiBUaGUgY29yZSBjbGFpbXMgcmVzZXQtZ3Bpb3Mgb25seSBmb3IgZGV2aWNlcyBmbGFnZ2VkIGFzIFBIWXMuICovXFxuK1xcdG1jdS1cXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgXFxcInJlc2V0XFxcIiwgR1BJT0RfQVNJUyk7XFxuK1xcdGlmIChJU19FUlIobWN1LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbyksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobWN1LVxcdTAwM2VyZXNldF9ncGlvKVxcbitcXHRcXHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXFx1MDAzZXJlc2V0X2dwaW8sIFxcXCJFTjg4MTFIIHJlc2V0XFxcIik7XFxuK1xcbitcXHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xcbitcXG4rXFx0bWN1LVxcdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1jdS1cXHUwMDNlZndfcG9sbCwgZW44ODExaF9tY3VfZndfcG9sbCk7XFxuK1xcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxcbitcXHQgKiBhIHN1c3BlbmRpbmcgYnVzLlxcbitcXHQgKi9cXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwpO1xcbitcXHRpZiAobWN1LVxcdTAwM2VidXMpIHtcXG4rXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKG1jdS1cXHUwMDNlYnVzKTtcXG4rXFx0XFx0bWRpb2J1c19mcmVlKG1jdS1cXHUwMDNlYnVzKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2VidXMgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIE5vdGhpbmcgdG8gcmVkbzogdGhlIHBvbGwgaXMgYXJtZWQgYW5kIHRoYXdzIHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xcbitcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBOb3Qgb24gdGhlIHdvcmtxdWV1ZTogYSBEU0EgcG9ydCdzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcXG4rXFx0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cXG4rXFx0ICovXFxuK1xcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcXG4rXFx0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cXHUwMDNlbWRpb2RldiwgXFx1MDAyNm1jdS1cXHUwMDNlZndfdmVyc2lvbiwgISFjaGlwKTtcXG4rXFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdC8qIFRoZSByZWxvYWQgcmVzdG9yZXMgdGhpcyBjaGlwLCBub3QgdGhlIFBIWSBiZWxvdyBpdDogaXRzXFxuK1xcdFxcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcXG4rXFx0XFx0ICogcGh5X2luaXRfaHcoKSB0d2ljZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0bWN1LVxcdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XFxuK1xcdFxcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FpdGVkX21zID0gMDtcXG4rXFx0XFx0bWN1LVxcdTAwM2V3YXJuZWQgPSBmYWxzZTtcXG4rXFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhlbjg4MTFoX21jdV9wbV9vcHMsIE5VTEwsIGVuODgxMWhfbWN1X3Jlc3VtZSk7XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjg4MTFoLW1jdVxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGVuODgxMWhfbWN1X29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xcbitcXHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IGVuODgxMWhfbWN1X3JlbW92ZSxcXG4rXFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhaXJvaGEtZW44ODExaC1tY3VcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBlbjg4MTFoX21jdV9vZl9tYXRjaCxcXG4rXFx0XFx0LnBtID0gcG1fc2xlZXBfcHRyKFxcdTAwMjZlbjg4MTFoX21jdV9wbV9vcHMpLFxcbitcXHRcXHQvKiBUZWFyaW5nIHRoZSBjaGlsZCBidXMgZG93biB1bmRlciBhbiBhdHRhY2hlZCBQSFkgaXMgbm90XFxuK1xcdFxcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuK1xcdH0sXFxuK307XFxuK1xcbittZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbitNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbkBAIC0yMCwyMSArMjAsMTUgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEVOODgxMUhfUEhZX0lEXFx0XFx0MHgwM2EyYTQxMVxcbiAjZGVmaW5lIEFOODgxMUhCX1BIWV9JRFxcdFxcdDB4YzBmZjA0YTBcXG4gXFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLmRtLmJpblxcXCJcXG4tI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXFx0XFxcImFpcm9oYS9FdGhNRDMyLkRTUC5iaW5cXFwiXFxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVxcdFxcXCJhaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRE0uYmluXFxcIlxcbiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRFNQXFx0XFxcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXFxcIlxcbiBcXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVxcdDB4MDAwMDAwMDBcXG4tI2RlZmluZSBBSVJfRldfQUREUl9EU1BcXHQweDAwMTAwMDAwXFxuLVxcbiAvKiBNSUkgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1xcdFxcdDB4MWRcXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1xcdEdFTk1BU0soNCwgMilcXG5AQCAtNDQsOCArMzgsNiBAQFxcbiAjZGVmaW5lICAgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwXFx0MHhjXFxuIFxcbiAvKiBSZWdpc3RlcnMgb24gTURJT19NTURfVkVORDEgKi9cXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcXHRcXHQweDgwMDlcXG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXFx0XFx0XFx0MHgwMlxcbiBcXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMFxcdFxcdDB4ODAwYlxcbiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8xXFx0XFx0MHg4MDBjXFxuQEAgLTEwOCw4ICsxMDAsNiBAQFxcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcXHRcXHQweDNiMzBcXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1xcdFxcdFxcdEJJVCgwKVxcbiBcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cXHRcXHQweDNiM2NcXG4tXFxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVxcdFxcdDB4Y2EwZjhcXG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXFx0XFx0QklUKDApXFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcXHRcXHRCSVQoMSlcXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxcbiAjZGVmaW5lIEVOODgxMUhfQ0xLX0NHTVxcdFxcdFxcdDB4Y2Y5NThcXG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cXHRcXHRcXHRCSVQoMjYpXFxuIFxcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXFx0XFx0MHgwZjAwMThcXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXFx0XFx0MHgwXFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcXHRcXHQweDFcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlxcdFxcdDB4ODAwMDAwXFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJfTE9BRElOR1xcdFxcdEJJVCgxMSlcXG4tXFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcXHRcXHQweGYwMjBjXFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcXHRcXHQweGYwMjE4XFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcXHRcXHQweGYwMjFjXFxuQEAgLTI3MCw4NiArMjU0LDE0IEBAIHN0YXRpYyBpbnQgX19haXJfcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLXtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTE2IHZhbDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfSU5DUik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFxcdTAwM2MgZnctXFx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XFxuLVxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0ICsgMl0pO1xcbi1cXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZmdy1cXHUwMDNlZGF0YVtvZmZzZXRdKTtcXG4tXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4te1xcbi1cXHRpbnQgc2F2ZWRfcGFnZTtcXG4tXFx0aW50IHJldCA9IDA7XFxuLVxcbi1cXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuLVxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmlybXdhcmUgc2l6ZSAlenUgaXMgbm90IGEgbXVsdGlwbGUgb2YgNFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgZnctXFx1MDAzZXNpemUpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4tXFxuLVxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdFxcdFxcdCAgIGFkZHJlc3MsIHJldCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgc2F2ZWRfcGFnZSwgcmV0KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4tXFx0aW50IHJldCwgcmVnX3ZhbHVlO1xcbitcXHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgZmFsc2UpO1xcbiBcXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4tXFx0XFx0XFx0XFx0XFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHQvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMgKi9cXG4tXFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbi1cXHRcXHRcXHRcXHRcXHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxcbi1cXHRcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAweCV4XFxcXG5cXFwiLCByZWdfdmFsdWUpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFx0fVxcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhbjg4MTFoYl9jaGVja19jcmMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHNldDEsXFxuQEAgLTQxMSw3ICszMjMsNyBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCAgZncpO1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XFxuIFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE7XFxuLVxcbi1cXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxcbi1cXHRcXHRcXHRcXHRcXHQgRU44ODExSF9GV19DVFJMXzFfU1RBUlQpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9ETSwgIGZ3MSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHBoeWRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRlbjg4MTFoX3ByaW50X2Z3X3ZlcnNpb24ocGh5ZGV2KTtcXG4tXFxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XFxuLVxcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcXG4tXFxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOlxcbi1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XFxuLVxcbitcXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBcXHUwMDI2cHJpdi1cXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgZmFsc2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJMb2FkIGZpcm13YXJlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcbkBAIC0xMTU2LDggKzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cXG4tXFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4rXFx0LyogQWRvcHRlZCBmaXJtd2FyZSB3YXMgbmV2ZXIgcmVzdGFydGVkIGhlcmUuICovXFxuK1xcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcXG4gXFxuIFxcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cXG4gXFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXFxuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXFxuQEAgLTgsMzcgKzgsNDIgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSlcXG4ge1xcbiBcXHRpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4rXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9oaWdoIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xcbiBcXG4tXFx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbitcXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9sb3cgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcXG4gXFxuQEAgLTQ2LDY0ICs1MSw2NiBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuIHtcXG4gXFx0aW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoO1xcbiBcXHR1MzIgcGJ1c19kYXRhX29sZCwgcGJ1c19kYXRhX25ldztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXFxuK1xcdFxcdFxcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHBidXNfZGF0YV9oaWdoID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xcbitcXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xcbiBcXHRpZiAocGJ1c19kYXRhX2hpZ2ggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XFxuIFxcbi1cXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XFxuK1xcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbiBcXHRpZiAocGJ1c19kYXRhX2xvdyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwYnVzX2RhdGFfbG93O1xcbiBcXG5AQCAtMTEyLDIzICsxMTksMjMgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChwYnVzX2RhdGFfbmV3ID09IHBidXNfZGF0YV9vbGQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTE0NCw3ICsxNTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIHBidXNfYWRkcmVzcywgcGJ1c19kYXRhKTtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwYnVzX2RhdGEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcXG5AQCAtMTYzLDcgKzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwYnVzX2RhdGEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuQEAgLTE4Myw4ICsxOTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIFxcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuIFxcbiBcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIG1hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNldCk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtYXNrLCBzZXQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcXG5AQCAtMTk0LDYgKzIwMiwzNDMgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XFxuIFxcbitzdGF0aWMgaW50IF9fYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHRcXHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MTYgdmFsO1xcbitcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGxlbjsgb2Zmc2V0ICs9IDQpIHtcXG4rXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcdTAwMjZkYXRhW29mZnNldF0pO1xcbitcXHRcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIHBoeV9zZWxlY3RfcGFnZSgpIG5lZWRzIGEgcGh5X2RldmljZSwgd2hpY2ggZG9lcyBub3QgZXhpc3QgeWV0LiAqL1xcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBzYXZlZF9wYWdlO1xcbitcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xcbitcXHRcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc2F2ZWRfcGFnZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcXG4re1xcbitcXHRpbnQgcmVzdG9yZTtcXG4rXFxuK1xcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcXG4rXFx0XFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxcbitcXHRcXHRcXHRcXHRcXHQgIHNhdmVkX3BhZ2UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgcmVzdG9yZSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldCA9IHJlc3RvcmU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG4rc3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGlmIChuZXN0ZWQpXFxuK1xcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbit9XFxuK1xcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHNpemVfdCBjaHVuaywgZG9uZSA9IDA7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgJSA0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgXFxcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgZnctXFx1MDAzZXNpemUpIHtcXG4rXFx0XFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVxcdTAwM2VzaXplIC0gZG9uZSwgQUlSX0ZXX0NIVU5LX0JZVEVTKTtcXG4rXFxuK1xcdFxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdFxcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBfX2Fpcl93cml0ZV9idWYobWRpb2RldiwgYWRkcmVzcyArIGRvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGZ3LVxcdTAwM2VkYXRhICsgZG9uZSwgY2h1bmspO1xcbitcXHRcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmV0KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0ZG9uZSArPSBjaHVuaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XFxuK1xcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcGJ1c19kYXRhKTtcXG4rXFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHNhdmVkX3BhZ2UsIHJldDtcXG4rXFxuK1xcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHNhdmVkX3BhZ2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtYXNrLCBzZXQpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxcbisgKiByZWdpc3Rlciwgc28gYSBmYWlsZWQgc2VsZWN0aW9uIHJlYWRzIGEgZGlmZmVyZW50IG9uZSBiYWNrIGFzIHN1Y2Nlc3MuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuK1xcdGludCBhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgIGRldmFkIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldCA9IGFpcl9tbWRfc3RhdHVzX3JlYWQobWRpb2RldiwgbmVzdGVkKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XFxuK1xcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgcmV0LCByZWdfdmFsdWU7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzFfRklOSVNILCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcXG4rXFx0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcXG4rXFx0XFx0XFx0XFx0cmVnX3ZhbHVlIFxcdTAwM2MgMCB8fFxcbitcXHRcXHRcXHRcXHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXFxuK1xcdFxcdFxcdFxcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmVnX3ZhbHVlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJlZ192YWx1ZTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZGJnKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJNQ1Ugbm90IHJlYWR5OiAweCV4XFxcXG5cXFwiLCByZWdfdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xcbitcXG4raW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxcbitcXHRcXHRcXHQgICAgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICpmd192ZXJzaW9uKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXFxuK1xcdFxcdFxcdFxcdFxcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0ZGV2X2luZm8oZGV2LCBcXFwiTUQzMiBmaXJtd2FyZSB2ZXJzaW9uOiAlMDh4XFxcXG5cXFwiLCAqZndfdmVyc2lvbik7XFxuK1xcbithaXJfZndfZG93bmxvYWRfb3V0OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XFxuK1xcbithaXJfZndfZG93bmxvYWRfcmVsMTpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xcbitcXG4rXFx0LyogTm8gZXJyb3IgcHJpbnQ6IGNhbGxlcnMgbG9nIG9uIHRoZWlyIG93biB0ZXJtcywgYW5kIGEgcG9sbGVyXFxuK1xcdCAqIHdvdWxkIHJlcGVhdCBpdCBvbiBldmVyeSByZXRyeS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfZndfZG93bmxvYWQpO1xcbitcXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxcbmluZGV4IDAxYmIzMmU3YzdjOTUuLjU2YmE5ODdhNjhjYzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxcbkBAIC0xMCwxMiArMTAsMTkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1xcdFxcdDB4MWZcXG4gXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXFx0XFx0MHgwMDAwXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcXHRcXHQweDAwMDFcXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFxcdFxcdDB4MDAwNFxcbiBcXG4rLyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXFxuKyAqL1xcbisjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1xcdFxcdDIzMDRcXG4rXFxuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cXG4gI2RlZmluZSBBSVJfQlBCVVNfTU9ERVxcdFxcdFxcdDB4MTBcXG4gI2RlZmluZSAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRURcXHRcXHQweDAwMDBcXG5AQCAtMjksNiArMzYsMjAgQEBcXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXFx0XFx0MHgxN1xcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1xcdFxcdDB4MThcXG4gXFxuKyNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cXHRcXHRcXHQweDAwMDAwMDAwXFxuKyNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXFx0XFx0XFx0MHgwMDEwMDAwMFxcbitcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVxcdFxcdDB4MGYwMDE4XFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFxcdFxcdDB4MFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXFx0XFx0MHgxXFxuKyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcXHRcXHQweDgwMDAwMFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElOR1xcdFxcdEJJVCgxMSlcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXFx0XFx0MHg4MDA5XFxuKyNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWVxcdFxcdFxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXFx0XFx0MHgzYjNjXFxuK1xcbiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdHUzMiBtYXNrLCB1MzIgc2V0KTtcXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGFpcl9waHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSk7XFxuIFxcbitzdHJ1Y3QgZmlybXdhcmU7XFxuK1xcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcXG4raW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xcbitcXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXFxuQEAgLTAsMCArMSwyNSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxcbisgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiBcXHUwMDNjZkBsZXgubGFcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxcbisjZGVmaW5lIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBtZGlvX2RldmljZTtcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXFx0XFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLmRtLmJpblxcXCJcXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXFx0XFx0XFxcImFpcm9oYS9FdGhNRDMyLkRTUC5iaW5cXFwiXFxuK1xcbisvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xcbisvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cXG4raW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxcbitcXHRcXHRcXHQgICAgYm9vbCBuZXN0ZWQpO1xcbitcXG4rI2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZTc0YThmNWNmNWM2NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMjg0LDYgKzIyODQsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK31cXG4rXFxuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbit9XFxuK1xcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0X19wcmludGYoMiwgMyk7XFxuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0Mi4wNDM0MDg0NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MTY0MDc0Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGRldmljZSB0cmVlIGJpbmRpbmcgYW5kIGEgbmV3IE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZIE1DVSAobWRpby1haXJvaGEtZW44ODExaC5jKSwgd2hpbGUgcmVmYWN0b3JpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgTURJTyByZWdpc3RlciBhY2Nlc3MgaGVscGVycyBpbiB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5IChhaXJfZW44ODExaC5jLCBhaXJfcGh5X2xpYi5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIEFpcm9oYSBwaHlzaWNhbCBBU0lDL1BIWSBoYXJkd2FyZSBhbmQgZGV2aWNlLXRyZWUgYmluZGluZ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIHJlbmRlcmluZyB0aGUgZXhlY3V0YWJsZSBjaGFuZ2VzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk1YjRiY2I0YWQ1MGUxMWEwNjljMWE5ZTRlODAzYWFjNTdlZWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MjI6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI0NDMzMWQ4MDMxNWJcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbkBAIC0wLDAgKzEsMTE5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcbitcbittYWludGFpbmVyczpcbisgIC0gQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitcbitkZXNjcmlwdGlvbjogfFxuKyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlc1xuKyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb21cbisgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlblxuKyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC5cbitcbisgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGRcbisgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnRcbisgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy5cbitcbisgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGVcbisgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvblxuKyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUncyBvd24gbGlmZWN5Y2xlLCB3aGF0ZXZlclxuKyAgdGhlIGNvcmUgaXMgZG9pbmcuXG4rXG4rICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXG4rICBkZXNjcmliZSB0aGUgUEhZIG9uIGl0cyBvd24sIGFzIGFpcm9oYSxlbjg4MTFoLnlhbWwgZG9lcywgYW5kIHRoYXQgZm9ybVxuKyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXG4rICBsYXRlciwgc28gdGhhdCB0aGVyZSBpcyBubyBQSFkgdG8gZGVzY3JpYmUgdW50aWwgdGhlIGNvcmUgaGFzIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICAkbm9kZW5hbWU6XG4rICAgIHBhdHRlcm46IFwiXm1jdUBbMC05YS1mXSskXCJcbitcbisgIGNvbXBhdGlibGU6XG4rICAgIGNvbnN0OiBhaXJvaGEsZW44ODExaC1tY3VcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIHJlc2V0LWdwaW9zOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgR1BJTyBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgZm9yIHRoZSByZXNldCBzaWduYWwgd2lyZWQgdG8gdGhlXG4rICAgICAgTUQzMiBjb3JlLlxuK1xuKyAgcmVzZXQtYXNzZXJ0LXVzOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cbitcbisgIHJlc2V0LWRlYXNzZXJ0LXVzOlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGRlYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuK1xuKyAgbWRpbzpcbisgICAgJHJlZjogbWRpby55YW1sI1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaGUgYnVzIHRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLCBhdFxuKyAgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhpcyBub2RlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQgYnVzLiBPbmx5IHRoYXRcbisgICAgICBvbmUgYWRkcmVzcyBpcyBwYXNzZWQgdGhyb3VnaC5cbitcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgJ15ldGhlcm5ldC1waHlAWzAtOWEtZl0rJCc6XG4rICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgICRyZWY6IGFpcm9oYSxlbjg4MTFoLnlhbWwjXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbisgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2VcbisgICAgICAgICAgcmVzZXRzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1uYW1lczogZmFsc2VcbitcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWRcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXG4rXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gbWRpb1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWN1QGQge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImFpcm9oYSxlbjg4MTFoLW1jdVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbisgICAgICAgICAgICByZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MyMDAwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBtZGlvIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwiO1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMHhkXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcdFN1cHBvcnRlZFxuIEY6XHRmcy9haW8uY1xuIEY6XHRpbmNsdWRlL2xpbnV4LyphaW8qLmhcbiBcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbitNOlx0QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbitGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuK1xuIEFJUk9IQSBFVEhFUk5FVCBEUklWRVJcbiBNOlx0TG9yZW56byBCaWFuY29uaSBcdTAwM2Nsb3JlbnpvQGtlcm5lbC5vcmdcdTAwM2VcbiBMOlx0bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxuIFx0ICBBaXJvaGEgQU43NTgzIFNvQydzLlxuIFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXG4rXHR0cmlzdGF0ZSBcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBPRl9NRElPXG4rXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuK1x0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG4rXHRpbXBseSBBSVJfRU44ODExSF9QSFlcbitcdGhlbHBcbitcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cbitcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XG4rXHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbitcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXG4rXHQgIGxlZnQgcnVubmluZy5cbitcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0Kz0gZndub2RlX21kaW8ub1xuIG9iai0kKENPTkZJR19PRl9NRElPKVx0XHQrPSBvZl9tZGlvLm9cbiBcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCs9IG1kaW8tYWlyb2hhLm9cbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xuIG9iai0kKENPTkZJR19NRElPX0FTUEVFRClcdFx0Kz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0Kz0gbWRpby1iY20taXByb2Mub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3Mjdcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5AQCAtMCwwICsxLDM4MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8qXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXHQxMDAwXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuKyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TXHQ2MDAwMFxuK1xuK3N0cnVjdCBlbjg4MTFoX21jdSB7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHVuc2lnbmVkIGludCBwb2xsX21zO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbitcdHUzMiBmd192ZXJzaW9uO1xuK1x0Ym9vbCB3YXJuZWQ7XG4rXHRib29sIGZ3X3J1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4re1xuK1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxuK1x0XHRcdFx0aW50IHJlZ251bSlcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKGFkZHIgIT0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gbWRpb2J1c19jNDVfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcbitcdFx0XHRcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuK1x0XHRcdFx0XHR2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSlcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCJtZGlvXCIpO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4rXHQgKiBkZXRhY2guXG4rXHQgKi9cbitcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbitcdGlmICghYnVzKSB7XG4rXHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiYWlyb2hhLWVuODgxMWhcIjtcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcIiVzXCIsIGRldl9uYW1lKGRldikpO1xuK1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0aWYgKHBhcmVudC1cdTAwM2VyZWFkKSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbitcdFx0YnVzLVx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XG4rXHR9XG4rXHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xuK1x0XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gZW44ODExaF9tY3Vfd3JpdGVfYzQ1O1xuK1x0fVxuK1xuK1x0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcbitcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuK1x0XHQgKi9cbitcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHR9XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1kaW9idXNfZnJlZShidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWN1LVx1MDAzZWJ1cyA9IGJ1cztcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXHUwMDNlYnVzO1xuK1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdHJldHVybiBidXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZykge1xuK1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4rXHRcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cdTAwM2VtZGlvZGV2LCBcdTAwMjZtY3UtXHUwMDNlZndfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgISFjaGlwKTtcbitcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0ZGV2X2RiZyhkZXYsIFwiZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcXG5cIixcbitcdFx0XHRtY3UtXHUwMDNlZndfdmVyc2lvbiwgbWN1LVx1MDAzZXdhaXRlZF9tcyk7XG4rXHRcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XG4rXHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZGJnKGRldiwgXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbitcdCAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUncyBpbnRlcnJ1cHQgY29udHJvbGxlciBpc1xuK1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4rXHQgKi9cbitcdHJldCA9IG1jdS1cdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuO1xuK1xuK3JldHJ5OlxuK1x0aWYgKCFtY3UtXHUwMDNld2FybmVkIFx1MDAyNlx1MDAyNiBtY3UtXHUwMDNld2FpdGVkX21zIFx1MDAzZT0gRU44ODExSF9GV19XQVJOX01TKSB7XG4rXHRcdGlmICghbWN1LVx1MDAzZWZ3X3J1bm5pbmcpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXG5cIixcbitcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4rXHRcdFx0XHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbitcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNld2FybmVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5XG4rXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuK1x0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcbitcdCAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLlxuK1x0ICovXG4rXHRpZiAobWN1LVx1MDAzZWZ3X3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1jdS1cdTAwM2V3YWl0ZWRfbXMgXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXG4rXHRcdHJldHVybjtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cdTAwM2Vwb2xsX21zICogMiwgRU44ODExSF9GV19QT0xMX01BWF9NUyk7XG4rXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbitcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVx1MDAzZXBvbGxfbXM7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4rXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXHUwMDNlcG9sbF9tcykpO1xuK31cbitcbisvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqL1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cdTAwM2VtZGlvZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4rXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcIk1EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIW1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuK1x0ICovXG4rXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8pIFx1MDAzYz0gMCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcblwiLFxuK1x0XHRcdHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicmVzZXQtYXNzZXJ0LXVzXCIsIFx1MDAyNmFzc2VydF91cyk7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJlc2V0LWRlYXNzZXJ0LXVzXCIsIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbitcbitcdHJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGFzc2VydF91cylcbitcdFx0ZnNsZWVwKGFzc2VydF91cyk7XG4rXG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDApO1xuK1x0aWYgKGRlYXNzZXJ0X3VzKVxuK1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1jdSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3UtXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XG4rXG4rXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXG4rXHQgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLlxuK1x0ICovXG4rXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcIm1kaW9cIik7XG4rXHRpZiAoIW5wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXG4rXHRcdFx0XHQgICAgIFwibm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxcblwiKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcbitcdC8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi9cbitcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcInJlc2V0XCIsIEdQSU9EX0FTSVMpO1xuK1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCIpO1xuK1xuK1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXHUwMDNlcmVzZXRfZ3BpbywgXCJFTjg4MTFIIHJlc2V0XCIpO1xuK1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTtcbitcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuK1x0ICogYSBzdXNwZW5kaW5nIGJ1cy5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4rXHRpZiAobWN1LVx1MDAzZWJ1cykge1xuK1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIobWN1LVx1MDAzZWJ1cyk7XG4rXHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbitcdFx0bWN1LVx1MDAzZWJ1cyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovXG4rXHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0J3MgUEhZIHJlc3VtZXMgcmlnaHQgYWZ0ZXIgdGhpc1xuK1x0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cbitcdCAqL1xuK1x0Y2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpO1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4rXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbitcdFx0ICogb3duIHJlc3VtZSBoYXMgYWxyZWFkeSBmYWlsZWQgYnkgdGhlbiBhbmQgbm90aGluZyBjYWxsc1xuK1x0XHQgKiBwaHlfaW5pdF9odygpIHR3aWNlLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdG1jdS1cdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiYWlyb2hhLGVuODgxMWgtbWN1XCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXG4rXHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuK1x0Lm1kaW9kcnYuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwiYWlyb2hhLWVuODgxMWgtbWN1XCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGVuODgxMWhfbWN1X29mX21hdGNoLFxuK1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbitcdFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxuK1x0XHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxuK1x0XHQgKi9cbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuK1x0fSxcbit9O1xuK1xuK21kaW9fbW9kdWxlX2RyaXZlcihlbjg4MTFoX21jdV9kcml2ZXIpO1xuK1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRFNQKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IDE2YTkxNzFjYjgzODQuLjY1ZmExNzA3ZjU3ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSArMjAsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyX3BoeV9saWIuaFwiXG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwiYWlyb2hhL0V0aE1EMzIuZG0uYmluXCJcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9EU1BcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNXHRcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5ETS5iaW5cIlxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW5cIlxuIFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cdDB4MDAwMDAwMDBcbi0jZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0MHgwMDEwMDAwMFxuLVxuIC8qIE1JSSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcdFx0MHgxZFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcdEdFTk1BU0soNCwgMilcbkBAIC00NCw4ICszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCArMTAwLDYgQEBcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcdFx0MHgzYjMwXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1x0XHRcdEJJVCgwKVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXHRcdDB4M2IzY1xuLVxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVx0XHQweGNhMGY4XG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXHRcdEJJVCgwKVxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcdFx0QklUKDEpXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxuICNkZWZpbmUgRU44ODExSF9DTEtfQ0dNXHRcdFx0MHhjZjk1OFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXHRcdFx0QklUKDI2KVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcdFx0MHgwXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFx0XHQweDFcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbi1cbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXHRcdDB4ZjAyMGNcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXHRcdDB4ZjAyMThcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXHRcdDB4ZjAyMWNcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCArIDJdKTtcbi1cdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldF0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcbi1cdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHRpbnQgc2F2ZWRfcGFnZTtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0aWYgKGZ3LVx1MDAzZXNpemUgJSA0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cIixcbi1cdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuLVxuLVx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbitcdGludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZmFsc2UpO1xuIFxuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbi1cdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4tXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tXHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuLVx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4tXHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTUNVIG5vdCByZWFkeTogMHgleFxcblwiLCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk1DVSBub3QgcmVhZHk6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NoZWNrX2NyYyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgc2V0MSxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbitcdHJldCA9IGFpcl9md193cml0ZV9idWYoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgXHUwMDI2cHJpdi1cdTAwM2VmaXJtd2FyZV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4tXHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4rXHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbitcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpO1xuIFxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuQEAgLTgsMzcgKzgsNDIgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcl9waHlfbGliLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbitcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4rXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4rXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbiBcdGlmIChwYnVzX2RhdGFfbG93IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcbiBcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbitcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4gXHRpZiAocGJ1c19kYXRhX2hpZ2ggXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcbiBcbi1cdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbitcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbitcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTQ0LDcgKzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuK1x0XHRcdFx0XHQgICAgICBwYnVzX2RhdGEpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICAgcGJ1c19hZGRyZXNzLCByZXQpO1xuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXG5cIiwgX19mdW5jX18sXG5AQCAtMTgzLDggKzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xOTQsNiArMjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XG4gXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbitcdFx0XHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuK1x0aW50IHJldDtcbitcdHUxNiB2YWw7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4rXHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XG4rXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcbitcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4rXHRcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzYXZlZF9wYWdlO1xuK1xuK1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuK1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBzYXZlZF9wYWdlO1xuK31cbitcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcbit7XG4rXHRpbnQgcmVzdG9yZTtcbitcbitcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcbitcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuK1x0XHRcdFx0XHQgIHNhdmVkX3BhZ2UpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmVzdG9yZSBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByZXN0b3JlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpZiAobmVzdGVkKVxuK1x0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuK1x0ZWxzZVxuK1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4rfVxuK1xuK2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4rXHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpXG4re1xuK1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGZ3LVx1MDAzZXNpemUpIHtcbitcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuK1xuK1x0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXG4rXHRcdFx0XHRcdFx0ICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICsgZG9uZSxcbitcdFx0XHRcdFx0ICAgICAgZnctXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcbitcdFx0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LFxuK1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4rXHRcdH1cbitcbitcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0ZG9uZSArPSBjaHVuaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZndfd3JpdGVfYnVmKTtcbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbitcbitcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbitcbitcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4rXHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuK1x0fVxuK1xuK1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcbitcdFx0XHRcdCAgICAgICBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgICBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbitcdH1cbitcbitcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXG4rXHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4rXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbitcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4rXHR9XG4rXG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxuKyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXG4rXHRcdFx0ICAgICAgZGV2YWQgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xuK1xuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQsIHJlZ192YWx1ZTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcbitcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcbitcdFx0XHRcdHJlZ192YWx1ZSBcdTAwM2MgMCB8fFxuK1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuK1x0XHRcdFx0MjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmVnX3ZhbHVlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcIk1DVSBub3QgcmVhZHk6IDB4JXhcXG5cIiwgcmVnX3ZhbHVlKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xuK1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuK1x0XHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGRldl9pbmZvKGRldiwgXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwiLFxuK1x0XHRcdCAqZndfdmVyc2lvbik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbitcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcbitcdFx0XHRcdFx0ICAgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXG4rXHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0ZGV2X2luZm8oZGV2LCBcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcblwiLCAqZndfdmVyc2lvbik7XG4rXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcbitcbithaXJfZndfZG93bmxvYWRfcmVsMTpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcbitcbitcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxuK1x0ICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LlxuK1x0ICovXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4rXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaCBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5AQCAtMTAsMTIgKzEwLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuK1xuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1x0XHQweDFmXG4gXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkRcdFx0MHgwMDAwXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMVx0XHQweDAwMDFcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80XHRcdDB4MDAwNFxuIFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4rICovXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcdFx0MjMwNFxuK1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgKzM2LDIwIEBAXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXHRcdDB4MTdcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1x0XHQweDE4XG4gXG4rI2RlZmluZSBBSVJfRldfQUREUl9ETVx0XHRcdDB4MDAwMDAwMDBcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbitcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXHRcdDB4MGYwMDE4XG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcdFx0MHgxXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlx0XHQweDgwMDAwMFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbitcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1x0XHQweDgwMDlcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cdFx0MHgzYjNjXG4rXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xuIFxuK3N0cnVjdCBmaXJtd2FyZTtcbitcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4rXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuQEAgLTAsMCArMSwyNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XG4rXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRE1cdFx0XHRcImFpcm9oYS9FdGhNRDMyLmRtLmJpblwiXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXHRcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4rXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuKy8qIFJldHVybnMgMSB3aGVuIGl0IGFkb3B0ZWQgZmlybXdhcmUgdGhhdCB3YXMgYWxyZWFkeSBydW5uaW5nLiAqL1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyODQsNiArMjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0X19wcmludGYoMiwgMyk7XG4gY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo0Mi4wNDM0MDk5MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTM2OTUzMDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmlhZ2UgVGltZTogQWlyb2hhIE1ESU8gRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFuIEFpcm9oYSBFTjg4MTFIIE1DVSBNRElPIGRyaXZlci4gV2UncmUgdGFsa2luZyBhYm91dCBhIG5ldyBkcml2ZXIgZmlsZSAoYG1kaW8tYWlyb2hhLWVuODgxMWguY2ApLCBzb21lIFBIWSBkcml2ZXIgcmVmYWN0b3JpbmcgKGBhaXJfcGh5X2xpYi5jYCwgYGFpcl9lbjg4MTFoLmNgKSwgRFQgYmluZGluZ3MgKGBhaXJvaGEsZW44ODExaC1tY3UueWFtbGApLCBhbmQgc29tZSBNRElPIGFuZCBQSFktcmVsYXRlZCBoZWxwZXIgYWRkaXRpb25zIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLlxuXG5Ob3csIHRyaWFnZSB0aW1lISBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoZSBzdWJzeXN0ZW1zIHRvdWNoZWQgaW5jbHVkZSBkb2N1bWVudGF0aW9uIChub24tZXhlY3V0YWJsZSwgdGhhbmtmdWxseSksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgKGFsc28gbm90IGV4ZWN1dGFibGUpLCBhbmQgYSBoYW5kZnVsIG9mIGRyaXZlciBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2AgYW5kIGBpbmNsdWRlL2xpbnV4L2AgdHJlZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBhcmUgd2UgYWN0dWFsbHkgZGVhbGluZyB3aXRoIGhlcmU/ICBgbWRpby1haXJvaGEtZW44ODExaC5jYCBpcyBhbiBNRElPIGRldmljZSBkcml2ZXIgZm9yIGFuIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UuIFRoZSBgYWlyX2VuODgxMWguY2AgZmlsZSBpcyB0aGUgUEhZIGRyaXZlciBmb3IgdGhhdCBzYW1lIEFpcm9oYSBjaGlwLiAgRXNzZW50aWFsbHksIGl0J3MgYW4gTURJTyBkcml2ZXIgdGhhdCAqdGFsa3MqIHRvIGEgc3BlY2lmaWMgUEhZLlxuXG5UaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSAqZ2V0KiB0byB0aGlzIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/ICBSZW1lbWJlciBvdXIgdHJpYWdlIHBoaWxvc29waHkg4oCTIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiAgV2UncmUgdGFsa2luZyBhYm91dCBNRElPIGFuZCBQSFkgZHJpdmVycy4gV2UgY2FuJ3QgZnV6eiBjb2RlIHRoYXQgZG9lc24ndCBydW4uXG5cbkxldCdzIHNlZS4uLiBTZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemVzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gV2UgaGF2ZSB0byBhc2s6IGRvIHdlIGhhdmUgYWNjZXNzIHRvIHBoeXNpY2FsIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIHRvIHRlc3QgdGhpcz8gUHJvYmFibHkgbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciDigJMgd2UgbmVlZCBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2VzLiBTbywgaXMgYW4gTURJTyBkcml2ZXIgYWNjZXNzaWJsZSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IElzIHRoZXJlIHNvbWUgd2F5IHRvIGNyZWF0ZSBpdCBvciBtb2NrIGl0IGluIHVzZXJzcGFjZT9cblxuU28sIGJhY2sgdG8gdGhlIGRyaXZlci4gSXQgbG9va3MgbGlrZSBgZW44ODExaF9tY3VfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFzIGFuIE1ESU8gZHJpdmVyLiBNRElPIGRldmljZXMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHRocm91Z2ggRGV2aWNlIFRyZWUgKHdoaWNoIHdlIGhhdmUgYSBiaW5kaW5nIGZvciEpLCBBQ1BJLCBvciBhIHBsYXRmb3JtIE1ESU8gYnVzLiBPa2F5LCBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQvYW1kNjQuICBXaXRob3V0IGEgZGVkaWNhdGVkIERldmljZSBUcmVlIG5vZGUgb3IgYW4gTURJTyBidXMgaW5zdGFudGlhdGVkLCB0aGlzIGRyaXZlciB3b24ndCBiZSBwcm9iZWQgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuXG5cbldlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNRElPIGRldmljZXMgb3IgUEhZIGRldmljZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBvciBtb2NrZWQgaW4gTGludXggZnJvbSB1c2Vyc3BhY2UuIElmIG5vdCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGhhcmQgXCJub1wiIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY3VycmVudCB0cmlhZ2UgZ3VpZGVsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo1My40MTI5NDI1NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDI0MzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGEsZW44ODExaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTMtLS0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw9MTI9ZGVzY3JpcHRpb246IHxcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMjctICBBIGJvYXJkIHRoYXQgaGFzIGZpcm13YXJlIGluIGhhbmQgd2hpbGUgaXRzIE1ESU8gYnVzIGlzIGVudW1lcmF0ZWQgY2FuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDoyODogIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0yOS0gIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbD0zMj1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0zNi0gIGNvbXBhdGlibGU6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDozNzogICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwtMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTY3LSAgICAgICAgdHlwZTogb2JqZWN0XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbDo2ODogICAgICAgICRyZWY6IGFpcm9oYSxlbjg4MTFoLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC02OS0gICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWw9OTI9ZXhhbXBsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sLTEwMS0gICAgICAgIG1jdUBkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sOjEwMjogICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjg4MTFoLW1jdVxcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbC0xMDMtICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9haXJvaGEsZW44ODExaC55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuTUFJTlRBSU5FUlM9NzU2PVM6XFx0TWFpbnRhaW5lZFxcbk1BSU5UQUlORVJTOjc1NzpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcXG5NQUlOVEFJTkVSUy03NTgtRjpcXHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM9MzU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmM6MzU2OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuODgxMWgtbWN1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jLTM1Ny1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MjI6NTUuODc3MTk0MTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDQwOTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFBIWSBBYnN0cmFjdGlvbiBMYXllcidzIExvY2tpbmcgTWVjaGFuaXNtcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSB1c2VkIHdpdGhpbiB0aGUgUEhZIGFic3RyYWN0aW9uIGxheWVyLCBzcGVjaWZpY2FsbHkgd2hhdCdzIGJlZW4gYWRkZWQgaW4gYGluY2x1ZGUvbGludXgvcGh5LmhgLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgaXQncyBkZWZpbmluZyBhIGZldyBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgbXV0ZXggYXNzb2NpYXRlZCB3aXRoIGFuIE1ESU8gYnVzLiBUaGVzZSBhcmUgY3J1Y2lhbDogYG1kaW9kZXZfbG9ja2AsIGBtZGlvZGV2X2xvY2tfbmVzdGVkYCwgYW5kIGBtZGlvZGV2X3VubG9ja2AuIFRoZXkgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgYG1kaW9fbG9ja2AgbXV0ZXggdGhhdCBiZWxvbmdzIHRvIHRoZSBNRElPIGJ1cy4gVGhlIGBuZXN0ZWRgIHZlcnNpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoZSBwb3RlbnRpYWwgZm9yIG5lc3RlZCBsb2NraW5nLCB3aGljaCBJJ2QgZXhwZWN0IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJ1cyBhY2Nlc3NlZCB0aHJvdWdoIGFub3RoZXIgYnVzLCBsaWtlIHdoYXQgeW91J2Qgc2VlIGluIHRoZSBgbWRpb2J1c19yZWFkX25lc3RlZCgpYCBmdW5jdGlvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogYmVpbmcgdXNlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBNRElPIGZyYW1ld29yay4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIGFuZCBnZXQgYSBsaXN0IG9mIGFsbCB0aGVpciB1c2FnZSB0byBjaGVjayB3aGVyZSB0aGUgbG9ja3MgYXJlIHVzZWQgYW5kIGluIHdoaWNoIHNpdHVhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMjo1OC45Njc2MDc5MzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1MDA1NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvZGV2Xyhsb2NrfHVubG9jaylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc1LS8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc4LVxcdGlmIChuZXN0ZWQpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5OlxcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0yODQ9aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyOTk6XFx0XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMxMi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMTM6XFx0XFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzI0PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzI5LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjMzMDpcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzMxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzQwLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjM0MTpcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTM0NT1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzUxOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNjItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzYzOlxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM2NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNzItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNzQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zODQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mzg1OlxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM4Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9NDE0PXN0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjQxODpcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtNDE5LVxcdHJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjQyMDpcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI4Ni1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjg4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXFxuaW5jbHVkZS9saW51eC9waHkuaDoyMjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X2xvY2tfbmVzdGVkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk3LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjI5ODpzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl91bmxvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjAxLjkxNzY3MDY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDk0OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBtZGlvZGV2YCBMb2NraW5nIGluIHRoZSBQSFkgRHJpdmVyIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXM6IGBtZGlvZGV2X2xvY2tgLCBgbWRpb2Rldl91bmxvY2tgLCBhbmQgYG1kaW9kZXZfbG9ja19uZXN0ZWRgLiBUaGUgY29kZSBpcyBwb2ludGluZyBvdXQgdGhhdCB0aGV5J3JlIGFsbCBkZWZpbmVkIGFzIGlubGluZSBoZWxwZXJzLCBhbmQgdGhleSdyZSAqb25seSogdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYC4gVGhhdCB0ZWxscyBtZSBhIGZldyB0aGluZ3MgaW1tZWRpYXRlbHkuIEZpcnN0LCB0aGVzZSBhcmUgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gdGhlIEFpclBIWSBpbXBsZW1lbnRhdGlvbi4gU2Vjb25kLCBiZWluZyBpbmxpbmUgbWVhbnMgdGhlcmUncyBwb3RlbnRpYWxseSBsZXNzIG92ZXJoZWFkLCBhcyB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIHRoZW0gbW9yZSBhZ2dyZXNzaXZlbHkgYmFzZWQgb24gdGhlaXIgdXNhZ2UuIFRoaXJkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQWlyUEhZIGxpYnJhcnkgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBsb2NrcyBhcmUgbmVjZXNzYXJ5IGFuZCBob3cgdGhleSdyZSBiZWluZyB1c2VkLlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGZvY3VzIGlzIG9uIGZpbmRpbmcgb3V0IHdoYXQgZmlsZXMgdXNlIGBhaXJfcGh5X2xpYi5jYCwgYXMgd2VsbCBhcyBgYWlyX2VuODgxMWguY2AgYW5kIGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBsaWJyYXJ5IGFuZCB0aGVyZWZvcmUsIGludGVyYWN0aW5nIHdpdGggdGhlIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9ja2luZyBsb2dpYyBpcy4gS25vd2luZyB3aGF0IGNhbGxzIHRoaXMgY29kZSBkaXJlY3RseSBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBjb25jdXJyZW5jeSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JrIFBIWSBkcml2ZXIgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjA0Ljc4MjYyMzg2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3NTA0MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFJUl9ORVRfUEhZTElCfEFJUl9FTjg4MTFIX1BIWXxhaXJfcGh5X2xpYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MzI9Y29uZmlnIE1ESU9fQUlST0hBX0VOODgxMUhcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzozNjpcXHRzZWxlY3QgQUlSX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzc6XFx0aW1wbHkgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTkzPWNvbmZpZyBBSVJfQU44ODAxX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk1OlxcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMDE6XFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAyLVxcdHNlbGVjdCBQSFlfQ09NTU9OX1BST1BTXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDUtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTA2OmNvbmZpZyBBSVJfTkVUX1BIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcXHQrPSBhaXJfYW44ODAxLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICArPSBhaXJfZW44ODExaC5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcXHQrPSBhaXJfcGh5X2xpYi5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19BTURfUEhZKVxcdFxcdCs9IGFtZC5vXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTIxLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MjI6I2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0yMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIzLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI0OiNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMTgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MTk6I2luY2x1ZGUgXFxcImFpcl9waHlfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjA3Ljc1MDEzNjQzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU3MzAwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJDYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50P1wiIExldCdzIGJyZWFrIGl0IGRvd246IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2AgaXMgdGhlIE1ESU8gZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGFuZCB3ZSBhbHNvIGhhdmUgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgdGhlIHNhbWUuIFRoZXJlJ3MgYWxzbyBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNgLCB3aGljaCBpcyB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5LCBhbmQgYGFpcl9hbjg4MDEuY2AuXG5cbk15IGZpcnN0IGd1dCBjaGVjayBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHBpZWNlcyBvZiBjb2RlIGFyZSBldmVuIHJlbW90ZWx5IGFjY2Vzc2libGUgaW4gdGhlIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSAoUUVNVSBvciBHQ0Ugb24geDg2XzY0KS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBBaXJvaGEgRU44ODExSCBoYXJkd2FyZSBvciBNRElPIGJ1c2VzIGFyZSBlbXVsYXRlZCBpbiBRRU1VLiBUaGVuLCBJIG5lZWQgdG8ga25vdyBpZiB1c2Vyc3BhY2UgY2FuIGNyZWF0ZSBvciBhdHRhY2ggTURJTyBvciBQSFkgZGV2aWNlcy5cblxuRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgTURJTyBidXMgcmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgYnkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXJzLCBvciBieSBPRiBwbGF0Zm9ybSBkcml2ZXJzLiBQSFkgZGV2aWNlcyBhcmUgcHJvYmVkIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGFkZHJlc3NlcywgcmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVycywgb3IgcGFyc2luZyB0aGUgRGV2aWNlIFRyZWUuIFNwZWNpZmljYWxseSwgdGhlc2UgQWlyb2hhIE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBEZXZpY2UgVHJlZSBgb2ZfbWRpb2AuXG5cblRoZSBwcm9ibGVtIGlzLCBhcyBmYXIgYXMgSSBrbm93LCBub25lIG9mIHRoaXMgaGFyZHdhcmUgZXhpc3RzIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIFZNcy4gU3l6a2FsbGVyIHdvbid0IGJlIGFibGUgdG8gaW5zdGFudGlhdGUgYW4gYXJiaXRyYXJ5IE1ESU8gb3IgUEhZIGRldmljZSB3aXRob3V0IHZpcnR1YWwgaGFyZHdhcmUgb3IgbW9jayBkZXZpY2VzLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGNsZWFybHkgc3RhdGVzIHRoYXQgd2UgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgd2hlbiBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgc3RyaWN0bHkgZmFsbHMgaW50byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGluY2x1ZGU6IFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBhbmQgbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSBjaGFuZ2VzLiBTZWN0aW9uIDEgYWxzbyBzdGF0ZXMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlICpwcmltYXJ5KiBnYXRlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBtYXAgdGhlbSBiYWNrIHRvIHRob3NlIGNyaXRlcmlhOlxuXG4xLiAgYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxgOiBEZXZpY2UgdHJlZSBzY2hlbWEgZG9jdW1lbnRhdGlvbi4gVGhhdCdzIG5vbi1leGVjdXRhYmxlLCBkb2N1bWVudGF0aW9uLlxuMi4gIGBNQUlOVEFJTkVSU2A6IE1haW50YWluZXJzIGZpbGUgdXBkYXRlLiBBZ2Fpbiwgbm9uLWV4ZWN1dGFibGUuXG4zLiAgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2A6IEFkZGVkIGBDT05GSUdfTURJT19BSVJPSEFfRU44ODExSGAuIEJ1aWxkIHN5c3RlbSBjaGFuZ2UuXG40LiAgYGRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVgOiBCdWlsZCBydWxlLiBCdWlsZCBzeXN0ZW0gY2hhbmdlLlxuNS4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY2A6IE5ldyBNRElPIGRyaXZlciwgYnV0ICpmb3IqIGEgc3BlY2lmaWMgQWlyb2hhIE1DVS4gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50cy5cbjYuICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOiBEcml2ZXIgZm9yIGEgKnNwZWNpZmljKiBBaXJvaGEgUEhZLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG43LiAgYGRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jYDogTGlicmFyeSBmdW5jdGlvbnMgZm9yIEFpcm9oYSBQSFlzLiBGdW5jdGlvbmFsaXR5IGlzIHNwZWNpZmljIHRvIEFpcm9oYSBoYXJkd2FyZSwgc28gdGhpcyBpcyBhbHNvIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cbjguICBgZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhgOiBJbnRlcm5hbCBoZWFkZXIgZm9yIEFpcm9oYSBQSFlzLlxuOS4gYGluY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhgOiBIZWFkZXIgZm9yIEFpcm9oYSBFTjg4MTFIIE1DVSBkcml2ZXIuXG4xMC4gYGluY2x1ZGUvbGludXgvcGh5LmhgOiBBZGRzIGlubGluZSBsb2NrIGhlbHBlcnMuIE9ubHkgdXNlZCBieSB0aGUgQWlyb2hhIFBIWSBsaWJyYXJ5LCBzbyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cbkl0J3MgY2xlYXIgdG8gbWUgdGhhdCBhbGwgbW9kaWZpZWQgY29kZSBpcyBlaXRoZXIgbm9uLWtlcm5lbCAvIG5vbi1leGVjdXRhYmxlIChEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZy9NYWtlZmlsZSkgb3Igc3BlY2lmaWMgdG8gQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBoYXJkd2FyZSAoYW4gTURJTyBtaWNyb2NvbnRyb2xsZXIgLyBFdGhlcm5ldCBQSFkgY2hpcCkuIEFuZCB3ZSAqa25vdyogdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIG11c3QgYmUgYGZhbHNlYC5cblxuRm9yIGBzZXQtcmVzdWx0c2AsIEknbGwgc2V0IHRoZSBmb2xsb3dpbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBjaGFuZ2VzIGFkZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSBhbmQgcmVmYWN0b3IgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcyBpbiB0aGUgQWlyb2hhIFBIWSBkcml2ZXIgbGlicmFyeSAoYGFpcl9lbjg4MTFoLmNgLCBgYWlyX3BoeV9saWIuY2ApLiBUaGlzIGhhcmR3YXJlXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyMywiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjIzOjE4LjIwNzQ0MDEwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgYSBuZXcgTURJTyBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgTUNVIChtZGlvLWFpcm9oYS1lbjg4MTFoLmMpLCB3aGlsZSByZWZhY3RvcmluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBNRElPIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGluIHRoZSBBaXJvaGEgUEhZIGxpYnJhcnkgKGFpcl9lbjg4MTFoLmMsIGFpcl9waHlfbGliLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgQWlyb2hhIHBoeXNpY2FsIEFTSUMvUEhZIGhhcmR3YXJlIGFuZCBkZXZpY2UtdHJlZSBiaW5kaW5ncyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCwgcmVuZGVyaW5nIHRoZSBleGVjdXRhYmxlIGNoYW5nZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBhIG5ldyBNRElPIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1UgKG1kaW8tYWlyb2hhLWVuODgxMWguYyksIHdoaWxlIHJlZmFjdG9yaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIE1ESU8gcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMgaW4gdGhlIEFpcm9oYSBQSFkgbGlicmFyeSAoYWlyX2VuODgxMWguYywgYWlyX3BoeV9saWIuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBBaXJvaGEgcGh5c2ljYWwgQVNJQy9QSFkgaGFyZHdhcmUgYW5kIGRldmljZS10cmVlIGJpbmRpbmdzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LCByZW5kZXJpbmcgdGhlIGV4ZWN1dGFibGUgY2hhbmdlcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToyMzoxOC4yMDc0ODUzMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8dvq8[1] Phase: Running StartedAt: 2026-09-08 19:23:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dvq8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 19:23:29 +0000 UTC FinishedAt: 2026-09-08 19:23:36 +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,}