Name: series-workflowvznt4 Phase: Failed StartedAt: 2026-06-25 14:14:33 +0000 UTC FinishedAt: 2026-06-25 14:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznt4[0] Phase: Succeeded StartedAt: 2026-06-25 14:14:33 +0000 UTC FinishedAt: 2026-06-25 14:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznt4[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 14:14:33 +0000 UTC FinishedAt: 2026-06-25 14:25:14 +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+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NThkNzFmZmNlZjM2YzZlN2M0OTM5YjhhZWVjMGY0OGI3ZWI4YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAxNDoyNDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjMgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUXVhbGNvbW0gSVBRNTAxOCBCbHVldG9vdGhcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gR2VvcmdlIE1vdXNzYWxlbSBcdTAwM2NnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tXHUwMDNlXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idFxuJiM0MztcbiYjNDM7ICBpbnRlcnJ1cHRzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBJbnRlcnJ1cHQgbGluZSBmcm9tIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIHRvIHRoZSBob3N0IHByb2Nlc3NvclxuJiM0MzsgICAgICAgICAgdG8gbm90aWZ5IGl0IG9mIGV2ZW50cyBzdWNoIGFzIHJlXG4mIzQzO1xuJiM0MzsgIHFjb20saXBjOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZS1hcnJheVxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBwaGFuZGxlIHRvIGEgc3lzY29uIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBBUENTIHJlZ2lzdGVyc1xuJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyBvZmZzZXQgdG8gdGhlIHJlZ2lzdGVyIHdpdGhpbiB0aGUgc3lzY29uXG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiB1MzIgcmVwcmVzZW50aW5nIHRoZSBpcGMgYml0IHdpdGhpbiB0aGUgcmVnaXN0ZXJcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiB8XG4mIzQzOyAgICAgIFRoZXNlIGVudHJpZXMgc3BlY2lmeSB0aGUgb3V0Z29pbmcgSVBDIGJpdCB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHJlbW90ZVxuJiM0MzsgICAgICBNMCBCVFNTIGNvcmUgb2YgYSBob3N0IGV2ZW50IG9yIGZvciBzZW5kaW5nIGFuIEFDSyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvclxuJiM0MzsgICAgICBleHBlY3RzIGl0LlxuJiM0MztcbiYjNDM7ICBxY29tLHJwcm9jOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFBoYW5kbGUgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3Igbm9kZSByZXByZXNlbnRpbmcgdGhlIE0wIEJUU1MgY29yZS5cbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gaW50ZXJydXB0c1xuJiM0MzsgIC0gcWNvbSxpcGNcbiYjNDM7ICAtIHFjb20scnByb2NcbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogYmx1ZXRvb3RoLWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IHFjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaFx1MDAzZVxuJiM0MztcbiYjNDM7ICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcbiYjNDM7ICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgIHFjb20saXBjID0gXHUwMDNjXHUwMDI2YXBjc19nbGIgOCAyM1x1MDAzZTtcbiYjNDM7ICAgICAgaW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgcWNvbSxycHJvYyA9IFx1MDAzY1x1MDAyNm0wX2J0c3NcdTAwM2U7XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTdiYjY4MTVkNzE2ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEdlb3JnZSBNb3Vzc2FsZW0gXHUwMDNjZ2VvcmdlLm1vdXNzYWxlbUBvdXRsb29rLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246XG4mIzQzOyAgUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIFNlY3VyZSBJbWFnZSBMb2FkZXIgbG9hZHMgZmlybXdhcmUgYW5kIHBvd2VycyB1cFxuJiM0MzsgIHRoZSBNMCBCVFNTIHJlbW90ZSBwcm9jZXNzb3IgY29yZSBvbiB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idHNzLXBpbFxuJiM0MztcbiYjNDM7ICBmaXJtd2FyZS1uYW1lOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBGaXJtd2FyZSBuYW1lIGZvciB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBjb3JlXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBNMCBCVFNTIGxvdyBwb3dlciBvc2NpbGxhdG9yIGNsb2NrXG4mIzQzO1xuJiM0MzsgIGNsb2NrLW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfbHBvX2Nsa1xuJiM0MztcbiYjNDM7ICBtZW1vcnktcmVnaW9uOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXJ2ZWQgbWVtb3J5IGNhcnZlb3V0XG4mIzQzO1xuJiM0MzsgIHJlc2V0czpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBNMCBCVFNTIHJlc2V0XG4mIzQzO1xuJiM0MzsgIHJlc2V0LW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfcmVzZXRcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gZmlybXdhcmUtbmFtZVxuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcmVzZXRzXG4mIzQzOyAgLSByZXNldC1uYW1lc1xuJiM0MzsgIC0gbWVtb3J5LXJlZ2lvblxuJiM0MztcbiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sZ2NjLWlwcTUwMTguaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcmVzZXQvcWNvbSxnY2MtaXBxNTAxOC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgcmVtb3RlcHJvYyB7XG4mIzQzOyAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtYnRzcy1waWxcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICBmaXJtd2FyZS1uYW1lID0gXCYjMzQ7cWNhL2J0X2Z3X3BhdGNoLm1iblwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXHUwMDNlO1xuJiM0MzsgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2J0c3NfbHBvX2Nsa1wmIzM0OztcbiYjNDM7ICAgICAgcmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbiYjNDM7ICAgICAgcmVzZXQtbmFtZXMgPSBcJiMzNDtidHNzX3Jlc2V0XCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgbWVtb3J5LXJlZ2lvbiA9IFx1MDAzY1x1MDAyNmJ0c3NfcmVnaW9uXHUwMDNlO1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuaW5kZXggNmY4MDA0YTIyYTFmZmQuLjRmZGYyMGM4N2IwYTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuQEAgLTE3LDYgJiM0MzsxNywxNyBAQCAvIHtcbiBcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdCNzaXplLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcbiYjNDM7XHRibHVldG9vdGg6IGJsdWV0b290aCB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWJ0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdHFjb20saXBjID0gXHUwMDNjXHUwMDI2YXBjc19nbGIgOCAyM1x1MDAzZTtcbiYjNDM7XHRcdGludGVycnVwdHMgPSBcdTAwM2NHSUNfU1BJIDE2MiBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRxY29tLHJwcm9jID0gXHUwMDNjXHUwMDI2bTBfYnRzc1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0dXMgPSBcJiMzNDtkaXNhYmxlZFwmIzM0OztcbiYjNDM7XHR9O1xuJiM0MztcbiBcdGNsb2NrcyB7XG4gXHRcdGdlcGh5X3J4X2NsazogZ2VwaHktcngtY2xrIHtcbiBcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7Zml4ZWQtY2xvY2tcJiMzNDs7XG5AQCAtMTMxLDExICYjNDM7MTQyLDMxIEBAIHBzY2kge1xuIFx0XHRtZXRob2QgPSBcJiMzNDtzbWNcJiMzNDs7XG4gXHR9O1xuIFxuJiM0MztcdG0wX2J0c3M6IHJlbW90ZXByb2Mge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRmaXJtd2FyZS1uYW1lID0gXCYjMzQ7cWNhL2J0X2Z3X3BhdGNoLm1iblwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZnY2MgR0NDX0JUU1NfTFBPX0NMS1x1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW5hbWVzID0gXCYjMzQ7YnRzc19scG9fY2xrXCYjMzQ7O1xuJiM0MztcdFx0cmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LW5hbWVzID0gXCYjMzQ7YnRzc19yZXNldFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRtZW1vcnktcmVnaW9uID0gXHUwMDNjXHUwMDI2YnRzc19yZWdpb25cdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0fTtcbiYjNDM7XG4gXHRyZXNlcnZlZC1tZW1vcnkge1xuIFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzJcdTAwM2U7XG4gXHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdFx0cmFuZ2VzO1xuIFxuJiM0MztcdFx0YnRzc19yZWdpb246IGJsdWV0b290aEA3MDAwMDAwIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcdTAwM2U7XG4mIzQzO1x0XHRcdG5vLW1hcDtcbiYjNDM7XHRcdH07XG4mIzQzO1xuIFx0XHRib290bG9hZGVyQDRhODAwMDAwIHtcbiBcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHg0YTgwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4gXHRcdFx0bm8tbWFwO1xuQEAgLTY0Nyw3ICYjNDM7Njc4LDggQEAgd2F0Y2hkb2c6IHdhdGNoZG9nQGIwMTcwMDAge1xuIFxuIFx0XHRhcGNzX2dsYjogbWFpbGJveEBiMTExMDAwIHtcbiBcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWFwY3MtYXBwcy1nbG9iYWxcJiMzNDssXG4tXHRcdFx0XHQgICAgIFwmIzM0O3Fjb20saXBxNjAxOC1hcGNzLWFwcHMtZ2xvYmFsXCYjMzQ7O1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7cWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdFx0cmVnID0gXHUwMDNjMHgwYjExMTAwMCAweDEwMDBcdTAwM2U7XG4gXHRcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiBcdFx0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZhNTNwbGxcdTAwM2UsIFx1MDAzY1x1MDAyNnhvX2JvYXJkX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2Z2NjIEdQTEwwXHUwMDNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG5pbmRleCA0ZThjMjRkNzU3ZTlhNC4uNmI4YmVkNmE2ZmZkYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTcgQEAgY29uZmlnIEJUX01US1VBUlRcbiBcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1lZGlhVGVrIEJsdWV0b290aCBVQVJUIGRldmljZXNcbiBcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxuIFxuJiM0Mztjb25maWcgQlRfUUNPTUlQQ1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IEJUX1FDQVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBkcml2ZXIuXG4mIzQzO1x0ICBUaGlzIGRyaXZlciBpcyB1c2VkIHRvIGJyaWRnZSBIQ0kgZGF0YSBvbnRvIHNoYXJlZCBtZW1vcnkgYmV0d2VlblxuJiM0MztcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXG4mIzQzO1xuJiM0MztcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSSBvdmVyIFF1YWxjb21tIElQQyBpbnRvIHRoZVxuJiM0MztcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuXG4mIzQzO1xuIGNvbmZpZyBCVF9RQ09NU01EXG4gXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBTTUQgYmFzZWQgSENJIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXG5pbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTClcdFx0JiM0Mzs9IGJ0bXJ2bC5vXG4gb2JqLSQoQ09ORklHX0JUX01SVkxfU0RJTylcdCYjNDM7PSBidG1ydmxfc2Rpby5vXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXHQmIzQzOz0gYnRtdGtzZGlvLm9cbiBvYmotJChDT05GSUdfQlRfTVRLVUFSVClcdCYjNDM7PSBidG10a3VhcnQub1xuJiM0MztvYmotJChDT05GSUdfQlRfUUNPTUlQQylcdCYjNDM7PSBidHFjb21pcGMub1xuIG9iai0kKENPTkZJR19CVF9RQ09NU01EKVx0JiM0Mzs9IGJ0cWNvbXNtZC5vXG4gb2JqLSQoQ09ORklHX0JUX0JDTSlcdFx0JiM0Mzs9IGJ0YmNtLm9cbiBvYmotJChDT05GSUdfQlRfUlRMKVx0XHQmIzQzOz0gYnRydGwub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG5pbmRleCAwNGViZTI5MGJjNzg0ZS4uZTEzNmU5MTk3NmNmYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG5AQCAtMzgwLDYgJiM0MzszODAsOSBAQCBzdGF0aWMgaW50IHFjYV90bHZfY2hlY2tfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIFRMVl9UWVBFX05WTTpcbiYjNDM7XHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoZndfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB0bHZfdHlwZV9oZHIpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTc5NCw2ICYjNDM7Nzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0ZWxzZVxuIFx0XHRyb21fdmVyID0gKChzb2NfdmVyIFx1MDAyNiAweDAwMDAwZjAwKSBcdTAwM2VcdTAwM2UgMHgwNCkgfCAoc29jX3ZlciBcdTAwMjYgMHgwMDAwMDAwZik7XG4gXG4mIzQzO1x0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxuJiM0MztcdFx0Z290byBkb3dubG9hZF9udm07XG4mIzQzO1xuIFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxuIFx0XHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xuIFxuQEAgLTg4MSw2ICYjNDM7ODg3LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0aWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKVxuIFx0XHRxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCBcdTAwMjZib2FyZGlkKTtcbiBcbiYjNDM7ZG93bmxvYWRfbnZtOlxuIFx0LyogRG93bmxvYWQgTlZNIGNvbmZpZ3VyYXRpb24gKi9cbiBcdGNvbmZpZy50eXBlID0gVExWX1RZUEVfTlZNO1xuIFx0aWYgKGZpcm13YXJlX25hbWUpIHtcbkBAIC05MzksNiAmIzQzOzk0NiwxMCBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRcdFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4gXHRcdFx0XHQgXCYjMzQ7aG10bnZcJiMzNDssIHNvY190eXBlLCB2ZXIsIHJvbV92ZXIsIGJvYXJkaWQpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBRQ0FfSVBRNTAxODpcbiYjNDM7XHRcdFx0c25wcmludGYoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtxY2EvbXBudiUwMnguYmluXCYjMzQ7LCByb21fdmVyKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0c25wcmludGYoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLFxuIFx0XHRcdFx0IFwmIzM0O3FjYS9udm1fJTA4eC5iaW5cJiMzNDssIHNvY192ZXIpO1xuQEAgLTk1OCw2ICYjNDM7OTY5LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbiYjNDM7XHRcdG1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpO1xuJiM0MztcbiBcdHN3aXRjaCAoc29jX3R5cGUpIHtcbiBcdGNhc2UgUUNBX1FDQTIwNjY6XG4gXHRjYXNlIFFDQV9RQ0E2MzkwOlxuQEAgLTk2NSw2ICYjNDM7OTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0Y2FzZSBRQ0FfV0NONjc1MDpcbiBcdGNhc2UgUUNBX1dDTjY4NTU6XG4gXHRjYXNlIFFDQV9XQ043ODUwOlxuJiM0MztcdGNhc2UgUUNBX0lQUTUwMTg6XG4gXHRcdGVyciA9IHFjYV9kaXNhYmxlX3NvY19sb2dnaW5nKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMTAwMSw2ICYjNDM7MTAxNiw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbiBcdGNhc2UgUUNBX1dDTjY3NTA6XG4gXHRjYXNlIFFDQV9XQ042ODU1OlxuIFx0Y2FzZSBRQ0FfV0NONzg1MDpcbiYjNDM7XHRjYXNlIFFDQV9JUFE1MDE4OlxuIFx0XHQvKiBnZXQgZncgYnVpbGQgaW5mbyAqL1xuIFx0XHRlcnIgPSBxY2FfcmVhZF9md19idWlsZF9pbmZvKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5pbmRleCA4ZjNjMWIxYzc3YjNkZS4uMzQzY2Q2MmQxMTM3MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5AQCAtNTQsNiAmIzQzOzU0LDggQEBcbiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX0lEXHRcdDB4MTIwMFxuICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfTUFTS1x0XHQweDAwMDBmZjAwXG4gXG4mIzQzOyNkZWZpbmUgTlZNX1JFQURZX0RFTEFZX01TXHRcdDE1MDBcbiYjNDM7XG4gZW51bSBxY2FfYmF1ZHJhdGUge1xuIFx0UUNBX0JBVURSQVRFXzExNTIwMFx0PSAwLFxuIFx0UUNBX0JBVURSQVRFXzU3NjAwLFxuQEAgLTE1OCw2ICYjNDM7MTYwLDcgQEAgZW51bSBxY2FfYnRzb2NfdHlwZSB7XG4gXHRRQ0FfV0NONjc1MCxcbiBcdFFDQV9XQ042ODU1LFxuIFx0UUNBX1dDTjc4NTAsXG4mIzQzO1x0UUNBX0lQUTUwMTgsXG4gfTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlRfUUNBKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjYyYTc1YjZjNGE5MGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXG5AQCAtMCwwICYjNDM7MSw5MzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2lycS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlbW90ZXByb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0cWNhLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKiBNZXNzYWdlIGhlYWRlciBmb3JtYXQuXG4mIzQzOyAqXG4mIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIEJpdFBvcyB8ICAgIDE1ICAgIHwgMTQgfCAxMyB8IDEyIHwgMTEgfCAxMCB8ICA5ICB8ICA4ICB8ICAgIDcgLSAwICAgICB8XG4mIzQzOyAqICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIEZpZWxkICB8IGxvbmdfbXNnIHxBQ0sgfCAgICAgICAgUkZVICAgICAgICB8ICBwa3RfdHlwZSB8ICAgIGNtZCAgICAgICB8XG4mIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXG4mIzQzOyAqIC0gbG9uZ19tc2cgICA6IElmIHNldCwgaW5kaWNhdGVzIHRoYXQgdGhlIHBheWxvYWQgaXMgbGFyZ2VyIHRoYW4gdGhlXG4mIzQzOyAqICAgICAgICAgICAgICAgIElQQ19NU0dfUExEX1NaLiBUaGUgcGF5bG9hZCBpbnN0ZWFkIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGVcbiYjNDM7ICogICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlIGJ1ZmZlciBpbiB0aGUgc2hhcmVkIEJUU1MgbWVtb3J5IHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiAtIEFDSyAgICAgICA6IFNldCBpZiBzZW5kaW5nIEFDSyBpZiByZXF1aXJlZCBieSBzZW5kaW5nIGFja25vd2xlZGVnZW1lbnRcbiYjNDM7ICogICAgICAgICAgICAgICAgdG8gc2VuZGVyIGkuZS4gc2VuZCBhbiBhY2sgSVBDIGludGVycnVwdCBpZiBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIC0gUkZVICAgICAgICA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKlxuJiM0MzsgKiAtIHBrdF90eXBlICAgOiBJUEMgUGFja2V0IFR5cGVcbiYjNDM7ICpcbiYjNDM7ICogLSBjbWQgICAgICAgIDogQ29udGFpbnMgdW5pcXVlIGNvbW1hbmQgSURcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElQQ19NU0dfSERSX1NaXHRcdDRcbiYjNDM7I2RlZmluZSBJUENfTVNHX1BMRF9TWlx0XHQ0MFxuJiM0MzsjZGVmaW5lIElQQ19UT1RBTF9NU0dfU1pcdChJUENfTVNHX0hEUl9TWiAmIzQzOyBJUENfTVNHX1BMRF9TWilcbiYjNDM7XG4mIzQzOy8qIE1lc3NhZ2UgSGVhZGVyICovXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9MT05HX01TR1x0QklUKDE1KVxuJiM0MzsjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1x0XHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9QS1RfVFlQRV9NQVNLXHRHRU5NQVNLKDksIDgpXG4mIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVFx0MFxuJiM0MzsjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0hDSVx0MVxuJiM0MzsjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0FVRElPXHQyXG4mIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVXHQzXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9DTURfTUFTS1x0R0VOTUFTSyg3LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBJUENfQ01EX1NUT1BcdFx0MVxuJiM0MzsjZGVmaW5lIElQQ19DTURfU1dJVENIX1RPX1VBUlRcdDJcbiYjNDM7I2RlZmluZSBJUENfQ01EX1BSRVBBUkVfRFVNUFx0M1xuJiM0MzsjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QXHQ0XG4mIzQzOyNkZWZpbmUgSVBDX0NNRF9TVEFSVFx0XHQ1XG4mIzQzO1xuJiM0MzsjZGVmaW5lIElQQ19UWF9RU0laRVx0XHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZVx0VE9fQVBQU19BRERSKGEpXHRcdChkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgKGludCkodWludHB0cl90KWEpXG4mIzQzOyNkZWZpbmVcdFRPX0JUX0FERFIoYSlcdFx0KGEgLSBkZXNjLVx1MDAzZW1lbV9yZWdpb24pXG4mIzQzOyNkZWZpbmUgSVBDX0xCVUZfU1oodywgeCwgeSwgeilcdCgoKFRPX0JUX0FERFIoKHZvaWQgKil3KSAmIzQzOyB3LVx1MDAzZXgpIC0gdy1cdTAwM2V5KSAvIHctXHUwMDNleilcbiYjNDM7XG4mIzQzOyNkZWZpbmVcdEdFVF9OT19PRl9CTE9DS1MoYSwgYikgKChhICYjNDM7IGIgLSAxKSAvIGIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdFVF9SWF9JTkRFWF9GUk9NX0JVRih4LCB5KVx0KCh4IC0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgLyB5KVxuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcdCgoeCAtIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYpIC8geSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeilcdFx0XFxcbiYjNDM7XHQoKGJ1ZiAmIzQzOyBsZW4pIFx1MDAzZSAoZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZiAmIzQzO1x0XFxcbiYjNDM7XHQoc3ogKiBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVNcdDUwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJUU1NfUEFTX0lEXHQweGNcbiYjNDM7XG4mIzQzO3N0cnVjdCBsb25nX21zZ19pbmZvIHtcbiYjNDM7XHRfX2xlMTYgc21zZ19mcmVlX2NudDtcbiYjNDM7XHRfX2xlMTYgbG1zZ19mcmVlX2NudDtcbiYjNDM7XHR1OCByaWR4O1xuJiM0MztcdHU4IHdpZHg7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaXBjX2F1eF9wdHIge1xuJiM0MztcdF9fbGUzMiBsZW47XG4mIzQzO1x0X19sZTMyIGJ1ZjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCByaW5nX2J1ZmZlciB7XG4mIzQzO1x0X19sZTE2IG1zZ19oZHI7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHR1OCBzbXNnX2RhdGFbSVBDX01TR19QTERfU1pdO1xuJiM0MztcdFx0X19sZTMyIGxtc2dfZGF0YTtcbiYjNDM7XHR9IHBheWxvYWQ7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyB7XG4mIzQzO1x0X19sZTMyIHJidWY7XG4mIzQzO1x0dTggcmluZ19idWZfY250O1xuJiM0MztcdHU4IHJpZHg7XG4mIzQzO1x0dTggd2lkeDtcbiYjNDM7XHR1OCB0aWR4O1xuJiM0MztcdF9fbGUzMiBuZXh0O1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IGNvbnRleHRfaW5mbyB7XG4mIzQzO1x0X19sZTE2IHRvdGFsX3NpemU7XG4mIzQzO1x0dTggbG1zZ19idWZfY250O1xuJiM0MztcdHU4IHNtc2dfYnVmX2NudDtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyBzcmluZ19idWZfaW5mbztcbiYjNDM7XHRfX2xlMzIgc3JpbmdfYnVmO1xuJiM0MztcdF9fbGUzMiBscmluZ19idWY7XG4mIzQzO1x0X19sZTMyIHJlc2VydmVkO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IHFjb21fYnRzcyB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4mIzQzO1x0c3RydWN0IGhjaV9kZXYgKmhkZXY7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBiaXQ7XG4mIzQzO1x0aW50IGlycTtcbiYjNDM7XG4mIzQzO1x0dm9pZCAqbWVtX3JlZ2lvbjtcbiYjNDM7XHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbiYjNDM7XHRwaHlzX2FkZHJfdCBtZW1fcmVsb2M7XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3E7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTtcbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBjb250ZXh0X2luZm8gKnR4X2N0eHQ7XG4mIzQzO1x0c3RydWN0IGNvbnRleHRfaW5mbyAqcnhfY3R4dDtcbiYjNDM7XHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XG4mIzQzO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKmJ0c3NfYWxsb2NfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbGVuLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBpcGNfYXV4X3B0ciAqYXV4X3B0ciwgYm9vbCAqaXNfbGJ1Zl9mdWxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cdTAwM2VkZXY7XG4mIzQzO1x0dTggaWR4LCBibGtzLCBibGtzX2NvbnN1bWVkO1xuJiM0MztcdHZvaWQgKnJldF9wdHI7XG4mIzQzO1x0dTMyIGxzejtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYgPT0gMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O25vIGxvbmcgbWVzc2FnZSBidWZmZXIgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZiwgbG1zZ19idWZfY250KTtcbiYjNDM7XHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4mIzQzO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCB8fFxuJiM0MztcdFx0XHQoYmxrcyBcdTAwM2UgZGVzYy1cdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0aWR4ID0gZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKChkZXNjLVx1MDAzZWxtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpIFx1MDAzZSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSB7XG4mIzQzO1x0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtIGlkeDtcbiYjNDM7XHRcdGF1eF9wdHItXHUwMDNlbGVuID0gbGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opO1xuJiM0MztcdFx0YXV4X3B0ci1cdTAwM2VidWYgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbHJpbmdfYnVmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeCA9IChkZXNjLVx1MDAzZWxtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICVcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQ7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgXHUwMDNjPVxuJiM0MztcdFx0XHQoKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKVxuJiM0MztcdFx0KmlzX2xidWZfZnVsbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgJiM0MzsgKGlkeCAqIGxzeik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXRfcHRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKmJ0c3NfZ2V0X3R4X3JidWYoc3RydWN0IHFjb21fYnRzcyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgKmlzX3NidWZfZnVsbClcbiYjNDM7e1xuJiM0MztcdHU4IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1xuJiM0MztcdGZvciAocmluZm8gPSBcdTAwMjYoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvKTtcdHJpbmZvICE9IE5VTEw7XG4mIzQzO1x0XHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4mIzQzO1x0XHRpZHggPSAocmluZm8tXHUwMDNld2lkeCAmIzQzOyAxKSAlIChkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaWR4ICE9IHJpbmZvLVx1MDAzZXRpZHgpIHtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGRlc2MtXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgXHUwMDNjPVxuJiM0MztcdFx0XHRcdCgoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXG4mIzQzO1x0XHRcdFx0KmlzX3NidWZfZnVsbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gcmluZm87XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHNzX3NlbmQoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRlc2MtXHUwMDNlaGRldjtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4mIzQzO1x0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xuJiM0MztcdGJvb2wgaXNfbGJ1Zl9mdWxsID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTtcbiYjNDM7XHR1MTYgaGRyID0gbXNnX2hkcjtcbiYjNDM7XHR2b2lkICpwdHJfYnVmO1xuJiM0MztcdHUzMiBsZW47XG4mIzQzO1xuJiM0MztcdC8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCYjMzk7cyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovXG4mIzQzO1x0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyAxO1xuJiM0MztcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIElQQ19NU0dfUExEX1NaKSB7XG4mIzQzO1x0XHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcbiYjNDM7XG4mIzQzO1x0XHRwdHJfYnVmID0gYnRzc19hbGxvY19sbXNnKGRlc2MsIGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2YXV4X3B0ciwgXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocHRyX2J1ZikpIHtcbiYjNDM7XHRcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtsb25nIG1zZyBidWYgZnVsbFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGhkZXYtXHUwMDNlc3RhdC5lcnJfdHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihwdHJfYnVmKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBcdTAwMjZpc19zYnVmX2Z1bGwpO1xuJiM0MztcdGlmIChJU19FUlIocmluZm8pKSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O3Nob3J0IG1zZyBidWYgZnVsbFwmIzM0Oyk7XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHJpbmZvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJidWYgPSBcdTAwMjYoKHN0cnVjdCByaW5nX2J1ZmZlciAqKShUT19BUFBTX0FERFIocmluZm8tXHUwMDNlcmJ1ZikpKVtyaW5mby1cdTAwM2V3aWR4XTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2UgSVBDX01TR19QTERfU1opXG4mIzQzO1x0XHRyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhID0gY3B1X3RvX2xlMzIoVE9fQlRfQUREUihwdHJfYnVmKSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHRyX2J1ZiA9IHJidWYtXHUwMDNlcGF5bG9hZC5zbXNnX2RhdGE7XG4mIzQzO1xuJiM0MztcdC8qIGlmIGl0JiMzOTtzIGEgc2hvcnQgbWVzc2FnZSwgdGhlIGF1eCBsZW4gYW5kIGJ1ZiBhcmUgTlVMTCAqL1xuJiM0MztcdG1lbWNweV90b2lvKHB0cl9idWYsIFx1MDAyNmhjaV9za2JfcGt0X3R5cGUoc2tiKSwgMSk7XG4mIzQzO1x0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiAmIzQzOyAxLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKTtcbiYjNDM7XHRpZiAoYXV4X3B0ci5idWYpIHtcbiYjNDM7XHRcdG1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksXG4mIzQzO1x0XHRcdCAgICAoc2tiLVx1MDAzZWRhdGEgJiM0MzsgKHNrYi1cdTAwM2VsZW4gLSBhdXhfcHRyLmxlbikpLCBhdXhfcHRyLmxlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfc2J1Zl9mdWxsIHx8IGlzX2xidWZfZnVsbClcbiYjNDM7XHRcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XG4mIzQzO1xuJiM0MztcdHJidWYtXHUwMDNlbXNnX2hkciA9IGNwdV90b19sZTE2KGhkcik7XG4mIzQzO1x0cmJ1Zi1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihsZW4pO1xuJiM0MztcbiYjNDM7XHRyaW5mby1cdTAwM2V3aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggJiM0MzsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKSkpIHtcbiYjNDM7XHRcdGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2VcJiMzNDspO1xuJiM0MztcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZkZXNjLVx1MDAzZXR4X3EsIHNrYik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidHNzX2ZyZWVfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbG1zZywgdTE2IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IGlkeDtcbiYjNDM7XHR1OCBibGtzO1xuJiM0MztcdHUzMiBsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcbiYjNDM7XHRcdFx0XHQgICBsbXNnX2J1Zl9jbnQpO1xuJiM0MztcbiYjNDM7XHRpZHggPSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYobG1zZywgbHN6KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlkeCAhPSBkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LnJpZHggID0gKGRlc2MtXHUwMDNlbG1zZ19jdHh0LnJpZHggICYjNDM7IGJsa3MpICVcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQ7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgJiM0Mzs9IGJsa3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRzc19zZW5kX2N0cmwoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xuJiM0MztcbiYjNDM7XHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJidWYgPSBcdTAwMjYoKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKSlbcmluZm8tXHUwMDNld2lkeF07XG4mIzQzO1x0cmJ1Zi1cdTAwM2Vtc2dfaGRyID0gY3B1X3RvX2xlMTYobXNnX2hkcik7XG4mIzQzO1x0cmJ1Zi1cdTAwM2VsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRyaW5mby1cdTAwM2V3aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggJiM0MzsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcmVjdl9jdXN0X2ZyYW1lKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHUxNiBtc2dfaGRyID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtc2dfaGRyIHw9IGNtZDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIElQQ19DTURfU1RPUDpcbiYjNDM7XHRcdGJ0X2Rldl9pbmZvKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7QlRTUyBzdG9wcGVkLCBncmFjZWZ1bGx5IHN0b3BwaW5nIEFQU1MgSVBDXCYjMzQ7KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSVBDX0NNRF9TVEFSVDpcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKCh2b2lkICopZGVzYy1cdTAwM2VyeF9jdHh0ICYjNDM7XG4mIzQzO1x0XHRcdFx0bGUxNl90b19jcHUoZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZXRvdGFsX3NpemUpKTtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAwO1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQucmlkeCA9IDA7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5zbXNnX2ZyZWVfY250ID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudDtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250O1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIHRydWUpO1xuJiM0MztcdFx0d2FrZV91cChcdTAwMjZkZXNjLVx1MDAzZXdhaXRfcSk7XG4mIzQzO1xuJiM0MztcdFx0YnRfZGV2X2luZm8oZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtCVFNTIHN0YXJ0ZWQsIGluaXRpYWxpemluZyBBUFNTIEJUIElQQ1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBDTUQgSUQ6ICV1XCYjMzQ7LCBjbWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSkpIHtcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtCVFNTIG5vdCBpbml0aWFsaXplZCwgbm8gbWVzc2FnZSBzZW50XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgY29udHJvbCBtZXNzYWdlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzaXplX3QgcGt0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMSlcbiYjNDM7XHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcbiYjNDM7XHRwa3RfdHlwZSA9IGRhdGFbMF07XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGt0X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhDSV9FVkVOVF9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0VWRU5UX0hEUl9TSVpFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTFNFUTtcbiYjNDM7XHRcdHN0cnVjdCBoY2lfZXZlbnRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9ldmVudF9oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX0VWRU5UX0hEUl9TSVpFICYjNDM7IGhkci1cdTAwM2VwbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBIQ0lfQ09NTUFORF9IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKShkYXRhICYjNDM7IDEpO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItXHUwMDNlcGxlbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBIQ0lfQUNMREFUQV9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0FDTF9IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX2FjbF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2FjbF9oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX0FDTF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItXHUwMDNlZGxlbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX1NDT19IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX1NDT19IRFJfU0laRSAmIzQzOyBoZHItXHUwMDNlZGxlbjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGt0X2xlbiBcdTAwM2UgbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGJ0X3NrYl9hbGxvYyhwa3RfbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXNrYikge1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VoZGV2LVx1MDAzZXN0YXQuZXJyX3J4JiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9ICh2b2lkICopZGVzYy1cdTAwM2VoZGV2O1xuJiM0MztcdGhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlO1xuJiM0MztcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgJiM0MzsgMSwgcGt0X2xlbik7XG4mIzQzO1xuJiM0MztcdGhjaV9yZWN2X2ZyYW1lKGRlc2MtXHUwMDNlaGRldiwgc2tiKTtcbiYjNDM7XHRkZXNjLVx1MDAzZWhkZXYtXHUwMDNlc3RhdC5ieXRlX3J4ICYjNDM7PSBwa3RfbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19wcm9jZXNzX3J4KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sXG4mIzQzO1x0XHRcdFx0ICBib29sICphY2ssIHU4ICpyeF9jb3VudClcbiYjNDM7e1xuJiM0MztcdHU4IHJpZHgsIGxidWZfaWR4LCBibGtzX2NvbnN1bWVkLCBwa3RfdHlwZSwgY21kO1xuJiM0MztcdHN0cnVjdCBpcGNfYXV4X3B0ciBhdXhfcHRyO1xuJiM0MztcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcbiYjNDM7XHR1aW50OF90ICpyeGJ1ZiA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqYnVmO1xuJiM0MztcdHUzMiBsc3o7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmlkeCA9IHJpbmZvLVx1MDAzZXJpZHg7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChyaWR4ICE9IHJpbmZvLVx1MDAzZXdpZHgpIHtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4mIzQzO1xuJiM0MztcdFx0cmJ1ZiA9IFx1MDAyNigoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKSkpW3JpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYnVmLVx1MDAzZW1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbiYjNDM7XHRcdFx0cnhidWYgPSBUT19BUFBTX0FERFIocmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSk7XG4mIzQzO1x0XHRcdGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNlcnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxuJiM0MztcdFx0XHRcdCAgIGxtc2dfYnVmX2NudCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKHJidWYtXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcmJ1Zi1cdTAwM2VsZW4sIGxzeikpIHtcbiYjNDM7XHRcdFx0XHRsYnVmX2lkeCA9IEdFVF9SWF9JTkRFWF9GUk9NX0JVRihcbiYjNDM7XHRcdFx0XHRcdFx0cmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSwgbHN6KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0Ymxrc19jb25zdW1lZCA9IGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgLVxuJiM0MztcdFx0XHRcdFx0bGJ1Zl9pZHg7XG4mIzQzO1x0XHRcdFx0YXV4X3B0ci5sZW4gPSByYnVmLVx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcbiYjNDM7XHRcdFx0XHRhdXhfcHRyLmJ1ZiA9IGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VscmluZ19idWY7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJ4YnVmID0gcmJ1Zi1cdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQqYWNrID0gKHJidWYtXHUwMDNlbXNnX2hkciBcdTAwMjYgSVBDX0hEUl9SRVFfQUNLKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfdHlwZSA9IEZJRUxEX0dFVChJUENfSERSX1BLVF9UWVBFX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChwa3RfdHlwZSkge1xuJiM0MztcdFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0hDSTpcbiYjNDM7XHRcdFx0YnVmID0ga21hbGxvYyhyYnVmLVx1MDAzZWxlbiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRcdGlmICghYnVmKSB7XG4mIzQzO1x0XHRcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWNweV9mcm9taW8oYnVmLCByeGJ1ZiwgcmJ1Zi1cdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYXV4X3B0ci5idWYpXG4mIzQzO1x0XHRcdFx0bWVtY3B5X2Zyb21pbyhidWYgJiM0MzsgKHJidWYtXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgSENJIGZyYW1lOiAlZFwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElQQ19IRFJfUEtUX1RZUEVfQ1VTVDpcbiYjNDM7XHRcdFx0Y21kID0gRklFTERfR0VUKElQQ19IRFJfQ01EX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4mIzQzO1x0XHRcdGJ0c3NfcmVjdl9jdXN0X2ZyYW1lKGRlc2MsIGNtZCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmlkeCA9IChyaWR4ICYjNDM7IDEpICUgcmluZm8tXHUwMDNlcmluZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRcdGlmIChyeF9jb3VudClcbiYjNDM7XHRcdFx0KCpyeF9jb3VudCkmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJpbmZvLVx1MDAzZXJpZHggPSByaWR4O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc19hY2soc3RydWN0IHFjb21fYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4mIzQzO1x0dTggdGlkeDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChyaW5mbyA9IFx1MDAyNmRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzcmluZ19idWZfaW5mbzsgcmluZm8gIT0gTlVMTDtcbiYjNDM7XHRcdHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbiYjNDM7XHRcdHRpZHggPSByaW5mby1cdTAwM2V0aWR4O1xuJiM0MztcdFx0cmJ1ZiA9IChzdHJ1Y3QgcmluZ19idWZmZXIgKilUT19BUFBTX0FERFIocmluZm8tXHUwMDNlcmJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKHRpZHggIT0gcmluZm8tXHUwMDNlcmlkeCkge1xuJiM0MztcdFx0XHRpZiAocmJ1Zlt0aWR4XS5tc2dfaGRyIFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XG4mIzQzO1x0XHRcdFx0YnRzc19mcmVlX2xtc2coZGVzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHJidWZbdGlkeF0ubGVuKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0dGlkeCA9ICh0aWR4ICYjNDM7IDEpICUgZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudDtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmluZm8tXHUwMDNldGlkeCA9IHRpZHg7XG4mIzQzO1xuJiM0MztcdFx0YnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRzc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWNvbV9idHNzLCB3b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0Ym9vbCBhY2sgPSBmYWxzZTtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXJwcm9jLVx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpKSkge1xuJiM0MztcdFx0Ly8gRlcgc2V0cyBvZmZzZXQgb2YgUlggY29udGV4dCBpbmZvIGF0IHN0YXJ0IG9mIG1lbW9yeSByZWdpb24gdXBvbiBib290XG4mIzQzO1x0XHRvZmZzZXQgPSByZWFkbChkZXNjLVx1MDAzZW1lbV9yZWdpb24pO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXNjLVx1MDAzZWRldiwgXCYjMzQ7b2Zmc2V0IGFmdGVyIE0wIGJvb3Q6IDB4JTA4eFxcblwmIzM0Oywgb2Zmc2V0KTtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiAmIzQzOyBvZmZzZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidHNzX3Byb2Nlc3NfYWNrKGRlc2MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChyaW5mbyA9IFx1MDAyNihkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xuJiM0MztcdCAgICAgcmluZm8gIT0gTlVMTDtcbiYjNDM7XHQgICAgIHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbiYjNDM7XHRcdHJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgXHUwMDI2YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgcGVlciBtc2dzOiAlZFwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0Z290byBzcGluX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhY2spXG4mIzQzO1x0XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO3NwaW5fdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmRlc2MtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBidHNzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cXVldWVfd29yayhkZXNjLVx1MDAzZXdxLCBcdTAwMjZkZXNjLVx1MDAzZXdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRzc19pbml0KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRlc2MtXHUwMDNld2FpdF9xKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O2J0c3Nfd3FcJiMzNDspO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2V3cSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZkZXNjLVx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRlc2MtXHUwMDNlaXJxLCBOVUxMLCBidHNzX2lycV9oYW5kbGVyLFxuJiM0MztcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2J0c3NfaXJxXCYjMzQ7LCBkZXNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWlycSwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHU4IHBrdF90eXBlID0gaGNpX3NrYl9wa3RfdHlwZShza2IpO1xuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZXN0YXQuYnl0ZV90eCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRzd2l0Y2ggKHBrdF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBIQ0lfQ09NTUFORF9QS1Q6XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXN0YXQuY21kX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSENJX0FDTERBVEFfUEtUOlxuJiM0MztcdFx0aGRldi1cdTAwM2VzdGF0LmFjbF90eCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhDSV9TQ09EQVRBX1BLVDpcbiYjNDM7XHRcdGhkZXYtXHUwMDNlc3RhdC5zY29fdHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XG4mIzQzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0c3NfaW5pdChkZXNjKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCBpbml0aWFsaXppbmcgQlRTUzogJWRcJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCAyIHNlY29uZHMgZm9yIGZpbGVzeXN0ZW0gdG8gYmVjb21lIGF2YWlsYWJsZSAqL1xuJiM0MztcdG1zbGVlcCgyMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQm9vdCBNMCBmaXJtd2FyZSAqL1xuJiM0MztcdHJldCA9IHJwcm9jX2Jvb3QoZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcbiYjNDM7XHRyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGVzYy1cdTAwM2V3YWl0X3EsIFJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpLFxuJiM0MztcdFx0XHRcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBCVFNTIHN0YXJ0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnByb2Nfc2h1dGRvd24oZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1x0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfc2h1dGRvd24oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnVubmluZywgZmFsc2UpO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXdxICE9IE5VTEwpIHtcbiYjNDM7XHRcdGRpc2FibGVfaXJxKGRlc2MtXHUwMDNlaXJxKTtcbiYjNDM7XHRcdGZsdXNoX3dvcmtxdWV1ZShkZXNjLVx1MDAzZXdxKTtcbiYjNDM7XHRcdGRldm1fZnJlZV9pcnEoZGVzYy1cdTAwM2VkZXYsIGRlc2MtXHUwMDNlaXJxLCBkZXNjKTtcbiYjNDM7XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXNjLVx1MDAzZXR4X3EpO1xuJiM0MztcdFx0ZGVzdHJveV93b3JrcXVldWUoZGVzYy1cdTAwM2V3cSk7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXdxID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XG4mIzQzO1x0ICogc2ltdWx0YW5lb3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlXG4mIzQzO1x0ICogc2V0dXAgZm9yIGV2ZXJ5IGhjaSB1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG4mIzQzO1x0cmV0ID0gcWNhX3JlYWRfc29jX3ZlcnNpb24oaGRldiwgXHUwMDI2dmVyLCBRQ0FfSVBRNTAxOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBxY2FfdWFydF9zZXR1cChoZGV2LCAwLCBRQ0FfSVBRNTAxOCwgdmVyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBVQVJUOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidF9kZXZfaW5mbyhoZGV2LCBcJiMzNDtRQ0EgQnVpbGQgSW5mbzogJXNcJiMzNDssIGhkZXYtXHUwMDNlZndfaW5mbyk7XG4mIzQzO1xuJiM0MztcdC8qIE9idGFpbiBhbmQgc2V0IEJEIGFkZHJlc3MgZnJvbSBOVk1FTSBjZWxsICovXG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX3NlbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHR1MTYgaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTtcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnVubmluZykpKSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIGZyZWVfc2tiO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKSBcdTAwM2U9IElQQ19UWF9RU0laRSkge1xuJiM0MztcdFx0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCYjMzQ7VFggcXVldWUgZnVsbCwgZHJvcHBpbmcgbWVzc2FnZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVOT0JVRlM7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xLCBza2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2U6ICVkXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7ZnJlZV9za2I6XG4mIzQzO1x0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oc3RydWN0IHFjb21fYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogbG9va3VwIHJlc2VydmVkLW1lbW9yeSByZWdpb24gb2YgdGhlIHJlbW90ZXByb2Mgbm9kZSAqL1xuJiM0MztcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGVzYy1cdTAwM2VycHJvYy1cdTAwM2VkZXYucGFyZW50LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnJlcyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3VuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbWVtX3BoeXMgPSByZXMuc3RhcnQ7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fcmVsb2MgPSByZXMuc3RhcnQ7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cmVzKTtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVx1MDAzZW1lbV9waHlzLCBkZXNjLVx1MDAzZW1lbV9zaXplKTtcbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNlbWVtX3JlZ2lvbikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3VuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbjogJXBSXFxuXCYjMzQ7LCBcdTAwMjZyZXMpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJwcm9jICpycHJvYyA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHJwcm9jX3B1dChycHJvYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjO1xuJiM0MztcdHBoYW5kbGUgcnByb2NfcGhhbmRsZTtcbiYjNDM7XHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYXJnc1syXTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZXNjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3Fjb20scnByb2NcJiMzNDssIFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PRU5ULCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKHJwcm9jX3BoYW5kbGUpO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VycHJvYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwgXCYjMzQ7RmFpbGVkIHRvIGdldCByZW1vdGVwcm9jXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYnRxY29taXBjX3Jwcm9jX3B1dCwgZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0cWNvbWlwY19hbGxvY19tZW1vcnlfcmVnaW9uKGRlc2MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJncyhkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxpcGNcJiMzNDssIDIsIGFyZ3MpO1xuJiM0MztcdGlmIChJU19FUlIoZGVzYy1cdTAwM2VyZWdtYXApKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGVzYy1cdTAwM2VyZWdtYXApO1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZW9mZnNldCA9IGFyZ3NbMF07XG4mIzQzO1x0ZGVzYy1cdTAwM2ViaXQgPSBhcmdzWzFdO1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlaXJxIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBkZXNjLVx1MDAzZWlycSwgXCYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgSVJRXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aGRldiA9IGhjaV9hbGxvY19kZXYoKTtcbiYjNDM7XHRpZiAoIWhkZXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpO1xuJiM0MztcdGRlc2MtXHUwMDNlaGRldiA9IGhkZXY7XG4mIzQzO1x0U0VUX0hDSURFVl9ERVYoaGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGhkZXYtXHUwMDNlYnVzID0gSENJX0lQQztcbiYjNDM7XG4mIzQzO1x0aGRldi1cdTAwM2VvcGVuID0gYnRxY29taXBjX29wZW47XG4mIzQzO1x0aGRldi1cdTAwM2VjbG9zZSA9IGJ0cWNvbWlwY19jbG9zZTtcbiYjNDM7XHRoZGV2LVx1MDAzZXNodXRkb3duID0gYnRxY29taXBjX3NodXRkb3duO1xuJiM0MztcdGhkZXYtXHUwMDNlc2V0dXAgPSBidHFjb21pcGNfc2V0dXA7XG4mIzQzO1x0aGRldi1cdTAwM2VzZW5kID0gYnRxY29taXBjX3NlbmQ7XG4mIzQzO1x0aGRldi1cdTAwM2VmbHVzaCA9IGJ0cWNvbWlwY19mbHVzaDtcbiYjNDM7XHRoZGV2LVx1MDAzZXNldF9iZGFkZHIgPSBxY2Ffc2V0X2JkYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRoY2lfZnJlZV9kZXYoaGRldik7XG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FQlVTWSwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGhkZXZcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VoZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoY2lfdW5yZWdpc3Rlcl9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbiYjNDM7XHRoY2lfZnJlZV9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYnRxY29taXBjX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idFwmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi99LFxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBidHFjb21pcGNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBidHFjb21pcGNfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IGJ0cWNvbWlwY19yZW1vdmUsXG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YnRxY29taXBjXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gYnRxY29taXBjX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJ0cWNvbWlwY19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1F1YWxjb21tIEJsdWV0b290aCBJUEMgRHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2MywxOCBAQCBjb25maWcgUFJVX1JFTU9URVBST0NcbiBcdCAgcHJvY2Vzc29ycyBvbiB2YXJpb3VzIFRJIFNvQ3MuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UmIzM5O3JlXG4gXHQgIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBQUlUgb3IgaWYgeW91IGFyZSB1bnN1cmUuXG4gXG4mIzQzO2NvbmZpZyBRQ09NX00wX0JUU1NfUElMXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEFSQ0hfUUNPTVxuJiM0MztcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbiYjNDM7XHRzZWxlY3QgUUNPTV9SUFJPQ19DT01NT05cbiYjNDM7XHRzZWxlY3QgUUNPTV9TQ01cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIFNlY3VyZSBQZXJpcGhlcmFsIEltYWdlciBMb2FkZXIgZm9yIHRoZVxuJiM0MztcdCAgUXVhbGNvbW0gQmx1ZXRvb3RoIFN1YnN5c3RlbSBydW5uaW5nIG9uIHRoZSBNMCByZW1vdGUgcHJvY2Vzc29yIGZvdW5kXG4mIzQzO1x0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxuJiM0MztcdCAgU2VjdXJlIENoYW5uZWwgTWFuYWdlciBjYWxsIHRvIFRydXN0Wm9uZS5cbiYjNDM7XG4gY29uZmlnIFFDT01fUElMX0lORk9cbiBcdHRyaXN0YXRlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlIGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXG5pbmRleCAxYzc1OThiODQ3NWQ2MC4uZGY4MGZhZjhkMGRmNmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVx0XHQmIzQzOz0gZGE4eHhfcmVtb3RlcHJvYy5vXG4gb2JqLSQoQ09ORklHX0tFWVNUT05FX1JFTU9URVBST0MpXHQmIzQzOz0ga2V5c3RvbmVfcmVtb3RlcHJvYy5vXG4gb2JqLSQoQ09ORklHX01FU09OX01YX0FPX0FSQ19SRU1PVEVQUk9DKSYjNDM7PSBtZXNvbl9teF9hb19hcmMub1xuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcdFx0JiM0Mzs9IHBydV9ycHJvYy5vXG4mIzQzO29iai0kKENPTkZJR19RQ09NX00wX0JUU1NfUElMKVx0XHQmIzQzOz0gcWNvbV9tMF9idHNzX3BpbC5vXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXHRcdCYjNDM7PSBxY29tX3BpbF9pbmZvLm9cbiBvYmotJChDT05GSUdfUUNPTV9SUFJPQ19DT01NT04pXHRcdCYjNDM7PSBxY29tX2NvbW1vbi5vXG4gb2JqLSQoQ09ORklHX1FDT01fUTZWNV9DT01NT04pXHRcdCYjNDM7PSBxY29tX3E2djUub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcxNjhlMjcwZTRkNDY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5AQCAtMCwwICYjNDM7MSwyNjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9xY29tL21kdF9sb2FkZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cWNvbV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBCVFNTX1BBU19JRFx0MHhjXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbTBfYnRzcyB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHBoeXNfYWRkcl90IG1lbV9waHlzO1xuJiM0MztcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm1lbV9yZWdpb247XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplO1xuJiM0MztcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXFjb21fc2NtX3Bhc19zdXBwb3J0ZWQoQlRTU19QQVNfSUQpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFwmIzM0O1BBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRCVFNTX1BBU19JRCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjb21fc2NtX3Bhc19hdXRoX2FuZF9yZXNldChCVFNTX1BBU19JRCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgcnByb2M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3Nfc3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJwcm9jLVx1MDAzZXN0YXRlID09IFJQUk9DX1JVTk5JTkcgfHwgcnByb2MtXHUwMDNlc3RhdGUgPT0gUlBST0NfQ1JBU0hFRCkge1xuJiM0MztcdFx0cmV0ID0gcWNvbV9zY21fcGFzX3NodXRkb3duKEJUU1NfUEFTX0lEKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtGYWlsZWQgdG8gc3RvcCBycHJvYzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cmV0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkZXZfaW5mbyhycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtMF9idHNzX2xvYWQoc3RydWN0IHJwcm9jICpycHJvYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcnM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpzZWdfZnc7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGVsZjMyX2hkciAqZWhkcjtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm1ldGFkYXRhO1xuJiM0MztcdHNpemVfdCBtZXRhZGF0YV9zaXplO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGhkcnMgPSAoY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKikoZWhkciAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZmdywgcnByb2MtXHUwMDNlZmlybXdhcmUsIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1ldGFkYXRhID0gcWNvbV9tZHRfcmVhZF9tZXRhZGF0YShmdywgXHUwMDI2bWV0YWRhdGFfc2l6ZSwgcnByb2MtXHUwMDNlZmlybXdhcmUsXG4mIzQzO1x0XHRcdFx0XHQgIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuJiM0MztcdGlmIChJU19FUlIobWV0YWRhdGEpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKG1ldGFkYXRhKTtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlYWQgZmlybXdhcmUgbWV0YWRhdGE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgIG1ldGFkYXRhX3NpemUsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCYjMzQ7UEFTIGluaXQgaW1hZ2UgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHItXHUwMDNlZV9waG51bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVx1MDAzZWZpcm13YXJlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXNlZ19uYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRwaGRyID0gXHUwMDI2cGhkcnNbaV07XG4mIzQzO1xuJiM0MztcdFx0LyogT25seSBwcm9jZXNzIHZhbGlkIGxvYWRhYmxlIGRhdGEgc2VnbWVudHMgKi9cbiYjNDM7XHRcdGlmIChwaGRyLVx1MDAzZXBfdHlwZSAhPSBQVF9MT0FEIHx8ICFwaGRyLVx1MDAzZXBfbWVtc3opXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaGRyLVx1MDAzZXBfdmFkZHIgJiM0MzsgcGhkci1cdTAwM2VwX2ZpbGVzeiBcdTAwM2UgZGVzYy1cdTAwM2VtZW1fc2l6ZSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7U2VnbWVudCBkYXRhIGV4Y2VlZHMgdGhlIHJlc2VydmVkIG1lbW9yeSBhcmVhIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBDaGVjayBpZiBmaXJtd2FyZSBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudCBmaWxlcyAqL1xuJiM0MztcdFx0aWYgKHBoZHItXHUwMDNlcF9vZmZzZXQgXHUwMDNlIGZ3LVx1MDAzZXNpemUgfHxcbiYjNDM7XHRcdCAgICBwaGRyLVx1MDAzZXBfb2Zmc2V0ICYjNDM7IHBoZHItXHUwMDNlcF9maWxlc3ogXHUwMDNlIGZ3LVx1MDAzZXNpemUpIHtcbiYjNDM7XHRcdFx0c3ByaW50ZihzZWdfbmFtZSAmIzQzOyBzdHJsZW4oc2VnX25hbWUpIC0gMywgXCYjMzQ7YiUwMmRcJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnNlZ19mdywgc2VnX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcnByb2MtXHUwMDNlZGV2LnBhcmVudCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtDb3VsZCBub3QgZmluZCBzcGxpdCBzZWdtZW50IGJpbmFyeTogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRzZWdfbmFtZSk7XG4mIzQzO1x0XHRcdFx0Z290byBmcmVlX21ldGFkYXRhO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBVc2UgdGhlIHZpcnR1YWwgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhc1xuJiM0MztcdFx0XHQgKiB0aGUgb2Zmc2V0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jcHlfdG9pbyhkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgcGhkci1cdTAwM2VwX3ZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBzZWdfZnctXHUwMDNlZGF0YSwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4mIzQzO1xuJiM0MztcdFx0XHRyZWxlYXNlX2Zpcm13YXJlKHNlZ19mdyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtZW1jcHlfdG9pbyhkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgcGhkci1cdTAwM2VwX3ZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBmdy1cdTAwM2VkYXRhICYjNDM7IHBoZHItXHUwMDNlcF9vZmZzZXQsIHBoZHItXHUwMDNlcF9maWxlc3opO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX21ldGFkYXRhOlxuJiM0MztcdGtmcmVlKG1ldGFkYXRhKTtcbiYjNDM7cmVsZWFzZV9mdzpcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJwcm9jX29wcyBtMF9idHNzX29wcyA9IHtcbiYjNDM7XHQuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LFxuJiM0MztcdC5zdG9wID0gbTBfYnRzc19zdG9wLFxuJiM0MztcdC5sb2FkID0gbTBfYnRzc19sb2FkLFxuJiM0MztcdC5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9yZWxvYyA9IHJlcy5zdGFydDtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShcdTAwMjZyZXMpO1xuJiM0MztcdGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiA9IGRldm1faW9yZW1hcChkZXYsIGRlc2MtXHUwMDNlbWVtX3BoeXMsIGRlc2MtXHUwMDNlbWVtX3NpemUpO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VtZW1fcmVnaW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7dW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uOiAlcFJcXG5cJiMzNDssIFx1MDAyNnJlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfcGlsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHQvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbTBfYnRzcyAqZGVzYztcbiYjNDM7XHRzdHJ1Y3QgY2xrICpscG9fY2xrO1xuJiM0MztcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O2Zpcm13YXJlLW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2ZndfbmFtZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFwmIzM0O20wYnRzc1wmIzM0OywgXHUwMDI2bTBfYnRzc19vcHMsXG4mIzQzO1x0XHRcdFx0IGZ3X25hbWUsIHNpemVvZigqZGVzYykpO1xuJiM0MztcdGlmICghcnByb2MpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgcnByb2NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbiYjNDM7XHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbTBfYnRzc19hbGxvY19tZW1vcnlfcmVnaW9uKGRlc2MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRscG9fY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcJiMzNDtidHNzX2xwb19jbGtcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIobHBvX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHBvX2NsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlYnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBcJiMzNDtidHNzX3Jlc2V0XCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZXNjLVx1MDAzZWJ0c3NfcmVzZXQpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgYnRzc19yZXNldFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGRlYXNzZXJ0IHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cnByb2MtXHUwMDNlYXV0b19ib290ID0gZmFsc2U7XG4mIzQzO1x0cmV0ID0gZGV2bV9ycHJvY19hZGQoZGV2LCBycHJvYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsXCYjMzQ7IH0sXG4mIzQzO1x0eyB9LFxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtMF9idHNzX29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG0wX2J0c3NfcGlsX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBtMF9idHNzX3BpbF9wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtxY29tLW0wLWJ0c3MtcGlsXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gbTBfYnRzc19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtMF9idHNzX3BpbF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1F1YWxjb21tIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTg1OGQ3MWZmY2VmMzZjNmU3YzQ5MzliOGFlZWMwZjQ4YjdlYjhhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDE0OjI0OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWZkMzNmODUxODU4OGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbApAQCAtMCwwICYjNDM7MSw2MyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFF1YWxjb21tIElQUTUwMTggQmx1ZXRvb3RoCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEdlb3JnZSBNb3Vzc2FsZW0gJmx0O2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb20mZ3Q7CiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSBxY29tLGlwcTUwMTgtYnQKJiM0MzsKJiM0MzsgIGludGVycnVwdHM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgIEludGVycnVwdCBsaW5lIGZyb20gdGhlIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gdG8gdGhlIGhvc3QgcHJvY2Vzc29yCiYjNDM7ICAgICAgICAgIHRvIG5vdGlmeSBpdCBvZiBldmVudHMgc3VjaCBhcyByZQomIzQzOwomIzQzOyAgcWNvbSxpcGM6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUtYXJyYXkKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byBhIHN5c2NvbiBub2RlIHJlcHJlc2VudGluZyB0aGUgQVBDUyByZWdpc3RlcnMKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyBvZmZzZXQgdG8gdGhlIHJlZ2lzdGVyIHdpdGhpbiB0aGUgc3lzY29uCiYjNDM7ICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgdGhlIGlwYyBiaXQgd2l0aGluIHRoZSByZWdpc3RlcgomIzQzOyAgICBkZXNjcmlwdGlvbjogfAomIzQzOyAgICAgIFRoZXNlIGVudHJpZXMgc3BlY2lmeSB0aGUgb3V0Z29pbmcgSVBDIGJpdCB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHJlbW90ZQomIzQzOyAgICAgIE0wIEJUU1MgY29yZSBvZiBhIGhvc3QgZXZlbnQgb3IgZm9yIHNlbmRpbmcgYW4gQUNLIGlmIHRoZSByZW1vdGUgcHJvY2Vzc29yCiYjNDM7ICAgICAgZXhwZWN0cyBpdC4KJiM0MzsKJiM0MzsgIHFjb20scnByb2M6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgcmVtb3RlIHByb2Nlc3NvciBub2RlIHJlcHJlc2VudGluZyB0aGUgTTAgQlRTUyBjb3JlLgomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsgIC0gcWNvbSxpcGMKJiM0MzsgIC0gcWNvbSxycHJvYwomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBibHVldG9vdGgtY29udHJvbGxlci55YW1sIwomIzQzOyAgLSAkcmVmOiBxY29tLGJsdWV0b290aC1jb21tb24ueWFtbAomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oJmd0OwomIzQzOwomIzQzOyAgICBibHVldG9vdGg6IGJsdWV0b290aCB7CiYjNDM7ICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgcWNvbSxpcGMgPSAmbHQ7JmFtcDthcGNzX2dsYiA4IDIzJmd0OzsKJiM0MzsgICAgICBpbnRlcnJ1cHRzID0gJmx0O0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HJmd0OzsKJiM0MzsKJiM0MzsgICAgICBxY29tLHJwcm9jID0gJmx0OyZhbXA7bTBfYnRzcyZndDs7CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG0wLWJ0c3MtcGlsLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG0wLWJ0c3MtcGlsLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM5N2JiNjgxNWQ3MTZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlcgomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBHZW9yZ2UgTW91c3NhbGVtICZsdDtnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIFNlY3VyZSBJbWFnZSBMb2FkZXIgbG9hZHMgZmlybXdhcmUgYW5kIHBvd2VycyB1cAomIzQzOyAgdGhlIE0wIEJUU1MgcmVtb3RlIHByb2Nlc3NvciBjb3JlIG9uIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idHNzLXBpbAomIzQzOwomIzQzOyAgZmlybXdhcmUtbmFtZToKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IEZpcm13YXJlIG5hbWUgZm9yIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIGNvcmUKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyBsb3cgcG93ZXIgb3NjaWxsYXRvciBjbG9jawomIzQzOwomIzQzOyAgY2xvY2stbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfbHBvX2NsawomIzQzOwomIzQzOyAgbWVtb3J5LXJlZ2lvbjoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNlcnZlZCBtZW1vcnkgY2FydmVvdXQKJiM0MzsKJiM0MzsgIHJlc2V0czoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNldAomIzQzOwomIzQzOyAgcmVzZXQtbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfcmVzZXQKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSBmaXJtd2FyZS1uYW1lCiYjNDM7ICAtIGNsb2NrcwomIzQzOyAgLSBjbG9jay1uYW1lcwomIzQzOyAgLSByZXNldHMKJiM0MzsgIC0gcmVzZXQtbmFtZXMKJiM0MzsgIC0gbWVtb3J5LXJlZ2lvbgomIzQzOwomIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1pcHE1MDE4LmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9yZXNldC9xY29tLGdjYy1pcHE1MDE4LmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHJlbW90ZXByb2MgewomIzQzOyAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgIGZpcm13YXJlLW5hbWUgPSAmIzM0O3FjYS9idF9md19wYXRjaC5tYm4mIzM0OzsKJiM0MzsKJiM0MzsgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfTFBPX0NMSyZndDs7CiYjNDM7ICAgICAgY2xvY2stbmFtZXMgPSAmIzM0O2J0c3NfbHBvX2NsayYjMzQ7OwomIzQzOyAgICAgIHJlc2V0cyA9ICZsdDsmYW1wO2djYyBHQ0NfQlRTU19CQ1ImZ3Q7OwomIzQzOyAgICAgIHJlc2V0LW5hbWVzID0gJiMzNDtidHNzX3Jlc2V0JiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgbWVtb3J5LXJlZ2lvbiA9ICZsdDsmYW1wO2J0c3NfcmVnaW9uJmd0OzsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9pcHE1MDE4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpCmluZGV4IDZmODAwNGEyMmExZmZkLi40ZmRmMjBjODdiMGE5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpCkBAIC0xNyw2ICYjNDM7MTcsMTcgQEAgLyB7CiAJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MiZndDs7CiAJI3NpemUtY2VsbHMgPSAmbHQ7MiZndDs7CiAKJiM0MzsJYmx1ZXRvb3RoOiBibHVldG9vdGggewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDs7CiYjNDM7CiYjNDM7CQlxY29tLGlwYyA9ICZsdDsmYW1wO2FwY3NfZ2xiIDggMjMmZ3Q7OwomIzQzOwkJaW50ZXJydXB0cyA9ICZsdDtHSUNfU1BJIDE2MiBJUlFfVFlQRV9FREdFX1JJU0lORyZndDs7CiYjNDM7CiYjNDM7CQlxY29tLHJwcm9jID0gJmx0OyZhbXA7bTBfYnRzcyZndDs7CiYjNDM7CiYjNDM7CQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CX07CiYjNDM7CiAJY2xvY2tzIHsKIAkJZ2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsgewogCQkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtY2xvY2smIzM0OzsKQEAgLTEzMSwxMSAmIzQzOzE0MiwzMSBAQCBwc2NpIHsKIAkJbWV0aG9kID0gJiMzNDtzbWMmIzM0OzsKIAl9OwogCiYjNDM7CW0wX2J0c3M6IHJlbW90ZXByb2MgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsJiMzNDs7CiYjNDM7CiYjNDM7CQlmaXJtd2FyZS1uYW1lID0gJiMzNDtxY2EvYnRfZndfcGF0Y2gubWJuJiMzNDs7CiYjNDM7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfTFBPX0NMSyZndDs7CiYjNDM7CQljbG9jay1uYW1lcyA9ICYjMzQ7YnRzc19scG9fY2xrJiMzNDs7CiYjNDM7CQlyZXNldHMgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfQkNSJmd0OzsKJiM0MzsJCXJlc2V0LW5hbWVzID0gJiMzNDtidHNzX3Jlc2V0JiMzNDs7CiYjNDM7CiYjNDM7CQltZW1vcnktcmVnaW9uID0gJmx0OyZhbXA7YnRzc19yZWdpb24mZ3Q7OwomIzQzOwomIzQzOwkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwl9OwomIzQzOwogCXJlc2VydmVkLW1lbW9yeSB7CiAJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzImZ3Q7OwogCQkjc2l6ZS1jZWxscyA9ICZsdDsyJmd0OzsKIAkJcmFuZ2VzOwogCiYjNDM7CQlidHNzX3JlZ2lvbjogYmx1ZXRvb3RoQDcwMDAwMDAgewomIzQzOwkJCXJlZyA9ICZsdDsweDAgMHgwNzAwMDAwMCAweDAgMHg1ODAwMCZndDs7CiYjNDM7CQkJbm8tbWFwOwomIzQzOwkJfTsKJiM0MzsKIAkJYm9vdGxvYWRlckA0YTgwMDAwMCB7CiAJCQlyZWcgPSAmbHQ7MHgwIDB4NGE4MDAwMDAgMHgwIDB4MjAwMDAwJmd0OzsKIAkJCW5vLW1hcDsKQEAgLTY0Nyw3ICYjNDM7Njc4LDggQEAgd2F0Y2hkb2c6IHdhdGNoZG9nQGIwMTcwMDAgewogCiAJCWFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAgewogCQkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWFwY3MtYXBwcy1nbG9iYWwmIzM0OywKLQkJCQkgICAgICYjMzQ7cWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWwmIzM0OzsKJiM0MzsJCQkJICAgICAmIzM0O3Fjb20saXBxNjAxOC1hcGNzLWFwcHMtZ2xvYmFsJiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDtzeXNjb24mIzM0OzsKIAkJCXJlZyA9ICZsdDsweDBiMTExMDAwIDB4MTAwMCZndDs7CiAJCQkjY2xvY2stY2VsbHMgPSAmbHQ7MSZndDs7CiAJCQljbG9ja3MgPSAmbHQ7JmFtcDthNTNwbGwmZ3Q7LCAmbHQ7JmFtcDt4b19ib2FyZF9jbGsmZ3Q7LCAmbHQ7JmFtcDtnY2MgR1BMTDAmZ3Q7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggNGU4YzI0ZDc1N2U5YTQuLjZiOGJlZDZhNmZmZGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTQxMyw2ICYjNDM7NDEzLDE3IEBAIGNvbmZpZyBCVF9NVEtVQVJUCiAJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWVkaWFUZWsgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcwogCSAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLgogCiYjNDM7Y29uZmlnIEJUX1FDT01JUEMKJiM0MzsJdHJpc3RhdGUgJiMzNDtRdWFsY29tbSBJUFE1MDE4IElQQyBiYXNlZCBIQ0kgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBCVF9RQ0EKJiM0MzsJaGVscAomIzQzOwkgIFF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBkcml2ZXIuCiYjNDM7CSAgVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBicmlkZ2UgSENJIGRhdGEgb250byBzaGFyZWQgbWVtb3J5IGJldHdlZW4KJiM0MzsJICB0aGUgaG9zdCBhbmQgdGhlIE0wIEJUU1MgY29yZS4KJiM0MzsKJiM0MzsJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgSENJIG92ZXIgUXVhbGNvbW0gSVBDIGludG8gdGhlCiYjNDM7CSAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuCiYjNDM7CiBjb25maWcgQlRfUUNPTVNNRAogCXRyaXN0YXRlICYjMzQ7UXVhbGNvbW0gU01EIGJhc2VkIEhDSSBzdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIFJQTVNHIHx8IChDT01QSUxFX1RFU1QgJmFtcDsmYW1wOyBSUE1TRz1uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUgYi9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZQppbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTCkJCSYjNDM7PSBidG1ydmwubwogb2JqLSQoQ09ORklHX0JUX01SVkxfU0RJTykJJiM0Mzs9IGJ0bXJ2bF9zZGlvLm8KIG9iai0kKENPTkZJR19CVF9NVEtTRElPKQkmIzQzOz0gYnRtdGtzZGlvLm8KIG9iai0kKENPTkZJR19CVF9NVEtVQVJUKQkmIzQzOz0gYnRtdGt1YXJ0Lm8KJiM0MztvYmotJChDT05GSUdfQlRfUUNPTUlQQykJJiM0Mzs9IGJ0cWNvbWlwYy5vCiBvYmotJChDT05GSUdfQlRfUUNPTVNNRCkJJiM0Mzs9IGJ0cWNvbXNtZC5vCiBvYmotJChDT05GSUdfQlRfQkNNKQkJJiM0Mzs9IGJ0YmNtLm8KIG9iai0kKENPTkZJR19CVF9SVEwpCQkmIzQzOz0gYnRydGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKaW5kZXggMDRlYmUyOTBiYzc4NGUuLmUxMzZlOTE5NzZjZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKQEAgLTM4MCw2ICYjNDM7MzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCWJyZWFrOwogCiAJY2FzZSBUTFZfVFlQRV9OVk06CiYjNDM7CQlpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChmd19zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCB0bHZfdHlwZV9oZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc5NCw2ICYjNDM7Nzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLAogCWVsc2UKIAkJcm9tX3ZlciA9ICgoc29jX3ZlciAmYW1wOyAweDAwMDAwZjAwKSAmZ3Q7Jmd0OyAweDA0KSB8IChzb2NfdmVyICZhbXA7IDB4MDAwMDAwMGYpOwogCiYjNDM7CWlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOCkKJiM0MzsJCWdvdG8gZG93bmxvYWRfbnZtOwomIzQzOwogCWlmIChzb2NfdHlwZSA9PSBRQ0FfV0NONjc1MCkKIAkJcWNhX3NlbmRfcGF0Y2hfY29uZmlnX2NtZChoZGV2KTsKIApAQCAtODgxLDYgJiM0Mzs4ODcsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJaWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKQogCQlxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCAmYW1wO2JvYXJkaWQpOwogCiYjNDM7ZG93bmxvYWRfbnZtOgogCS8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovCiAJY29uZmlnLnR5cGUgPSBUTFZfVFlQRV9OVk07CiAJaWYgKGZpcm13YXJlX25hbWUpIHsKQEAgLTkzOSw2ICYjNDM7OTQ2LDEwIEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSwKIAkJCXFjYV9nZXRfbnZtX25hbWVfYnlfYm9hcmQoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLAogCQkJCSAmIzM0O2htdG52JiMzNDssIHNvY190eXBlLCB2ZXIsIHJvbV92ZXIsIGJvYXJkaWQpOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFFDQV9JUFE1MDE4OgomIzQzOwkJCXNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSwKJiM0MzsJCQkJICYjMzQ7cWNhL21wbnYlMDJ4LmJpbiYjMzQ7LCByb21fdmVyKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSwKIAkJCQkgJiMzNDtxY2EvbnZtXyUwOHguYmluJiMzNDssIHNvY192ZXIpOwpAQCAtOTU4LDYgJiM0Mzs5NjksOSBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CWlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOCkKJiM0MzsJCW1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpOwomIzQzOwogCXN3aXRjaCAoc29jX3R5cGUpIHsKIAljYXNlIFFDQV9RQ0EyMDY2OgogCWNhc2UgUUNBX1FDQTYzOTA6CkBAIC05NjUsNiAmIzQzOzk3OSw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSwKIAljYXNlIFFDQV9XQ042NzUwOgogCWNhc2UgUUNBX1dDTjY4NTU6CiAJY2FzZSBRQ0FfV0NONzg1MDoKJiM0MzsJY2FzZSBRQ0FfSVBRNTAxODoKIAkJZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7CiAJCWlmIChlcnIgJmx0OyAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTEwMDEsNiAmIzQzOzEwMTYsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJY2FzZSBRQ0FfV0NONjc1MDoKIAljYXNlIFFDQV9XQ042ODU1OgogCWNhc2UgUUNBX1dDTjc4NTA6CiYjNDM7CWNhc2UgUUNBX0lQUTUwMTg6CiAJCS8qIGdldCBmdyBidWlsZCBpbmZvICovCiAJCWVyciA9IHFjYV9yZWFkX2Z3X2J1aWxkX2luZm8oaGRldik7CiAJCWlmIChlcnIgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmgKaW5kZXggOGYzYzFiMWM3N2IzZGUuLjM0M2NkNjJkMTEzNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmgKQEAgLTU0LDYgJiM0Mzs1NCw4IEBACiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX0lECQkweDEyMDAKICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfTUFTSwkJMHgwMDAwZmYwMAogCiYjNDM7I2RlZmluZSBOVk1fUkVBRFlfREVMQVlfTVMJCTE1MDAKJiM0MzsKIGVudW0gcWNhX2JhdWRyYXRlIHsKIAlRQ0FfQkFVRFJBVEVfMTE1MjAwCT0gMCwKIAlRQ0FfQkFVRFJBVEVfNTc2MDAsCkBAIC0xNTgsNiAmIzQzOzE2MCw3IEBAIGVudW0gcWNhX2J0c29jX3R5cGUgewogCVFDQV9XQ042NzUwLAogCVFDQV9XQ042ODU1LAogCVFDQV9XQ043ODUwLAomIzQzOwlRQ0FfSVBRNTAxOCwKIH07CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19CVF9RQ0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NjJhNzViNmM0YTkwYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jCkBAIC0wLDAgJiM0MzsxLDkzOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfaXJxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3Jlc2VydmVkX21lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVnbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlbW90ZXByb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2J0cWNhLmgmIzM0OwomIzQzOwomIzQzOy8qKiBNZXNzYWdlIGhlYWRlciBmb3JtYXQuCiYjNDM7ICoKJiM0MzsgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIEJpdFBvcyB8ICAgIDE1ICAgIHwgMTQgfCAxMyB8IDEyIHwgMTEgfCAxMCB8ICA5ICB8ICA4ICB8ICAgIDcgLSAwICAgICB8CiYjNDM7ICogICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiBGaWVsZCAgfCBsb25nX21zZyB8QUNLIHwgICAgICAgIFJGVSAgICAgICAgfCAgcGt0X3R5cGUgfCAgICBjbWQgICAgICAgfAomIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoKJiM0MzsgKiAtIGxvbmdfbXNnICAgOiBJZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIHRoZQomIzQzOyAqICAgICAgICAgICAgICAgIElQQ19NU0dfUExEX1NaLiBUaGUgcGF5bG9hZCBpbnN0ZWFkIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUKJiM0MzsgKiAgICAgICAgICAgICAgICBsb25nIG1lc3NhZ2UgYnVmZmVyIGluIHRoZSBzaGFyZWQgQlRTUyBtZW1vcnkgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiAtIEFDSyAgICAgICA6IFNldCBpZiBzZW5kaW5nIEFDSyBpZiByZXF1aXJlZCBieSBzZW5kaW5nIGFja25vd2xlZGVnZW1lbnQKJiM0MzsgKiAgICAgICAgICAgICAgICB0byBzZW5kZXIgaS5lLiBzZW5kIGFuIGFjayBJUEMgaW50ZXJydXB0IGlmIHNldC4KJiM0MzsgKgomIzQzOyAqIC0gUkZVICAgICAgICA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqCiYjNDM7ICogLSBwa3RfdHlwZSAgIDogSVBDIFBhY2tldCBUeXBlCiYjNDM7ICoKJiM0MzsgKiAtIGNtZCAgICAgICAgOiBDb250YWlucyB1bmlxdWUgY29tbWFuZCBJRAomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgSVBDX01TR19IRFJfU1oJCTQKJiM0MzsjZGVmaW5lIElQQ19NU0dfUExEX1NaCQk0MAomIzQzOyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWgkoSVBDX01TR19IRFJfU1ogJiM0MzsgSVBDX01TR19QTERfU1opCiYjNDM7CiYjNDM7LyogTWVzc2FnZSBIZWFkZXIgKi8KJiM0MzsjZGVmaW5lIElQQ19IRFJfTE9OR19NU0cJQklUKDE1KQomIzQzOyNkZWZpbmUgSVBDX0hEUl9SRVFfQUNLCQlCSVQoMTQpCiYjNDM7I2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0sJR0VOTUFTSyg5LCA4KQomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVAkwCiYjNDM7I2RlZmluZSAgSVBDX0hEUl9QS1RfVFlQRV9IQ0kJMQomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU8JMgomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVCTMKJiM0MzsjZGVmaW5lIElQQ19IRFJfQ01EX01BU0sJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgSVBDX0NNRF9TVE9QCQkxCiYjNDM7I2RlZmluZSBJUENfQ01EX1NXSVRDSF9UT19VQVJUCTIKJiM0MzsjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QCTMKJiM0MzsjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QCTQKJiM0MzsjZGVmaW5lIElQQ19DTURfU1RBUlQJCTUKJiM0MzsKJiM0MzsjZGVmaW5lIElQQ19UWF9RU0laRQkJMzIKJiM0MzsKJiM0MzsjZGVmaW5lCVRPX0FQUFNfQUREUihhKQkJKGRlc2MtJmd0O21lbV9yZWdpb24gJiM0MzsgKGludCkodWludHB0cl90KWEpCiYjNDM7I2RlZmluZQlUT19CVF9BRERSKGEpCQkoYSAtIGRlc2MtJmd0O21lbV9yZWdpb24pCiYjNDM7I2RlZmluZSBJUENfTEJVRl9TWih3LCB4LCB5LCB6KQkoKChUT19CVF9BRERSKCh2b2lkICopdykgJiM0Mzsgdy0mZ3Q7eCkgLSB3LSZndDt5KSAvIHctJmd0O3opCiYjNDM7CiYjNDM7I2RlZmluZQlHRVRfTk9fT0ZfQkxPQ0tTKGEsIGIpICgoYSAmIzQzOyBiIC0gMSkgLyBiKQomIzQzOwomIzQzOyNkZWZpbmUgR0VUX1JYX0lOREVYX0ZST01fQlVGKHgsIHkpCSgoeCAtIGRlc2MtJmd0O3J4X2N0eHQtJmd0O2xyaW5nX2J1ZikgLyB5KQomIzQzOwomIzQzOyNkZWZpbmUgR0VUX1RYX0lOREVYX0ZST01fQlVGKHgsIHkpCSgoeCAtIGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xyaW5nX2J1ZikgLyB5KQomIzQzOwomIzQzOyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeikJCVwKJiM0MzsJKChidWYgJiM0MzsgbGVuKSAmZ3Q7IChkZXNjLSZndDtyeF9jdHh0LSZndDtscmluZ19idWYgJiM0MzsJXAomIzQzOwkoc3ogKiBkZXNjLSZndDtyeF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQpKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVMJNTAKJiM0MzsKJiM0MzsjZGVmaW5lIEJUU1NfUEFTX0lECTB4YwomIzQzOwomIzQzO3N0cnVjdCBsb25nX21zZ19pbmZvIHsKJiM0MzsJX19sZTE2IHNtc2dfZnJlZV9jbnQ7CiYjNDM7CV9fbGUxNiBsbXNnX2ZyZWVfY250OwomIzQzOwl1OCByaWR4OwomIzQzOwl1OCB3aWR4OwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IGlwY19hdXhfcHRyIHsKJiM0MzsJX19sZTMyIGxlbjsKJiM0MzsJX19sZTMyIGJ1ZjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCByaW5nX2J1ZmZlciB7CiYjNDM7CV9fbGUxNiBtc2dfaGRyOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwl1bmlvbiB7CiYjNDM7CQl1OCBzbXNnX2RhdGFbSVBDX01TR19QTERfU1pdOwomIzQzOwkJX19sZTMyIGxtc2dfZGF0YTsKJiM0MzsJfSBwYXlsb2FkOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gewomIzQzOwlfX2xlMzIgcmJ1ZjsKJiM0MzsJdTggcmluZ19idWZfY250OwomIzQzOwl1OCByaWR4OwomIzQzOwl1OCB3aWR4OwomIzQzOwl1OCB0aWR4OwomIzQzOwlfX2xlMzIgbmV4dDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBjb250ZXh0X2luZm8gewomIzQzOwlfX2xlMTYgdG90YWxfc2l6ZTsKJiM0MzsJdTggbG1zZ19idWZfY250OwomIzQzOwl1OCBzbXNnX2J1Zl9jbnQ7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvOwomIzQzOwlfX2xlMzIgc3JpbmdfYnVmOwomIzQzOwlfX2xlMzIgbHJpbmdfYnVmOwomIzQzOwlfX2xlMzIgcmVzZXJ2ZWQ7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgcWNvbV9idHNzIHsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jOwomIzQzOwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKJiM0MzsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgYml0OwomIzQzOwlpbnQgaXJxOwomIzQzOwomIzQzOwl2b2lkICptZW1fcmVnaW9uOwomIzQzOwlwaHlzX2FkZHJfdCBtZW1fcGh5czsKJiM0MzsJcGh5c19hZGRyX3QgbWVtX3JlbG9jOwomIzQzOwlzaXplX3QgbWVtX3NpemU7CiYjNDM7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgdHhfcTsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CiYjNDM7CXN0cnVjdCBjb250ZXh0X2luZm8gKnR4X2N0eHQ7CiYjNDM7CXN0cnVjdCBjb250ZXh0X2luZm8gKnJ4X2N0eHQ7CiYjNDM7CXN0cnVjdCBsb25nX21zZ19pbmZvIGxtc2dfY3R4dDsKJiM0MzsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKmJ0c3NfYWxsb2NfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbGVuLAomIzQzOwkJCSAgICAgc3RydWN0IGlwY19hdXhfcHRyICphdXhfcHRyLCBib29sICppc19sYnVmX2Z1bGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLSZndDtkZXY7CiYjNDM7CXU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDsKJiM0MzsJdm9pZCAqcmV0X3B0cjsKJiM0MzsJdTMyIGxzejsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xyaW5nX2J1ZiA9PSAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtubyBsb25nIG1lc3NhZ2UgYnVmZmVyIGluaXRpYWxpemVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsc3ogPSBJUENfTEJVRl9TWihkZXNjLSZndDt0eF9jdHh0LCB0b3RhbF9zaXplLCBscmluZ19idWYsIGxtc2dfYnVmX2NudCk7CiYjNDM7CWJsa3MgPSBHRVRfTk9fT0ZfQkxPQ0tTKGxlbiwgbHN6KTsKJiM0MzsKJiM0MzsJaWYgKCFkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCB8fAomIzQzOwkJCShibGtzICZndDsgZGVzYy0mZ3Q7bG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiYjNDM7CiYjNDM7CWlkeCA9IGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4OwomIzQzOwomIzQzOwlpZiAoKGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICZndDsgZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250KSB7CiYjNDM7CQlibGtzX2NvbnN1bWVkID0gZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250IC0gaWR4OwomIzQzOwkJYXV4X3B0ci0mZ3Q7bGVuID0gbGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opOwomIzQzOwkJYXV4X3B0ci0mZ3Q7YnVmID0gZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bHJpbmdfYnVmOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ID0gKGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICUKJiM0MzsJCWRlc2MtJmd0O3R4X2N0eHQtJmd0O2xtc2dfYnVmX2NudDsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7bG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrczsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O2xtc2dfY3R4dC5sbXNnX2ZyZWVfY250ICZsdDs9CiYjNDM7CQkJKChkZXNjLSZndDt0eF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKQomIzQzOwkJKmlzX2xidWZfZnVsbCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bHJpbmdfYnVmKSAmIzQzOyAoaWR4ICogbHN6KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldF9wdHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqYnRzc19nZXRfdHhfcmJ1ZihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLAomIzQzOwkJCQkJCSBib29sICppc19zYnVmX2Z1bGwpCiYjNDM7ewomIzQzOwl1OCBpZHg7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsKJiM0MzsJZm9yIChyaW5mbyA9ICZhbXA7KGRlc2MtJmd0O3R4X2N0eHQtJmd0O3NyaW5nX2J1Zl9pbmZvKTsJcmluZm8gIT0gTlVMTDsKJiM0MzsJCXJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tJmd0O25leHQpKSB7CiYjNDM7CQlpZHggPSAocmluZm8tJmd0O3dpZHggJiM0MzsgMSkgJSAoZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7c21zZ19idWZfY250KTsKJiM0MzsKJiM0MzsJCWlmIChpZHggIT0gcmluZm8tJmd0O3RpZHgpIHsKJiM0MzsJCQlkZXNjLSZndDtsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tOwomIzQzOwomIzQzOwkJCWlmIChkZXNjLSZndDtsbXNnX2N0eHQuc21zZ19mcmVlX2NudCAmbHQ7PQomIzQzOwkJCQkoKGRlc2MtJmd0O3R4X2N0eHQtJmd0O3Ntc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpCiYjNDM7CQkJCSppc19zYnVmX2Z1bGwgPSB0cnVlOwomIzQzOwomIzQzOwkJCXJldHVybiByaW5mbzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX3NlbmQoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIsCiYjNDM7CQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRlc2MtJmd0O2hkZXY7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjsKJiM0MzsJYm9vbCBpc19sYnVmX2Z1bGwgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTsKJiM0MzsJdTE2IGhkciA9IG1zZ19oZHI7CiYjNDM7CXZvaWQgKnB0cl9idWY7CiYjNDM7CXUzMiBsZW47CiYjNDM7CiYjNDM7CS8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCYjMzk7cyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovCiYjNDM7CWxlbiA9IHNrYi0mZ3Q7bGVuICYjNDM7IDE7CiYjNDM7CW1lbXNldCgmYW1wO2F1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTsKJiM0MzsKJiM0MzsJaWYgKGxlbiAmZ3Q7IElQQ19NU0dfUExEX1NaKSB7CiYjNDM7CQloZHIgfD0gSVBDX0hEUl9MT05HX01TRzsKJiM0MzsKJiM0MzsJCXB0cl9idWYgPSBidHNzX2FsbG9jX2xtc2coZGVzYywgbGVuLAomIzQzOwkJCQkJICAmYW1wO2F1eF9wdHIsICZhbXA7aXNfbGJ1Zl9mdWxsKTsKJiM0MzsJCWlmIChJU19FUlIocHRyX2J1ZikpIHsKJiM0MzsJCQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7bG9uZyBtc2cgYnVmIGZ1bGwmIzM0Oyk7CiYjNDM7CQkJaGRldi0mZ3Q7c3RhdC5lcnJfdHgmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHB0cl9idWYpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCAmYW1wO2lzX3NidWZfZnVsbCk7CiYjNDM7CWlmIChJU19FUlIocmluZm8pKSB7CiYjNDM7CQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7c2hvcnQgbXNnIGJ1ZiBmdWxsJiMzNDspOwomIzQzOwkJaGRldi0mZ3Q7c3RhdC5lcnJfdHgmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmluZm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJidWYgPSAmYW1wOygoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpKVtyaW5mby0mZ3Q7d2lkeF07CiYjNDM7CiYjNDM7CWlmIChsZW4gJmd0OyBJUENfTVNHX1BMRF9TWikKJiM0MzsJCXJidWYtJmd0O3BheWxvYWQubG1zZ19kYXRhID0gY3B1X3RvX2xlMzIoVE9fQlRfQUREUihwdHJfYnVmKSk7CiYjNDM7CWVsc2UKJiM0MzsJCXB0cl9idWYgPSByYnVmLSZndDtwYXlsb2FkLnNtc2dfZGF0YTsKJiM0MzsKJiM0MzsJLyogaWYgaXQmIzM5O3MgYSBzaG9ydCBtZXNzYWdlLCB0aGUgYXV4IGxlbiBhbmQgYnVmIGFyZSBOVUxMICovCiYjNDM7CW1lbWNweV90b2lvKHB0cl9idWYsICZhbXA7aGNpX3NrYl9wa3RfdHlwZShza2IpLCAxKTsKJiM0MzsJbWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiAmIzQzOyAxLCBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuIC0gYXV4X3B0ci5sZW4pOwomIzQzOwlpZiAoYXV4X3B0ci5idWYpIHsKJiM0MzsJCW1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksCiYjNDM7CQkJICAgIChza2ItJmd0O2RhdGEgJiM0MzsgKHNrYi0mZ3Q7bGVuIC0gYXV4X3B0ci5sZW4pKSwgYXV4X3B0ci5sZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19zYnVmX2Z1bGwgfHwgaXNfbGJ1Zl9mdWxsKQomIzQzOwkJaGRyIHw9IElQQ19IRFJfUkVRX0FDSzsKJiM0MzsKJiM0MzsJcmJ1Zi0mZ3Q7bXNnX2hkciA9IGNwdV90b19sZTE2KGhkcik7CiYjNDM7CXJidWYtJmd0O2xlbiA9IGNwdV90b19sZTE2KGxlbik7CiYjNDM7CiYjNDM7CXJpbmZvLSZndDt3aWR4ID0gKHJpbmZvLSZndDt3aWR4ICYjNDM7IDEpICUgZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7c21zZ19idWZfY250OwomIzQzOwomIzQzOwlyZWdtYXBfc2V0X2JpdHMoZGVzYy0mZ3Q7cmVnbWFwLCBkZXNjLSZndDtvZmZzZXQsIEJJVChkZXNjLSZndDtiaXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTE2IGhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO2Rlc2MtJmd0O3R4X3EpKSkgewomIzQzOwkJaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTsKJiM0MzsKJiM0MzsJCXJldCA9IGJ0c3Nfc2VuZChkZXNjLCBoZHIsIHNrYik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UmIzM0Oyk7CiYjNDM7CQkJc2tiX3F1ZXVlX2hlYWQoJmFtcDtkZXNjLSZndDt0eF9xLCBza2IpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLSZndDtoZGV2LCBza2IpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRzc19mcmVlX2xtc2coc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTMyIGxtc2csIHUxNiBsZW4pCiYjNDM7ewomIzQzOwl1OCBpZHg7CiYjNDM7CXU4IGJsa3M7CiYjNDM7CXUzMiBsc3ogPSBJUENfTEJVRl9TWihkZXNjLSZndDt0eF9jdHh0LCB0b3RhbF9zaXplLCBscmluZ19idWYsCiYjNDM7CQkJCSAgIGxtc2dfYnVmX2NudCk7CiYjNDM7CiYjNDM7CWlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opOwomIzQzOwomIzQzOwlpZiAoaWR4ICE9IGRlc2MtJmd0O2xtc2dfY3R4dC5yaWR4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2xtc2dfY3R4dC5yaWR4ICA9IChkZXNjLSZndDtsbXNnX2N0eHQucmlkeCAgJiM0MzsgYmxrcykgJQomIzQzOwkJZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250OwomIzQzOwomIzQzOwlkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCAmIzQzOz0gYmxrczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IHJpbmdfYnVmZmVyICpyYnVmOwomIzQzOwomIzQzOwlyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIocmluZm8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmluZm8pOwomIzQzOwomIzQzOwlyYnVmID0gJmFtcDsoKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpW3JpbmZvLSZndDt3aWR4XTsKJiM0MzsJcmJ1Zi0mZ3Q7bXNnX2hkciA9IGNwdV90b19sZTE2KG1zZ19oZHIpOwomIzQzOwlyYnVmLSZndDtsZW4gPSAwOwomIzQzOwomIzQzOwlyaW5mby0mZ3Q7d2lkeCA9IChyaW5mby0mZ3Q7d2lkeCAmIzQzOyAxKSAlIGRlc2MtJmd0O3R4X2N0eHQtJmd0O3Ntc2dfYnVmX2NudDsKJiM0MzsKJiM0MzsJcmVnbWFwX3NldF9iaXRzKGRlc2MtJmd0O3JlZ21hcCwgZGVzYy0mZ3Q7b2Zmc2V0LCBCSVQoZGVzYy0mZ3Q7Yml0KSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHNzX3JlY3ZfY3VzdF9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1OCBjbWQpCiYjNDM7ewomIzQzOwl1MTYgbXNnX2hkciA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1zZ19oZHIgfD0gY21kOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIElQQ19DTURfU1RPUDoKJiM0MzsJCWJ0X2Rldl9pbmZvKGRlc2MtJmd0O2hkZXYsICYjMzQ7QlRTUyBzdG9wcGVkLCBncmFjZWZ1bGx5IHN0b3BwaW5nIEFQU1MgSVBDJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSVBDX0NNRF9TVEFSVDoKJiM0MzsJCWRlc2MtJmd0O3R4X2N0eHQgPSAoc3RydWN0IGNvbnRleHRfaW5mbyAqKSgodm9pZCAqKWRlc2MtJmd0O3J4X2N0eHQgJiM0MzsKJiM0MzsJCQkJbGUxNl90b19jcHUoZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7dG90YWxfc2l6ZSkpOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LndpZHggPSAwOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnJpZHggPSAwOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgPSBkZXNjLSZndDt0eF9jdHh0LSZndDtzbXNnX2J1Zl9jbnQ7CiYjNDM7CQlkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCA9IGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xtc2dfYnVmX2NudDsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnVubmluZywgdHJ1ZSk7CiYjNDM7CQl3YWtlX3VwKCZhbXA7ZGVzYy0mZ3Q7d2FpdF9xKTsKJiM0MzsKJiM0MzsJCWJ0X2Rldl9pbmZvKGRlc2MtJmd0O2hkZXYsICYjMzQ7QlRTUyBzdGFydGVkLCBpbml0aWFsaXppbmcgQVBTUyBCVCBJUEMmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlidF9kZXZfZXJyKGRlc2MtJmd0O2hkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgQ01EIElEOiAldSYjMzQ7LCBjbWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpKSkgewomIzQzOwkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBubyBtZXNzYWdlIHNlbnQmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJV1JJVEVfT05DRShkZXNjLSZndDtydW5uaW5nLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBzZW5kIGNvbnRyb2wgbWVzc2FnZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBwa3RfbGVuOwomIzQzOwomIzQzOwlpZiAobGVuICZsdDsgMSkKJiM0MzsJCXJldHVybiAtRVBST1RPOwomIzQzOwomIzQzOwlwa3RfdHlwZSA9IGRhdGFbMF07CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0X3R5cGUpIHsKJiM0MzsJY2FzZSBIQ0lfRVZFTlRfUEtUOgomIzQzOwl7CiYjNDM7CQlpZiAobGVuICZsdDsgSENJX0VWRU5UX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9ldmVudF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKShkYXRhICYjNDM7IDEpOwomIzQzOwomIzQzOwkJcGt0X2xlbiA9IEhDSV9FVkVOVF9IRFJfU0laRSAmIzQzOyBoZHItJmd0O3BsZW47CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEhDSV9DT01NQU5EX1BLVDogewomIzQzOwkJaWYgKGxlbiAmbHQ7IEhDSV9DT01NQU5EX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9jb21tYW5kX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKikoZGF0YSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCXBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItJmd0O3BsZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CiYjNDM7CXsKJiM0MzsJCWlmIChsZW4gJmx0OyBIQ0lfQUNMX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gSENJX0FDTF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItJmd0O2RsZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6CiYjNDM7CXsKJiM0MzsJCWlmIChsZW4gJmx0OyBIQ0lfU0NPX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9zY29faGRyICpoZHIgPSAoc3RydWN0IGhjaV9zY29faGRyICopKGRhdGEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gSENJX1NDT19IRFJfU0laRSAmIzQzOyBoZHItJmd0O2RsZW47CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FUFJPVE87CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBrdF9sZW4gJmd0OyBsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc2tiID0gYnRfc2tiX2FsbG9jKHBrdF9sZW4sIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJZGVzYy0mZ3Q7aGRldi0mZ3Q7c3RhdC5lcnJfcngmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSAodm9pZCAqKWRlc2MtJmd0O2hkZXY7CiYjNDM7CWhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlOwomIzQzOwlza2JfcHV0X2RhdGEoc2tiLCBkYXRhICYjNDM7IDEsIHBrdF9sZW4pOwomIzQzOwomIzQzOwloY2lfcmVjdl9mcmFtZShkZXNjLSZndDtoZGV2LCBza2IpOwomIzQzOwlkZXNjLSZndDtoZGV2LSZndDtzdGF0LmJ5dGVfcnggJiM0Mzs9IHBrdF9sZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBidHNzX3Byb2Nlc3Nfcngoc3RydWN0IHFjb21fYnRzcyAqZGVzYywKJiM0MzsJCQkJICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sCiYjNDM7CQkJCSAgYm9vbCAqYWNrLCB1OCAqcnhfY291bnQpCiYjNDM7ewomIzQzOwl1OCByaWR4LCBsYnVmX2lkeCwgYmxrc19jb25zdW1lZCwgcGt0X3R5cGUsIGNtZDsKJiM0MzsJc3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjsKJiM0MzsJdWludDhfdCAqcnhidWYgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBjaGFyICpidWY7CiYjNDM7CXUzMiBsc3o7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJpZHggPSByaW5mby0mZ3Q7cmlkeDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJpZHggIT0gcmluZm8tJmd0O3dpZHgpIHsKJiM0MzsJCW1lbXNldCgmYW1wO2F1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTsKJiM0MzsKJiM0MzsJCXJidWYgPSAmYW1wOygoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpKVtyaWR4XTsKJiM0MzsKJiM0MzsJCWlmIChyYnVmLSZndDttc2dfaGRyICZhbXA7IElQQ19IRFJfTE9OR19NU0cpIHsKJiM0MzsJCQlyeGJ1ZiA9IFRPX0FQUFNfQUREUihyYnVmLSZndDtwYXlsb2FkLmxtc2dfZGF0YSk7CiYjNDM7CQkJbHN6ID0gSVBDX0xCVUZfU1ooZGVzYy0mZ3Q7cnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLAomIzQzOwkJCQkgICBsbXNnX2J1Zl9jbnQpOwomIzQzOwomIzQzOwkJCWlmIChJU19SWF9NRU1fTk9OX0NPTlRJR0lPVVMocmJ1Zi0mZ3Q7cGF5bG9hZC5sbXNnX2RhdGEsCiYjNDM7CQkJCQkJICAgICByYnVmLSZndDtsZW4sIGxzeikpIHsKJiM0MzsJCQkJbGJ1Zl9pZHggPSBHRVRfUlhfSU5ERVhfRlJPTV9CVUYoCiYjNDM7CQkJCQkJcmJ1Zi0mZ3Q7cGF5bG9hZC5sbXNnX2RhdGEsIGxzeik7CiYjNDM7CiYjNDM7CQkJCWJsa3NfY29uc3VtZWQgPSBkZXNjLSZndDtyeF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQgLQomIzQzOwkJCQkJbGJ1Zl9pZHg7CiYjNDM7CQkJCWF1eF9wdHIubGVuID0gcmJ1Zi0mZ3Q7bGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opOwomIzQzOwkJCQlhdXhfcHRyLmJ1ZiA9IGRlc2MtJmd0O3J4X2N0eHQtJmd0O2xyaW5nX2J1ZjsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJ4YnVmID0gcmJ1Zi0mZ3Q7cGF5bG9hZC5zbXNnX2RhdGE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkqYWNrID0gKHJidWYtJmd0O21zZ19oZHIgJmFtcDsgSVBDX0hEUl9SRVFfQUNLKTsKJiM0MzsKJiM0MzsJCXBrdF90eXBlID0gRklFTERfR0VUKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgcmJ1Zi0mZ3Q7bXNnX2hkcik7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHBrdF90eXBlKSB7CiYjNDM7CQljYXNlIElQQ19IRFJfUEtUX1RZUEVfSENJOgomIzQzOwkJCWJ1ZiA9IGttYWxsb2MocmJ1Zi0mZ3Q7bGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJCQlpZiAoIWJ1ZikgewomIzQzOwkJCQlyaW5mby0mZ3Q7cmlkeCA9IHJpZHg7CiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQltZW1jcHlfZnJvbWlvKGJ1ZiwgcnhidWYsIHJidWYtJmd0O2xlbiAtIGF1eF9wdHIubGVuKTsKJiM0MzsKJiM0MzsJCQlpZiAoYXV4X3B0ci5idWYpCiYjNDM7CQkJCW1lbWNweV9mcm9taW8oYnVmICYjNDM7IChyYnVmLSZndDtsZW4gLSBhdXhfcHRyLmxlbiksCiYjNDM7CQkJCQkgICAgICBUT19BUFBTX0FERFIoYXV4X3B0ci5idWYpLCBhdXhfcHRyLmxlbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtJmd0O2xlbik7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWQmIzM0OywgcmV0KTsKJiM0MzsJCQlrZnJlZShidWYpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBJUENfSERSX1BLVF9UWVBFX0NVU1Q6CiYjNDM7CQkJY21kID0gRklFTERfR0VUKElQQ19IRFJfQ01EX01BU0ssIHJidWYtJmd0O21zZ19oZHIpOwomIzQzOwkJCWJ0c3NfcmVjdl9jdXN0X2ZyYW1lKGRlc2MsIGNtZCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmlkeCA9IChyaWR4ICYjNDM7IDEpICUgcmluZm8tJmd0O3JpbmdfYnVmX2NudDsKJiM0MzsKJiM0MzsJCWlmIChyeF9jb3VudCkKJiM0MzsJCQkoKnJ4X2NvdW50KSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyaW5mby0mZ3Q7cmlkeCA9IHJpZHg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc19hY2soc3RydWN0IHFjb21fYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IHJpbmdfYnVmZmVyICpyYnVmOwomIzQzOwl1OCB0aWR4OwomIzQzOwomIzQzOwlmb3IgKHJpbmZvID0gJmFtcDtkZXNjLSZndDt0eF9jdHh0LSZndDtzcmluZ19idWZfaW5mbzsgcmluZm8gIT0gTlVMTDsKJiM0MzsJCXJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tJmd0O25leHQpKSB7CiYjNDM7CQl0aWR4ID0gcmluZm8tJmd0O3RpZHg7CiYjNDM7CQlyYnVmID0gKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1Zik7CiYjNDM7CiYjNDM7CQl3aGlsZSAodGlkeCAhPSByaW5mby0mZ3Q7cmlkeCkgewomIzQzOwkJCWlmIChyYnVmW3RpZHhdLm1zZ19oZHIgJmFtcDsgSVBDX0hEUl9MT05HX01TRykgewomIzQzOwkJCQlidHNzX2ZyZWVfbG1zZyhkZXNjLAomIzQzOwkJCQkJICAgICAgIHJidWZbdGlkeF0ucGF5bG9hZC5sbXNnX2RhdGEsCiYjNDM7CQkJCQkgICAgICAgcmJ1Zlt0aWR4XS5sZW4pOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQl0aWR4ID0gKHRpZHggJiM0MzsgMSkgJSBkZXNjLSZndDt0eF9jdHh0LSZndDtzbXNnX2J1Zl9jbnQ7CiYjNDM7CQkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmluZm8tJmd0O3RpZHggPSB0aWR4OwomIzQzOwomIzQzOwkJYnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFjb21fYnRzcywgd29yayk7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJYm9vbCBhY2sgPSBmYWxzZTsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O3Jwcm9jLSZndDtzdGF0ZSAhPSBSUFJPQ19SVU5OSU5HKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtkZXNjLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy0mZ3Q7cnVubmluZykpKSB7CiYjNDM7CQkvLyBGVyBzZXRzIG9mZnNldCBvZiBSWCBjb250ZXh0IGluZm8gYXQgc3RhcnQgb2YgbWVtb3J5IHJlZ2lvbiB1cG9uIGJvb3QKJiM0MzsJCW9mZnNldCA9IHJlYWRsKGRlc2MtJmd0O21lbV9yZWdpb24pOwomIzQzOwkJZGV2X2RiZyhkZXNjLSZndDtkZXYsICYjMzQ7b2Zmc2V0IGFmdGVyIE0wIGJvb3Q6IDB4JTA4eFxuJiMzNDssIG9mZnNldCk7CiYjNDM7CQlkZXNjLSZndDtyeF9jdHh0ID0gKHN0cnVjdCBjb250ZXh0X2luZm8gKikoZGVzYy0mZ3Q7bWVtX3JlZ2lvbiAmIzQzOyBvZmZzZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYnRzc19wcm9jZXNzX2FjayhkZXNjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHJpbmZvID0gJmFtcDsoZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7c3JpbmdfYnVmX2luZm8pOwomIzQzOwkgICAgIHJpbmZvICE9IE5VTEw7CiYjNDM7CSAgICAgcmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby0mZ3Q7bmV4dCkpIHsKJiM0MzsJCXJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgJmFtcDthY2ssCiYjNDM7CQkJCSAgICAgICZhbXA7ZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7c21zZ19idWZfY250KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlidF9kZXZfZXJyKGRlc2MtJmd0O2hkZXYsICYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgcGVlciBtc2dzOiAlZCYjMzQ7LCByZXQpOwomIzQzOwkJCWdvdG8gc3Bpbl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFjaykKJiM0MzsJCXJlZ21hcF9zZXRfYml0cyhkZXNjLSZndDtyZWdtYXAsIGRlc2MtJmd0O29mZnNldCwgQklUKGRlc2MtJmd0O2JpdCkpOwomIzQzOwomIzQzO3NwaW5fdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2Rlc2MtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgYnRzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGRhdGE7CiYjNDM7CiYjNDM7CXF1ZXVlX3dvcmsoZGVzYy0mZ3Q7d3EsICZhbXA7ZGVzYy0mZ3Q7d29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX2luaXQoc3RydWN0IHFjb21fYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2Rlc2MtJmd0O3dhaXRfcSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7ZGVzYy0mZ3Q7bG9jayk7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtkZXNjLSZndDt0eF9xKTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgmIzM0O2J0c3Nfd3EmIzM0Oyk7CiYjNDM7CWlmICghZGVzYy0mZ3Q7d3EpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7ZGVzYy0mZ3Q7d29yaywgYnRzc193b3JrZXIpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZGVzYy0mZ3Q7aXJxLCBOVUxMLCBidHNzX2lycV9oYW5kbGVyLAomIzQzOwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCwKJiM0MzsJCQkJCSYjMzQ7YnRzc19pcnEmIzM0OywgZGVzYyk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXG4mIzM0OywKJiM0MzsJCQlkZXNjLSZndDtpcnEsIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwl1OCBwa3RfdHlwZSA9IGhjaV9za2JfcGt0X3R5cGUoc2tiKTsKJiM0MzsKJiM0MzsJaGRldi0mZ3Q7c3RhdC5ieXRlX3R4ICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsJc3dpdGNoIChwa3RfdHlwZSkgewomIzQzOwljYXNlIEhDSV9DT01NQU5EX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuY21kX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuYWNsX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhDSV9TQ09EQVRBX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuc2NvX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0c3NfaW5pdChkZXNjKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYnRfZGV2X2VycihoZGV2LCAmIzM0O0ZhaWxlZCBpbml0aWFsaXppbmcgQlRTUzogJWQmIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogd2FpdCAyIHNlY29uZHMgZm9yIGZpbGVzeXN0ZW0gdG8gYmVjb21lIGF2YWlsYWJsZSAqLwomIzQzOwltc2xlZXAoMjAwMCk7CiYjNDM7CiYjNDM7CS8qIEJvb3QgTTAgZmlybXdhcmUgKi8KJiM0MzsJcmV0ID0gcnByb2NfYm9vdChkZXNjLSZndDtycHJvYyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTsKJiM0MzsJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRlc2MtJmd0O3dhaXRfcSwgUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpLAomIzQzOwkJCQkgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiYjNDM7CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBCVFNTIHN0YXJ0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKJiM0MzsKJiM0MzsJcnByb2Nfc2h1dGRvd24oZGVzYy0mZ3Q7cnByb2MpOwomIzQzOwltc2xlZXAoUE9XRVJfQ09OVFJPTF9ERUxBWV9NUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnVubmluZywgZmFsc2UpOwomIzQzOwlpZiAoZGVzYy0mZ3Q7d3EgIT0gTlVMTCkgewomIzQzOwkJZGlzYWJsZV9pcnEoZGVzYy0mZ3Q7aXJxKTsKJiM0MzsJCWZsdXNoX3dvcmtxdWV1ZShkZXNjLSZndDt3cSk7CiYjNDM7CQlkZXZtX2ZyZWVfaXJxKGRlc2MtJmd0O2RldiwgZGVzYy0mZ3Q7aXJxLCBkZXNjKTsKJiM0MzsJCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rlc2MtJmd0O3R4X3EpOwomIzQzOwkJZGVzdHJveV93b3JrcXVldWUoZGVzYy0mZ3Q7d3EpOwomIzQzOwkJZGVzYy0mZ3Q7d3EgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBjb250cm9sbGVyIHRvIGRvIGJvdGggTEUgc2NhbiBhbmQgQlIvRURSIGlucXVpcnkKJiM0MzsJICogc2ltdWx0YW5lb3VzbHkuCiYjNDM7CSAqLwomIzQzOwloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TSU1VTFRBTkVPVVNfRElTQ09WRVJZKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlCiYjNDM7CSAqIHNldHVwIGZvciBldmVyeSBoY2kgdXAuCiYjNDM7CSAqLwomIzQzOwloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7CiYjNDM7CXJldCA9IHFjYV9yZWFkX3NvY192ZXJzaW9uKGhkZXYsICZhbXA7dmVyLCBRQ0FfSVBRNTAxOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgVUFSVDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlidF9kZXZfaW5mbyhoZGV2LCAmIzM0O1FDQSBCdWlsZCBJbmZvOiAlcyYjMzQ7LCBoZGV2LSZndDtmd19pbmZvKTsKJiM0MzsKJiM0MzsJLyogT2J0YWluIGFuZCBzZXQgQkQgYWRkcmVzcyBmcm9tIE5WTUVNIGNlbGwgKi8KJiM0MzsJaGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7CiYjNDM7CWhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTE2IGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpKSkgewomIzQzOwkJYnRfZGV2X2VycihoZGV2LCAmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlJiMzNDspOwomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gZnJlZV9za2I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtkZXNjLSZndDt0eF9xKSAmZ3Q7PSBJUENfVFhfUVNJWkUpIHsKJiM0MzsJCQkJYnRfZGV2X2VycihoZGV2LCAmIzM0O1RYIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIG1lc3NhZ2UmIzM0Oyk7CiYjNDM7CQkJCWhkZXYtJmd0O3N0YXQuZXJyX3R4JiM0MzsmIzQzOzsKJiM0MzsJCQkJcmV0ID0gLUVOT0JVRlM7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtkZXNjLSZndDt0eF9xLCBza2IpOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiAlZCYjMzQ7LCByZXQpOwomIzQzOwkJCWhkZXYtJmd0O3N0YXQuZXJyX3R4JiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlidHFjb21pcGNfdXBkYXRlX3N0YXRzKGRlc2MtJmd0O2hkZXYsIHNrYik7CiYjNDM7CiYjNDM7ZnJlZV9za2I6CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rlc2MtJmd0O3R4X3EpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBsb29rdXAgcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lvbiBvZiB0aGUgcmVtb3RlcHJvYyBub2RlICovCiYjNDM7CXJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGVzYy0mZ3Q7cnByb2MtJmd0O2Rldi5wYXJlbnQtJmd0O29mX25vZGUsIDAsICZhbXA7cmVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjLSZndDttZW1fcGh5cyA9IHJlcy5zdGFydDsKJiM0MzsJZGVzYy0mZ3Q7bWVtX3JlbG9jID0gcmVzLnN0YXJ0OwomIzQzOwlkZXNjLSZndDttZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoJmFtcDtyZXMpOwomIzQzOwlkZXNjLSZndDttZW1fcmVnaW9uID0gZGV2bV9pb3JlbWFwKGRldiwgZGVzYy0mZ3Q7bWVtX3BoeXMsIGRlc2MtJmd0O21lbV9zaXplKTsKJiM0MzsJaWYgKCFkZXNjLSZndDttZW1fcmVnaW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDt1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxuJiMzNDssICZhbXA7cmVzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcnByb2NfcHV0KHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jID0gZGF0YTsKJiM0MzsKJiM0MzsJcnByb2NfcHV0KHJwcm9jKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcWNvbV9idHNzICpkZXNjOwomIzQzOwlwaGFuZGxlIHJwcm9jX3BoYW5kbGU7CiYjNDM7CXN0cnVjdCBoY2lfZGV2ICpoZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgYXJnc1syXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGVzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGVzYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlc2MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwomIzQzOwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3Fjb20scnByb2MmIzM0OywgJmFtcDtycHJvY19waGFuZGxlKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0VOVCwgJiMzNDtGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O3Jwcm9jID0gcnByb2NfZ2V0X2J5X3BoYW5kbGUocnByb2NfcGhhbmRsZSk7CiYjNDM7CWlmICghZGVzYy0mZ3Q7cnByb2MpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsICYjMzQ7RmFpbGVkIHRvIGdldCByZW1vdGVwcm9jXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGJ0cWNvbWlwY19ycHJvY19wdXQsIGRlc2MtJmd0O3Jwcm9jKTsKJiM0MzsKJiM0MzsJcmV0ID0gYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oZGVzYyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlkZXNjLSZndDtyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3MoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3Fjb20saXBjJiMzNDssIDIsIGFyZ3MpOwomIzQzOwlpZiAoSVNfRVJSKGRlc2MtJmd0O3JlZ21hcCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkZXNjLSZndDtyZWdtYXApOwomIzQzOwomIzQzOwlkZXNjLSZndDtvZmZzZXQgPSBhcmdzWzBdOwomIzQzOwlkZXNjLSZndDtiaXQgPSBhcmdzWzFdOwomIzQzOwomIzQzOwlkZXNjLSZndDtpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwomIzQzOwlpZiAoZGVzYy0mZ3Q7aXJxICZsdDsgMCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZGVzYy0mZ3Q7aXJxLCAmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIElSUVxuJiMzNDspOwomIzQzOwomIzQzOwloZGV2ID0gaGNpX2FsbG9jX2RldigpOwomIzQzOwlpZiAoIWhkZXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpOwomIzQzOwlkZXNjLSZndDtoZGV2ID0gaGRldjsKJiM0MzsJU0VUX0hDSURFVl9ERVYoaGRldiwgJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwloZGV2LSZndDtidXMgPSBIQ0lfSVBDOwomIzQzOwomIzQzOwloZGV2LSZndDtvcGVuID0gYnRxY29taXBjX29wZW47CiYjNDM7CWhkZXYtJmd0O2Nsb3NlID0gYnRxY29taXBjX2Nsb3NlOwomIzQzOwloZGV2LSZndDtzaHV0ZG93biA9IGJ0cWNvbWlwY19zaHV0ZG93bjsKJiM0MzsJaGRldi0mZ3Q7c2V0dXAgPSBidHFjb21pcGNfc2V0dXA7CiYjNDM7CWhkZXYtJmd0O3NlbmQgPSBidHFjb21pcGNfc2VuZDsKJiM0MzsJaGRldi0mZ3Q7Zmx1c2ggPSBidHFjb21pcGNfZmx1c2g7CiYjNDM7CWhkZXYtJmd0O3NldF9iZGFkZHIgPSBxY2Ffc2V0X2JkYWRkcjsKJiM0MzsKJiM0MzsJcmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWhjaV9mcmVlX2RldihoZGV2KTsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVCVVNZLCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBoZGV2XG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CiYjNDM7CWlmICghZGVzYyB8fCAhZGVzYy0mZ3Q7aGRldikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGNpX3VucmVnaXN0ZXJfZGV2KGRlc2MtJmd0O2hkZXYpOwomIzQzOwloY2lfZnJlZV9kZXYoZGVzYy0mZ3Q7aGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJ0cWNvbWlwY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtxY29tLGlwcTUwMTgtYnQmIzM0OyB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovfSwKJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0gYnRxY29taXBjX3Byb2JlLAomIzQzOwkucmVtb3ZlID0gYnRxY29taXBjX3JlbW92ZSwKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtidHFjb21pcGMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGJ0cWNvbWlwY19vZl9tYXRjaCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYnRxY29taXBjX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UXVhbGNvbW0gQmx1ZXRvb3RoIElQQyBEcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnCmluZGV4IGM1MjFjNzQ0ZTdkYmU1Li42YjUyZjc4ZjE0MjdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQwogCSAgcHJvY2Vzc29ycyBvbiB2YXJpb3VzIFRJIFNvQ3MuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UmIzM5O3JlCiAJICBub3QgaW50ZXJlc3RlZCBpbiB0aGUgUFJVIG9yIGlmIHlvdSBhcmUgdW5zdXJlLgogCiYjNDM7Y29uZmlnIFFDT01fTTBfQlRTU19QSUwKJiM0MzsJdHJpc3RhdGUgJiMzNDtRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IEFSQ0hfUUNPTQomIzQzOwlzZWxlY3QgUUNPTV9NRFRfTE9BREVSCiYjNDM7CXNlbGVjdCBRQ09NX1JQUk9DX0NPTU1PTgomIzQzOwlzZWxlY3QgUUNPTV9TQ00KJiM0MzsJaGVscAomIzQzOwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgU2VjdXJlIFBlcmlwaGVyYWwgSW1hZ2VyIExvYWRlciBmb3IgdGhlCiYjNDM7CSAgUXVhbGNvbW0gQmx1ZXRvb3RoIFN1YnN5c3RlbSBydW5uaW5nIG9uIHRoZSBNMCByZW1vdGUgcHJvY2Vzc29yIGZvdW5kCiYjNDM7CSAgaW4gdGhlIElQUTUwMTggU29DLiBUaGUgTTAgY29yZSBpcyBzdGFydGVkIGFuZCBzdG9wcGVkIHVzaW5nIGEKJiM0MzsJICBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIGNhbGwgdG8gVHJ1c3Rab25lLgomIzQzOwogY29uZmlnIFFDT01fUElMX0lORk8KIAl0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCkBAIC0yMSw2ICYjNDM7MjEsNyBAQCBvYmotJChDT05GSUdfREE4WFhfUkVNT1RFUFJPQykJCSYjNDM7PSBkYTh4eF9yZW1vdGVwcm9jLm8KIG9iai0kKENPTkZJR19LRVlTVE9ORV9SRU1PVEVQUk9DKQkmIzQzOz0ga2V5c3RvbmVfcmVtb3RlcHJvYy5vCiBvYmotJChDT05GSUdfTUVTT05fTVhfQU9fQVJDX1JFTU9URVBST0MpJiM0Mzs9IG1lc29uX214X2FvX2FyYy5vCiBvYmotJChDT05GSUdfUFJVX1JFTU9URVBST0MpCQkmIzQzOz0gcHJ1X3Jwcm9jLm8KJiM0MztvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTCkJCSYjNDM7PSBxY29tX20wX2J0c3NfcGlsLm8KIG9iai0kKENPTkZJR19RQ09NX1BJTF9JTkZPKQkJJiM0Mzs9IHFjb21fcGlsX2luZm8ubwogb2JqLSQoQ09ORklHX1FDT01fUlBST0NfQ09NTU9OKQkJJiM0Mzs9IHFjb21fY29tbW9uLm8KIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKQkJJiM0Mzs9IHFjb21fcTZ2NS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fbTBfYnRzc19waWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzE2OGUyNzBlNGQ0NjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jCkBAIC0wLDAgJiM0MzsxLDI2MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZl9yZXNlcnZlZF9tZW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9xY29tL21kdF9sb2FkZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Fjb21fY29tbW9uLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQlRTU19QQVNfSUQJMHhjCiYjNDM7CiYjNDM7c3RydWN0IG0wX2J0c3MgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXBoeXNfYWRkcl90IG1lbV9waHlzOwomIzQzOwlwaHlzX2FkZHJfdCBtZW1fcmVsb2M7CiYjNDM7CXZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbjsKJiM0MzsJc2l6ZV90IG1lbV9zaXplOwomIzQzOwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbTBfYnRzc19zdGFydChzdHJ1Y3QgcnByb2MgKnJwcm9jKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFxY29tX3NjbV9wYXNfc3VwcG9ydGVkKEJUU1NfUEFTX0lEKSkgewomIzQzOwkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkmIzM0O1BBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XG4mIzM0OywKJiM0MzsJCQlCVFNTX1BBU19JRCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBxY29tX3NjbV9wYXNfYXV0aF9hbmRfcmVzZXQoQlRTU19QQVNfSUQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBycHJvYzogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtMF9idHNzX3N0b3Aoc3RydWN0IHJwcm9jICpycHJvYykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChycHJvYy0mZ3Q7c3RhdGUgPT0gUlBST0NfUlVOTklORyB8fCBycHJvYy0mZ3Q7c3RhdGUgPT0gUlBST0NfQ1JBU0hFRCkgewomIzQzOwkJcmV0ID0gcWNvbV9zY21fcGFzX3NodXRkb3duKEJUU1NfUEFTX0lEKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byBzdG9wIHJwcm9jOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRldl9pbmZvKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O1N1Y2Nlc3NmdWxseSBzdG9wcGVkIHJwcm9jXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbTBfYnRzc19sb2FkKHN0cnVjdCBycHJvYyAqcnByb2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbTBfYnRzcyAqZGVzYyA9IHJwcm9jLSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcnM7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2VnX2Z3OwomIzQzOwljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcjsKJiM0MzsJY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqZWhkcjsKJiM0MzsJdm9pZCBfX2lvbWVtICptZXRhZGF0YTsKJiM0MzsJc2l6ZV90IG1ldGFkYXRhX3NpemU7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LSZndDtkYXRhOwomIzQzOwlwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICYjNDM7IDEpOwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7ZncsIHJwcm9jLSZndDtmaXJtd2FyZSwgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlOiAlZFxuJiMzNDssCiYjNDM7CQkJcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCAmYW1wO21ldGFkYXRhX3NpemUsIHJwcm9jLSZndDtmaXJtd2FyZSwKJiM0MzsJCQkJCSAgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwlpZiAoSVNfRVJSKG1ldGFkYXRhKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihtZXRhZGF0YSk7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIHJlYWQgZmlybXdhcmUgbWV0YWRhdGE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBxY29tX3NjbV9wYXNfaW5pdF9pbWFnZShCVFNTX1BBU19JRCwgbWV0YWRhdGEsCiYjNDM7CQkJCSAgICAgIG1ldGFkYXRhX3NpemUsIE5VTEwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O1BBUyBpbml0IGltYWdlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3BobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhciAqc2VnX25hbWUgX19mcmVlKGtmcmVlKSA9IGtzdHJkdXAocnByb2MtJmd0O2Zpcm13YXJlLAomIzQzOwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghc2VnX25hbWUpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlwaGRyID0gJmFtcDtwaGRyc1tpXTsKJiM0MzsKJiM0MzsJCS8qIE9ubHkgcHJvY2VzcyB2YWxpZCBsb2FkYWJsZSBkYXRhIHNlZ21lbnRzICovCiYjNDM7CQlpZiAocGhkci0mZ3Q7cF90eXBlICE9IFBUX0xPQUQgfHwgIXBoZHItJmd0O3BfbWVtc3opCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAocGhkci0mZ3Q7cF92YWRkciAmIzQzOyBwaGRyLSZndDtwX2ZpbGVzeiAmZ3Q7IGRlc2MtJmd0O21lbV9zaXplKSB7CiYjNDM7CQkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkJJiMzNDtTZWdtZW50IGRhdGEgZXhjZWVkcyB0aGUgcmVzZXJ2ZWQgbWVtb3J5IGFyZWEhXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnQgZmlsZXMgKi8KJiM0MzsJCWlmIChwaGRyLSZndDtwX29mZnNldCAmZ3Q7IGZ3LSZndDtzaXplIHx8CiYjNDM7CQkgICAgcGhkci0mZ3Q7cF9vZmZzZXQgJiM0MzsgcGhkci0mZ3Q7cF9maWxlc3ogJmd0OyBmdy0mZ3Q7c2l6ZSkgewomIzQzOwkJCXNwcmludGYoc2VnX25hbWUgJiM0Mzsgc3RybGVuKHNlZ19uYW1lKSAtIDMsICYjMzQ7YiUwMmQmIzM0OywgaSk7CiYjNDM7CQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3NlZ19mdywgc2VnX25hbWUsCiYjNDM7CQkJCQkgICAgICAgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkJCSYjMzQ7Q291bGQgbm90IGZpbmQgc3BsaXQgc2VnbWVudCBiaW5hcnk6ICVzXG4mIzM0OywKJiM0MzsJCQkJCXNlZ19uYW1lKTsKJiM0MzsJCQkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzCiYjNDM7CQkJICogdGhlIG9mZnNldAomIzQzOwkJCSAqLwomIzQzOwkJCW1lbWNweV90b2lvKGRlc2MtJmd0O21lbV9yZWdpb24gJiM0MzsgcGhkci0mZ3Q7cF92YWRkciwKJiM0MzsJCQkJICAgIHNlZ19mdy0mZ3Q7ZGF0YSwgcGhkci0mZ3Q7cF9maWxlc3opOwomIzQzOwomIzQzOwkJCXJlbGVhc2VfZmlybXdhcmUoc2VnX2Z3KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWVtY3B5X3RvaW8oZGVzYy0mZ3Q7bWVtX3JlZ2lvbiAmIzQzOyBwaGRyLSZndDtwX3ZhZGRyLAomIzQzOwkJCQkgICAgZnctJmd0O2RhdGEgJiM0MzsgcGhkci0mZ3Q7cF9vZmZzZXQsIHBoZHItJmd0O3BfZmlsZXN6KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX21ldGFkYXRhOgomIzQzOwlrZnJlZShtZXRhZGF0YSk7CiYjNDM7cmVsZWFzZV9mdzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnByb2Nfb3BzIG0wX2J0c3Nfb3BzID0gewomIzQzOwkuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LAomIzQzOwkuc3RvcCA9IG0wX2J0c3Nfc3RvcCwKJiM0MzsJLmxvYWQgPSBtMF9idHNzX2xvYWQsCiYjNDM7CS5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJlc291cmNlIHJlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtJmd0O29mX25vZGUsIDAsICZhbXA7cmVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjLSZndDttZW1fcGh5cyA9IHJlcy5zdGFydDsKJiM0MzsJZGVzYy0mZ3Q7bWVtX3JlbG9jID0gcmVzLnN0YXJ0OwomIzQzOwlkZXNjLSZndDttZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoJmFtcDtyZXMpOwomIzQzOwlkZXNjLSZndDttZW1fcmVnaW9uID0gZGV2bV9pb3JlbWFwKGRldiwgZGVzYy0mZ3Q7bWVtX3BoeXMsIGRlc2MtJmd0O21lbV9zaXplKTsKJiM0MzsJaWYgKCFkZXNjLSZndDttZW1fcmVnaW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDt1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxuJiMzNDssICZhbXA7cmVzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfcGlsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwkvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWUgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbTBfYnRzcyAqZGVzYzsKJiM0MzsJc3RydWN0IGNsayAqbHBvX2NsazsKJiM0MzsJc3RydWN0IHJwcm9jICpycHJvYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LSZndDtvZl9ub2RlLCAmIzM0O2Zpcm13YXJlLW5hbWUmIzM0OywKJiM0MzsJCQkJICAgICAgJmFtcDtmd19uYW1lKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlycHJvYyA9IGRldm1fcnByb2NfYWxsb2MoZGV2LCAmIzM0O20wYnRzcyYjMzQ7LCAmYW1wO20wX2J0c3Nfb3BzLAomIzQzOwkJCQkgZndfbmFtZSwgc2l6ZW9mKCpkZXNjKSk7CiYjNDM7CWlmICghcnByb2MpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBycHJvY1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVzYyA9IHJwcm9jLSZndDtwcml2OwomIzQzOwlkZXNjLSZndDtkZXYgPSBkZXY7CiYjNDM7CiYjNDM7CXJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWxwb19jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsICYjMzQ7YnRzc19scG9fY2xrJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKGxwb19jbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwb19jbGspLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGdldCBscG8gY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7YnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAmIzM0O2J0c3NfcmVzZXQmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChkZXNjLSZndDtidHNzX3Jlc2V0KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZXNjLSZndDtidHNzX3Jlc2V0KSwKJiM0MzsJCQkJICAgICAmIzM0O3VuYWJsZSB0byBhY3F1aXJlIGJ0c3NfcmVzZXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkZXNjLSZndDtidHNzX3Jlc2V0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLSZndDtkZXYucGFyZW50LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcnByb2MtJmd0O2F1dG9fYm9vdCA9IGZhbHNlOwomIzQzOwlyZXQgPSBkZXZtX3Jwcm9jX2FkZChkZXYsIHJwcm9jKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsJiMzNDsgfSwKJiM0MzsJeyB9LAomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbTBfYnRzc19waWxfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSBtMF9idHNzX3BpbF9wcm9iZSwKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtxY29tLW0wLWJ0c3MtcGlsJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBtMF9idHNzX29mX21hdGNoLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtMF9idHNzX3BpbF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1F1YWxjb21tIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBOZXcgQmx1ZXRvb3RoIGFuZCBSZW1vdGVQcm9jIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB3aXRoIHNvbWUgbmV3IGtlcm5lbCBkcml2ZXJzIOKAkyBgYnRxY29taXBjLmNgIGFuZCBgcWNvbV9tMF9idHNzX3BpbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgaW50cm9kdWNpbmcgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/IExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhlc2UgYXJlIGJvdGggcGxhdGZvcm0gZHJpdmVycy4gIGBidHFjb21pcGMuY2AgaXMgZm9yICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDsgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgIGZvciAmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbCYjMzQ7LiAgUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBRdWFsY29tbSBJUFE1MDE4LCB3aGljaCBpbXBsaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gQ2FuIHRoZXNlIHJlYWxpc3RpY2FsbHkgYmUgZnV6emVkIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gIFBsYXRmb3JtIGRyaXZlcnMgb2Z0ZW4gbmVlZCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBJICprbm93KiBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcgYW5kIHNvbWUgbWVjaGFuaXNtLCBsaWtlIGBzeXpfZ2VuX3N5c2ZzYCBvciBieSBpbmplY3RpbmcgZGV2aWNlIG5vZGVzLiAgSG93ZXZlciwgdGhpcyBkcml2ZXIgcmVnaXN0ZXJzIGFuIEhDSSBkZXZpY2UuICBUaGUgKnByb2JlKiBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVuIHRoZSBIQ0kgZGV2aWNlIGdldHMgcmVnaXN0ZXJlZC4gSWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbiYjMzk7dCBjYWxsZWQsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciBmb3IgSENJIGZ1enppbmcuCgpUbyBnZXQgYGJ0cWNvbWlwY19wcm9iZWAgdG8gZXZlbiAqcnVuKiwgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBhIHBsYXRmb3JtIGRldmljZSB3aXRoIHRoYXQgJiMzNDtxY29tLGlwcTUwMTgtYnQmIzM0OyBjb21wYXRpYmxlIHN0cmluZy4gIFBsdXMsIGl0IG5lZWRzIHBoYW5kbGVzIGZvciBgcWNvbSxycHJvY2AsIGFuIGBxY29tLGlwY2Agc3lzY29uLCBhbmQgYW4gaW50ZXJydXB0LiAgSWYgSSYjMzk7bSBqdXN0IHJ1bm5pbmcgUUVNVSB4ODZfNjQgb3IgYXJtNjQgd2l0aG91dCB0aGlzIHNwZWNpZmljIERULCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkIHVubGVzcyBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgaXQgY29ycmVjdGx5LiBEb2VzIHN5emthbGxlciBvZmZlciBzb21lIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGFkZCBjYWxsPyBObywgaXQgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGRvIHRoYXQgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGV4aXN0aW5nIGRlc2NyaXB0aW9uIGluIHRoZSBrZXJuZWwuCgpTbywgcmVhbGlzdGljYWxseSwgYGJ0cWNvbWlwY19wcm9iZWAgaXMgcHJvYmFibHkgKnVucmVhY2hhYmxlKiB3aXRob3V0IGEgdmVyeSBzcGVjaWZpYyBkZXZpY2UgdHJlZSB0aGF0IG1hdGNoZXMuIFRoYXQgbWVhbnMgYHJwcm9jX2dldF9ieV9waGFuZGxlYCwgYHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJnc2AsIGFuZCBgcGxhdGZvcm1fZ2V0X2lycWAgd2lsbCBmYWlsLCBiZWNhdXNlIHRoZSBkZXZpY2UgdHJlZSB3b24mIzM5O3QgYmUgY29uc3RydWN0ZWQgd2l0aCB0aGUgcmlnaHQgT0Ygbm9kZXMgYW5kIHBoYW5kbGVzLiBTcGVjaWZpY2FsbHksIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtJmd0O29mX25vZGUsICYjMzQ7cWNvbSxycHJvYyYjMzQ7LCAmYW1wO3Jwcm9jX3BoYW5kbGUpYCB3b3VsZCBmYWlsLiAgSXQmIzM5O3MganVzdCBnb2luZyB0byByZXR1cm4gYC1FTk9FTlRgLgoKVGhlIHNhbWUgYXBwbGllcyB0byBgcWNvbV9tMF9idHNzX3BpbC5jYC4gSXQgZGVwZW5kcyBvbiB0aGluZ3MgbGlrZSBgZmlybXdhcmUtbmFtZWAgYW5kIHdpbGwgbGlrZWx5IGZhaWwgaW4gdGhlIGBwcm9iZWAgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMuIEkgbm90aWNlZCBzb21lIG1vZGlmaWNhdGlvbnMgaW4gYGJ0cWNhLmNgOiBhIGNoZWNrIGluIGBxY2FfdGx2X2NoZWNrX2RhdGFgIHRoYXQgaGFzIGEgY29uZGl0aW9uYWwgYGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBgcWNhX3Rsdl9jaGVja19kYXRhYCBpcyBwYXJ0IG9mIGZpcm13YXJlIGRvd25sb2FkIGZ1bmN0aW9uYWxpdHkuIGBzb2NfdHlwZWAgYmVpbmcgYFFDQV9JUFE1MDE4YCBpcyBvbmx5IHBhc3NlZCBmcm9tIGBidHFjb21pcGNfc2V0dXBgLiBIb3dldmVyLCBzaW5jZSBgYnRxY29taXBjX3NldHVwYCBpcyB1bnJlYWNoYWJsZSwgdGhpcyBjb2RlcGF0aCBpcyBhbHNvIGRlYWQuCgpXYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRoYXQgYFFDQV9JUFE1MDE4YCBtaWdodCBnZXQgdXNlZCB3aXRoIGBoY2lfdWFydGA/IExldCYjMzk7cyBjaGVjayB3aGVyZSBgUUNBX0lQUTUwMThgIGlzIHVzZWQuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRQ0FfSVBRNTAxOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9idHFjYS5jPTMxMD1zdGF0aWMgaW50IHFjYV90bHZfY2hlY2tfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTM4Mi1cdGNhc2UgVExWX1RZUEVfTlZNOlxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzozODM6XHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtMzg0LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM9NzcxPWludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTc5OS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6ODAwOlx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy04MDEtXHRcdGdvdG8gZG93bmxvYWRfbnZtO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtOTQ4LVx0XHRcdGJyZWFrO1xuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo5NDk6XHRcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk1MC1cdFx0XHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NzEtXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk3MjpcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtOTczLVx0XHRtc2xlZXAoTlZNX1JFQURZX0RFTEFZX01TKTtcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4MS1cdGNhc2UgUUNBX1dDTjc4NTA6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk4MjpcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4My1cdFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy0xMDE4LVx0Y2FzZSBRQ0FfV0NONzg1MDpcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6MTAxOTpcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMjAtXHRcdC8qIGdldCBmdyBidWlsZCBpbmZvICovXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaD0xNDk9ZW51bSBxY2FfYnRzb2NfdHlwZSB7XG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjItXHRRQ0FfV0NONzg1MCxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmg6MTYzOlx0UUNBX0lQUTUwMTgsXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oLTE2NC19O1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jPTczMT1zdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NDYtXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYzo3NDc6XHRyZXQgPSBxY2FfcmVhZF9zb2NfdmVyc2lvbihoZGV2LCBcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc0OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMtNzUwLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmM6NzUxOlx0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NTItXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDQKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFFDQV9JUFE1MDE4YC4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBwbGFjZXMgdGhpcyBpcyB1c2VkIGFyZSBpbiBgYnRxY29taXBjLmNgIHdoZW4gaXQmIzM5O3MgcGFzc2VkIHRvIGBxY2FfdWFydF9zZXR1cGAgb3IgYHFjYV9yZWFkX3NvY192ZXJzaW9uYC4gQW5kLCBpZiBJJiMzOTttIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGBidHFjb21pcGMuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBgcWNvbSxpcHE1MDE4LWJ0YC4KClRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogZ29pbmcgdG8gYmUgcHJlc2VudCBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgUUVNVSB4ODZfNjQsIGFybTY0IHZpcnQsIHRoYXQgc29ydCBvZiB0aGluZy4gU3l6a2FsbGVyLCBhcyBicmlsbGlhbnQgYXMgaXQgaXMsIGRvZXNuJiMzOTt0IGhhdmUgYSBtZWNoYW5pc20gdG8gbWFnaWNhbGx5IHNhdGlzZnkgdGhlIHJlYWxseSBjb21wbGV4IGRlcGVuZGVuY2llcyBpbmhlcmVudCBpbiB0aGVzZSBkZXZpY2UgdHJlZXMuIFNwZWNpZmljYWxseSwgaXQgY2FuJiMzOTt0IGhhbmRsZSB0aG9zZSBwaGFuZGxlcyBwb2ludGluZyB0byBgcnByb2NgLCBgc3lzY29uYCwgcmVzZXJ2ZWQgbWVtb3J5LCBhbmQgYWxsIHRoYXQgamF6ei4gU28sIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIGVhcmx5LiBUaGlzIG1lYW5zIGFueSBvZiB0aGUgYWN0dWFsIGZ1bmN0aW9uYWwgY29kZSBpbiBgYnRxY29taXBjLmNgIGFuZCBhbHNvIHRoZSBjb2RlIGluIGBxY29tX20wX2J0c3NfcGlsLmNgIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBhbnkgZnV6emluZyB3ZSB0cnkgdG8gZG8uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHNwZWNpZmljIHN1cHBvcnQgZm9yIGBxY29tLGlwcTUwMTgtYnRgLiBPa2F5LCBpdCAqZG9lcyogaGF2ZSBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgcGxhdGZvcm0gZGV2aWNlcy4gSG93ZXZlciwgZXZlbiBpZiBTeXprYWxsZXIgKmNvdWxkKiBjcmVhdGUgdGhlIGRldmljZSwgYG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDtxY29tLHJwcm9jJiMzNDssICZhbXA7cnByb2NfcGhhbmRsZSlgIHdpbGwgc3RpbGwgZmFpbC4gVGhlIGNyZWF0ZWQgZGV2aWNlIHdvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYG9mX25vZGVgIHdpdGggdGhlc2Ugc3BlY2lmaWMgcHJvcGVydGllcyBvciBwaGFuZGxlcy4gU28gYGJ0cWNvbWlwY19wcm9iZWAgd2lsbCByZXR1cm4gYC1FTk9FTlRgLgoKQW5kIHdhaXQsIHdoYXQgYWJvdXQgYHFjb21fbTBfYnRzc19waWwuY2A/IEl0IHJlbGllcyBvbiBgZmlybXdhcmUtbmFtZWAgZnJvbSB0aGUgYG9mX25vZGVgLCB3aGljaCBpcyBhbHNvIGdvaW5nIHRvIGZhaWwuIFNvLCB0aGUgY29kZSBpcyB0b3RhbGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCBjYW5ub3QgYmUgcHJvYmVkIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBkdWUgdG8gdGhvc2UgY29tcGxleCBkZXZpY2UgdHJlZSBkZXBlbmRlbmNpZXMgaW52b2x2aW5nIHBoYW5kbGVzLCByZXNlcnZlZCBtZW1vcnksIGFuZCBzaW1pbGFyIHRoaW5ncy4KCkxldCBtZSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb3JyZWN0LiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi5jb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBQZXJmZWN0LiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhpcyBzaXR1YXRpb24uCgpJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzIChidHFjb21pcGMgYW5kIHFjb21fbTBfYnRzc19waWwpIGZvciB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuIFRoZXNlIGRyaXZlcnMgcmVseSBvbiBjb21wbGV4IGRldmljZSB0cmVlIHByb3BlcnRpZXMgKHN1Y2ggYXMgcGhhbmRsZXMgdG8gcmVtb3RlcHJvYywgc3lzY29uLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UsIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBwcmVzZW50LCBtZWFuaW5nIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBmYWlsIGVhcmx5IGFuZCB0aGUgY29yZSBsb2dpYyB3aWxsIHJlbWFpbiB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyOS4yODY3MjkyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzQ5MTQyNjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyOS4yODY3MzYzODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDk0MTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4NThkNzFmZmNlZjM2YzZlN2M0OTM5YjhhZWVjMGY0OGI3ZWI4YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjQ6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXFxuQEAgLTAsMCArMSw2MyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBRdWFsY29tbSBJUFE1MDE4IEJsdWV0b290aFxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBHZW9yZ2UgTW91c3NhbGVtIFxcdTAwM2NnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tXFx1MDAzZVxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSBxY29tLGlwcTUwMTgtYnRcXG4rXFxuKyAgaW50ZXJydXB0czpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgSW50ZXJydXB0IGxpbmUgZnJvbSB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSB0byB0aGUgaG9zdCBwcm9jZXNzb3JcXG4rICAgICAgICAgIHRvIG5vdGlmeSBpdCBvZiBldmVudHMgc3VjaCBhcyByZVxcbitcXG4rICBxY29tLGlwYzpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUtYXJyYXlcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byBhIHN5c2NvbiBub2RlIHJlcHJlc2VudGluZyB0aGUgQVBDUyByZWdpc3RlcnNcXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgb2Zmc2V0IHRvIHRoZSByZWdpc3RlciB3aXRoaW4gdGhlIHN5c2NvblxcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyB0aGUgaXBjIGJpdCB3aXRoaW4gdGhlIHJlZ2lzdGVyXFxuKyAgICBkZXNjcmlwdGlvbjogfFxcbisgICAgICBUaGVzZSBlbnRyaWVzIHNwZWNpZnkgdGhlIG91dGdvaW5nIElQQyBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIHRoZSByZW1vdGVcXG4rICAgICAgTTAgQlRTUyBjb3JlIG9mIGEgaG9zdCBldmVudCBvciBmb3Igc2VuZGluZyBhbiBBQ0sgaWYgdGhlIHJlbW90ZSBwcm9jZXNzb3JcXG4rICAgICAgZXhwZWN0cyBpdC5cXG4rXFxuKyAgcWNvbSxycHJvYzpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSByZW1vdGUgcHJvY2Vzc29yIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBNMCBCVFNTIGNvcmUuXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIGludGVycnVwdHNcXG4rICAtIHFjb20saXBjXFxuKyAgLSBxY29tLHJwcm9jXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGJsdWV0b290aC1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiBxY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oXFx1MDAzZVxcbitcXG4rICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtYnRcXFwiO1xcbitcXG4rICAgICAgcWNvbSxpcGMgPSBcXHUwMDNjXFx1MDAyNmFwY3NfZ2xiIDggMjNcXHUwMDNlO1xcbisgICAgICBpbnRlcnJ1cHRzID0gXFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXFx1MDAzZTtcXG4rXFxuKyAgICAgIHFjb20scnByb2MgPSBcXHUwMDNjXFx1MDAyNm0wX2J0c3NcXHUwMDNlO1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk3YmI2ODE1ZDcxNmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXFxuQEAgLTAsMCArMSw3MiBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEdlb3JnZSBNb3Vzc2FsZW0gXFx1MDAzY2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgU2VjdXJlIEltYWdlIExvYWRlciBsb2FkcyBmaXJtd2FyZSBhbmQgcG93ZXJzIHVwXFxuKyAgdGhlIE0wIEJUU1MgcmVtb3RlIHByb2Nlc3NvciBjb3JlIG9uIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0gcWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxuK1xcbisgIGZpcm13YXJlLW5hbWU6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IEZpcm13YXJlIG5hbWUgZm9yIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIGNvcmVcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgbG93IHBvd2VyIG9zY2lsbGF0b3IgY2xvY2tcXG4rXFxuKyAgY2xvY2stbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBjb25zdDogYnRzc19scG9fY2xrXFxuK1xcbisgIG1lbW9yeS1yZWdpb246XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNlcnZlZCBtZW1vcnkgY2FydmVvdXRcXG4rXFxuKyAgcmVzZXRzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXRcXG4rXFxuKyAgcmVzZXQtbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBjb25zdDogYnRzc19yZXNldFxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSBmaXJtd2FyZS1uYW1lXFxuKyAgLSBjbG9ja3NcXG4rICAtIGNsb2NrLW5hbWVzXFxuKyAgLSByZXNldHNcXG4rICAtIHJlc2V0LW5hbWVzXFxuKyAgLSBtZW1vcnktcmVnaW9uXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sZ2NjLWlwcTUwMTguaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9yZXNldC9xY29tLGdjYy1pcHE1MDE4LmhcXHUwMDNlXFxuK1xcbisgICAgcmVtb3RlcHJvYyB7XFxuKyAgICAgIGNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxcIjtcXG4rXFxuKyAgICAgIGZpcm13YXJlLW5hbWUgPSBcXFwicWNhL2J0X2Z3X3BhdGNoLm1iblxcXCI7XFxuK1xcbisgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXFx1MDAzZTtcXG4rICAgICAgY2xvY2stbmFtZXMgPSBcXFwiYnRzc19scG9fY2xrXFxcIjtcXG4rICAgICAgcmVzZXRzID0gXFx1MDAzY1xcdTAwMjZnY2MgR0NDX0JUU1NfQkNSXFx1MDAzZTtcXG4rICAgICAgcmVzZXQtbmFtZXMgPSBcXFwiYnRzc19yZXNldFxcXCI7XFxuK1xcbisgICAgICBtZW1vcnktcmVnaW9uID0gXFx1MDAzY1xcdTAwMjZidHNzX3JlZ2lvblxcdTAwM2U7XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxcbmluZGV4IDZmODAwNGEyMmExZmZkLi40ZmRmMjBjODdiMGE5YSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxcbkBAIC0xNyw2ICsxNywxNyBAQCAvIHtcXG4gXFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMlxcdTAwM2U7XFxuIFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzJcXHUwMDNlO1xcbiBcXG4rXFx0Ymx1ZXRvb3RoOiBibHVldG9vdGgge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1idFxcXCI7XFxuK1xcbitcXHRcXHRxY29tLGlwYyA9IFxcdTAwM2NcXHUwMDI2YXBjc19nbGIgOCAyM1xcdTAwM2U7XFxuK1xcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjR0lDX1NQSSAxNjIgSVJRX1RZUEVfRURHRV9SSVNJTkdcXHUwMDNlO1xcbitcXG4rXFx0XFx0cWNvbSxycHJvYyA9IFxcdTAwM2NcXHUwMDI2bTBfYnRzc1xcdTAwM2U7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHR9O1xcbitcXG4gXFx0Y2xvY2tzIHtcXG4gXFx0XFx0Z2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsge1xcbiBcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG5AQCAtMTMxLDExICsxNDIsMzEgQEAgcHNjaSB7XFxuIFxcdFxcdG1ldGhvZCA9IFxcXCJzbWNcXFwiO1xcbiBcXHR9O1xcbiBcXG4rXFx0bTBfYnRzczogcmVtb3RlcHJvYyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxcIjtcXG4rXFxuK1xcdFxcdGZpcm13YXJlLW5hbWUgPSBcXFwicWNhL2J0X2Z3X3BhdGNoLm1iblxcXCI7XFxuK1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXFx1MDAzZTtcXG4rXFx0XFx0Y2xvY2stbmFtZXMgPSBcXFwiYnRzc19scG9fY2xrXFxcIjtcXG4rXFx0XFx0cmVzZXRzID0gXFx1MDAzY1xcdTAwMjZnY2MgR0NDX0JUU1NfQkNSXFx1MDAzZTtcXG4rXFx0XFx0cmVzZXQtbmFtZXMgPSBcXFwiYnRzc19yZXNldFxcXCI7XFxuK1xcbitcXHRcXHRtZW1vcnktcmVnaW9uID0gXFx1MDAzY1xcdTAwMjZidHNzX3JlZ2lvblxcdTAwM2U7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHR9O1xcbitcXG4gXFx0cmVzZXJ2ZWQtbWVtb3J5IHtcXG4gXFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMlxcdTAwM2U7XFxuIFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzJcXHUwMDNlO1xcbiBcXHRcXHRyYW5nZXM7XFxuIFxcbitcXHRcXHRidHNzX3JlZ2lvbjogYmx1ZXRvb3RoQDcwMDAwMDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcXHUwMDNlO1xcbitcXHRcXHRcXHRuby1tYXA7XFxuK1xcdFxcdH07XFxuK1xcbiBcXHRcXHRib290bG9hZGVyQDRhODAwMDAwIHtcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAzYzB4MCAweDRhODAwMDAwIDB4MCAweDIwMDAwMFxcdTAwM2U7XFxuIFxcdFxcdFxcdG5vLW1hcDtcXG5AQCAtNjQ3LDcgKzY3OCw4IEBAIHdhdGNoZG9nOiB3YXRjaGRvZ0BiMDE3MDAwIHtcXG4gXFxuIFxcdFxcdGFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAge1xcbiBcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1hcGNzLWFwcHMtZ2xvYmFsXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICBcXFwicWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcXFwiO1xcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJxY29tLGlwcTYwMTgtYXBjcy1hcHBzLWdsb2JhbFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcInN5c2NvblxcXCI7XFxuIFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDBiMTExMDAwIDB4MTAwMFxcdTAwM2U7XFxuIFxcdFxcdFxcdCNjbG9jay1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4gXFx0XFx0XFx0Y2xvY2tzID0gXFx1MDAzY1xcdTAwMjZhNTNwbGxcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNnhvX2JvYXJkX2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2Z2NjIEdQTEwwXFx1MDAzZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcXG5pbmRleCA0ZThjMjRkNzU3ZTlhNC4uNmI4YmVkNmE2ZmZkYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcXG5AQCAtNDEzLDYgKzQxMywxNyBAQCBjb25maWcgQlRfTVRLVUFSVFxcbiBcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNZWRpYVRlayBCbHVldG9vdGggVUFSVCBkZXZpY2VzXFxuIFxcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxcbiBcXG4rY29uZmlnIEJUX1FDT01JUENcXG4rXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgQlRfUUNBXFxuK1xcdGhlbHBcXG4rXFx0ICBRdWFsY29tbSBJUFE1MDE4IElQQyBiYXNlZCBIQ0kgZHJpdmVyLlxcbitcXHQgIFRoaXMgZHJpdmVyIGlzIHVzZWQgdG8gYnJpZGdlIEhDSSBkYXRhIG9udG8gc2hhcmVkIG1lbW9yeSBiZXR3ZWVuXFxuK1xcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXFxuK1xcbitcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBIQ0kgb3ZlciBRdWFsY29tbSBJUEMgaW50byB0aGVcXG4rXFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBhcyBhIG1vZHVsZS5cXG4rXFxuIGNvbmZpZyBCVF9RQ09NU01EXFxuIFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBTTUQgYmFzZWQgSENJIHN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiBSUE1TRz1uKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXFxuaW5kZXggZTZiMWMxMTgwZDFkYzkuLjA1ZjE5MDQ3YmVkMDdlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcXG5AQCAtMjAsNiArMjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTClcXHRcXHQrPSBidG1ydmwub1xcbiBvYmotJChDT05GSUdfQlRfTVJWTF9TRElPKVxcdCs9IGJ0bXJ2bF9zZGlvLm9cXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXFx0Kz0gYnRtdGtzZGlvLm9cXG4gb2JqLSQoQ09ORklHX0JUX01US1VBUlQpXFx0Kz0gYnRtdGt1YXJ0Lm9cXG4rb2JqLSQoQ09ORklHX0JUX1FDT01JUEMpXFx0Kz0gYnRxY29taXBjLm9cXG4gb2JqLSQoQ09ORklHX0JUX1FDT01TTUQpXFx0Kz0gYnRxY29tc21kLm9cXG4gb2JqLSQoQ09ORklHX0JUX0JDTSlcXHRcXHQrPSBidGJjbS5vXFxuIG9iai0kKENPTkZJR19CVF9SVEwpXFx0XFx0Kz0gYnRydGwub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi5lMTM2ZTkxOTc2Y2ZiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXFxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbkBAIC0zODAsNiArMzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBUTFZfVFlQRV9OVk06XFxuK1xcdFxcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoZndfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgdGx2X3R5cGVfaGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC03OTQsNiArNzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJvbV92ZXIgPSAoKHNvY192ZXIgXFx1MDAyNiAweDAwMDAwZjAwKSBcXHUwMDNlXFx1MDAzZSAweDA0KSB8IChzb2NfdmVyIFxcdTAwMjYgMHgwMDAwMDAwZik7XFxuIFxcbitcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuK1xcdFxcdGdvdG8gZG93bmxvYWRfbnZtO1xcbitcXG4gXFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxcbiBcXHRcXHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xcbiBcXG5AQCAtODgxLDYgKzg4Nyw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0aWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKVxcbiBcXHRcXHRxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCBcXHUwMDI2Ym9hcmRpZCk7XFxuIFxcbitkb3dubG9hZF9udm06XFxuIFxcdC8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovXFxuIFxcdGNvbmZpZy50eXBlID0gVExWX1RZUEVfTlZNO1xcbiBcXHRpZiAoZmlybXdhcmVfbmFtZSkge1xcbkBAIC05MzksNiArOTQ2LDEwIEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0XFx0XFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuIFxcdFxcdFxcdFxcdCBcXFwiaG10bnZcXFwiLCBzb2NfdHlwZSwgdmVyLCByb21fdmVyLCBib2FyZGlkKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgUUNBX0lQUTUwMTg6XFxuK1xcdFxcdFxcdHNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSxcXG4rXFx0XFx0XFx0XFx0IFxcXCJxY2EvbXBudiUwMnguYmluXFxcIiwgcm9tX3Zlcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuIFxcdFxcdFxcdFxcdCBcXFwicWNhL252bV8lMDh4LmJpblxcXCIsIHNvY192ZXIpO1xcbkBAIC05NTgsNiArOTY5LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuK1xcdFxcdG1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpO1xcbitcXG4gXFx0c3dpdGNoIChzb2NfdHlwZSkge1xcbiBcXHRjYXNlIFFDQV9RQ0EyMDY2OlxcbiBcXHRjYXNlIFFDQV9RQ0E2MzkwOlxcbkBAIC05NjUsNiArOTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRjYXNlIFFDQV9XQ042NzUwOlxcbiBcXHRjYXNlIFFDQV9XQ042ODU1OlxcbiBcXHRjYXNlIFFDQV9XQ043ODUwOlxcbitcXHRjYXNlIFFDQV9JUFE1MDE4OlxcbiBcXHRcXHRlcnIgPSBxY2FfZGlzYWJsZV9zb2NfbG9nZ2luZyhoZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTEwMDEsNiArMTAxNiw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0Y2FzZSBRQ0FfV0NONjc1MDpcXG4gXFx0Y2FzZSBRQ0FfV0NONjg1NTpcXG4gXFx0Y2FzZSBRQ0FfV0NONzg1MDpcXG4rXFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG4gXFx0XFx0LyogZ2V0IGZ3IGJ1aWxkIGluZm8gKi9cXG4gXFx0XFx0ZXJyID0gcWNhX3JlYWRfZndfYnVpbGRfaW5mbyhoZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXFxuaW5kZXggOGYzYzFiMWM3N2IzZGUuLjM0M2NkNjJkMTEzNzE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmhcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXFxuQEAgLTU0LDYgKzU0LDggQEBcXG4gI2RlZmluZSBRQ0FfSFNQX0dGX1NPQ19JRFxcdFxcdDB4MTIwMFxcbiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX01BU0tcXHRcXHQweDAwMDBmZjAwXFxuIFxcbisjZGVmaW5lIE5WTV9SRUFEWV9ERUxBWV9NU1xcdFxcdDE1MDBcXG4rXFxuIGVudW0gcWNhX2JhdWRyYXRlIHtcXG4gXFx0UUNBX0JBVURSQVRFXzExNTIwMFxcdD0gMCxcXG4gXFx0UUNBX0JBVURSQVRFXzU3NjAwLFxcbkBAIC0xNTgsNiArMTYwLDcgQEAgZW51bSBxY2FfYnRzb2NfdHlwZSB7XFxuIFxcdFFDQV9XQ042NzUwLFxcbiBcXHRRQ0FfV0NONjg1NSxcXG4gXFx0UUNBX1dDTjc4NTAsXFxuK1xcdFFDQV9JUFE1MDE4LFxcbiB9O1xcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1FDQSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY2MmE3NWI2YzRhOTBiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXFxuQEAgLTAsMCArMSw5MzkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZW1vdGVwcm9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJ0cWNhLmhcXFwiXFxuK1xcbisvKiogTWVzc2FnZSBoZWFkZXIgZm9ybWF0LlxcbisgKlxcbisgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBCaXRQb3MgfCAgICAxNSAgICB8IDE0IHwgMTMgfCAxMiB8IDExIHwgMTAgfCAgOSAgfCAgOCAgfCAgICA3IC0gMCAgICAgfFxcbisgKiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBGaWVsZCAgfCBsb25nX21zZyB8QUNLIHwgICAgICAgIFJGVSAgICAgICAgfCAgcGt0X3R5cGUgfCAgICBjbWQgICAgICAgfFxcbisgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcbisgKiAtIGxvbmdfbXNnICAgOiBJZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIHRoZVxcbisgKiAgICAgICAgICAgICAgICBJUENfTVNHX1BMRF9TWi4gVGhlIHBheWxvYWQgaW5zdGVhZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlXFxuKyAqICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSBidWZmZXIgaW4gdGhlIHNoYXJlZCBCVFNTIG1lbW9yeSBzcGFjZS5cXG4rICpcXG4rICogLSBBQ0sgICAgICAgOiBTZXQgaWYgc2VuZGluZyBBQ0sgaWYgcmVxdWlyZWQgYnkgc2VuZGluZyBhY2tub3dsZWRlZ2VtZW50XFxuKyAqICAgICAgICAgICAgICAgIHRvIHNlbmRlciBpLmUuIHNlbmQgYW4gYWNrIElQQyBpbnRlcnJ1cHQgaWYgc2V0LlxcbisgKlxcbisgKiAtIFJGVSAgICAgICAgOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS5cXG4rICpcXG4rICogLSBwa3RfdHlwZSAgIDogSVBDIFBhY2tldCBUeXBlXFxuKyAqXFxuKyAqIC0gY21kICAgICAgICA6IENvbnRhaW5zIHVuaXF1ZSBjb21tYW5kIElEXFxuKyAqL1xcbitcXG4rI2RlZmluZSBJUENfTVNHX0hEUl9TWlxcdFxcdDRcXG4rI2RlZmluZSBJUENfTVNHX1BMRF9TWlxcdFxcdDQwXFxuKyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWlxcdChJUENfTVNHX0hEUl9TWiArIElQQ19NU0dfUExEX1NaKVxcbitcXG4rLyogTWVzc2FnZSBIZWFkZXIgKi9cXG4rI2RlZmluZSBJUENfSERSX0xPTkdfTVNHXFx0QklUKDE1KVxcbisjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1xcdFxcdEJJVCgxNClcXG4rI2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0tcXHRHRU5NQVNLKDksIDgpXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVFxcdDBcXG4rI2RlZmluZSAgSVBDX0hEUl9QS1RfVFlQRV9IQ0lcXHQxXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU9cXHQyXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVXFx0M1xcbisjZGVmaW5lIElQQ19IRFJfQ01EX01BU0tcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIElQQ19DTURfU1RPUFxcdFxcdDFcXG4rI2RlZmluZSBJUENfQ01EX1NXSVRDSF9UT19VQVJUXFx0MlxcbisjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QXFx0M1xcbisjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QXFx0NFxcbisjZGVmaW5lIElQQ19DTURfU1RBUlRcXHRcXHQ1XFxuK1xcbisjZGVmaW5lIElQQ19UWF9RU0laRVxcdFxcdDMyXFxuK1xcbisjZGVmaW5lXFx0VE9fQVBQU19BRERSKGEpXFx0XFx0KGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyAoaW50KSh1aW50cHRyX3QpYSlcXG4rI2RlZmluZVxcdFRPX0JUX0FERFIoYSlcXHRcXHQoYSAtIGRlc2MtXFx1MDAzZW1lbV9yZWdpb24pXFxuKyNkZWZpbmUgSVBDX0xCVUZfU1oodywgeCwgeSwgeilcXHQoKChUT19CVF9BRERSKCh2b2lkICopdykgKyB3LVxcdTAwM2V4KSAtIHctXFx1MDAzZXkpIC8gdy1cXHUwMDNleilcXG4rXFxuKyNkZWZpbmVcXHRHRVRfTk9fT0ZfQkxPQ0tTKGEsIGIpICgoYSArIGIgLSAxKSAvIGIpXFxuK1xcbisjZGVmaW5lIEdFVF9SWF9JTkRFWF9GUk9NX0JVRih4LCB5KVxcdCgoeCAtIGRlc2MtXFx1MDAzZXJ4X2N0eHQtXFx1MDAzZWxyaW5nX2J1ZikgLyB5KVxcbitcXG4rI2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcXHQoKHggLSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYpIC8geSlcXG4rXFxuKyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeilcXHRcXHRcXFxcXFxuK1xcdCgoYnVmICsgbGVuKSBcXHUwMDNlIChkZXNjLVxcdTAwM2VyeF9jdHh0LVxcdTAwM2VscmluZ19idWYgK1xcdFxcXFxcXG4rXFx0KHN6ICogZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250KSkpXFxuK1xcbisjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVNcXHQ1MFxcbitcXG4rI2RlZmluZSBCVFNTX1BBU19JRFxcdDB4Y1xcbitcXG4rc3RydWN0IGxvbmdfbXNnX2luZm8ge1xcbitcXHRfX2xlMTYgc21zZ19mcmVlX2NudDtcXG4rXFx0X19sZTE2IGxtc2dfZnJlZV9jbnQ7XFxuK1xcdHU4IHJpZHg7XFxuK1xcdHU4IHdpZHg7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgaXBjX2F1eF9wdHIge1xcbitcXHRfX2xlMzIgbGVuO1xcbitcXHRfX2xlMzIgYnVmO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IHJpbmdfYnVmZmVyIHtcXG4rXFx0X19sZTE2IG1zZ19oZHI7XFxuK1xcdF9fbGUxNiBsZW47XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0dTggc21zZ19kYXRhW0lQQ19NU0dfUExEX1NaXTtcXG4rXFx0XFx0X19sZTMyIGxtc2dfZGF0YTtcXG4rXFx0fSBwYXlsb2FkO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IHJpbmdfYnVmZmVyX2luZm8ge1xcbitcXHRfX2xlMzIgcmJ1ZjtcXG4rXFx0dTggcmluZ19idWZfY250O1xcbitcXHR1OCByaWR4O1xcbitcXHR1OCB3aWR4O1xcbitcXHR1OCB0aWR4O1xcbitcXHRfX2xlMzIgbmV4dDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBjb250ZXh0X2luZm8ge1xcbitcXHRfX2xlMTYgdG90YWxfc2l6ZTtcXG4rXFx0dTggbG1zZ19idWZfY250O1xcbitcXHR1OCBzbXNnX2J1Zl9jbnQ7XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvO1xcbitcXHRfX2xlMzIgc3JpbmdfYnVmO1xcbitcXHRfX2xlMzIgbHJpbmdfYnVmO1xcbitcXHRfX2xlMzIgcmVzZXJ2ZWQ7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgcWNvbV9idHNzIHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jO1xcbitcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcXG4rXFxuK1xcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIGJpdDtcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdHZvaWQgKm1lbV9yZWdpb247XFxuK1xcdHBoeXNfYWRkcl90IG1lbV9waHlzO1xcbitcXHRwaHlzX2FkZHJfdCBtZW1fcmVsb2M7XFxuK1xcdHNpemVfdCBtZW1fc2l6ZTtcXG4rXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcTtcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xO1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcbitcXHRzdHJ1Y3QgY29udGV4dF9pbmZvICp0eF9jdHh0O1xcbitcXHRzdHJ1Y3QgY29udGV4dF9pbmZvICpyeF9jdHh0O1xcbitcXHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XFxuK1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rXFxuK3N0YXRpYyB2b2lkICpidHNzX2FsbG9jX2xtc2coc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTMyIGxlbixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXBjX2F1eF9wdHIgKmF1eF9wdHIsIGJvb2wgKmlzX2xidWZfZnVsbClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVxcdTAwM2VkZXY7XFxuK1xcdHU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDtcXG4rXFx0dm9pZCAqcmV0X3B0cjtcXG4rXFx0dTMyIGxzejtcXG4rXFxuK1xcdGlmIChkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYgPT0gMCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIm5vIGxvbmcgbWVzc2FnZSBidWZmZXIgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFx0fVxcbitcXG4rXFx0bHN6ID0gSVBDX0xCVUZfU1ooZGVzYy1cXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLCBsbXNnX2J1Zl9jbnQpO1xcbitcXHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XFxuK1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IHx8XFxuK1xcdFxcdFxcdChibGtzIFxcdTAwM2UgZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcXG4rXFxuK1xcdGlkeCA9IGRlc2MtXFx1MDAzZWxtc2dfY3R4dC53aWR4O1xcbitcXG4rXFx0aWYgKChkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpIFxcdTAwM2UgZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250KSB7XFxuK1xcdFxcdGJsa3NfY29uc3VtZWQgPSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VsbXNnX2J1Zl9jbnQgLSBpZHg7XFxuK1xcdFxcdGF1eF9wdHItXFx1MDAzZWxlbiA9IGxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcXG4rXFx0XFx0YXV4X3B0ci1cXHUwMDNlYnVmID0gZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbHJpbmdfYnVmO1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCA9IChkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpICVcXG4rXFx0XFx0ZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcXG4rXFxuK1xcdGlmIChkZXNjLVxcdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCBcXHUwMDNjPVxcbitcXHRcXHRcXHQoKGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZWxtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXFxuK1xcdFxcdCppc19sYnVmX2Z1bGwgPSB0cnVlO1xcbitcXG4rXFx0cmV0X3B0ciA9IFRPX0FQUFNfQUREUihkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYpICsgKGlkeCAqIGxzeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0X3B0cjtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpidHNzX2dldF90eF9yYnVmKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sICppc19zYnVmX2Z1bGwpXFxuK3tcXG4rXFx0dTggaWR4O1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcbitcXHRmb3IgKHJpbmZvID0gXFx1MDAyNihkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzcmluZ19idWZfaW5mbyk7XFx0cmluZm8gIT0gTlVMTDtcXG4rXFx0XFx0cmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby1cXHUwMDNlbmV4dCkpIHtcXG4rXFx0XFx0aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSAoZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlc21zZ19idWZfY250KTtcXG4rXFxuK1xcdFxcdGlmIChpZHggIT0gcmluZm8tXFx1MDAzZXRpZHgpIHtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQtLTtcXG4rXFxuK1xcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCBcXHUwMDNjPVxcbitcXHRcXHRcXHRcXHQoKGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXFxuK1xcdFxcdFxcdFxcdCppc19zYnVmX2Z1bGwgPSB0cnVlO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIHJpbmZvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0c3Nfc2VuZChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcixcXG4rXFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGVzYy1cXHUwMDNlaGRldjtcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xcbitcXHRzdHJ1Y3QgaXBjX2F1eF9wdHIgYXV4X3B0cjtcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xcbitcXHRib29sIGlzX2xidWZfZnVsbCA9IGZhbHNlO1xcbitcXHRib29sIGlzX3NidWZfZnVsbCA9IGZhbHNlO1xcbitcXHR1MTYgaGRyID0gbXNnX2hkcjtcXG4rXFx0dm9pZCAqcHRyX2J1ZjtcXG4rXFx0dTMyIGxlbjtcXG4rXFxuK1xcdC8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgc2tiIHBheWxvYWQgKi9cXG4rXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gKyAxO1xcbitcXHRtZW1zZXQoXFx1MDAyNmF1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBJUENfTVNHX1BMRF9TWikge1xcbitcXHRcXHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcXG4rXFxuK1xcdFxcdHB0cl9idWYgPSBidHNzX2FsbG9jX2xtc2coZGVzYywgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZhdXhfcHRyLCBcXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwdHJfYnVmKSkge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJsb25nIG1zZyBidWYgZnVsbFxcXCIpO1xcbitcXHRcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmVycl90eCsrO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHJfYnVmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgXFx1MDAyNmlzX3NidWZfZnVsbCk7XFxuK1xcdGlmIChJU19FUlIocmluZm8pKSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcInNob3J0IG1zZyBidWYgZnVsbFxcXCIpO1xcbitcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmVycl90eCsrO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKSkpW3JpbmZvLVxcdTAwM2V3aWR4XTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBJUENfTVNHX1BMRF9TWilcXG4rXFx0XFx0cmJ1Zi1cXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEgPSBjcHVfdG9fbGUzMihUT19CVF9BRERSKHB0cl9idWYpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwdHJfYnVmID0gcmJ1Zi1cXHUwMDNlcGF5bG9hZC5zbXNnX2RhdGE7XFxuK1xcbitcXHQvKiBpZiBpdCdzIGEgc2hvcnQgbWVzc2FnZSwgdGhlIGF1eCBsZW4gYW5kIGJ1ZiBhcmUgTlVMTCAqL1xcbitcXHRtZW1jcHlfdG9pbyhwdHJfYnVmLCBcXHUwMDI2aGNpX3NrYl9wa3RfdHlwZShza2IpLCAxKTtcXG4rXFx0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiArIDEsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XFxuK1xcdGlmIChhdXhfcHRyLmJ1Zikge1xcbitcXHRcXHRtZW1jcHlfdG9pbyhUT19BUFBTX0FERFIoYXV4X3B0ci5idWYpLFxcbitcXHRcXHRcXHQgICAgKHNrYi1cXHUwMDNlZGF0YSArIChza2ItXFx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSksIGF1eF9wdHIubGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX3NidWZfZnVsbCB8fCBpc19sYnVmX2Z1bGwpXFxuK1xcdFxcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XFxuK1xcbitcXHRyYnVmLVxcdTAwM2Vtc2dfaGRyID0gY3B1X3RvX2xlMTYoaGRyKTtcXG4rXFx0cmJ1Zi1cXHUwMDNlbGVuID0gY3B1X3RvX2xlMTYobGVuKTtcXG4rXFxuK1xcdHJpbmZvLVxcdTAwM2V3aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcbitcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHFjb21fYnRzcyAqZGVzYylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSkpKSB7XFxuK1xcdFxcdGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XFxuK1xcbitcXHRcXHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNmRlc2MtXFx1MDAzZXR4X3EsIHNrYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRidHFjb21pcGNfdXBkYXRlX3N0YXRzKGRlc2MtXFx1MDAzZWhkZXYsIHNrYik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0c3NfZnJlZV9sbXNnKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHUzMiBsbXNnLCB1MTYgbGVuKVxcbit7XFxuK1xcdHU4IGlkeDtcXG4rXFx0dTggYmxrcztcXG4rXFx0dTMyIGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXFx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcXG4rXFx0XFx0XFx0XFx0ICAgbG1zZ19idWZfY250KTtcXG4rXFxuK1xcdGlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opO1xcbitcXG4rXFx0aWYgKGlkeCAhPSBkZXNjLVxcdTAwM2VsbXNnX2N0eHQucmlkeClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YmxrcyA9IEdFVF9OT19PRl9CTE9DS1MobGVuLCBsc3opO1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnJpZHggID0gKGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5yaWR4ICArIGJsa3MpICVcXG4rXFx0XFx0ZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgKz0gYmxrcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcilcXG4re1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcXG4rXFxuK1xcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihyaW5mbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJpbmZvKTtcXG4rXFxuK1xcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKilUT19BUFBTX0FERFIocmluZm8tXFx1MDAzZXJidWYpKVtyaW5mby1cXHUwMDNld2lkeF07XFxuK1xcdHJidWYtXFx1MDAzZW1zZ19oZHIgPSBjcHVfdG9fbGUxNihtc2dfaGRyKTtcXG4rXFx0cmJ1Zi1cXHUwMDNlbGVuID0gMDtcXG4rXFxuK1xcdHJpbmZvLVxcdTAwM2V3aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcbitcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3JlY3ZfY3VzdF9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1OCBjbWQpXFxuK3tcXG4rXFx0dTE2IG1zZ19oZHIgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXNnX2hkciB8PSBjbWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGNtZCkge1xcbitcXHRjYXNlIElQQ19DTURfU1RPUDpcXG4rXFx0XFx0YnRfZGV2X2luZm8oZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgc3RvcHBlZCwgZ3JhY2VmdWxseSBzdG9wcGluZyBBUFNTIElQQ1xcXCIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJUENfQ01EX1NUQVJUOlxcbitcXHRcXHRkZXNjLVxcdTAwM2V0eF9jdHh0ID0gKHN0cnVjdCBjb250ZXh0X2luZm8gKikoKHZvaWQgKilkZXNjLVxcdTAwM2VyeF9jdHh0ICtcXG4rXFx0XFx0XFx0XFx0bGUxNl90b19jcHUoZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNldG90YWxfc2l6ZSkpO1xcbitcXHRcXHRkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCA9IDA7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5yaWR4ID0gMDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgPSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250ID0gZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcsIHRydWUpO1xcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZkZXNjLVxcdTAwM2V3YWl0X3EpO1xcbitcXG4rXFx0XFx0YnRfZGV2X2luZm8oZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgc3RhcnRlZCwgaW5pdGlhbGl6aW5nIEFQU1MgQlQgSVBDXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnRfZGV2X2VycihkZXNjLVxcdTAwM2VoZGV2LCBcXFwiVW5zdXBwb3J0ZWQgQ01EIElEOiAldVxcXCIsIGNtZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnVubmluZykpKSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgbm90IGluaXRpYWxpemVkLCBubyBtZXNzYWdlIHNlbnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcXG4rXFxuK1xcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRidF9kZXZfZXJyKGRlc2MtXFx1MDAzZWhkZXYsIFxcXCJGYWlsZWQgdG8gc2VuZCBjb250cm9sIG1lc3NhZ2VcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBjaGFyIHBrdF90eXBlO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgcGt0X2xlbjtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzYyAxKVxcbitcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFxuK1xcdHBrdF90eXBlID0gZGF0YVswXTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0X3R5cGUpIHtcXG4rXFx0Y2FzZSBIQ0lfRVZFTlRfUEtUOlxcbitcXHR7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfRVZFTlRfSERSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlMU0VRO1xcbitcXHRcXHRzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHN0cnVjdCBoY2lfZXZlbnRfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfRVZFTlRfSERSX1NJWkUgKyBoZHItXFx1MDAzZXBsZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfQ09NTUFORF9IRFJfU0laRSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSUxTRVE7XFxuK1xcdFxcdHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSArIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlcGxlbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgSENJX0FDTERBVEFfUEtUOlxcbitcXHR7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfQUNMX0hEUl9TSVpFKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTFNFUTtcXG4rXFx0XFx0c3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfQUNMX0hEUl9TSVpFICsgbGUxNl90b19jcHUoaGRyLVxcdTAwM2VkbGVuKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XFxuK1xcdHtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIEhDSV9TQ09fSERSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlMU0VRO1xcbitcXHRcXHRzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikoZGF0YSArIDEpO1xcbitcXG4rXFx0XFx0cGt0X2xlbiA9IEhDSV9TQ09fSERSX1NJWkUgKyBoZHItXFx1MDAzZWRsZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGt0X2xlbiBcXHUwMDNlIGxlbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRza2IgPSBidF9za2JfYWxsb2MocGt0X2xlbiwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWhkZXYtXFx1MDAzZXN0YXQuZXJyX3J4Kys7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRza2ItXFx1MDAzZWRldiA9ICh2b2lkICopZGVzYy1cXHUwMDNlaGRldjtcXG4rXFx0aGNpX3NrYl9wa3RfdHlwZShza2IpID0gcGt0X3R5cGU7XFxuK1xcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgKyAxLCBwa3RfbGVuKTtcXG4rXFxuK1xcdGhjaV9yZWN2X2ZyYW1lKGRlc2MtXFx1MDAzZWhkZXYsIHNrYik7XFxuK1xcdGRlc2MtXFx1MDAzZWhkZXYtXFx1MDAzZXN0YXQuYnl0ZV9yeCArPSBwa3RfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3NfcHJvY2Vzc19yeChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICBib29sICphY2ssIHU4ICpyeF9jb3VudClcXG4re1xcbitcXHR1OCByaWR4LCBsYnVmX2lkeCwgYmxrc19jb25zdW1lZCwgcGt0X3R5cGUsIGNtZDtcXG4rXFx0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcXG4rXFx0dWludDhfdCAqcnhidWYgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuK1xcdHUzMiBsc3o7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyaWR4ID0gcmluZm8tXFx1MDAzZXJpZHg7XFxuK1xcbitcXHR3aGlsZSAocmlkeCAhPSByaW5mby1cXHUwMDNld2lkeCkge1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmF1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTtcXG4rXFxuK1xcdFxcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKSkpW3JpZHhdO1xcbitcXG4rXFx0XFx0aWYgKHJidWYtXFx1MDAzZW1zZ19oZHIgXFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XFxuK1xcdFxcdFxcdHJ4YnVmID0gVE9fQVBQU19BRERSKHJidWYtXFx1MDAzZXBheWxvYWQubG1zZ19kYXRhKTtcXG4rXFx0XFx0XFx0bHN6ID0gSVBDX0xCVUZfU1ooZGVzYy1cXHUwMDNlcnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxcbitcXHRcXHRcXHRcXHQgICBsbXNnX2J1Zl9jbnQpO1xcbitcXG4rXFx0XFx0XFx0aWYgKElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhyYnVmLVxcdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICByYnVmLVxcdTAwM2VsZW4sIGxzeikpIHtcXG4rXFx0XFx0XFx0XFx0bGJ1Zl9pZHggPSBHRVRfUlhfSU5ERVhfRlJPTV9CVUYoXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJidWYtXFx1MDAzZXBheWxvYWQubG1zZ19kYXRhLCBsc3opO1xcbitcXG4rXFx0XFx0XFx0XFx0Ymxrc19jb25zdW1lZCA9IGRlc2MtXFx1MDAzZXJ4X2N0eHQtXFx1MDAzZWxtc2dfYnVmX2NudCAtXFxuK1xcdFxcdFxcdFxcdFxcdGxidWZfaWR4O1xcbitcXHRcXHRcXHRcXHRhdXhfcHRyLmxlbiA9IHJidWYtXFx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcXG4rXFx0XFx0XFx0XFx0YXV4X3B0ci5idWYgPSBkZXNjLVxcdTAwM2VyeF9jdHh0LVxcdTAwM2VscmluZ19idWY7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cnhidWYgPSByYnVmLVxcdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0KmFjayA9IChyYnVmLVxcdTAwM2Vtc2dfaGRyIFxcdTAwMjYgSVBDX0hEUl9SRVFfQUNLKTtcXG4rXFxuK1xcdFxcdHBrdF90eXBlID0gRklFTERfR0VUKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgcmJ1Zi1cXHUwMDNlbXNnX2hkcik7XFxuK1xcbitcXHRcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuK1xcdFxcdGNhc2UgSVBDX0hEUl9QS1RfVFlQRV9IQ0k6XFxuK1xcdFxcdFxcdGJ1ZiA9IGttYWxsb2MocmJ1Zi1cXHUwMDNlbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0XFx0aWYgKCFidWYpIHtcXG4rXFx0XFx0XFx0XFx0cmluZm8tXFx1MDAzZXJpZHggPSByaWR4O1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIHJ4YnVmLCByYnVmLVxcdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoYXV4X3B0ci5idWYpXFxuK1xcdFxcdFxcdFxcdG1lbWNweV9mcm9taW8oYnVmICsgKHJidWYtXFx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWRcXFwiLCByZXQpO1xcbitcXHRcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0NVU1Q6XFxuK1xcdFxcdFxcdGNtZCA9IEZJRUxEX0dFVChJUENfSERSX0NNRF9NQVNLLCByYnVmLVxcdTAwM2Vtc2dfaGRyKTtcXG4rXFx0XFx0XFx0YnRzc19yZWN2X2N1c3RfZnJhbWUoZGVzYywgY21kKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyaWR4ID0gKHJpZHggKyAxKSAlIHJpbmZvLVxcdTAwM2VyaW5nX2J1Zl9jbnQ7XFxuK1xcbitcXHRcXHRpZiAocnhfY291bnQpXFxuK1xcdFxcdFxcdCgqcnhfY291bnQpKys7XFxuK1xcbitcXHRcXHRyaW5mby1cXHUwMDNlcmlkeCA9IHJpZHg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3Byb2Nlc3NfYWNrKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XFxuK1xcdHU4IHRpZHg7XFxuK1xcbitcXHRmb3IgKHJpbmZvID0gXFx1MDAyNmRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNyaW5nX2J1Zl9pbmZvOyByaW5mbyAhPSBOVUxMO1xcbitcXHRcXHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVxcdTAwM2VuZXh0KSkge1xcbitcXHRcXHR0aWR4ID0gcmluZm8tXFx1MDAzZXRpZHg7XFxuK1xcdFxcdHJidWYgPSAoc3RydWN0IHJpbmdfYnVmZmVyICopVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKTtcXG4rXFxuK1xcdFxcdHdoaWxlICh0aWR4ICE9IHJpbmZvLVxcdTAwM2VyaWR4KSB7XFxuK1xcdFxcdFxcdGlmIChyYnVmW3RpZHhdLm1zZ19oZHIgXFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XFxuK1xcdFxcdFxcdFxcdGJ0c3NfZnJlZV9sbXNnKGRlc2MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcmJ1Zlt0aWR4XS5sZW4pO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHR0aWR4ID0gKHRpZHggKyAxKSAlIGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNtc2dfYnVmX2NudDtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQrKztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmluZm8tXFx1MDAzZXRpZHggPSB0aWR4O1xcbitcXG4rXFx0XFx0YnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxY29tX2J0c3MsIHdvcmspO1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcdGJvb2wgYWNrID0gZmFsc2U7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoZGVzYy1cXHUwMDNlcnByb2MtXFx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVxcdTAwM2VydW5uaW5nKSkpIHtcXG4rXFx0XFx0Ly8gRlcgc2V0cyBvZmZzZXQgb2YgUlggY29udGV4dCBpbmZvIGF0IHN0YXJ0IG9mIG1lbW9yeSByZWdpb24gdXBvbiBib290XFxuK1xcdFxcdG9mZnNldCA9IHJlYWRsKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24pO1xcbitcXHRcXHRkZXZfZGJnKGRlc2MtXFx1MDAzZWRldiwgXFxcIm9mZnNldCBhZnRlciBNMCBib290OiAweCUwOHhcXFxcblxcXCIsIG9mZnNldCk7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJ4X2N0eHQgPSAoc3RydWN0IGNvbnRleHRfaW5mbyAqKShkZXNjLVxcdTAwM2VtZW1fcmVnaW9uICsgb2Zmc2V0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnRzc19wcm9jZXNzX2FjayhkZXNjKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChyaW5mbyA9IFxcdTAwMjYoZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xcbitcXHQgICAgIHJpbmZvICE9IE5VTEw7XFxuK1xcdCAgICAgcmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby1cXHUwMDNlbmV4dCkpIHtcXG4rXFx0XFx0cmV0ID0gYnRzc19wcm9jZXNzX3J4KGRlc2MsIHJpbmZvLCBcXHUwMDI2YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlc21zZ19idWZfY250KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGRlc2MtXFx1MDAzZWhkZXYsIFxcXCJGYWlsZWQgdG8gcHJvY2VzcyBwZWVyIG1zZ3M6ICVkXFxcIiwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byBzcGluX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoYWNrKVxcbitcXHRcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK3NwaW5fdW5sb2NrOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBidHNzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGRhdGE7XFxuK1xcbitcXHRxdWV1ZV93b3JrKGRlc2MtXFx1MDAzZXdxLCBcXHUwMDI2ZGVzYy1cXHUwMDNld29yayk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRzc19pbml0KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZGVzYy1cXHUwMDNld2FpdF9xKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRlc2MtXFx1MDAzZWxvY2spO1xcbitcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZkZXNjLVxcdTAwM2V0eF9xKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXFxcImJ0c3Nfd3FcXFwiKTtcXG4rXFx0aWYgKCFkZXNjLVxcdTAwM2V3cSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmRlc2MtXFx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkZXNjLVxcdTAwM2VpcnEsIE5VTEwsIGJ0c3NfaXJxX2hhbmRsZXIsXFxuK1xcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJidHNzX2lycVxcXCIsIGRlc2MpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VpcnEsIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHU4IHBrdF90eXBlID0gaGNpX3NrYl9wa3RfdHlwZShza2IpO1xcbitcXG4rXFx0aGRldi1cXHUwMDNlc3RhdC5ieXRlX3R4ICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuK1xcdGNhc2UgSENJX0NPTU1BTkRfUEtUOlxcbitcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmNtZF90eCsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBIQ0lfQUNMREFUQV9QS1Q6XFxuK1xcdFxcdGhkZXYtXFx1MDAzZXN0YXQuYWNsX3R4Kys7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhDSV9TQ09EQVRBX1BLVDpcXG4rXFx0XFx0aGRldi1cXHUwMDNlc3RhdC5zY29fdHgrKztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBidHNzX2luaXQoZGVzYyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YnRfZGV2X2VycihoZGV2LCBcXFwiRmFpbGVkIGluaXRpYWxpemluZyBCVFNTOiAlZFxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHdhaXQgMiBzZWNvbmRzIGZvciBmaWxlc3lzdGVtIHRvIGJlY29tZSBhdmFpbGFibGUgKi9cXG4rXFx0bXNsZWVwKDIwMDApO1xcbitcXG4rXFx0LyogQm9vdCBNMCBmaXJtd2FyZSAqL1xcbitcXHRyZXQgPSBycHJvY19ib290KGRlc2MtXFx1MDAzZXJwcm9jKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xcbitcXHRyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGVzYy1cXHUwMDNld2FpdF9xLCBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnVubmluZyksXFxuK1xcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcXG4rXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIlRpbWVvdXQgd2FpdGluZyBmb3IgQlRTUyBzdGFydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XFxuK1xcbitcXHRycHJvY19zaHV0ZG93bihkZXNjLVxcdTAwM2VycHJvYyk7XFxuK1xcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4re1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xcbitcXG4rXFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VydW5uaW5nLCBmYWxzZSk7XFxuK1xcdGlmIChkZXNjLVxcdTAwM2V3cSAhPSBOVUxMKSB7XFxuK1xcdFxcdGRpc2FibGVfaXJxKGRlc2MtXFx1MDAzZWlycSk7XFxuK1xcdFxcdGZsdXNoX3dvcmtxdWV1ZShkZXNjLVxcdTAwM2V3cSk7XFxuK1xcdFxcdGRldm1fZnJlZV9pcnEoZGVzYy1cXHUwMDNlZGV2LCBkZXNjLVxcdTAwM2VpcnEsIGRlc2MpO1xcbitcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNmRlc2MtXFx1MDAzZXR4X3EpO1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShkZXNjLVxcdTAwM2V3cSk7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXdxID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XFxuK1xcdCAqIHNpbXVsdGFuZW91c2x5LlxcbitcXHQgKi9cXG4rXFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTk9OX1BFUlNJU1RFTlRfU0VUVVAgUVVJUksgdG8gZW5zdXJlIHRvIGV4ZWN1dGVcXG4rXFx0ICogc2V0dXAgZm9yIGV2ZXJ5IGhjaSB1cC5cXG4rXFx0ICovXFxuK1xcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX05PTl9QRVJTSVNURU5UX1NFVFVQKTtcXG4rXFx0cmV0ID0gcWNhX3JlYWRfc29jX3ZlcnNpb24oaGRldiwgXFx1MDAyNnZlciwgUUNBX0lQUTUwMTgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldCA9IHFjYV91YXJ0X3NldHVwKGhkZXYsIDAsIFFDQV9JUFE1MDE4LCB2ZXIsIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBVQVJUOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0YnRfZGV2X2luZm8oaGRldiwgXFxcIlFDQSBCdWlsZCBJbmZvOiAlc1xcXCIsIGhkZXYtXFx1MDAzZWZ3X2luZm8pO1xcbitcXG4rXFx0LyogT2J0YWluIGFuZCBzZXQgQkQgYWRkcmVzcyBmcm9tIE5WTUVNIGNlbGwgKi9cXG4rXFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuK1xcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfc2VuZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1MTYgaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTtcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcpKSkge1xcbitcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJCVFNTIG5vdCBpbml0aWFsaXplZCwgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZVxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSkgXFx1MDAzZT0gSVBDX1RYX1FTSVpFKSB7XFxuK1xcdFxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIlRYIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIG1lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0XFx0XFx0aGRldi1cXHUwMDNlc3RhdC5lcnJfdHgrKztcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOT0JVRlM7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXNjLVxcdTAwM2V0eF9xLCBza2IpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiAlZFxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdGhkZXYtXFx1MDAzZXN0YXQuZXJyX3R4Kys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLVxcdTAwM2VoZGV2LCBza2IpO1xcbitcXG4rZnJlZV9za2I6XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19hbGxvY19tZW1vcnlfcmVnaW9uKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogbG9va3VwIHJlc2VydmVkLW1lbW9yeSByZWdpb24gb2YgdGhlIHJlbW90ZXByb2Mgbm9kZSAqL1xcbitcXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRlc2MtXFx1MDAzZXJwcm9jLVxcdTAwM2VkZXYucGFyZW50LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcInVuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcXG4rXFx0ZGVzYy1cXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnJlcyk7XFxuK1xcdGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVxcdTAwM2VtZW1fcGh5cywgZGVzYy1cXHUwMDNlbWVtX3NpemUpO1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZW1lbV9yZWdpb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJ1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxcXFxuXFxcIiwgXFx1MDAyNnJlcyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBycHJvYyAqcnByb2MgPSBkYXRhO1xcbitcXG4rXFx0cnByb2NfcHV0KHJwcm9jKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjO1xcbitcXHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XFxuK1xcdHN0cnVjdCBoY2lfZGV2ICpoZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgYXJnc1syXTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRlc2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFkZXNjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWRldiA9IGRldjtcXG4rXFxuK1xcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLHJwcm9jXFxcIiwgXFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9FTlQsIFxcXCJGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXJwcm9jID0gcnByb2NfZ2V0X2J5X3BoYW5kbGUocnByb2NfcGhhbmRsZSk7XFxuK1xcdGlmICghZGVzYy1cXHUwMDNlcnByb2MpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwgXFxcIkZhaWxlZCB0byBnZXQgcmVtb3RlcHJvY1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBidHFjb21pcGNfcnByb2NfcHV0LCBkZXNjLVxcdTAwM2VycHJvYyk7XFxuK1xcbitcXHRyZXQgPSBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJncyhkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLGlwY1xcXCIsIDIsIGFyZ3MpO1xcbitcXHRpZiAoSVNfRVJSKGRlc2MtXFx1MDAzZXJlZ21hcCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRlc2MtXFx1MDAzZXJlZ21hcCk7XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VvZmZzZXQgPSBhcmdzWzBdO1xcbitcXHRkZXNjLVxcdTAwM2ViaXQgPSBhcmdzWzFdO1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTtcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZWlycSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZGVzYy1cXHUwMDNlaXJxLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgSVJRXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7XFxuK1xcdGlmICghaGRldilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRoY2lfc2V0X2RydmRhdGEoaGRldiwgZGVzYyk7XFxuK1xcdGRlc2MtXFx1MDAzZWhkZXYgPSBoZGV2O1xcbitcXHRTRVRfSENJREVWX0RFVihoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aGRldi1cXHUwMDNlYnVzID0gSENJX0lQQztcXG4rXFxuK1xcdGhkZXYtXFx1MDAzZW9wZW4gPSBidHFjb21pcGNfb3BlbjtcXG4rXFx0aGRldi1cXHUwMDNlY2xvc2UgPSBidHFjb21pcGNfY2xvc2U7XFxuK1xcdGhkZXYtXFx1MDAzZXNodXRkb3duID0gYnRxY29taXBjX3NodXRkb3duO1xcbitcXHRoZGV2LVxcdTAwM2VzZXR1cCA9IGJ0cWNvbWlwY19zZXR1cDtcXG4rXFx0aGRldi1cXHUwMDNlc2VuZCA9IGJ0cWNvbWlwY19zZW5kO1xcbitcXHRoZGV2LVxcdTAwM2VmbHVzaCA9IGJ0cWNvbWlwY19mbHVzaDtcXG4rXFx0aGRldi1cXHUwMDNlc2V0X2JkYWRkciA9IHFjYV9zZXRfYmRhZGRyO1xcbitcXG4rXFx0cmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aGNpX2ZyZWVfZGV2KGhkZXYpO1xcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FQlVTWSwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBoZGV2XFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFxuK1xcdGlmICghZGVzYyB8fCAhZGVzYy1cXHUwMDNlaGRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGNpX3VucmVnaXN0ZXJfZGV2KGRlc2MtXFx1MDAzZWhkZXYpO1xcbitcXHRoY2lfZnJlZV9kZXYoZGVzYy1cXHUwMDNlaGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJ0cWNvbWlwY19vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1idFxcXCIgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqL30sXFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBidHFjb21pcGNfZHJpdmVyID0ge1xcbitcXHQucHJvYmUgPSBidHFjb21pcGNfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBidHFjb21pcGNfcmVtb3ZlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJidHFjb21pcGNcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBidHFjb21pcGNfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK307XFxuK1xcbittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJ0cWNvbWlwY19kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRdWFsY29tbSBCbHVldG9vdGggSVBDIERyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnIGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xcbkBAIC0xNjMsNiArMTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQ1xcbiBcXHQgIHByb2Nlc3NvcnMgb24gdmFyaW91cyBUSSBTb0NzLiBJdCdzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UncmVcXG4gXFx0ICBub3QgaW50ZXJlc3RlZCBpbiB0aGUgUFJVIG9yIGlmIHlvdSBhcmUgdW5zdXJlLlxcbiBcXG4rY29uZmlnIFFDT01fTTBfQlRTU19QSUxcXG4rXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIE0wIEJUU1MgUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgQVJDSF9RQ09NXFxuK1xcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4rXFx0c2VsZWN0IFFDT01fUlBST0NfQ09NTU9OXFxuK1xcdHNlbGVjdCBRQ09NX1NDTVxcbitcXHRoZWxwXFxuK1xcdCAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBTZWN1cmUgUGVyaXBoZXJhbCBJbWFnZXIgTG9hZGVyIGZvciB0aGVcXG4rXFx0ICBRdWFsY29tbSBCbHVldG9vdGggU3Vic3lzdGVtIHJ1bm5pbmcgb24gdGhlIE0wIHJlbW90ZSBwcm9jZXNzb3IgZm91bmRcXG4rXFx0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxcbitcXHQgIFNlY3VyZSBDaGFubmVsIE1hbmFnZXIgY2FsbCB0byBUcnVzdFpvbmUuXFxuK1xcbiBjb25maWcgUUNPTV9QSUxfSU5GT1xcbiBcXHR0cmlzdGF0ZVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlIGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXFxuaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxcbkBAIC0yMSw2ICsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVxcdFxcdCs9IGRhOHh4X3JlbW90ZXByb2Mub1xcbiBvYmotJChDT05GSUdfS0VZU1RPTkVfUkVNT1RFUFJPQylcXHQrPSBrZXlzdG9uZV9yZW1vdGVwcm9jLm9cXG4gb2JqLSQoQ09ORklHX01FU09OX01YX0FPX0FSQ19SRU1PVEVQUk9DKSs9IG1lc29uX214X2FvX2FyYy5vXFxuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcXHRcXHQrPSBwcnVfcnByb2Mub1xcbitvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTClcXHRcXHQrPSBxY29tX20wX2J0c3NfcGlsLm9cXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXFx0XFx0Kz0gcWNvbV9waWxfaW5mby5vXFxuIG9iai0kKENPTkZJR19RQ09NX1JQUk9DX0NPTU1PTilcXHRcXHQrPSBxY29tX2NvbW1vbi5vXFxuIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKVxcdFxcdCs9IHFjb21fcTZ2NS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzE2OGUyNzBlNGQ0NjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fbTBfYnRzc19waWwuY1xcbkBAIC0wLDAgKzEsMjYxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lbGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZXNldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL3Fjb20vbWR0X2xvYWRlci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInFjb21fY29tbW9uLmhcXFwiXFxuK1xcbisjZGVmaW5lIEJUU1NfUEFTX0lEXFx0MHhjXFxuK1xcbitzdHJ1Y3QgbTBfYnRzcyB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0cGh5c19hZGRyX3QgbWVtX3BoeXM7XFxuK1xcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcXG4rXFx0dm9pZCBfX2lvbWVtICptZW1fcmVnaW9uO1xcbitcXHRzaXplX3QgbWVtX3NpemU7XFxuK1xcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xcbit9O1xcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghcWNvbV9zY21fcGFzX3N1cHBvcnRlZChCVFNTX1BBU19JRCkpIHtcXG4rXFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCxcXG4rXFx0XFx0XFx0XFxcIlBBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRCVFNTX1BBU19JRCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBxY29tX3NjbV9wYXNfYXV0aF9hbmRfcmVzZXQoQlRTU19QQVNfSUQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsIFxcXCJGYWlsZWQgdG8gc3RhcnQgcnByb2M6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3N0b3Aoc3RydWN0IHJwcm9jICpycHJvYylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHJwcm9jLVxcdTAwM2VzdGF0ZSA9PSBSUFJPQ19SVU5OSU5HIHx8IHJwcm9jLVxcdTAwM2VzdGF0ZSA9PSBSUFJPQ19DUkFTSEVEKSB7XFxuK1xcdFxcdHJldCA9IHFjb21fc2NtX3Bhc19zaHV0ZG93bihCVFNTX1BBU19JRCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCwgXFxcIkZhaWxlZCB0byBzdG9wIHJwcm9jOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGV2X2luZm8ocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsIFxcXCJTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG0wX2J0c3NfbG9hZChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbit7XFxuK1xcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRycztcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpzZWdfZnc7XFxuK1xcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICplaGRyO1xcbitcXHR2b2lkIF9faW9tZW0gKm1ldGFkYXRhO1xcbitcXHRzaXplX3QgbWV0YWRhdGFfc2l6ZTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICsgMSk7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZmdywgcnByb2MtXFx1MDAzZWZpcm13YXJlLCBycHJvYy1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCwgXFxcIkZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCBcXHUwMDI2bWV0YWRhdGFfc2l6ZSwgcnByb2MtXFx1MDAzZWZpcm13YXJlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJwcm9jLVxcdTAwM2VkZXYucGFyZW50KTtcXG4rXFx0aWYgKElTX0VSUihtZXRhZGF0YSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihtZXRhZGF0YSk7XFxuK1xcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gcmVhZCBmaXJtd2FyZSBtZXRhZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgICBtZXRhZGF0YV9zaXplLCBOVUxMKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJwcm9jLVxcdTAwM2VkZXYucGFyZW50LCBcXFwiUEFTIGluaXQgaW1hZ2UgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBmcmVlX21ldGFkYXRhO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci1cXHUwMDNlZV9waG51bTsgaSsrKSB7XFxuK1xcdFxcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVxcdTAwM2VmaXJtd2FyZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNlZ19uYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdHBoZHIgPSBcXHUwMDI2cGhkcnNbaV07XFxuK1xcbitcXHRcXHQvKiBPbmx5IHByb2Nlc3MgdmFsaWQgbG9hZGFibGUgZGF0YSBzZWdtZW50cyAqL1xcbitcXHRcXHRpZiAocGhkci1cXHUwMDNlcF90eXBlICE9IFBUX0xPQUQgfHwgIXBoZHItXFx1MDAzZXBfbWVtc3opXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHBoZHItXFx1MDAzZXBfdmFkZHIgKyBwaGRyLVxcdTAwM2VwX2ZpbGVzeiBcXHUwMDNlIGRlc2MtXFx1MDAzZW1lbV9zaXplKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsXFxuK1xcdFxcdFxcdFxcdFxcXCJTZWdtZW50IGRhdGEgZXhjZWVkcyB0aGUgcmVzZXJ2ZWQgbWVtb3J5IGFyZWEhXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX21ldGFkYXRhO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBDaGVjayBpZiBmaXJtd2FyZSBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudCBmaWxlcyAqL1xcbitcXHRcXHRpZiAocGhkci1cXHUwMDNlcF9vZmZzZXQgXFx1MDAzZSBmdy1cXHUwMDNlc2l6ZSB8fFxcbitcXHRcXHQgICAgcGhkci1cXHUwMDNlcF9vZmZzZXQgKyBwaGRyLVxcdTAwM2VwX2ZpbGVzeiBcXHUwMDNlIGZ3LVxcdTAwM2VzaXplKSB7XFxuK1xcdFxcdFxcdHNwcmludGYoc2VnX25hbWUgKyBzdHJsZW4oc2VnX25hbWUpIC0gMywgXFxcImIlMDJkXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNnNlZ19mdywgc2VnX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBycHJvYy1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkNvdWxkIG5vdCBmaW5kIHNwbGl0IHNlZ21lbnQgYmluYXJ5OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0c2VnX25hbWUpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGZyZWVfbWV0YWRhdGE7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzXFxuK1xcdFxcdFxcdCAqIHRoZSBvZmZzZXRcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1lbWNweV90b2lvKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyBwaGRyLVxcdTAwM2VwX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgc2VnX2Z3LVxcdTAwM2VkYXRhLCBwaGRyLVxcdTAwM2VwX2ZpbGVzeik7XFxuK1xcbitcXHRcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHNlZ19mdyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1lbWNweV90b2lvKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyBwaGRyLVxcdTAwM2VwX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgZnctXFx1MDAzZWRhdGEgKyBwaGRyLVxcdTAwM2VwX29mZnNldCwgcGhkci1cXHUwMDNlcF9maWxlc3opO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9tZXRhZGF0YTpcXG4rXFx0a2ZyZWUobWV0YWRhdGEpO1xcbityZWxlYXNlX2Z3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBycHJvY19vcHMgbTBfYnRzc19vcHMgPSB7XFxuK1xcdC5zdGFydCA9IG0wX2J0c3Nfc3RhcnQsXFxuK1xcdC5zdG9wID0gbTBfYnRzc19zdG9wLFxcbitcXHQubG9hZCA9IG0wX2J0c3NfbG9hZCxcXG4rXFx0LmdldF9ib290X2FkZHIgPSBycHJvY19lbGZfZ2V0X2Jvb3RfYWRkcixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgbTBfYnRzc19hbGxvY19tZW1vcnlfcmVnaW9uKHN0cnVjdCBtMF9idHNzICpkZXNjKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJlc291cmNlIHJlcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcInVuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcXG4rXFx0ZGVzYy1cXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnJlcyk7XFxuK1xcdGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVxcdTAwM2VtZW1fcGh5cywgZGVzYy1cXHUwMDNlbWVtX3NpemUpO1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZW1lbV9yZWdpb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJ1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxcXFxuXFxcIiwgXFx1MDAyNnJlcyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3BpbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbit7XFxuK1xcdC8vIHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDtcXG4rXFx0c3RydWN0IG0wX2J0c3MgKmRlc2M7XFxuK1xcdHN0cnVjdCBjbGsgKmxwb19jbGs7XFxuK1xcdHN0cnVjdCBycHJvYyAqcnByb2M7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJmaXJtd2FyZS1uYW1lXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmZ3X25hbWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFxcXCJtMGJ0c3NcXFwiLCBcXHUwMDI2bTBfYnRzc19vcHMsXFxuK1xcdFxcdFxcdFxcdCBmd19uYW1lLCBzaXplb2YoKmRlc2MpKTtcXG4rXFx0aWYgKCFycHJvYykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBycHJvY1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkZXNjID0gcnByb2MtXFx1MDAzZXByaXY7XFxuK1xcdGRlc2MtXFx1MDAzZWRldiA9IGRldjtcXG4rXFxuK1xcdHJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGxwb19jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIFxcXCJidHNzX2xwb19jbGtcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihscG9fY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwb19jbGspLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VidHNzX3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsIFxcXCJidHNzX3Jlc2V0XFxcIik7XFxuK1xcdGlmIChJU19FUlJfT1JfTlVMTChkZXNjLVxcdTAwM2VidHNzX3Jlc2V0KSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRlc2MtXFx1MDAzZWJ0c3NfcmVzZXQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bmFibGUgdG8gYWNxdWlyZSBidHNzX3Jlc2V0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cXHUwMDNlYnRzc19yZXNldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLVxcdTAwM2VkZXYucGFyZW50LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBkZWFzc2VydCByZXNldFxcXFxuXFxcIik7XFxuK1xcbitcXHRycHJvYy1cXHUwMDNlYXV0b19ib290ID0gZmFsc2U7XFxuK1xcdHJldCA9IGRldm1fcnByb2NfYWRkKGRldiwgcnByb2MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnByb2MpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtYnRzcy1waWxcXFwiIH0sXFxuK1xcdHsgfSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtMF9idHNzX3BpbF9kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZSA9IG0wX2J0c3NfcGlsX3Byb2JlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJxY29tLW0wLWJ0c3MtcGlsXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbTBfYnRzc19vZl9tYXRjaCxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobTBfYnRzc19waWxfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUXVhbGNvbW0gTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBQZXJpcGhlcmFsIEltYWdlIExvYWRlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjI5Ljg3MjU1NDUxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDU0NzA4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODU4ZDcxZmZjZWYzNmM2ZTdjNDkzOWI4YWVlYzBmNDhiN2ViOGExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjQ6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxuQEAgLTAsMCArMSw2MyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFF1YWxjb21tIElQUTUwMTggQmx1ZXRvb3RoXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEdlb3JnZSBNb3Vzc2FsZW0gXHUwMDNjZ2VvcmdlLm1vdXNzYWxlbUBvdXRsb29rLmNvbVx1MDAzZVxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gcWNvbSxpcHE1MDE4LWJ0XG4rXG4rICBpbnRlcnJ1cHRzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBJbnRlcnJ1cHQgbGluZSBmcm9tIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIHRvIHRoZSBob3N0IHByb2Nlc3NvclxuKyAgICAgICAgICB0byBub3RpZnkgaXQgb2YgZXZlbnRzIHN1Y2ggYXMgcmVcbitcbisgIHFjb20saXBjOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlLWFycmF5XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHBoYW5kbGUgdG8gYSBzeXNjb24gbm9kZSByZXByZXNlbnRpbmcgdGhlIEFQQ1MgcmVnaXN0ZXJzXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgb2Zmc2V0IHRvIHRoZSByZWdpc3RlciB3aXRoaW4gdGhlIHN5c2NvblxuKyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiB1MzIgcmVwcmVzZW50aW5nIHRoZSBpcGMgYml0IHdpdGhpbiB0aGUgcmVnaXN0ZXJcbisgICAgZGVzY3JpcHRpb246IHxcbisgICAgICBUaGVzZSBlbnRyaWVzIHNwZWNpZnkgdGhlIG91dGdvaW5nIElQQyBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIHRoZSByZW1vdGVcbisgICAgICBNMCBCVFNTIGNvcmUgb2YgYSBob3N0IGV2ZW50IG9yIGZvciBzZW5kaW5nIGFuIEFDSyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvclxuKyAgICAgIGV4cGVjdHMgaXQuXG4rXG4rICBxY29tLHJwcm9jOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBoYW5kbGUgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3Igbm9kZSByZXByZXNlbnRpbmcgdGhlIE0wIEJUU1MgY29yZS5cbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSBpbnRlcnJ1cHRzXG4rICAtIHFjb20saXBjXG4rICAtIHFjb20scnByb2NcbitcbithbGxPZjpcbisgIC0gJHJlZjogYmx1ZXRvb3RoLWNvbnRyb2xsZXIueWFtbCNcbisgIC0gJHJlZjogcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oXHUwMDNlXG4rXG4rICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcbisgICAgICBjb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRcIjtcbitcbisgICAgICBxY29tLGlwYyA9IFx1MDAzY1x1MDAyNmFwY3NfZ2xiIDggMjNcdTAwM2U7XG4rICAgICAgaW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuK1xuKyAgICAgIHFjb20scnByb2MgPSBcdTAwM2NcdTAwMjZtMF9idHNzXHUwMDNlO1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTdiYjY4MTVkNzE2ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXG5AQCAtMCwwICsxLDcyIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclxuK1xuK21haW50YWluZXJzOlxuKyAgLSBHZW9yZ2UgTW91c3NhbGVtIFx1MDAzY2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFF1YWxjb21tIE0wIEJUU1MgUGVyaXBoZXJhbCBTZWN1cmUgSW1hZ2UgTG9hZGVyIGxvYWRzIGZpcm13YXJlIGFuZCBwb3dlcnMgdXBcbisgIHRoZSBNMCBCVFNTIHJlbW90ZSBwcm9jZXNzb3IgY29yZSBvbiB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSBxY29tLGlwcTUwMTgtYnRzcy1waWxcbitcbisgIGZpcm13YXJlLW5hbWU6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBGaXJtd2FyZSBuYW1lIGZvciB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBjb3JlXG4rXG4rICBjbG9ja3M6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgbG93IHBvd2VyIG9zY2lsbGF0b3IgY2xvY2tcbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBidHNzX2xwb19jbGtcbitcbisgIG1lbW9yeS1yZWdpb246XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXJ2ZWQgbWVtb3J5IGNhcnZlb3V0XG4rXG4rICByZXNldHM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXRcbitcbisgIHJlc2V0LW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBidHNzX3Jlc2V0XG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gZmlybXdhcmUtbmFtZVxuKyAgLSBjbG9ja3NcbisgIC0gY2xvY2stbmFtZXNcbisgIC0gcmVzZXRzXG4rICAtIHJlc2V0LW5hbWVzXG4rICAtIG1lbW9yeS1yZWdpb25cbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1pcHE1MDE4LmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcmVzZXQvcWNvbSxnY2MtaXBxNTAxOC5oXHUwMDNlXG4rXG4rICAgIHJlbW90ZXByb2Mge1xuKyAgICAgIGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiO1xuK1xuKyAgICAgIGZpcm13YXJlLW5hbWUgPSBcInFjYS9idF9md19wYXRjaC5tYm5cIjtcbitcbisgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZnY2MgR0NDX0JUU1NfTFBPX0NMS1x1MDAzZTtcbisgICAgICBjbG9jay1uYW1lcyA9IFwiYnRzc19scG9fY2xrXCI7XG4rICAgICAgcmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbisgICAgICByZXNldC1uYW1lcyA9IFwiYnRzc19yZXNldFwiO1xuK1xuKyAgICAgIG1lbW9yeS1yZWdpb24gPSBcdTAwM2NcdTAwMjZidHNzX3JlZ2lvblx1MDAzZTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuaW5kZXggNmY4MDA0YTIyYTFmZmQuLjRmZGYyMGM4N2IwYTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuQEAgLTE3LDYgKzE3LDE3IEBAIC8ge1xuIFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFx0I3NpemUtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFxuK1x0Ymx1ZXRvb3RoOiBibHVldG9vdGgge1xuK1x0XHRjb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRcIjtcbitcbitcdFx0cWNvbSxpcGMgPSBcdTAwM2NcdTAwMjZhcGNzX2dsYiA4IDIzXHUwMDNlO1xuK1x0XHRpbnRlcnJ1cHRzID0gXHUwMDNjR0lDX1NQSSAxNjIgSVJRX1RZUEVfRURHRV9SSVNJTkdcdTAwM2U7XG4rXG4rXHRcdHFjb20scnByb2MgPSBcdTAwM2NcdTAwMjZtMF9idHNzXHUwMDNlO1xuK1xuK1x0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHR9O1xuK1xuIFx0Y2xvY2tzIHtcbiBcdFx0Z2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsge1xuIFx0XHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLWNsb2NrXCI7XG5AQCAtMTMxLDExICsxNDIsMzEgQEAgcHNjaSB7XG4gXHRcdG1ldGhvZCA9IFwic21jXCI7XG4gXHR9O1xuIFxuK1x0bTBfYnRzczogcmVtb3RlcHJvYyB7XG4rXHRcdGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiO1xuK1xuK1x0XHRmaXJtd2FyZS1uYW1lID0gXCJxY2EvYnRfZndfcGF0Y2gubWJuXCI7XG4rXG4rXHRcdGNsb2NrcyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXHUwMDNlO1xuK1x0XHRjbG9jay1uYW1lcyA9IFwiYnRzc19scG9fY2xrXCI7XG4rXHRcdHJlc2V0cyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19CQ1JcdTAwM2U7XG4rXHRcdHJlc2V0LW5hbWVzID0gXCJidHNzX3Jlc2V0XCI7XG4rXG4rXHRcdG1lbW9yeS1yZWdpb24gPSBcdTAwM2NcdTAwMjZidHNzX3JlZ2lvblx1MDAzZTtcbitcbitcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0fTtcbitcbiBcdHJlc2VydmVkLW1lbW9yeSB7XG4gXHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFx0XHRyYW5nZXM7XG4gXG4rXHRcdGJ0c3NfcmVnaW9uOiBibHVldG9vdGhANzAwMDAwMCB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcdTAwM2U7XG4rXHRcdFx0bm8tbWFwO1xuK1x0XHR9O1xuK1xuIFx0XHRib290bG9hZGVyQDRhODAwMDAwIHtcbiBcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHg0YTgwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4gXHRcdFx0bm8tbWFwO1xuQEAgLTY0Nyw3ICs2NzgsOCBAQCB3YXRjaGRvZzogd2F0Y2hkb2dAYjAxNzAwMCB7XG4gXG4gXHRcdGFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAge1xuIFx0XHRcdGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1hcGNzLWFwcHMtZ2xvYmFsXCIsXG4tXHRcdFx0XHQgICAgIFwicWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcIjtcbitcdFx0XHRcdCAgICAgXCJxY29tLGlwcTYwMTgtYXBjcy1hcHBzLWdsb2JhbFwiLFxuK1x0XHRcdFx0ICAgICBcInN5c2NvblwiO1xuIFx0XHRcdHJlZyA9IFx1MDAzYzB4MGIxMTEwMDAgMHgxMDAwXHUwMDNlO1xuIFx0XHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4gXHRcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2YTUzcGxsXHUwMDNlLCBcdTAwM2NcdTAwMjZ4b19ib2FyZF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmdjYyBHUExMMFx1MDAzZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuaW5kZXggNGU4YzI0ZDc1N2U5YTQuLjZiOGJlZDZhNmZmZGMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuQEAgLTQxMyw2ICs0MTMsMTcgQEAgY29uZmlnIEJUX01US1VBUlRcbiBcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1lZGlhVGVrIEJsdWV0b290aCBVQVJUIGRldmljZXNcbiBcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxuIFxuK2NvbmZpZyBCVF9RQ09NSVBDXG4rXHR0cmlzdGF0ZSBcIlF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XCJcbitcdHNlbGVjdCBCVF9RQ0FcbitcdGhlbHBcbitcdCAgUXVhbGNvbW0gSVBRNTAxOCBJUEMgYmFzZWQgSENJIGRyaXZlci5cbitcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBicmlkZ2UgSENJIGRhdGEgb250byBzaGFyZWQgbWVtb3J5IGJldHdlZW5cbitcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXG4rXG4rXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBIQ0kgb3ZlciBRdWFsY29tbSBJUEMgaW50byB0aGVcbitcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuXG4rXG4gY29uZmlnIEJUX1FDT01TTURcbiBcdHRyaXN0YXRlIFwiUXVhbGNvbW0gU01EIGJhc2VkIEhDSSBzdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXG5pbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcbkBAIC0yMCw2ICsyMCw3IEBAIG9iai0kKENPTkZJR19CVF9NUlZMKVx0XHQrPSBidG1ydmwub1xuIG9iai0kKENPTkZJR19CVF9NUlZMX1NESU8pXHQrPSBidG1ydmxfc2Rpby5vXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXHQrPSBidG10a3NkaW8ub1xuIG9iai0kKENPTkZJR19CVF9NVEtVQVJUKVx0Kz0gYnRtdGt1YXJ0Lm9cbitvYmotJChDT05GSUdfQlRfUUNPTUlQQylcdCs9IGJ0cWNvbWlwYy5vXG4gb2JqLSQoQ09ORklHX0JUX1FDT01TTUQpXHQrPSBidHFjb21zbWQub1xuIG9iai0kKENPTkZJR19CVF9CQ00pXHRcdCs9IGJ0YmNtLm9cbiBvYmotJChDT05GSUdfQlRfUlRMKVx0XHQrPSBidHJ0bC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi5lMTM2ZTkxOTc2Y2ZiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbkBAIC0zODAsNiArMzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBUTFZfVFlQRV9OVk06XG4rXHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKGZ3X3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdGx2X3R5cGVfaGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03OTQsNiArNzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0ZWxzZVxuIFx0XHRyb21fdmVyID0gKChzb2NfdmVyIFx1MDAyNiAweDAwMDAwZjAwKSBcdTAwM2VcdTAwM2UgMHgwNCkgfCAoc29jX3ZlciBcdTAwMjYgMHgwMDAwMDAwZik7XG4gXG4rXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXG4rXHRcdGdvdG8gZG93bmxvYWRfbnZtO1xuK1xuIFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxuIFx0XHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xuIFxuQEAgLTg4MSw2ICs4ODcsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRpZiAoc29jX3R5cGUgPT0gUUNBX1FDQTIwNjYgfHwgc29jX3R5cGUgPT0gUUNBX1dDTjc4NTApXG4gXHRcdHFjYV9yZWFkX2Z3X2JvYXJkX2lkKGhkZXYsIFx1MDAyNmJvYXJkaWQpO1xuIFxuK2Rvd25sb2FkX252bTpcbiBcdC8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovXG4gXHRjb25maWcudHlwZSA9IFRMVl9UWVBFX05WTTtcbiBcdGlmIChmaXJtd2FyZV9uYW1lKSB7XG5AQCAtOTM5LDYgKzk0NiwxMCBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRcdFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4gXHRcdFx0XHQgXCJobXRudlwiLCBzb2NfdHlwZSwgdmVyLCByb21fdmVyLCBib2FyZGlkKTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBRQ0FfSVBRNTAxODpcbitcdFx0XHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4rXHRcdFx0XHQgXCJxY2EvbXBudiUwMnguYmluXCIsIHJvbV92ZXIpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSxcbiBcdFx0XHRcdCBcInFjYS9udm1fJTA4eC5iaW5cIiwgc29jX3Zlcik7XG5AQCAtOTU4LDYgKzk2OSw5IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbitcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbitcdFx0bXNsZWVwKE5WTV9SRUFEWV9ERUxBWV9NUyk7XG4rXG4gXHRzd2l0Y2ggKHNvY190eXBlKSB7XG4gXHRjYXNlIFFDQV9RQ0EyMDY2OlxuIFx0Y2FzZSBRQ0FfUUNBNjM5MDpcbkBAIC05NjUsNiArOTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0Y2FzZSBRQ0FfV0NONjc1MDpcbiBcdGNhc2UgUUNBX1dDTjY4NTU6XG4gXHRjYXNlIFFDQV9XQ043ODUwOlxuK1x0Y2FzZSBRQ0FfSVBRNTAxODpcbiBcdFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xMDAxLDYgKzEwMTYsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRjYXNlIFFDQV9XQ042NzUwOlxuIFx0Y2FzZSBRQ0FfV0NONjg1NTpcbiBcdGNhc2UgUUNBX1dDTjc4NTA6XG4rXHRjYXNlIFFDQV9JUFE1MDE4OlxuIFx0XHQvKiBnZXQgZncgYnVpbGQgaW5mbyAqL1xuIFx0XHRlcnIgPSBxY2FfcmVhZF9md19idWlsZF9pbmZvKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5pbmRleCA4ZjNjMWIxYzc3YjNkZS4uMzQzY2Q2MmQxMTM3MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5AQCAtNTQsNiArNTQsOCBAQFxuICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfSURcdFx0MHgxMjAwXG4gI2RlZmluZSBRQ0FfSFNQX0dGX1NPQ19NQVNLXHRcdDB4MDAwMGZmMDBcbiBcbisjZGVmaW5lIE5WTV9SRUFEWV9ERUxBWV9NU1x0XHQxNTAwXG4rXG4gZW51bSBxY2FfYmF1ZHJhdGUge1xuIFx0UUNBX0JBVURSQVRFXzExNTIwMFx0PSAwLFxuIFx0UUNBX0JBVURSQVRFXzU3NjAwLFxuQEAgLTE1OCw2ICsxNjAsNyBAQCBlbnVtIHFjYV9idHNvY190eXBlIHtcbiBcdFFDQV9XQ042NzUwLFxuIFx0UUNBX1dDTjY4NTUsXG4gXHRRQ0FfV0NONzg1MCxcbitcdFFDQV9JUFE1MDE4LFxuIH07XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1FDQSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY2MmE3NWI2YzRhOTBiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuY1xuQEAgLTAsMCArMSw5MzkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlbW90ZXByb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnRxY2EuaFwiXG4rXG4rLyoqIE1lc3NhZ2UgaGVhZGVyIGZvcm1hdC5cbisgKlxuKyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogQml0UG9zIHwgICAgMTUgICAgfCAxNCB8IDEzIHwgMTIgfCAxMSB8IDEwIHwgIDkgIHwgIDggIHwgICAgNyAtIDAgICAgIHxcbisgKiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIEZpZWxkICB8IGxvbmdfbXNnIHxBQ0sgfCAgICAgICAgUkZVICAgICAgICB8ICBwa3RfdHlwZSB8ICAgIGNtZCAgICAgICB8XG4rICogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlxuKyAqIC0gbG9uZ19tc2cgICA6IElmIHNldCwgaW5kaWNhdGVzIHRoYXQgdGhlIHBheWxvYWQgaXMgbGFyZ2VyIHRoYW4gdGhlXG4rICogICAgICAgICAgICAgICAgSVBDX01TR19QTERfU1ouIFRoZSBwYXlsb2FkIGluc3RlYWQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZVxuKyAqICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSBidWZmZXIgaW4gdGhlIHNoYXJlZCBCVFNTIG1lbW9yeSBzcGFjZS5cbisgKlxuKyAqIC0gQUNLICAgICAgIDogU2V0IGlmIHNlbmRpbmcgQUNLIGlmIHJlcXVpcmVkIGJ5IHNlbmRpbmcgYWNrbm93bGVkZWdlbWVudFxuKyAqICAgICAgICAgICAgICAgIHRvIHNlbmRlciBpLmUuIHNlbmQgYW4gYWNrIElQQyBpbnRlcnJ1cHQgaWYgc2V0LlxuKyAqXG4rICogLSBSRlUgICAgICAgIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4rICpcbisgKiAtIHBrdF90eXBlICAgOiBJUEMgUGFja2V0IFR5cGVcbisgKlxuKyAqIC0gY21kICAgICAgICA6IENvbnRhaW5zIHVuaXF1ZSBjb21tYW5kIElEXG4rICovXG4rXG4rI2RlZmluZSBJUENfTVNHX0hEUl9TWlx0XHQ0XG4rI2RlZmluZSBJUENfTVNHX1BMRF9TWlx0XHQ0MFxuKyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWlx0KElQQ19NU0dfSERSX1NaICsgSVBDX01TR19QTERfU1opXG4rXG4rLyogTWVzc2FnZSBIZWFkZXIgKi9cbisjZGVmaW5lIElQQ19IRFJfTE9OR19NU0dcdEJJVCgxNSlcbisjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1x0XHRCSVQoMTQpXG4rI2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0tcdEdFTk1BU0soOSwgOClcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0NVU1RcdDBcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0hDSVx0MVxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU9cdDJcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX1JGVVx0M1xuKyNkZWZpbmUgSVBDX0hEUl9DTURfTUFTS1x0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgSVBDX0NNRF9TVE9QXHRcdDFcbisjZGVmaW5lIElQQ19DTURfU1dJVENIX1RPX1VBUlRcdDJcbisjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QXHQzXG4rI2RlZmluZSBJUENfQ01EX0NPTExFQ1RfRFVNUFx0NFxuKyNkZWZpbmUgSVBDX0NNRF9TVEFSVFx0XHQ1XG4rXG4rI2RlZmluZSBJUENfVFhfUVNJWkVcdFx0MzJcbitcbisjZGVmaW5lXHRUT19BUFBTX0FERFIoYSlcdFx0KGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIChpbnQpKHVpbnRwdHJfdClhKVxuKyNkZWZpbmVcdFRPX0JUX0FERFIoYSlcdFx0KGEgLSBkZXNjLVx1MDAzZW1lbV9yZWdpb24pXG4rI2RlZmluZSBJUENfTEJVRl9TWih3LCB4LCB5LCB6KVx0KCgoVE9fQlRfQUREUigodm9pZCAqKXcpICsgdy1cdTAwM2V4KSAtIHctXHUwMDNleSkgLyB3LVx1MDAzZXopXG4rXG4rI2RlZmluZVx0R0VUX05PX09GX0JMT0NLUyhhLCBiKSAoKGEgKyBiIC0gMSkgLyBiKVxuK1xuKyNkZWZpbmUgR0VUX1JYX0lOREVYX0ZST01fQlVGKHgsIHkpXHQoKHggLSBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbHJpbmdfYnVmKSAvIHkpXG4rXG4rI2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcdCgoeCAtIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYpIC8geSlcbitcbisjZGVmaW5lIElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhidWYsIGxlbiwgc3opXHRcdFxcXG4rXHQoKGJ1ZiArIGxlbikgXHUwMDNlIChkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbHJpbmdfYnVmICtcdFxcXG4rXHQoc3ogKiBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSkpXG4rXG4rI2RlZmluZSBQT1dFUl9DT05UUk9MX0RFTEFZX01TXHQ1MFxuK1xuKyNkZWZpbmUgQlRTU19QQVNfSURcdDB4Y1xuK1xuK3N0cnVjdCBsb25nX21zZ19pbmZvIHtcbitcdF9fbGUxNiBzbXNnX2ZyZWVfY250O1xuK1x0X19sZTE2IGxtc2dfZnJlZV9jbnQ7XG4rXHR1OCByaWR4O1xuK1x0dTggd2lkeDtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCBpcGNfYXV4X3B0ciB7XG4rXHRfX2xlMzIgbGVuO1xuK1x0X19sZTMyIGJ1Zjtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCByaW5nX2J1ZmZlciB7XG4rXHRfX2xlMTYgbXNnX2hkcjtcbitcdF9fbGUxNiBsZW47XG4rXHR1bmlvbiB7XG4rXHRcdHU4IHNtc2dfZGF0YVtJUENfTVNHX1BMRF9TWl07XG4rXHRcdF9fbGUzMiBsbXNnX2RhdGE7XG4rXHR9IHBheWxvYWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyB7XG4rXHRfX2xlMzIgcmJ1ZjtcbitcdHU4IHJpbmdfYnVmX2NudDtcbitcdHU4IHJpZHg7XG4rXHR1OCB3aWR4O1xuK1x0dTggdGlkeDtcbitcdF9fbGUzMiBuZXh0O1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IGNvbnRleHRfaW5mbyB7XG4rXHRfX2xlMTYgdG90YWxfc2l6ZTtcbitcdHU4IGxtc2dfYnVmX2NudDtcbitcdHU4IHNtc2dfYnVmX2NudDtcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvO1xuK1x0X19sZTMyIHNyaW5nX2J1ZjtcbitcdF9fbGUzMiBscmluZ19idWY7XG4rXHRfX2xlMzIgcmVzZXJ2ZWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgcWNvbV9idHNzIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4rXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbitcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHUzMiBvZmZzZXQ7XG4rXHR1MzIgYml0O1xuK1x0aW50IGlycTtcbitcbitcdHZvaWQgKm1lbV9yZWdpb247XG4rXHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbitcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbitcdHNpemVfdCBtZW1fc2l6ZTtcbitcbitcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcTtcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1xuK1x0c3RydWN0IGNvbnRleHRfaW5mbyAqdHhfY3R4dDtcbitcdHN0cnVjdCBjb250ZXh0X2luZm8gKnJ4X2N0eHQ7XG4rXHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XG4rXG4rXHRib29sIHJ1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbitzdGF0aWMgdm9pZCAqYnRzc19hbGxvY19sbXNnKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHUzMiBsZW4sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgaXBjX2F1eF9wdHIgKmF1eF9wdHIsIGJvb2wgKmlzX2xidWZfZnVsbClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbitcdHU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDtcbitcdHZvaWQgKnJldF9wdHI7XG4rXHR1MzIgbHN6O1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYgPT0gMCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJubyBsb25nIG1lc3NhZ2UgYnVmZmVyIGluaXRpYWxpemVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcdH1cbitcbitcdGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLCBsbXNnX2J1Zl9jbnQpO1xuK1x0YmxrcyA9IEdFVF9OT19PRl9CTE9DS1MobGVuLCBsc3opO1xuK1xuK1x0aWYgKCFkZXNjLVx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IHx8XG4rXHRcdFx0KGJsa3MgXHUwMDNlIGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbitcbitcdGlkeCA9IGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHg7XG4rXG4rXHRpZiAoKGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggKyBibGtzKSBcdTAwM2UgZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCkge1xuK1x0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtIGlkeDtcbitcdFx0YXV4X3B0ci1cdTAwM2VsZW4gPSBsZW4gLSAoYmxrc19jb25zdW1lZCAqIGxzeik7XG4rXHRcdGF1eF9wdHItXHUwMDNlYnVmID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZjtcbitcdH1cbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAoZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpICVcbitcdFx0ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudDtcbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcbitcbitcdGlmIChkZXNjLVx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IFx1MDAzYz1cbitcdFx0XHQoKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKVxuK1x0XHQqaXNfbGJ1Zl9mdWxsID0gdHJ1ZTtcbitcbitcdHJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgKyAoaWR4ICogbHN6KTtcbitcbitcdHJldHVybiByZXRfcHRyO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKmJ0c3NfZ2V0X3R4X3JidWYoc3RydWN0IHFjb21fYnRzcyAqZGVzYyxcbitcdFx0XHRcdFx0XHQgYm9vbCAqaXNfc2J1Zl9mdWxsKVxuK3tcbitcdHU4IGlkeDtcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbitcbitcdGZvciAocmluZm8gPSBcdTAwMjYoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvKTtcdHJpbmZvICE9IE5VTEw7XG4rXHRcdHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbitcdFx0aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggKyAxKSAlIChkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250KTtcbitcbitcdFx0aWYgKGlkeCAhPSByaW5mby1cdTAwM2V0aWR4KSB7XG4rXHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tO1xuK1xuK1x0XHRcdGlmIChkZXNjLVx1MDAzZWxtc2dfY3R4dC5zbXNnX2ZyZWVfY250IFx1MDAzYz1cbitcdFx0XHRcdCgoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXG4rXHRcdFx0XHQqaXNfc2J1Zl9mdWxsID0gdHJ1ZTtcbitcbitcdFx0XHRyZXR1cm4gcmluZm87XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuK31cbitcbitzdGF0aWMgaW50IGJ0c3Nfc2VuZChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcixcbitcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGVzYy1cdTAwM2VoZGV2O1xuK1x0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xuK1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXHRib29sIGlzX2xidWZfZnVsbCA9IGZhbHNlO1xuK1x0Ym9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTtcbitcdHUxNiBoZHIgPSBtc2dfaGRyO1xuK1x0dm9pZCAqcHRyX2J1ZjtcbitcdHUzMiBsZW47XG4rXG4rXHQvKiBBY2NvdW50IGZvciBIQ0kgcGFja2V0IHR5cGUgYXMgaXQncyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovXG4rXHRsZW4gPSBza2ItXHUwMDNlbGVuICsgMTtcbitcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBJUENfTVNHX1BMRF9TWikge1xuK1x0XHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcbitcbitcdFx0cHRyX2J1ZiA9IGJ0c3NfYWxsb2NfbG1zZyhkZXNjLCBsZW4sXG4rXHRcdFx0XHRcdCAgXHUwMDI2YXV4X3B0ciwgXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcbitcdFx0aWYgKElTX0VSUihwdHJfYnVmKSkge1xuK1x0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJsb25nIG1zZyBidWYgZnVsbFwiKTtcbitcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4Kys7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocHRyX2J1Zik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBcdTAwMjZpc19zYnVmX2Z1bGwpO1xuK1x0aWYgKElTX0VSUihyaW5mbykpIHtcbitcdFx0YnRfZGV2X2VycihoZGV2LCBcInNob3J0IG1zZyBidWYgZnVsbFwiKTtcbitcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCsrO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XG4rXHR9XG4rXG4rXHRyYnVmID0gXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKSlbcmluZm8tXHUwMDNld2lkeF07XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBJUENfTVNHX1BMRF9TWilcbitcdFx0cmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSA9IGNwdV90b19sZTMyKFRPX0JUX0FERFIocHRyX2J1ZikpO1xuK1x0ZWxzZVxuK1x0XHRwdHJfYnVmID0gcmJ1Zi1cdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcbitcbitcdC8qIGlmIGl0J3MgYSBzaG9ydCBtZXNzYWdlLCB0aGUgYXV4IGxlbiBhbmQgYnVmIGFyZSBOVUxMICovXG4rXHRtZW1jcHlfdG9pbyhwdHJfYnVmLCBcdTAwMjZoY2lfc2tiX3BrdF90eXBlKHNrYiksIDEpO1xuK1x0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiArIDEsIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pO1xuK1x0aWYgKGF1eF9wdHIuYnVmKSB7XG4rXHRcdG1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksXG4rXHRcdFx0ICAgIChza2ItXHUwMDNlZGF0YSArIChza2ItXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pKSwgYXV4X3B0ci5sZW4pO1xuK1x0fVxuK1xuK1x0aWYgKGlzX3NidWZfZnVsbCB8fCBpc19sYnVmX2Z1bGwpXG4rXHRcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XG4rXG4rXHRyYnVmLVx1MDAzZW1zZ19oZHIgPSBjcHVfdG9fbGUxNihoZHIpO1xuK1x0cmJ1Zi1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihsZW4pO1xuK1xuK1x0cmluZm8tXHUwMDNld2lkeCA9IChyaW5mby1cdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBoZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZkZXNjLVx1MDAzZXR4X3EpKSkge1xuK1x0XHRoZHIgPSBGSUVMRF9QUkVQKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgSVBDX0hEUl9QS1RfVFlQRV9IQ0kpO1xuK1xuK1x0XHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiKTtcbitcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZkZXNjLVx1MDAzZXR4X3EsIHNrYik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0YnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLVx1MDAzZWhkZXYsIHNrYik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBidHNzX2ZyZWVfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbG1zZywgdTE2IGxlbilcbit7XG4rXHR1OCBpZHg7XG4rXHR1OCBibGtzO1xuK1x0dTMyIGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxuK1x0XHRcdFx0ICAgbG1zZ19idWZfY250KTtcbitcbitcdGlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opO1xuK1xuK1x0aWYgKGlkeCAhPSBkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4rXG4rXHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ICA9IChkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ICArIGJsa3MpICVcbitcdFx0ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudDtcbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgKz0gYmxrcztcbit9XG4rXG4rc3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcilcbit7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXG4rXHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKHJpbmZvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocmluZm8pO1xuK1xuK1x0cmJ1ZiA9IFx1MDAyNigoc3RydWN0IHJpbmdfYnVmZmVyICopVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKVtyaW5mby1cdTAwM2V3aWR4XTtcbitcdHJidWYtXHUwMDNlbXNnX2hkciA9IGNwdV90b19sZTE2KG1zZ19oZHIpO1xuK1x0cmJ1Zi1cdTAwM2VsZW4gPSAwO1xuK1xuK1x0cmluZm8tXHUwMDNld2lkeCA9IChyaW5mby1cdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19yZWN2X2N1c3RfZnJhbWUoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTggY21kKVxuK3tcbitcdHUxNiBtc2dfaGRyID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRtc2dfaGRyIHw9IGNtZDtcbitcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIElQQ19DTURfU1RPUDpcbitcdFx0YnRfZGV2X2luZm8oZGVzYy1cdTAwM2VoZGV2LCBcIkJUU1Mgc3RvcHBlZCwgZ3JhY2VmdWxseSBzdG9wcGluZyBBUFNTIElQQ1wiKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElQQ19DTURfU1RBUlQ6XG4rXHRcdGRlc2MtXHUwMDNldHhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKCh2b2lkICopZGVzYy1cdTAwM2VyeF9jdHh0ICtcbitcdFx0XHRcdGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2V0b3RhbF9zaXplKSk7XG4rXHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAwO1xuK1x0XHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ID0gMDtcbitcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCA9IGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQ7XG4rXHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250O1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnVubmluZywgdHJ1ZSk7XG4rXHRcdHdha2VfdXAoXHUwMDI2ZGVzYy1cdTAwM2V3YWl0X3EpO1xuK1xuK1x0XHRidF9kZXZfaW5mbyhkZXNjLVx1MDAzZWhkZXYsIFwiQlRTUyBzdGFydGVkLCBpbml0aWFsaXppbmcgQVBTUyBCVCBJUENcIik7XG4rXHRcdHJldHVybjtcbitcdGRlZmF1bHQ6XG4rXHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcIlVuc3VwcG9ydGVkIENNRCBJRDogJXVcIiwgY21kKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSkpIHtcbitcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiQlRTUyBub3QgaW5pdGlhbGl6ZWQsIG5vIG1lc3NhZ2Ugc2VudFwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcbitcbitcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xuK1x0aWYgKHJldClcbitcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgY29udHJvbCBtZXNzYWdlXCIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBidHNzX3JlY3ZfaGNpX2ZyYW1lKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IHBrdF9sZW47XG4rXG4rXHRpZiAobGVuIFx1MDAzYyAxKVxuK1x0XHRyZXR1cm4gLUVQUk9UTztcbitcbitcdHBrdF90eXBlID0gZGF0YVswXTtcbitcbitcdHN3aXRjaCAocGt0X3R5cGUpIHtcbitcdGNhc2UgSENJX0VWRU5UX1BLVDpcbitcdHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0VWRU5UX0hEUl9TSVpFKVxuK1x0XHRcdHJldHVybiAtRUlMU0VRO1xuK1x0XHRzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHN0cnVjdCBoY2lfZXZlbnRfaGRyICopKGRhdGEgKyAxKTtcbitcbitcdFx0cGt0X2xlbiA9IEhDSV9FVkVOVF9IRFJfU0laRSArIGhkci1cdTAwM2VwbGVuO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XG4rXHRcdGlmIChsZW4gXHUwMDNjIEhDSV9DT01NQU5EX0hEUl9TSVpFKVxuK1x0XHRcdHJldHVybiAtRUlMU0VRO1xuK1x0XHRzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKShkYXRhICsgMSk7XG4rXG4rXHRcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSArIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VwbGVuKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEhDSV9BQ0xEQVRBX1BLVDpcbitcdHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0FDTF9IRFJfU0laRSlcbitcdFx0XHRyZXR1cm4gLUVJTFNFUTtcbitcdFx0c3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgKyAxKTtcbitcbitcdFx0cGt0X2xlbiA9IEhDSV9BQ0xfSERSX1NJWkUgKyBsZTE2X3RvX2NwdShoZHItXHUwMDNlZGxlbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XG4rXHR7XG4rXHRcdGlmIChsZW4gXHUwMDNjIEhDSV9TQ09fSERSX1NJWkUpXG4rXHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4rXHRcdHN0cnVjdCBoY2lfc2NvX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfc2NvX2hkciAqKShkYXRhICsgMSk7XG4rXG4rXHRcdHBrdF9sZW4gPSBIQ0lfU0NPX0hEUl9TSVpFICsgaGRyLVx1MDAzZWRsZW47XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXG4rXHRpZiAocGt0X2xlbiBcdTAwM2UgbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNrYiA9IGJ0X3NrYl9hbGxvYyhwa3RfbGVuLCBHRlBfQVRPTUlDKTtcbitcdGlmICghc2tiKSB7XG4rXHRcdGRlc2MtXHUwMDNlaGRldi1cdTAwM2VzdGF0LmVycl9yeCsrO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHNrYi1cdTAwM2VkZXYgPSAodm9pZCAqKWRlc2MtXHUwMDNlaGRldjtcbitcdGhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlO1xuK1x0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSArIDEsIHBrdF9sZW4pO1xuK1xuK1x0aGNpX3JlY3ZfZnJhbWUoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuK1x0ZGVzYy1cdTAwM2VoZGV2LVx1MDAzZXN0YXQuYnl0ZV9yeCArPSBwa3RfbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3NfcHJvY2Vzc19yeChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sXG4rXHRcdFx0XHQgIGJvb2wgKmFjaywgdTggKnJ4X2NvdW50KVxuK3tcbitcdHU4IHJpZHgsIGxidWZfaWR4LCBibGtzX2NvbnN1bWVkLCBwa3RfdHlwZSwgY21kO1xuK1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXHR1aW50OF90ICpyeGJ1ZiA9IE5VTEw7XG4rXHR1bnNpZ25lZCBjaGFyICpidWY7XG4rXHR1MzIgbHN6O1xuK1x0aW50IHJldDtcbitcbitcdHJpZHggPSByaW5mby1cdTAwM2VyaWR4O1xuK1xuK1x0d2hpbGUgKHJpZHggIT0gcmluZm8tXHUwMDNld2lkeCkge1xuK1x0XHRtZW1zZXQoXHUwMDI2YXV4X3B0ciwgMCwgc2l6ZW9mKHN0cnVjdCBpcGNfYXV4X3B0cikpO1xuK1xuK1x0XHRyYnVmID0gXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKSlbcmlkeF07XG4rXG4rXHRcdGlmIChyYnVmLVx1MDAzZW1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbitcdFx0XHRyeGJ1ZiA9IFRPX0FQUFNfQUREUihyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhKTtcbitcdFx0XHRsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXJ4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcbitcdFx0XHRcdCAgIGxtc2dfYnVmX2NudCk7XG4rXG4rXHRcdFx0aWYgKElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhLFxuK1x0XHRcdFx0XHRcdCAgICAgcmJ1Zi1cdTAwM2VsZW4sIGxzeikpIHtcbitcdFx0XHRcdGxidWZfaWR4ID0gR0VUX1JYX0lOREVYX0ZST01fQlVGKFxuK1x0XHRcdFx0XHRcdHJidWYtXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEsIGxzeik7XG4rXG4rXHRcdFx0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtXG4rXHRcdFx0XHRcdGxidWZfaWR4O1xuK1x0XHRcdFx0YXV4X3B0ci5sZW4gPSByYnVmLVx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcbitcdFx0XHRcdGF1eF9wdHIuYnVmID0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZjtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cnhidWYgPSByYnVmLVx1MDAzZXBheWxvYWQuc21zZ19kYXRhO1xuK1x0XHR9XG4rXG4rXHRcdCphY2sgPSAocmJ1Zi1cdTAwM2Vtc2dfaGRyIFx1MDAyNiBJUENfSERSX1JFUV9BQ0spO1xuK1xuK1x0XHRwa3RfdHlwZSA9IEZJRUxEX0dFVChJUENfSERSX1BLVF9UWVBFX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4rXG4rXHRcdHN3aXRjaCAocGt0X3R5cGUpIHtcbitcdFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0hDSTpcbitcdFx0XHRidWYgPSBrbWFsbG9jKHJidWYtXHUwMDNlbGVuLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRpZiAoIWJ1Zikge1xuK1x0XHRcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bWVtY3B5X2Zyb21pbyhidWYsIHJ4YnVmLCByYnVmLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKTtcbitcbitcdFx0XHRpZiAoYXV4X3B0ci5idWYpXG4rXHRcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiArIChyYnVmLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSxcbitcdFx0XHRcdFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xuK1xuK1x0XHRcdHJldCA9IGJ0c3NfcmVjdl9oY2lfZnJhbWUoZGVzYywgYnVmLCByYnVmLVx1MDAzZWxlbik7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcIkZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWRcIiwgcmV0KTtcbitcdFx0XHRrZnJlZShidWYpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElQQ19IRFJfUEtUX1RZUEVfQ1VTVDpcbitcdFx0XHRjbWQgPSBGSUVMRF9HRVQoSVBDX0hEUl9DTURfTUFTSywgcmJ1Zi1cdTAwM2Vtc2dfaGRyKTtcbitcdFx0XHRidHNzX3JlY3ZfY3VzdF9mcmFtZShkZXNjLCBjbWQpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJpZHggPSAocmlkeCArIDEpICUgcmluZm8tXHUwMDNlcmluZ19idWZfY250O1xuK1xuK1x0XHRpZiAocnhfY291bnQpXG4rXHRcdFx0KCpyeF9jb3VudCkrKztcbitcbitcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19wcm9jZXNzX2FjayhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbitcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcbitcdHU4IHRpZHg7XG4rXG4rXHRmb3IgKHJpbmZvID0gXHUwMDI2ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvOyByaW5mbyAhPSBOVUxMO1xuK1x0XHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4rXHRcdHRpZHggPSByaW5mby1cdTAwM2V0aWR4O1xuK1x0XHRyYnVmID0gKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKTtcbitcbitcdFx0d2hpbGUgKHRpZHggIT0gcmluZm8tXHUwMDNlcmlkeCkge1xuK1x0XHRcdGlmIChyYnVmW3RpZHhdLm1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbitcdFx0XHRcdGJ0c3NfZnJlZV9sbXNnKGRlc2MsXG4rXHRcdFx0XHRcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxuK1x0XHRcdFx0XHQgICAgICAgcmJ1Zlt0aWR4XS5sZW4pO1xuK1x0XHRcdH1cbitcbitcdFx0XHR0aWR4ID0gKHRpZHggKyAxKSAlIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQ7XG4rXHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCsrO1xuK1x0XHR9XG4rXG4rXHRcdHJpbmZvLVx1MDAzZXRpZHggPSB0aWR4O1xuK1xuK1x0XHRidHNzX3Byb2Nlc3NfdHhfcXVldWUoZGVzYyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxY29tX2J0c3MsIHdvcmspO1xuK1x0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xuK1x0Ym9vbCBhY2sgPSBmYWxzZTtcbitcdHUzMiBvZmZzZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNlcnByb2MtXHUwMDNlc3RhdGUgIT0gUlBST0NfUlVOTklORylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRlc2MtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpKSkge1xuK1x0XHQvLyBGVyBzZXRzIG9mZnNldCBvZiBSWCBjb250ZXh0IGluZm8gYXQgc3RhcnQgb2YgbWVtb3J5IHJlZ2lvbiB1cG9uIGJvb3RcbitcdFx0b2Zmc2V0ID0gcmVhZGwoZGVzYy1cdTAwM2VtZW1fcmVnaW9uKTtcbitcdFx0ZGV2X2RiZyhkZXNjLVx1MDAzZWRldiwgXCJvZmZzZXQgYWZ0ZXIgTTAgYm9vdDogMHglMDh4XFxuXCIsIG9mZnNldCk7XG4rXHRcdGRlc2MtXHUwMDNlcnhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIG9mZnNldCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRidHNzX3Byb2Nlc3NfYWNrKGRlc2MpO1xuK1x0fVxuK1xuK1x0Zm9yIChyaW5mbyA9IFx1MDAyNihkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xuK1x0ICAgICByaW5mbyAhPSBOVUxMO1xuK1x0ICAgICByaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4rXHRcdHJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgXHUwMDI2YWNrLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCJGYWlsZWQgdG8gcHJvY2VzcyBwZWVyIG1zZ3M6ICVkXCIsIHJldCk7XG4rXHRcdFx0Z290byBzcGluX3VubG9jaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGFjaylcbitcdFx0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rc3Bpbl91bmxvY2s6XG4rXHRzcGluX3VubG9jayhcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgYnRzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBkYXRhO1xuK1xuK1x0cXVldWVfd29yayhkZXNjLVx1MDAzZXdxLCBcdTAwMjZkZXNjLVx1MDAzZXdvcmspO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IGJ0c3NfaW5pdChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGVzYy1cdTAwM2V3YWl0X3EpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2Vsb2NrKTtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKTtcbitcbitcdGRlc2MtXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcImJ0c3Nfd3FcIik7XG4rXHRpZiAoIWRlc2MtXHUwMDNld3EpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZkZXNjLVx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcbitcbitcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkZXNjLVx1MDAzZWlycSwgTlVMTCwgYnRzc19pcnFfaGFuZGxlcixcbitcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XCJidHNzX2lycVwiLCBkZXNjKTtcbitcbitcdGlmIChyZXQpXG4rXHRcdGRldl9lcnIoZGV2LCBcImVycm9yIHJlZ2lzdGVyaW5nIGlycVslZF0gcmV0ID0gJWRcXG5cIixcbitcdFx0XHRkZXNjLVx1MDAzZWlycSwgcmV0KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTggcGt0X3R5cGUgPSBoY2lfc2tiX3BrdF90eXBlKHNrYik7XG4rXG4rXHRoZGV2LVx1MDAzZXN0YXQuYnl0ZV90eCArPSBza2ItXHUwMDNlbGVuO1xuK1x0c3dpdGNoIChwa3RfdHlwZSkge1xuK1x0Y2FzZSBIQ0lfQ09NTUFORF9QS1Q6XG4rXHRcdGhkZXYtXHUwMDNlc3RhdC5jbWRfdHgrKztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhDSV9BQ0xEQVRBX1BLVDpcbitcdFx0aGRldi1cdTAwM2VzdGF0LmFjbF90eCsrO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSENJX1NDT0RBVEFfUEtUOlxuK1x0XHRoZGV2LVx1MDAzZXN0YXQuc2NvX3R4Kys7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4re1xuK1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbitcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBidHNzX2luaXQoZGVzYyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJGYWlsZWQgaW5pdGlhbGl6aW5nIEJUU1M6ICVkXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKiB3YWl0IDIgc2Vjb25kcyBmb3IgZmlsZXN5c3RlbSB0byBiZWNvbWUgYXZhaWxhYmxlICovXG4rXHRtc2xlZXAoMjAwMCk7XG4rXG4rXHQvKiBCb290IE0wIGZpcm13YXJlICovXG4rXHRyZXQgPSBycHJvY19ib290KGRlc2MtXHUwMDNlcnByb2MpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRidF9kZXZfZXJyKGhkZXYsIFwiRmFpbGVkIHRvIGJvb3QgTTAgcHJvY2Vzc29yOiAlZFwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xuK1x0cmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRlc2MtXHUwMDNld2FpdF9xLCBSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSxcbitcdFx0XHRcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcbitcbitcdGlmICghcmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJUaW1lb3V0IHdhaXRpbmcgZm9yIEJUU1Mgc3RhcnRcIik7XG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XG4rXG4rXHRycHJvY19zaHV0ZG93bihkZXNjLVx1MDAzZXJwcm9jKTtcbitcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1xuK1x0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcbitcdGlmIChkZXNjLVx1MDAzZXdxICE9IE5VTEwpIHtcbitcdFx0ZGlzYWJsZV9pcnEoZGVzYy1cdTAwM2VpcnEpO1xuK1x0XHRmbHVzaF93b3JrcXVldWUoZGVzYy1cdTAwM2V3cSk7XG4rXHRcdGRldm1fZnJlZV9pcnEoZGVzYy1cdTAwM2VkZXYsIGRlc2MtXHUwMDNlaXJxLCBkZXNjKTtcbitcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRlc2MtXHUwMDNld3EpO1xuK1x0XHRkZXNjLVx1MDAzZXdxID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNhX2J0c29jX3ZlcnNpb24gdmVyO1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XG4rXHQgKiBzaW11bHRhbmVvdXNseS5cbitcdCAqL1xuK1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlXG4rXHQgKiBzZXR1cCBmb3IgZXZlcnkgaGNpIHVwLlxuK1x0ICovXG4rXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG4rXHRyZXQgPSBxY2FfcmVhZF9zb2NfdmVyc2lvbihoZGV2LCBcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgVUFSVDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGJ0X2Rldl9pbmZvKGhkZXYsIFwiUUNBIEJ1aWxkIEluZm86ICVzXCIsIGhkZXYtXHUwMDNlZndfaW5mbyk7XG4rXG4rXHQvKiBPYnRhaW4gYW5kIHNldCBCRCBhZGRyZXNzIGZyb20gTlZNRU0gY2VsbCAqL1xuK1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XG4rXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX3NlbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTE2IGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnVubmluZykpKSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJCVFNTIG5vdCBpbml0aWFsaXplZCwgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiKTtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byBmcmVlX3NrYjtcbitcdH1cbitcbitcdHJldCA9IGJ0c3Nfc2VuZChkZXNjLCBoZHIsIHNrYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuK1x0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNmRlc2MtXHUwMDNldHhfcSkgXHUwMDNlPSBJUENfVFhfUVNJWkUpIHtcbitcdFx0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJUWCBxdWV1ZSBmdWxsLCBkcm9wcGluZyBtZXNzYWdlXCIpO1xuK1x0XHRcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCsrO1xuK1x0XHRcdFx0cmV0ID0gLUVOT0JVRlM7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRlc2MtXHUwMDNldHhfcSwgc2tiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogJWRcIiwgcmV0KTtcbitcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4Kys7XG4rXHRcdH1cbitcdH1cbitcbitcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1xuK1x0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJlc291cmNlIHJlcztcbitcdGludCByZXQ7XG4rXG4rXHQvKiBsb29rdXAgcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lvbiBvZiB0aGUgcmVtb3RlcHJvYyBub2RlICovXG4rXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRlc2MtXHUwMDNlcnByb2MtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJ1bmFibGUgdG8gYWNxdWlyZSBtZW1vcnktcmVnaW9uIHJlc291cmNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0ZGVzYy1cdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcbitcdGRlc2MtXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xuK1x0ZGVzYy1cdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cmVzKTtcbitcdGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiA9IGRldm1faW9yZW1hcChkZXYsIGRlc2MtXHUwMDNlbWVtX3BoeXMsIGRlc2MtXHUwMDNlbWVtX3NpemUpO1xuK1x0aWYgKCFkZXNjLVx1MDAzZW1lbV9yZWdpb24pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwidW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uOiAlcFJcXG5cIiwgXHUwMDI2cmVzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBycHJvYyAqcnByb2MgPSBkYXRhO1xuK1xuK1x0cnByb2NfcHV0KHJwcm9jKTtcbit9XG4rXG4rc3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2M7XG4rXHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XG4rXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbitcdHVuc2lnbmVkIGludCBhcmdzWzJdO1xuK1x0aW50IHJldDtcbitcbitcdGRlc2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVzYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCJxY29tLHJwcm9jXCIsIFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9FTlQsIFwiRmFpbGVkIHRvIGdldCByZW1vdGVwcm9jIGhhbmRsZVxcblwiKTtcbitcbitcdGRlc2MtXHUwMDNlcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcbitcdGlmICghZGVzYy1cdTAwM2VycHJvYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLCBcIkZhaWxlZCB0byBnZXQgcmVtb3RlcHJvY1xcblwiKTtcbitcbitcdGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGJ0cWNvbWlwY19ycHJvY19wdXQsIGRlc2MtXHUwMDNlcnByb2MpO1xuK1xuK1x0cmV0ID0gYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oZGVzYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGVzYy1cdTAwM2VyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3MoZGV2LVx1MDAzZW9mX25vZGUsIFwicWNvbSxpcGNcIiwgMiwgYXJncyk7XG4rXHRpZiAoSVNfRVJSKGRlc2MtXHUwMDNlcmVnbWFwKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZGVzYy1cdTAwM2VyZWdtYXApO1xuK1xuK1x0ZGVzYy1cdTAwM2VvZmZzZXQgPSBhcmdzWzBdO1xuK1x0ZGVzYy1cdTAwM2ViaXQgPSBhcmdzWzFdO1xuK1xuK1x0ZGVzYy1cdTAwM2VpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xuK1x0aWYgKGRlc2MtXHUwMDNlaXJxIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGRlc2MtXHUwMDNlaXJxLCBcIkZhaWxlZCB0byBhY3F1aXJlIElSUVxcblwiKTtcbitcbitcdGhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7XG4rXHRpZiAoIWhkZXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpO1xuK1x0ZGVzYy1cdTAwM2VoZGV2ID0gaGRldjtcbitcdFNFVF9IQ0lERVZfREVWKGhkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGhkZXYtXHUwMDNlYnVzID0gSENJX0lQQztcbitcbitcdGhkZXYtXHUwMDNlb3BlbiA9IGJ0cWNvbWlwY19vcGVuO1xuK1x0aGRldi1cdTAwM2VjbG9zZSA9IGJ0cWNvbWlwY19jbG9zZTtcbitcdGhkZXYtXHUwMDNlc2h1dGRvd24gPSBidHFjb21pcGNfc2h1dGRvd247XG4rXHRoZGV2LVx1MDAzZXNldHVwID0gYnRxY29taXBjX3NldHVwO1xuK1x0aGRldi1cdTAwM2VzZW5kID0gYnRxY29taXBjX3NlbmQ7XG4rXHRoZGV2LVx1MDAzZWZsdXNoID0gYnRxY29taXBjX2ZsdXNoO1xuK1x0aGRldi1cdTAwM2VzZXRfYmRhZGRyID0gcWNhX3NldF9iZGFkZHI7XG4rXG4rXHRyZXQgPSBoY2lfcmVnaXN0ZXJfZGV2KGhkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRoY2lfZnJlZV9kZXYoaGRldik7XG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVCVVNZLCBcIkZhaWxlZCB0byByZWdpc3RlciBoZGV2XFxuXCIpO1xuK1x0fVxuK1xuK1x0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VoZGV2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoY2lfdW5yZWdpc3Rlcl9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbitcdGhjaV9mcmVlX2RldihkZXNjLVx1MDAzZWhkZXYpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBidHFjb21pcGNfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idFwiIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovfSxcbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IGJ0cWNvbWlwY19wcm9iZSxcbitcdC5yZW1vdmUgPSBidHFjb21pcGNfcmVtb3ZlLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImJ0cWNvbWlwY1wiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBidHFjb21pcGNfb2ZfbWF0Y2gsXG4rXHR9LFxuK307XG4rXG4rbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihidHFjb21pcGNfZHJpdmVyKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJRdWFsY29tbSBCbHVldG9vdGggSVBDIERyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcbkBAIC0xNjMsNiArMTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQ1xuIFx0ICBwcm9jZXNzb3JzIG9uIHZhcmlvdXMgVEkgU29Dcy4gSXQncyBzYWZlIHRvIHNheSBOIGhlcmUgaWYgeW91J3JlXG4gXHQgIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBQUlUgb3IgaWYgeW91IGFyZSB1bnN1cmUuXG4gXG4rY29uZmlnIFFDT01fTTBfQlRTU19QSUxcbitcdHRyaXN0YXRlIFwiUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclwiXG4rXHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBBUkNIX1FDT01cbitcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbitcdHNlbGVjdCBRQ09NX1JQUk9DX0NPTU1PTlxuK1x0c2VsZWN0IFFDT01fU0NNXG4rXHRoZWxwXG4rXHQgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgU2VjdXJlIFBlcmlwaGVyYWwgSW1hZ2VyIExvYWRlciBmb3IgdGhlXG4rXHQgIFF1YWxjb21tIEJsdWV0b290aCBTdWJzeXN0ZW0gcnVubmluZyBvbiB0aGUgTTAgcmVtb3RlIHByb2Nlc3NvciBmb3VuZFxuK1x0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxuK1x0ICBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIGNhbGwgdG8gVHJ1c3Rab25lLlxuK1xuIGNvbmZpZyBRQ09NX1BJTF9JTkZPXG4gXHR0cmlzdGF0ZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZSBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxuaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGVcbkBAIC0yMSw2ICsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVx0XHQrPSBkYTh4eF9yZW1vdGVwcm9jLm9cbiBvYmotJChDT05GSUdfS0VZU1RPTkVfUkVNT1RFUFJPQylcdCs9IGtleXN0b25lX3JlbW90ZXByb2Mub1xuIG9iai0kKENPTkZJR19NRVNPTl9NWF9BT19BUkNfUkVNT1RFUFJPQykrPSBtZXNvbl9teF9hb19hcmMub1xuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcdFx0Kz0gcHJ1X3Jwcm9jLm9cbitvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTClcdFx0Kz0gcWNvbV9tMF9idHNzX3BpbC5vXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXHRcdCs9IHFjb21fcGlsX2luZm8ub1xuIG9iai0kKENPTkZJR19RQ09NX1JQUk9DX0NPTU1PTilcdFx0Kz0gcWNvbV9jb21tb24ub1xuIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKVx0XHQrPSBxY29tX3E2djUub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcxNjhlMjcwZTRkNDY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5AQCAtMCwwICsxLDI2MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL3Fjb20vbWR0X2xvYWRlci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJxY29tX2NvbW1vbi5oXCJcbitcbisjZGVmaW5lIEJUU1NfUEFTX0lEXHQweGNcbitcbitzdHJ1Y3QgbTBfYnRzcyB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbitcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbitcdHZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbjtcbitcdHNpemVfdCBtZW1fc2l6ZTtcbitcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xuK307XG4rXG4rc3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcWNvbV9zY21fcGFzX3N1cHBvcnRlZChCVFNTX1BBU19JRCkpIHtcbitcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LFxuK1x0XHRcdFwiUEFTIGlzIG5vdCBhdmFpbGFibGUgZm9yIHBlcmlwaGVyYWw6IDB4JXhcXG5cIixcbitcdFx0XHRCVFNTX1BBU19JRCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0cmV0ID0gcWNvbV9zY21fcGFzX2F1dGhfYW5kX3Jlc2V0KEJUU1NfUEFTX0lEKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcIkZhaWxlZCB0byBzdGFydCBycHJvYzogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG0wX2J0c3Nfc3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocnByb2MtXHUwMDNlc3RhdGUgPT0gUlBST0NfUlVOTklORyB8fCBycHJvYy1cdTAwM2VzdGF0ZSA9PSBSUFJPQ19DUkFTSEVEKSB7XG4rXHRcdHJldCA9IHFjb21fc2NtX3Bhc19zaHV0ZG93bihCVFNTX1BBU19JRCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsIFwiRmFpbGVkIHRvIHN0b3AgcnByb2M6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcbitcdFx0ZGV2X2luZm8ocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcblwiKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG0wX2J0c3NfbG9hZChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRycztcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2VnX2Z3O1xuK1x0Y29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICplaGRyO1xuK1x0dm9pZCBfX2lvbWVtICptZXRhZGF0YTtcbitcdHNpemVfdCBtZXRhZGF0YV9zaXplO1xuK1x0aW50IGksIHJldDtcbitcbitcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICsgMSk7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBycHJvYy1cdTAwM2VmaXJtd2FyZSwgcnByb2MtXHUwMDNlZGV2LnBhcmVudCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJGYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZTogJWRcXG5cIixcbitcdFx0XHRyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCBcdTAwMjZtZXRhZGF0YV9zaXplLCBycHJvYy1cdTAwM2VmaXJtd2FyZSxcbitcdFx0XHRcdFx0ICBycHJvYy1cdTAwM2VkZXYucGFyZW50KTtcbitcdGlmIChJU19FUlIobWV0YWRhdGEpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIobWV0YWRhdGEpO1xuK1x0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4rXHRcdFx0XCJGYWlsZWQgdG8gcmVhZCBmaXJtd2FyZSBtZXRhZGF0YTogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0fVxuK1xuK1x0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxuK1x0XHRcdFx0ICAgICAgbWV0YWRhdGFfc2l6ZSwgTlVMTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJQQVMgaW5pdCBpbWFnZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHItXHUwMDNlZV9waG51bTsgaSsrKSB7XG4rXHRcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVx1MDAzZWZpcm13YXJlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFzZWdfbmFtZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0cGhkciA9IFx1MDAyNnBoZHJzW2ldO1xuK1xuK1x0XHQvKiBPbmx5IHByb2Nlc3MgdmFsaWQgbG9hZGFibGUgZGF0YSBzZWdtZW50cyAqL1xuK1x0XHRpZiAocGhkci1cdTAwM2VwX3R5cGUgIT0gUFRfTE9BRCB8fCAhcGhkci1cdTAwM2VwX21lbXN6KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAocGhkci1cdTAwM2VwX3ZhZGRyICsgcGhkci1cdTAwM2VwX2ZpbGVzeiBcdTAwM2UgZGVzYy1cdTAwM2VtZW1fc2l6ZSkge1xuK1x0XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbitcdFx0XHRcdFwiU2VnbWVudCBkYXRhIGV4Y2VlZHMgdGhlIHJlc2VydmVkIG1lbW9yeSBhcmVhIVxcblwiKTtcbitcdFx0XHRnb3RvIGZyZWVfbWV0YWRhdGE7XG4rXHRcdH1cbitcbitcdFx0LyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnQgZmlsZXMgKi9cbitcdFx0aWYgKHBoZHItXHUwMDNlcF9vZmZzZXQgXHUwMDNlIGZ3LVx1MDAzZXNpemUgfHxcbitcdFx0ICAgIHBoZHItXHUwMDNlcF9vZmZzZXQgKyBwaGRyLVx1MDAzZXBfZmlsZXN6IFx1MDAzZSBmdy1cdTAwM2VzaXplKSB7XG4rXHRcdFx0c3ByaW50ZihzZWdfbmFtZSArIHN0cmxlbihzZWdfbmFtZSkgLSAzLCBcImIlMDJkXCIsIGkpO1xuK1x0XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2c2VnX2Z3LCBzZWdfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbitcdFx0XHRcdFx0XCJDb3VsZCBub3QgZmluZCBzcGxpdCBzZWdtZW50IGJpbmFyeTogJXNcXG5cIixcbitcdFx0XHRcdFx0c2VnX25hbWUpO1xuK1x0XHRcdFx0Z290byBmcmVlX21ldGFkYXRhO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzXG4rXHRcdFx0ICogdGhlIG9mZnNldFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNweV90b2lvKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIHBoZHItXHUwMDNlcF92YWRkcixcbitcdFx0XHRcdCAgICBzZWdfZnctXHUwMDNlZGF0YSwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4rXG4rXHRcdFx0cmVsZWFzZV9maXJtd2FyZShzZWdfZncpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1lbWNweV90b2lvKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIHBoZHItXHUwMDNlcF92YWRkcixcbitcdFx0XHRcdCAgICBmdy1cdTAwM2VkYXRhICsgcGhkci1cdTAwM2VwX29mZnNldCwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfbWV0YWRhdGE6XG4rXHRrZnJlZShtZXRhZGF0YSk7XG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBycHJvY19vcHMgbTBfYnRzc19vcHMgPSB7XG4rXHQuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LFxuK1x0LnN0b3AgPSBtMF9idHNzX3N0b3AsXG4rXHQubG9hZCA9IG0wX2J0c3NfbG9hZCxcbitcdC5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsXG4rfTtcbitcbitzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbitcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwidW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGRlc2MtXHUwMDNlbWVtX3BoeXMgPSByZXMuc3RhcnQ7XG4rXHRkZXNjLVx1MDAzZW1lbV9yZWxvYyA9IHJlcy5zdGFydDtcbitcdGRlc2MtXHUwMDNlbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnJlcyk7XG4rXHRkZXNjLVx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVx1MDAzZW1lbV9waHlzLCBkZXNjLVx1MDAzZW1lbV9zaXplKTtcbitcdGlmICghZGVzYy1cdTAwM2VtZW1fcmVnaW9uKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcInVuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbjogJXBSXFxuXCIsIFx1MDAyNnJlcyk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbTBfYnRzc19waWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHQvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0Y29uc3QgY2hhciAqZndfbmFtZSA9IE5VTEw7XG4rXHRzdHJ1Y3QgbTBfYnRzcyAqZGVzYztcbitcdHN0cnVjdCBjbGsgKmxwb19jbGs7XG4rXHRzdHJ1Y3QgcnByb2MgKnJwcm9jO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi1cdTAwM2VvZl9ub2RlLCBcImZpcm13YXJlLW5hbWVcIixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmZ3X25hbWUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFwibTBidHNzXCIsIFx1MDAyNm0wX2J0c3Nfb3BzLFxuK1x0XHRcdFx0IGZ3X25hbWUsIHNpemVvZigqZGVzYykpO1xuK1x0aWYgKCFycHJvYykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gYWxsb2NhdGUgcnByb2NcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZGVzYyA9IHJwcm9jLVx1MDAzZXByaXY7XG4rXHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbitcbitcdHJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRscG9fY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcImJ0c3NfbHBvX2Nsa1wiKTtcbitcdGlmIChJU19FUlIobHBvX2NsaykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscG9fY2xrKSxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcblwiKTtcbitcbitcdGRlc2MtXHUwMDNlYnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBcImJ0c3NfcmVzZXRcIik7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRlc2MtXHUwMDNlYnRzc19yZXNldCksXG4rXHRcdFx0XHQgICAgIFwidW5hYmxlIHRvIGFjcXVpcmUgYnRzc19yZXNldFxcblwiKTtcbitcbitcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsIHJldCxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRcXG5cIik7XG4rXG4rXHRycHJvYy1cdTAwM2VhdXRvX2Jvb3QgPSBmYWxzZTtcbitcdHJldCA9IGRldm1fcnByb2NfYWRkKGRldiwgcnByb2MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtMF9idHNzX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRzcy1waWxcIiB9LFxuK1x0eyB9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbTBfYnRzc19waWxfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gbTBfYnRzc19waWxfcHJvYmUsXG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicWNvbS1tMC1idHNzLXBpbFwiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBtMF9idHNzX29mX21hdGNoLFxuK1x0fSxcbit9O1xuK1xuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobTBfYnRzc19waWxfZHJpdmVyKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJRdWFsY29tbSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6MjkuODcyNTU2MTA5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDMwMjg5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3IgTmV3IEJsdWV0b290aCBhbmQgUmVtb3RlUHJvYyBEcml2ZXJzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHdpdGggc29tZSBuZXcga2VybmVsIGRyaXZlcnMg4oCTIGBidHFjb21pcGMuY2AgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgZGlnIGluLlxuXG5UaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhlc2UgYXJlIGJvdGggcGxhdGZvcm0gZHJpdmVycy4gIGBidHFjb21pcGMuY2AgaXMgZm9yIFwicWNvbSxpcHE1MDE4LWJ0XCIgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgIGZvciBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiLiAgUmlnaHQgYXdheSwgSSdtIHRoaW5raW5nIFF1YWxjb21tIElQUTUwMTgsIHdoaWNoIGltcGxpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCBhbmQgdGhhdCByYWlzZXMgYSBmbGFnLiBDYW4gdGhlc2UgcmVhbGlzdGljYWxseSBiZSBmdXp6ZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyAgUGxhdGZvcm0gZHJpdmVycyBvZnRlbiBuZWVkIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgSSAqa25vdyogc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIGJ1dCBpdCBuZWVkcyBhIGNvbXBhdGlibGUgc3RyaW5nIGFuZCBzb21lIG1lY2hhbmlzbSwgbGlrZSBgc3l6X2dlbl9zeXNmc2Agb3IgYnkgaW5qZWN0aW5nIGRldmljZSBub2Rlcy4gIEhvd2V2ZXIsIHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBhbiBIQ0kgZGV2aWNlLiAgVGhlICpwcm9iZSogZnVuY3Rpb24gaXMgdGhlIGNyaXRpY2FsIHBvaW50LCBiZWNhdXNlIHRoYXQncyB3aGVuIHRoZSBIQ0kgZGV2aWNlIGdldHMgcmVnaXN0ZXJlZC4gSWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbid0IGNhbGxlZCwgd2UncmUgZGVhZCBpbiB0aGUgd2F0ZXIgZm9yIEhDSSBmdXp6aW5nLlxuXG5UbyBnZXQgYGJ0cWNvbWlwY19wcm9iZWAgdG8gZXZlbiAqcnVuKiwgaXQncyBnb2luZyB0byBuZWVkIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGggdGhhdCBcInFjb20saXBxNTAxOC1idFwiIGNvbXBhdGlibGUgc3RyaW5nLiAgUGx1cywgaXQgbmVlZHMgcGhhbmRsZXMgZm9yIGBxY29tLHJwcm9jYCwgYW4gYHFjb20saXBjYCBzeXNjb24sIGFuZCBhbiBpbnRlcnJ1cHQuICBJZiBJJ20ganVzdCBydW5uaW5nIFFFTVUgeDg2XzY0IG9yIGFybTY0IHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBEVCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgc3l6a2FsbGVyIGNhbiBzb21laG93IGluc3RhbnRpYXRlIGl0IGNvcnJlY3RseS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBhZGQgY2FsbD8gTm8sIGl0IGRvZXNuJ3QgZ2VuZXJhbGx5IGRvIHRoYXQgdW5sZXNzIHRoZXJlJ3MgYW4gZXhpc3RpbmcgZGVzY3JpcHRpb24gaW4gdGhlIGtlcm5lbC5cblxuU28sIHJlYWxpc3RpY2FsbHksIGBidHFjb21pcGNfcHJvYmVgIGlzIHByb2JhYmx5ICp1bnJlYWNoYWJsZSogd2l0aG91dCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlIHRyZWUgdGhhdCBtYXRjaGVzLiBUaGF0IG1lYW5zIGBycHJvY19nZXRfYnlfcGhhbmRsZWAsIGBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3NgLCBhbmQgYHBsYXRmb3JtX2dldF9pcnFgIHdpbGwgZmFpbCwgYmVjYXVzZSB0aGUgZGV2aWNlIHRyZWUgd29uJ3QgYmUgY29uc3RydWN0ZWQgd2l0aCB0aGUgcmlnaHQgT0Ygbm9kZXMgYW5kIHBoYW5kbGVzLiBTcGVjaWZpY2FsbHksIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCJxY29tLHJwcm9jXCIsIFx1MDAyNnJwcm9jX3BoYW5kbGUpYCB3b3VsZCBmYWlsLiAgSXQncyBqdXN0IGdvaW5nIHRvIHJldHVybiBgLUVOT0VOVGAuXG5cblRoZSBzYW1lIGFwcGxpZXMgdG8gYHFjb21fbTBfYnRzc19waWwuY2AuIEl0IGRlcGVuZHMgb24gdGhpbmdzIGxpa2UgYGZpcm13YXJlLW5hbWVgIGFuZCB3aWxsIGxpa2VseSBmYWlsIGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGVudHJ5IHBvaW50cy4gSSBub3RpY2VkIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiBgYnRxY2EuY2A6IGEgY2hlY2sgaW4gYHFjYV90bHZfY2hlY2tfZGF0YWAgdGhhdCBoYXMgYSBjb25kaXRpb25hbCBgaWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KWAuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gYHFjYV90bHZfY2hlY2tfZGF0YWAgaXMgcGFydCBvZiBmaXJtd2FyZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LiBgc29jX3R5cGVgIGJlaW5nIGBRQ0FfSVBRNTAxOGAgaXMgb25seSBwYXNzZWQgZnJvbSBgYnRxY29taXBjX3NldHVwYC4gSG93ZXZlciwgc2luY2UgYGJ0cWNvbWlwY19zZXR1cGAgaXMgdW5yZWFjaGFibGUsIHRoaXMgY29kZXBhdGggaXMgYWxzbyBkZWFkLlxuXG5XYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRoYXQgYFFDQV9JUFE1MDE4YCBtaWdodCBnZXQgdXNlZCB3aXRoIGBoY2lfdWFydGA/IExldCdzIGNoZWNrIHdoZXJlIGBRQ0FfSVBRNTAxOGAgaXMgdXNlZC4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTQ1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjQ2LjAxNTU4NzE5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQyOTMxNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlFDQV9JUFE1MDE4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM9MzEwPXN0YXRpYyBpbnQgcWNhX3Rsdl9jaGVja19kYXRhKHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy0zODItXFx0Y2FzZSBUTFZfVFlQRV9OVk06XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzozODM6XFx0XFx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtMzg0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYz03NzE9aW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy03OTktXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo4MDA6XFx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtODAxLVxcdFxcdGdvdG8gZG93bmxvYWRfbnZtO1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NDgtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo5NDk6XFx0XFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk1MC1cXHRcXHRcXHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk3MS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk3MjpcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NzMtXFx0XFx0bXNsZWVwKE5WTV9SRUFEWV9ERUxBWV9NUyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4MS1cXHRjYXNlIFFDQV9XQ043ODUwOlxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6OTgyOlxcdGNhc2UgUUNBX0lQUTUwMTg6XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05ODMtXFx0XFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMTgtXFx0Y2FzZSBRQ0FfV0NONzg1MDpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjEwMTk6XFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMjAtXFx0XFx0LyogZ2V0IGZ3IGJ1aWxkIGluZm8gKi9cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmg9MTQ5PWVudW0gcWNhX2J0c29jX3R5cGUge1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjItXFx0UUNBX1dDTjc4NTAsXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaDoxNjM6XFx0UUNBX0lQUTUwMTgsXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjQtfTtcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jPTczMT1zdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc0Ni1cXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmM6NzQ3OlxcdHJldCA9IHFjYV9yZWFkX3NvY192ZXJzaW9uKGhkZXYsIFxcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NDgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc1MC1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYzo3NTE6XFx0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMtNzUyLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6NDguMjU4NTI0MDE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1MTk0NTcyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQ29kZSBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFFDQV9JUFE1MDE4YC4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBwbGFjZXMgdGhpcyBpcyB1c2VkIGFyZSBpbiBgYnRxY29taXBjLmNgIHdoZW4gaXQncyBwYXNzZWQgdG8gYHFjYV91YXJ0X3NldHVwYCBvciBgcWNhX3JlYWRfc29jX3ZlcnNpb25gLiBBbmQsIGlmIEknbSByZWFkaW5nIHRoaXMgY29ycmVjdGx5LCBgYnRxY29taXBjLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYHFjb20saXBxNTAxOC1idGAuXG5cblRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogZ29pbmcgdG8gYmUgcHJlc2VudCBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgUUVNVSB4ODZfNjQsIGFybTY0IHZpcnQsIHRoYXQgc29ydCBvZiB0aGluZy4gU3l6a2FsbGVyLCBhcyBicmlsbGlhbnQgYXMgaXQgaXMsIGRvZXNuJ3QgaGF2ZSBhIG1lY2hhbmlzbSB0byBtYWdpY2FsbHkgc2F0aXNmeSB0aGUgcmVhbGx5IGNvbXBsZXggZGVwZW5kZW5jaWVzIGluaGVyZW50IGluIHRoZXNlIGRldmljZSB0cmVlcy4gU3BlY2lmaWNhbGx5LCBpdCBjYW4ndCBoYW5kbGUgdGhvc2UgcGhhbmRsZXMgcG9pbnRpbmcgdG8gYHJwcm9jYCwgYHN5c2NvbmAsIHJlc2VydmVkIG1lbW9yeSwgYW5kIGFsbCB0aGF0IGphenouIFNvLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCBlYXJseS4gVGhpcyBtZWFucyBhbnkgb2YgdGhlIGFjdHVhbCBmdW5jdGlvbmFsIGNvZGUgaW4gYGJ0cWNvbWlwYy5jYCBhbmQgYWxzbyB0aGUgY29kZSBpbiBgcWNvbV9tMF9idHNzX3BpbC5jYCBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgYW55IGZ1enppbmcgd2UgdHJ5IHRvIGRvLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHNwZWNpZmljIHN1cHBvcnQgZm9yIGBxY29tLGlwcTUwMTgtYnRgLiBPa2F5LCBpdCAqZG9lcyogaGF2ZSBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgcGxhdGZvcm0gZGV2aWNlcy4gSG93ZXZlciwgZXZlbiBpZiBTeXprYWxsZXIgKmNvdWxkKiBjcmVhdGUgdGhlIGRldmljZSwgYG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi1cdTAwM2VvZl9ub2RlLCBcInFjb20scnByb2NcIiwgXHUwMDI2cnByb2NfcGhhbmRsZSlgIHdpbGwgc3RpbGwgZmFpbC4gVGhlIGNyZWF0ZWQgZGV2aWNlIHdvbid0IGhhdmUgYSB2YWxpZCBgb2Zfbm9kZWAgd2l0aCB0aGVzZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9yIHBoYW5kbGVzLiBTbyBgYnRxY29taXBjX3Byb2JlYCB3aWxsIHJldHVybiBgLUVOT0VOVGAuXG5cbkFuZCB3YWl0LCB3aGF0IGFib3V0IGBxY29tX20wX2J0c3NfcGlsLmNgPyBJdCByZWxpZXMgb24gYGZpcm13YXJlLW5hbWVgIGZyb20gdGhlIGBvZl9ub2RlYCwgd2hpY2ggaXMgYWxzbyBnb2luZyB0byBmYWlsLiBTbywgdGhlIGNvZGUgaXMgdG90YWxseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGNhbm5vdCBiZSBwcm9iZWQgaW4gb3VyIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGR1ZSB0byB0aG9zZSBjb21wbGV4IGRldmljZSB0cmVlIGRlcGVuZGVuY2llcyBpbnZvbHZpbmcgcGhhbmRsZXMsIHJlc2VydmVkIG1lbW9yeSwgYW5kIHNpbWlsYXIgdGhpbmdzLlxuXG5MZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgdG8gbWFrZSBzdXJlIEknbSBjb3JyZWN0LiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi5jb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBQZXJmZWN0LiBUaGF0J3MgZXhhY3RseSB0aGlzIHNpdHVhdGlvbi5cblxuSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MDQsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI1OjAyLjc3Nzk4NDQzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzIChidHFjb21pcGMgYW5kIHFjb21fbTBfYnRzc19waWwpIGZvciB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuIFRoZXNlIGRyaXZlcnMgcmVseSBvbiBjb21wbGV4IGRldmljZSB0cmVlIHByb3BlcnRpZXMgKHN1Y2ggYXMgcGhhbmRsZXMgdG8gcmVtb3RlcHJvYywgc3lzY29uLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UsIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBwcmVzZW50LCBtZWFuaW5nIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBmYWlsIGVhcmx5IGFuZCB0aGUgY29yZSBsb2dpYyB3aWxsIHJlbWFpbiB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznt4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 14:14:33 +0000 UTC FinishedAt: 2026-06-25 14:25:04 +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+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NThkNzFmZmNlZjM2YzZlN2M0OTM5YjhhZWVjMGY0OGI3ZWI4YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAxNDoyNDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjMgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUXVhbGNvbW0gSVBRNTAxOCBCbHVldG9vdGhcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gR2VvcmdlIE1vdXNzYWxlbSBcdTAwM2NnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tXHUwMDNlXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idFxuJiM0MztcbiYjNDM7ICBpbnRlcnJ1cHRzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBJbnRlcnJ1cHQgbGluZSBmcm9tIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIHRvIHRoZSBob3N0IHByb2Nlc3NvclxuJiM0MzsgICAgICAgICAgdG8gbm90aWZ5IGl0IG9mIGV2ZW50cyBzdWNoIGFzIHJlXG4mIzQzO1xuJiM0MzsgIHFjb20saXBjOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZS1hcnJheVxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBwaGFuZGxlIHRvIGEgc3lzY29uIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBBUENTIHJlZ2lzdGVyc1xuJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyBvZmZzZXQgdG8gdGhlIHJlZ2lzdGVyIHdpdGhpbiB0aGUgc3lzY29uXG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiB1MzIgcmVwcmVzZW50aW5nIHRoZSBpcGMgYml0IHdpdGhpbiB0aGUgcmVnaXN0ZXJcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiB8XG4mIzQzOyAgICAgIFRoZXNlIGVudHJpZXMgc3BlY2lmeSB0aGUgb3V0Z29pbmcgSVBDIGJpdCB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHJlbW90ZVxuJiM0MzsgICAgICBNMCBCVFNTIGNvcmUgb2YgYSBob3N0IGV2ZW50IG9yIGZvciBzZW5kaW5nIGFuIEFDSyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvclxuJiM0MzsgICAgICBleHBlY3RzIGl0LlxuJiM0MztcbiYjNDM7ICBxY29tLHJwcm9jOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFBoYW5kbGUgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3Igbm9kZSByZXByZXNlbnRpbmcgdGhlIE0wIEJUU1MgY29yZS5cbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gaW50ZXJydXB0c1xuJiM0MzsgIC0gcWNvbSxpcGNcbiYjNDM7ICAtIHFjb20scnByb2NcbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogYmx1ZXRvb3RoLWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IHFjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaFx1MDAzZVxuJiM0MztcbiYjNDM7ICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcbiYjNDM7ICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgIHFjb20saXBjID0gXHUwMDNjXHUwMDI2YXBjc19nbGIgOCAyM1x1MDAzZTtcbiYjNDM7ICAgICAgaW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgcWNvbSxycHJvYyA9IFx1MDAzY1x1MDAyNm0wX2J0c3NcdTAwM2U7XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTdiYjY4MTVkNzE2ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEdlb3JnZSBNb3Vzc2FsZW0gXHUwMDNjZ2VvcmdlLm1vdXNzYWxlbUBvdXRsb29rLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246XG4mIzQzOyAgUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIFNlY3VyZSBJbWFnZSBMb2FkZXIgbG9hZHMgZmlybXdhcmUgYW5kIHBvd2VycyB1cFxuJiM0MzsgIHRoZSBNMCBCVFNTIHJlbW90ZSBwcm9jZXNzb3IgY29yZSBvbiB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idHNzLXBpbFxuJiM0MztcbiYjNDM7ICBmaXJtd2FyZS1uYW1lOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBGaXJtd2FyZSBuYW1lIGZvciB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBjb3JlXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBNMCBCVFNTIGxvdyBwb3dlciBvc2NpbGxhdG9yIGNsb2NrXG4mIzQzO1xuJiM0MzsgIGNsb2NrLW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfbHBvX2Nsa1xuJiM0MztcbiYjNDM7ICBtZW1vcnktcmVnaW9uOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXJ2ZWQgbWVtb3J5IGNhcnZlb3V0XG4mIzQzO1xuJiM0MzsgIHJlc2V0czpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBNMCBCVFNTIHJlc2V0XG4mIzQzO1xuJiM0MzsgIHJlc2V0LW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfcmVzZXRcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gZmlybXdhcmUtbmFtZVxuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcmVzZXRzXG4mIzQzOyAgLSByZXNldC1uYW1lc1xuJiM0MzsgIC0gbWVtb3J5LXJlZ2lvblxuJiM0MztcbiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sZ2NjLWlwcTUwMTguaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcmVzZXQvcWNvbSxnY2MtaXBxNTAxOC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgcmVtb3RlcHJvYyB7XG4mIzQzOyAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtYnRzcy1waWxcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICBmaXJtd2FyZS1uYW1lID0gXCYjMzQ7cWNhL2J0X2Z3X3BhdGNoLm1iblwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXHUwMDNlO1xuJiM0MzsgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2J0c3NfbHBvX2Nsa1wmIzM0OztcbiYjNDM7ICAgICAgcmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbiYjNDM7ICAgICAgcmVzZXQtbmFtZXMgPSBcJiMzNDtidHNzX3Jlc2V0XCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgbWVtb3J5LXJlZ2lvbiA9IFx1MDAzY1x1MDAyNmJ0c3NfcmVnaW9uXHUwMDNlO1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuaW5kZXggNmY4MDA0YTIyYTFmZmQuLjRmZGYyMGM4N2IwYTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuQEAgLTE3LDYgJiM0MzsxNywxNyBAQCAvIHtcbiBcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdCNzaXplLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcbiYjNDM7XHRibHVldG9vdGg6IGJsdWV0b290aCB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWJ0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdHFjb20saXBjID0gXHUwMDNjXHUwMDI2YXBjc19nbGIgOCAyM1x1MDAzZTtcbiYjNDM7XHRcdGludGVycnVwdHMgPSBcdTAwM2NHSUNfU1BJIDE2MiBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRxY29tLHJwcm9jID0gXHUwMDNjXHUwMDI2bTBfYnRzc1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0dXMgPSBcJiMzNDtkaXNhYmxlZFwmIzM0OztcbiYjNDM7XHR9O1xuJiM0MztcbiBcdGNsb2NrcyB7XG4gXHRcdGdlcGh5X3J4X2NsazogZ2VwaHktcngtY2xrIHtcbiBcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7Zml4ZWQtY2xvY2tcJiMzNDs7XG5AQCAtMTMxLDExICYjNDM7MTQyLDMxIEBAIHBzY2kge1xuIFx0XHRtZXRob2QgPSBcJiMzNDtzbWNcJiMzNDs7XG4gXHR9O1xuIFxuJiM0MztcdG0wX2J0c3M6IHJlbW90ZXByb2Mge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRmaXJtd2FyZS1uYW1lID0gXCYjMzQ7cWNhL2J0X2Z3X3BhdGNoLm1iblwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZnY2MgR0NDX0JUU1NfTFBPX0NMS1x1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW5hbWVzID0gXCYjMzQ7YnRzc19scG9fY2xrXCYjMzQ7O1xuJiM0MztcdFx0cmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LW5hbWVzID0gXCYjMzQ7YnRzc19yZXNldFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRtZW1vcnktcmVnaW9uID0gXHUwMDNjXHUwMDI2YnRzc19yZWdpb25cdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0fTtcbiYjNDM7XG4gXHRyZXNlcnZlZC1tZW1vcnkge1xuIFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzJcdTAwM2U7XG4gXHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdFx0cmFuZ2VzO1xuIFxuJiM0MztcdFx0YnRzc19yZWdpb246IGJsdWV0b290aEA3MDAwMDAwIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcdTAwM2U7XG4mIzQzO1x0XHRcdG5vLW1hcDtcbiYjNDM7XHRcdH07XG4mIzQzO1xuIFx0XHRib290bG9hZGVyQDRhODAwMDAwIHtcbiBcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHg0YTgwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4gXHRcdFx0bm8tbWFwO1xuQEAgLTY0Nyw3ICYjNDM7Njc4LDggQEAgd2F0Y2hkb2c6IHdhdGNoZG9nQGIwMTcwMDAge1xuIFxuIFx0XHRhcGNzX2dsYjogbWFpbGJveEBiMTExMDAwIHtcbiBcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWFwY3MtYXBwcy1nbG9iYWxcJiMzNDssXG4tXHRcdFx0XHQgICAgIFwmIzM0O3Fjb20saXBxNjAxOC1hcGNzLWFwcHMtZ2xvYmFsXCYjMzQ7O1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7cWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdFx0cmVnID0gXHUwMDNjMHgwYjExMTAwMCAweDEwMDBcdTAwM2U7XG4gXHRcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiBcdFx0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZhNTNwbGxcdTAwM2UsIFx1MDAzY1x1MDAyNnhvX2JvYXJkX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2Z2NjIEdQTEwwXHUwMDNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG5pbmRleCA0ZThjMjRkNzU3ZTlhNC4uNmI4YmVkNmE2ZmZkYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXG5AQCAtNDEzLDYgJiM0Mzs0MTMsMTcgQEAgY29uZmlnIEJUX01US1VBUlRcbiBcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1lZGlhVGVrIEJsdWV0b290aCBVQVJUIGRldmljZXNcbiBcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxuIFxuJiM0Mztjb25maWcgQlRfUUNPTUlQQ1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IEJUX1FDQVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBkcml2ZXIuXG4mIzQzO1x0ICBUaGlzIGRyaXZlciBpcyB1c2VkIHRvIGJyaWRnZSBIQ0kgZGF0YSBvbnRvIHNoYXJlZCBtZW1vcnkgYmV0d2VlblxuJiM0MztcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXG4mIzQzO1xuJiM0MztcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSSBvdmVyIFF1YWxjb21tIElQQyBpbnRvIHRoZVxuJiM0MztcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuXG4mIzQzO1xuIGNvbmZpZyBCVF9RQ09NU01EXG4gXHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBTTUQgYmFzZWQgSENJIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXG5pbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTClcdFx0JiM0Mzs9IGJ0bXJ2bC5vXG4gb2JqLSQoQ09ORklHX0JUX01SVkxfU0RJTylcdCYjNDM7PSBidG1ydmxfc2Rpby5vXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXHQmIzQzOz0gYnRtdGtzZGlvLm9cbiBvYmotJChDT05GSUdfQlRfTVRLVUFSVClcdCYjNDM7PSBidG10a3VhcnQub1xuJiM0MztvYmotJChDT05GSUdfQlRfUUNPTUlQQylcdCYjNDM7PSBidHFjb21pcGMub1xuIG9iai0kKENPTkZJR19CVF9RQ09NU01EKVx0JiM0Mzs9IGJ0cWNvbXNtZC5vXG4gb2JqLSQoQ09ORklHX0JUX0JDTSlcdFx0JiM0Mzs9IGJ0YmNtLm9cbiBvYmotJChDT05GSUdfQlRfUlRMKVx0XHQmIzQzOz0gYnRydGwub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG5pbmRleCAwNGViZTI5MGJjNzg0ZS4uZTEzNmU5MTk3NmNmYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXG5AQCAtMzgwLDYgJiM0MzszODAsOSBAQCBzdGF0aWMgaW50IHFjYV90bHZfY2hlY2tfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIFRMVl9UWVBFX05WTTpcbiYjNDM7XHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoZndfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCB0bHZfdHlwZV9oZHIpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTc5NCw2ICYjNDM7Nzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0ZWxzZVxuIFx0XHRyb21fdmVyID0gKChzb2NfdmVyIFx1MDAyNiAweDAwMDAwZjAwKSBcdTAwM2VcdTAwM2UgMHgwNCkgfCAoc29jX3ZlciBcdTAwMjYgMHgwMDAwMDAwZik7XG4gXG4mIzQzO1x0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxuJiM0MztcdFx0Z290byBkb3dubG9hZF9udm07XG4mIzQzO1xuIFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxuIFx0XHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xuIFxuQEAgLTg4MSw2ICYjNDM7ODg3LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0aWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKVxuIFx0XHRxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCBcdTAwMjZib2FyZGlkKTtcbiBcbiYjNDM7ZG93bmxvYWRfbnZtOlxuIFx0LyogRG93bmxvYWQgTlZNIGNvbmZpZ3VyYXRpb24gKi9cbiBcdGNvbmZpZy50eXBlID0gVExWX1RZUEVfTlZNO1xuIFx0aWYgKGZpcm13YXJlX25hbWUpIHtcbkBAIC05MzksNiAmIzQzOzk0NiwxMCBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRcdFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4gXHRcdFx0XHQgXCYjMzQ7aG10bnZcJiMzNDssIHNvY190eXBlLCB2ZXIsIHJvbV92ZXIsIGJvYXJkaWQpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBRQ0FfSVBRNTAxODpcbiYjNDM7XHRcdFx0c25wcmludGYoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtxY2EvbXBudiUwMnguYmluXCYjMzQ7LCByb21fdmVyKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0c25wcmludGYoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLFxuIFx0XHRcdFx0IFwmIzM0O3FjYS9udm1fJTA4eC5iaW5cJiMzNDssIHNvY192ZXIpO1xuQEAgLTk1OCw2ICYjNDM7OTY5LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbiYjNDM7XHRcdG1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpO1xuJiM0MztcbiBcdHN3aXRjaCAoc29jX3R5cGUpIHtcbiBcdGNhc2UgUUNBX1FDQTIwNjY6XG4gXHRjYXNlIFFDQV9RQ0E2MzkwOlxuQEAgLTk2NSw2ICYjNDM7OTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0Y2FzZSBRQ0FfV0NONjc1MDpcbiBcdGNhc2UgUUNBX1dDTjY4NTU6XG4gXHRjYXNlIFFDQV9XQ043ODUwOlxuJiM0MztcdGNhc2UgUUNBX0lQUTUwMTg6XG4gXHRcdGVyciA9IHFjYV9kaXNhYmxlX3NvY19sb2dnaW5nKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMTAwMSw2ICYjNDM7MTAxNiw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbiBcdGNhc2UgUUNBX1dDTjY3NTA6XG4gXHRjYXNlIFFDQV9XQ042ODU1OlxuIFx0Y2FzZSBRQ0FfV0NONzg1MDpcbiYjNDM7XHRjYXNlIFFDQV9JUFE1MDE4OlxuIFx0XHQvKiBnZXQgZncgYnVpbGQgaW5mbyAqL1xuIFx0XHRlcnIgPSBxY2FfcmVhZF9md19idWlsZF9pbmZvKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5pbmRleCA4ZjNjMWIxYzc3YjNkZS4uMzQzY2Q2MmQxMTM3MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5AQCAtNTQsNiAmIzQzOzU0LDggQEBcbiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX0lEXHRcdDB4MTIwMFxuICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfTUFTS1x0XHQweDAwMDBmZjAwXG4gXG4mIzQzOyNkZWZpbmUgTlZNX1JFQURZX0RFTEFZX01TXHRcdDE1MDBcbiYjNDM7XG4gZW51bSBxY2FfYmF1ZHJhdGUge1xuIFx0UUNBX0JBVURSQVRFXzExNTIwMFx0PSAwLFxuIFx0UUNBX0JBVURSQVRFXzU3NjAwLFxuQEAgLTE1OCw2ICYjNDM7MTYwLDcgQEAgZW51bSBxY2FfYnRzb2NfdHlwZSB7XG4gXHRRQ0FfV0NONjc1MCxcbiBcdFFDQV9XQ042ODU1LFxuIFx0UUNBX1dDTjc4NTAsXG4mIzQzO1x0UUNBX0lQUTUwMTgsXG4gfTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlRfUUNBKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjYyYTc1YjZjNGE5MGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXG5AQCAtMCwwICYjNDM7MSw5MzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2lycS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlbW90ZXByb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0cWNhLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKiBNZXNzYWdlIGhlYWRlciBmb3JtYXQuXG4mIzQzOyAqXG4mIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIEJpdFBvcyB8ICAgIDE1ICAgIHwgMTQgfCAxMyB8IDEyIHwgMTEgfCAxMCB8ICA5ICB8ICA4ICB8ICAgIDcgLSAwICAgICB8XG4mIzQzOyAqICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIEZpZWxkICB8IGxvbmdfbXNnIHxBQ0sgfCAgICAgICAgUkZVICAgICAgICB8ICBwa3RfdHlwZSB8ICAgIGNtZCAgICAgICB8XG4mIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXG4mIzQzOyAqIC0gbG9uZ19tc2cgICA6IElmIHNldCwgaW5kaWNhdGVzIHRoYXQgdGhlIHBheWxvYWQgaXMgbGFyZ2VyIHRoYW4gdGhlXG4mIzQzOyAqICAgICAgICAgICAgICAgIElQQ19NU0dfUExEX1NaLiBUaGUgcGF5bG9hZCBpbnN0ZWFkIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGVcbiYjNDM7ICogICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlIGJ1ZmZlciBpbiB0aGUgc2hhcmVkIEJUU1MgbWVtb3J5IHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiAtIEFDSyAgICAgICA6IFNldCBpZiBzZW5kaW5nIEFDSyBpZiByZXF1aXJlZCBieSBzZW5kaW5nIGFja25vd2xlZGVnZW1lbnRcbiYjNDM7ICogICAgICAgICAgICAgICAgdG8gc2VuZGVyIGkuZS4gc2VuZCBhbiBhY2sgSVBDIGludGVycnVwdCBpZiBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIC0gUkZVICAgICAgICA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKlxuJiM0MzsgKiAtIHBrdF90eXBlICAgOiBJUEMgUGFja2V0IFR5cGVcbiYjNDM7ICpcbiYjNDM7ICogLSBjbWQgICAgICAgIDogQ29udGFpbnMgdW5pcXVlIGNvbW1hbmQgSURcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElQQ19NU0dfSERSX1NaXHRcdDRcbiYjNDM7I2RlZmluZSBJUENfTVNHX1BMRF9TWlx0XHQ0MFxuJiM0MzsjZGVmaW5lIElQQ19UT1RBTF9NU0dfU1pcdChJUENfTVNHX0hEUl9TWiAmIzQzOyBJUENfTVNHX1BMRF9TWilcbiYjNDM7XG4mIzQzOy8qIE1lc3NhZ2UgSGVhZGVyICovXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9MT05HX01TR1x0QklUKDE1KVxuJiM0MzsjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1x0XHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9QS1RfVFlQRV9NQVNLXHRHRU5NQVNLKDksIDgpXG4mIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVFx0MFxuJiM0MzsjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0hDSVx0MVxuJiM0MzsjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0FVRElPXHQyXG4mIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVXHQzXG4mIzQzOyNkZWZpbmUgSVBDX0hEUl9DTURfTUFTS1x0R0VOTUFTSyg3LCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBJUENfQ01EX1NUT1BcdFx0MVxuJiM0MzsjZGVmaW5lIElQQ19DTURfU1dJVENIX1RPX1VBUlRcdDJcbiYjNDM7I2RlZmluZSBJUENfQ01EX1BSRVBBUkVfRFVNUFx0M1xuJiM0MzsjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QXHQ0XG4mIzQzOyNkZWZpbmUgSVBDX0NNRF9TVEFSVFx0XHQ1XG4mIzQzO1xuJiM0MzsjZGVmaW5lIElQQ19UWF9RU0laRVx0XHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZVx0VE9fQVBQU19BRERSKGEpXHRcdChkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgKGludCkodWludHB0cl90KWEpXG4mIzQzOyNkZWZpbmVcdFRPX0JUX0FERFIoYSlcdFx0KGEgLSBkZXNjLVx1MDAzZW1lbV9yZWdpb24pXG4mIzQzOyNkZWZpbmUgSVBDX0xCVUZfU1oodywgeCwgeSwgeilcdCgoKFRPX0JUX0FERFIoKHZvaWQgKil3KSAmIzQzOyB3LVx1MDAzZXgpIC0gdy1cdTAwM2V5KSAvIHctXHUwMDNleilcbiYjNDM7XG4mIzQzOyNkZWZpbmVcdEdFVF9OT19PRl9CTE9DS1MoYSwgYikgKChhICYjNDM7IGIgLSAxKSAvIGIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdFVF9SWF9JTkRFWF9GUk9NX0JVRih4LCB5KVx0KCh4IC0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgLyB5KVxuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcdCgoeCAtIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYpIC8geSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeilcdFx0XFxcbiYjNDM7XHQoKGJ1ZiAmIzQzOyBsZW4pIFx1MDAzZSAoZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZiAmIzQzO1x0XFxcbiYjNDM7XHQoc3ogKiBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVNcdDUwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJUU1NfUEFTX0lEXHQweGNcbiYjNDM7XG4mIzQzO3N0cnVjdCBsb25nX21zZ19pbmZvIHtcbiYjNDM7XHRfX2xlMTYgc21zZ19mcmVlX2NudDtcbiYjNDM7XHRfX2xlMTYgbG1zZ19mcmVlX2NudDtcbiYjNDM7XHR1OCByaWR4O1xuJiM0MztcdHU4IHdpZHg7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaXBjX2F1eF9wdHIge1xuJiM0MztcdF9fbGUzMiBsZW47XG4mIzQzO1x0X19sZTMyIGJ1ZjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCByaW5nX2J1ZmZlciB7XG4mIzQzO1x0X19sZTE2IG1zZ19oZHI7XG4mIzQzO1x0X19sZTE2IGxlbjtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHR1OCBzbXNnX2RhdGFbSVBDX01TR19QTERfU1pdO1xuJiM0MztcdFx0X19sZTMyIGxtc2dfZGF0YTtcbiYjNDM7XHR9IHBheWxvYWQ7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyB7XG4mIzQzO1x0X19sZTMyIHJidWY7XG4mIzQzO1x0dTggcmluZ19idWZfY250O1xuJiM0MztcdHU4IHJpZHg7XG4mIzQzO1x0dTggd2lkeDtcbiYjNDM7XHR1OCB0aWR4O1xuJiM0MztcdF9fbGUzMiBuZXh0O1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IGNvbnRleHRfaW5mbyB7XG4mIzQzO1x0X19sZTE2IHRvdGFsX3NpemU7XG4mIzQzO1x0dTggbG1zZ19idWZfY250O1xuJiM0MztcdHU4IHNtc2dfYnVmX2NudDtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyBzcmluZ19idWZfaW5mbztcbiYjNDM7XHRfX2xlMzIgc3JpbmdfYnVmO1xuJiM0MztcdF9fbGUzMiBscmluZ19idWY7XG4mIzQzO1x0X19sZTMyIHJlc2VydmVkO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RydWN0IHFjb21fYnRzcyB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4mIzQzO1x0c3RydWN0IGhjaV9kZXYgKmhkZXY7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdHUzMiBiaXQ7XG4mIzQzO1x0aW50IGlycTtcbiYjNDM7XG4mIzQzO1x0dm9pZCAqbWVtX3JlZ2lvbjtcbiYjNDM7XHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbiYjNDM7XHRwaHlzX2FkZHJfdCBtZW1fcmVsb2M7XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3E7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTtcbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBjb250ZXh0X2luZm8gKnR4X2N0eHQ7XG4mIzQzO1x0c3RydWN0IGNvbnRleHRfaW5mbyAqcnhfY3R4dDtcbiYjNDM7XHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XG4mIzQzO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKmJ0c3NfYWxsb2NfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbGVuLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBpcGNfYXV4X3B0ciAqYXV4X3B0ciwgYm9vbCAqaXNfbGJ1Zl9mdWxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cdTAwM2VkZXY7XG4mIzQzO1x0dTggaWR4LCBibGtzLCBibGtzX2NvbnN1bWVkO1xuJiM0MztcdHZvaWQgKnJldF9wdHI7XG4mIzQzO1x0dTMyIGxzejtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYgPT0gMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O25vIGxvbmcgbWVzc2FnZSBidWZmZXIgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZiwgbG1zZ19idWZfY250KTtcbiYjNDM7XHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4mIzQzO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCB8fFxuJiM0MztcdFx0XHQoYmxrcyBcdTAwM2UgZGVzYy1cdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0aWR4ID0gZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKChkZXNjLVx1MDAzZWxtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpIFx1MDAzZSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSB7XG4mIzQzO1x0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtIGlkeDtcbiYjNDM7XHRcdGF1eF9wdHItXHUwMDNlbGVuID0gbGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opO1xuJiM0MztcdFx0YXV4X3B0ci1cdTAwM2VidWYgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbHJpbmdfYnVmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeCA9IChkZXNjLVx1MDAzZWxtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICVcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQ7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgXHUwMDNjPVxuJiM0MztcdFx0XHQoKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKVxuJiM0MztcdFx0KmlzX2xidWZfZnVsbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgJiM0MzsgKGlkeCAqIGxzeik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXRfcHRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKmJ0c3NfZ2V0X3R4X3JidWYoc3RydWN0IHFjb21fYnRzcyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgKmlzX3NidWZfZnVsbClcbiYjNDM7e1xuJiM0MztcdHU4IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1xuJiM0MztcdGZvciAocmluZm8gPSBcdTAwMjYoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvKTtcdHJpbmZvICE9IE5VTEw7XG4mIzQzO1x0XHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4mIzQzO1x0XHRpZHggPSAocmluZm8tXHUwMDNld2lkeCAmIzQzOyAxKSAlIChkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaWR4ICE9IHJpbmZvLVx1MDAzZXRpZHgpIHtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGRlc2MtXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgXHUwMDNjPVxuJiM0MztcdFx0XHRcdCgoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXG4mIzQzO1x0XHRcdFx0KmlzX3NidWZfZnVsbCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gcmluZm87XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHNzX3NlbmQoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRlc2MtXHUwMDNlaGRldjtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4mIzQzO1x0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xuJiM0MztcdGJvb2wgaXNfbGJ1Zl9mdWxsID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTtcbiYjNDM7XHR1MTYgaGRyID0gbXNnX2hkcjtcbiYjNDM7XHR2b2lkICpwdHJfYnVmO1xuJiM0MztcdHUzMiBsZW47XG4mIzQzO1xuJiM0MztcdC8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCYjMzk7cyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovXG4mIzQzO1x0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyAxO1xuJiM0MztcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIElQQ19NU0dfUExEX1NaKSB7XG4mIzQzO1x0XHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcbiYjNDM7XG4mIzQzO1x0XHRwdHJfYnVmID0gYnRzc19hbGxvY19sbXNnKGRlc2MsIGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2YXV4X3B0ciwgXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocHRyX2J1ZikpIHtcbiYjNDM7XHRcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtsb25nIG1zZyBidWYgZnVsbFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGhkZXYtXHUwMDNlc3RhdC5lcnJfdHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihwdHJfYnVmKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBcdTAwMjZpc19zYnVmX2Z1bGwpO1xuJiM0MztcdGlmIChJU19FUlIocmluZm8pKSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O3Nob3J0IG1zZyBidWYgZnVsbFwmIzM0Oyk7XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHJpbmZvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJidWYgPSBcdTAwMjYoKHN0cnVjdCByaW5nX2J1ZmZlciAqKShUT19BUFBTX0FERFIocmluZm8tXHUwMDNlcmJ1ZikpKVtyaW5mby1cdTAwM2V3aWR4XTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2UgSVBDX01TR19QTERfU1opXG4mIzQzO1x0XHRyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhID0gY3B1X3RvX2xlMzIoVE9fQlRfQUREUihwdHJfYnVmKSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHRyX2J1ZiA9IHJidWYtXHUwMDNlcGF5bG9hZC5zbXNnX2RhdGE7XG4mIzQzO1xuJiM0MztcdC8qIGlmIGl0JiMzOTtzIGEgc2hvcnQgbWVzc2FnZSwgdGhlIGF1eCBsZW4gYW5kIGJ1ZiBhcmUgTlVMTCAqL1xuJiM0MztcdG1lbWNweV90b2lvKHB0cl9idWYsIFx1MDAyNmhjaV9za2JfcGt0X3R5cGUoc2tiKSwgMSk7XG4mIzQzO1x0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiAmIzQzOyAxLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKTtcbiYjNDM7XHRpZiAoYXV4X3B0ci5idWYpIHtcbiYjNDM7XHRcdG1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksXG4mIzQzO1x0XHRcdCAgICAoc2tiLVx1MDAzZWRhdGEgJiM0MzsgKHNrYi1cdTAwM2VsZW4gLSBhdXhfcHRyLmxlbikpLCBhdXhfcHRyLmxlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfc2J1Zl9mdWxsIHx8IGlzX2xidWZfZnVsbClcbiYjNDM7XHRcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XG4mIzQzO1xuJiM0MztcdHJidWYtXHUwMDNlbXNnX2hkciA9IGNwdV90b19sZTE2KGhkcik7XG4mIzQzO1x0cmJ1Zi1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihsZW4pO1xuJiM0MztcbiYjNDM7XHRyaW5mby1cdTAwM2V3aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggJiM0MzsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKSkpIHtcbiYjNDM7XHRcdGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2VcJiMzNDspO1xuJiM0MztcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZkZXNjLVx1MDAzZXR4X3EsIHNrYik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidHNzX2ZyZWVfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbG1zZywgdTE2IGxlbilcbiYjNDM7e1xuJiM0MztcdHU4IGlkeDtcbiYjNDM7XHR1OCBibGtzO1xuJiM0MztcdHUzMiBsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcbiYjNDM7XHRcdFx0XHQgICBsbXNnX2J1Zl9jbnQpO1xuJiM0MztcbiYjNDM7XHRpZHggPSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYobG1zZywgbHN6KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlkeCAhPSBkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LnJpZHggID0gKGRlc2MtXHUwMDNlbG1zZ19jdHh0LnJpZHggICYjNDM7IGJsa3MpICVcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQ7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgJiM0Mzs9IGJsa3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRzc19zZW5kX2N0cmwoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xuJiM0MztcbiYjNDM7XHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJidWYgPSBcdTAwMjYoKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKSlbcmluZm8tXHUwMDNld2lkeF07XG4mIzQzO1x0cmJ1Zi1cdTAwM2Vtc2dfaGRyID0gY3B1X3RvX2xlMTYobXNnX2hkcik7XG4mIzQzO1x0cmJ1Zi1cdTAwM2VsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRyaW5mby1cdTAwM2V3aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggJiM0MzsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcmVjdl9jdXN0X2ZyYW1lKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHUxNiBtc2dfaGRyID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtc2dfaGRyIHw9IGNtZDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIElQQ19DTURfU1RPUDpcbiYjNDM7XHRcdGJ0X2Rldl9pbmZvKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7QlRTUyBzdG9wcGVkLCBncmFjZWZ1bGx5IHN0b3BwaW5nIEFQU1MgSVBDXCYjMzQ7KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSVBDX0NNRF9TVEFSVDpcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKCh2b2lkICopZGVzYy1cdTAwM2VyeF9jdHh0ICYjNDM7XG4mIzQzO1x0XHRcdFx0bGUxNl90b19jcHUoZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZXRvdGFsX3NpemUpKTtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAwO1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQucmlkeCA9IDA7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5zbXNnX2ZyZWVfY250ID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudDtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250O1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIHRydWUpO1xuJiM0MztcdFx0d2FrZV91cChcdTAwMjZkZXNjLVx1MDAzZXdhaXRfcSk7XG4mIzQzO1xuJiM0MztcdFx0YnRfZGV2X2luZm8oZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtCVFNTIHN0YXJ0ZWQsIGluaXRpYWxpemluZyBBUFNTIEJUIElQQ1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBDTUQgSUQ6ICV1XCYjMzQ7LCBjbWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSkpIHtcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcJiMzNDtCVFNTIG5vdCBpbml0aWFsaXplZCwgbm8gbWVzc2FnZSBzZW50XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNlbmQgY29udHJvbCBtZXNzYWdlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRzaXplX3QgcGt0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMSlcbiYjNDM7XHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcbiYjNDM7XHRwa3RfdHlwZSA9IGRhdGFbMF07XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGt0X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhDSV9FVkVOVF9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0VWRU5UX0hEUl9TSVpFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTFNFUTtcbiYjNDM7XHRcdHN0cnVjdCBoY2lfZXZlbnRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9ldmVudF9oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX0VWRU5UX0hEUl9TSVpFICYjNDM7IGhkci1cdTAwM2VwbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBIQ0lfQ09NTUFORF9IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKShkYXRhICYjNDM7IDEpO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItXHUwMDNlcGxlbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBIQ0lfQUNMREFUQV9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0FDTF9IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX2FjbF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2FjbF9oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX0FDTF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItXHUwMDNlZGxlbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XG4mIzQzO1x0e1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgSENJX1NDT19IRFJfU0laRSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4mIzQzO1x0XHRzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikoZGF0YSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfbGVuID0gSENJX1NDT19IRFJfU0laRSAmIzQzOyBoZHItXHUwMDNlZGxlbjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGt0X2xlbiBcdTAwM2UgbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGJ0X3NrYl9hbGxvYyhwa3RfbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXNrYikge1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VoZGV2LVx1MDAzZXN0YXQuZXJyX3J4JiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9ICh2b2lkICopZGVzYy1cdTAwM2VoZGV2O1xuJiM0MztcdGhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlO1xuJiM0MztcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgJiM0MzsgMSwgcGt0X2xlbik7XG4mIzQzO1xuJiM0MztcdGhjaV9yZWN2X2ZyYW1lKGRlc2MtXHUwMDNlaGRldiwgc2tiKTtcbiYjNDM7XHRkZXNjLVx1MDAzZWhkZXYtXHUwMDNlc3RhdC5ieXRlX3J4ICYjNDM7PSBwa3RfbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19wcm9jZXNzX3J4KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sXG4mIzQzO1x0XHRcdFx0ICBib29sICphY2ssIHU4ICpyeF9jb3VudClcbiYjNDM7e1xuJiM0MztcdHU4IHJpZHgsIGxidWZfaWR4LCBibGtzX2NvbnN1bWVkLCBwa3RfdHlwZSwgY21kO1xuJiM0MztcdHN0cnVjdCBpcGNfYXV4X3B0ciBhdXhfcHRyO1xuJiM0MztcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcbiYjNDM7XHR1aW50OF90ICpyeGJ1ZiA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqYnVmO1xuJiM0MztcdHUzMiBsc3o7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmlkeCA9IHJpbmZvLVx1MDAzZXJpZHg7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChyaWR4ICE9IHJpbmZvLVx1MDAzZXdpZHgpIHtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4mIzQzO1xuJiM0MztcdFx0cmJ1ZiA9IFx1MDAyNigoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKSkpW3JpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYnVmLVx1MDAzZW1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbiYjNDM7XHRcdFx0cnhidWYgPSBUT19BUFBTX0FERFIocmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSk7XG4mIzQzO1x0XHRcdGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNlcnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxuJiM0MztcdFx0XHRcdCAgIGxtc2dfYnVmX2NudCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKHJidWYtXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcmJ1Zi1cdTAwM2VsZW4sIGxzeikpIHtcbiYjNDM7XHRcdFx0XHRsYnVmX2lkeCA9IEdFVF9SWF9JTkRFWF9GUk9NX0JVRihcbiYjNDM7XHRcdFx0XHRcdFx0cmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSwgbHN6KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0Ymxrc19jb25zdW1lZCA9IGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgLVxuJiM0MztcdFx0XHRcdFx0bGJ1Zl9pZHg7XG4mIzQzO1x0XHRcdFx0YXV4X3B0ci5sZW4gPSByYnVmLVx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcbiYjNDM7XHRcdFx0XHRhdXhfcHRyLmJ1ZiA9IGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VscmluZ19idWY7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJ4YnVmID0gcmJ1Zi1cdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQqYWNrID0gKHJidWYtXHUwMDNlbXNnX2hkciBcdTAwMjYgSVBDX0hEUl9SRVFfQUNLKTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfdHlwZSA9IEZJRUxEX0dFVChJUENfSERSX1BLVF9UWVBFX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChwa3RfdHlwZSkge1xuJiM0MztcdFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0hDSTpcbiYjNDM7XHRcdFx0YnVmID0ga21hbGxvYyhyYnVmLVx1MDAzZWxlbiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRcdGlmICghYnVmKSB7XG4mIzQzO1x0XHRcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWNweV9mcm9taW8oYnVmLCByeGJ1ZiwgcmJ1Zi1cdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYXV4X3B0ci5idWYpXG4mIzQzO1x0XHRcdFx0bWVtY3B5X2Zyb21pbyhidWYgJiM0MzsgKHJidWYtXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgSENJIGZyYW1lOiAlZFwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElQQ19IRFJfUEtUX1RZUEVfQ1VTVDpcbiYjNDM7XHRcdFx0Y21kID0gRklFTERfR0VUKElQQ19IRFJfQ01EX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4mIzQzO1x0XHRcdGJ0c3NfcmVjdl9jdXN0X2ZyYW1lKGRlc2MsIGNtZCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmlkeCA9IChyaWR4ICYjNDM7IDEpICUgcmluZm8tXHUwMDNlcmluZ19idWZfY250O1xuJiM0MztcbiYjNDM7XHRcdGlmIChyeF9jb3VudClcbiYjNDM7XHRcdFx0KCpyeF9jb3VudCkmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJpbmZvLVx1MDAzZXJpZHggPSByaWR4O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc19hY2soc3RydWN0IHFjb21fYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4mIzQzO1x0dTggdGlkeDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChyaW5mbyA9IFx1MDAyNmRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzcmluZ19idWZfaW5mbzsgcmluZm8gIT0gTlVMTDtcbiYjNDM7XHRcdHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbiYjNDM7XHRcdHRpZHggPSByaW5mby1cdTAwM2V0aWR4O1xuJiM0MztcdFx0cmJ1ZiA9IChzdHJ1Y3QgcmluZ19idWZmZXIgKilUT19BUFBTX0FERFIocmluZm8tXHUwMDNlcmJ1Zik7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKHRpZHggIT0gcmluZm8tXHUwMDNlcmlkeCkge1xuJiM0MztcdFx0XHRpZiAocmJ1Zlt0aWR4XS5tc2dfaGRyIFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XG4mIzQzO1x0XHRcdFx0YnRzc19mcmVlX2xtc2coZGVzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHJidWZbdGlkeF0ubGVuKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0dGlkeCA9ICh0aWR4ICYjNDM7IDEpICUgZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudDtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmluZm8tXHUwMDNldGlkeCA9IHRpZHg7XG4mIzQzO1xuJiM0MztcdFx0YnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRzc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWNvbV9idHNzLCB3b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4mIzQzO1x0Ym9vbCBhY2sgPSBmYWxzZTtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXJwcm9jLVx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpKSkge1xuJiM0MztcdFx0Ly8gRlcgc2V0cyBvZmZzZXQgb2YgUlggY29udGV4dCBpbmZvIGF0IHN0YXJ0IG9mIG1lbW9yeSByZWdpb24gdXBvbiBib290XG4mIzQzO1x0XHRvZmZzZXQgPSByZWFkbChkZXNjLVx1MDAzZW1lbV9yZWdpb24pO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXNjLVx1MDAzZWRldiwgXCYjMzQ7b2Zmc2V0IGFmdGVyIE0wIGJvb3Q6IDB4JTA4eFxcblwmIzM0Oywgb2Zmc2V0KTtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiAmIzQzOyBvZmZzZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidHNzX3Byb2Nlc3NfYWNrKGRlc2MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChyaW5mbyA9IFx1MDAyNihkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xuJiM0MztcdCAgICAgcmluZm8gIT0gTlVMTDtcbiYjNDM7XHQgICAgIHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbiYjNDM7XHRcdHJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgXHUwMDI2YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgcGVlciBtc2dzOiAlZFwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0Z290byBzcGluX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhY2spXG4mIzQzO1x0XHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cdTAwM2VyZWdtYXAsIGRlc2MtXHUwMDNlb2Zmc2V0LCBCSVQoZGVzYy1cdTAwM2ViaXQpKTtcbiYjNDM7XG4mIzQzO3NwaW5fdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmRlc2MtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBidHNzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cXVldWVfd29yayhkZXNjLVx1MDAzZXdxLCBcdTAwMjZkZXNjLVx1MDAzZXdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRzc19pbml0KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRlc2MtXHUwMDNld2FpdF9xKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O2J0c3Nfd3FcJiMzNDspO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2V3cSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZkZXNjLVx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRlc2MtXHUwMDNlaXJxLCBOVUxMLCBidHNzX2lycV9oYW5kbGVyLFxuJiM0MztcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCxcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2J0c3NfaXJxXCYjMzQ7LCBkZXNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWlycSwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHU4IHBrdF90eXBlID0gaGNpX3NrYl9wa3RfdHlwZShza2IpO1xuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZXN0YXQuYnl0ZV90eCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRzd2l0Y2ggKHBrdF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBIQ0lfQ09NTUFORF9QS1Q6XG4mIzQzO1x0XHRoZGV2LVx1MDAzZXN0YXQuY21kX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSENJX0FDTERBVEFfUEtUOlxuJiM0MztcdFx0aGRldi1cdTAwM2VzdGF0LmFjbF90eCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhDSV9TQ09EQVRBX1BLVDpcbiYjNDM7XHRcdGhkZXYtXHUwMDNlc3RhdC5zY29fdHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XG4mIzQzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0c3NfaW5pdChkZXNjKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCBpbml0aWFsaXppbmcgQlRTUzogJWRcJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCAyIHNlY29uZHMgZm9yIGZpbGVzeXN0ZW0gdG8gYmVjb21lIGF2YWlsYWJsZSAqL1xuJiM0MztcdG1zbGVlcCgyMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQm9vdCBNMCBmaXJtd2FyZSAqL1xuJiM0MztcdHJldCA9IHJwcm9jX2Jvb3QoZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcbiYjNDM7XHRyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGVzYy1cdTAwM2V3YWl0X3EsIFJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpLFxuJiM0MztcdFx0XHRcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBCVFNTIHN0YXJ0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnByb2Nfc2h1dGRvd24oZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1x0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfc2h1dGRvd24oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnVubmluZywgZmFsc2UpO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXdxICE9IE5VTEwpIHtcbiYjNDM7XHRcdGRpc2FibGVfaXJxKGRlc2MtXHUwMDNlaXJxKTtcbiYjNDM7XHRcdGZsdXNoX3dvcmtxdWV1ZShkZXNjLVx1MDAzZXdxKTtcbiYjNDM7XHRcdGRldm1fZnJlZV9pcnEoZGVzYy1cdTAwM2VkZXYsIGRlc2MtXHUwMDNlaXJxLCBkZXNjKTtcbiYjNDM7XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXNjLVx1MDAzZXR4X3EpO1xuJiM0MztcdFx0ZGVzdHJveV93b3JrcXVldWUoZGVzYy1cdTAwM2V3cSk7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXdxID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XG4mIzQzO1x0ICogc2ltdWx0YW5lb3VzbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlXG4mIzQzO1x0ICogc2V0dXAgZm9yIGV2ZXJ5IGhjaSB1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG4mIzQzO1x0cmV0ID0gcWNhX3JlYWRfc29jX3ZlcnNpb24oaGRldiwgXHUwMDI2dmVyLCBRQ0FfSVBRNTAxOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBxY2FfdWFydF9zZXR1cChoZGV2LCAwLCBRQ0FfSVBRNTAxOCwgdmVyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBVQVJUOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidF9kZXZfaW5mbyhoZGV2LCBcJiMzNDtRQ0EgQnVpbGQgSW5mbzogJXNcJiMzNDssIGhkZXYtXHUwMDNlZndfaW5mbyk7XG4mIzQzO1xuJiM0MztcdC8qIE9idGFpbiBhbmQgc2V0IEJEIGFkZHJlc3MgZnJvbSBOVk1FTSBjZWxsICovXG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XG4mIzQzO1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX3NlbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHR1MTYgaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTtcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnVubmluZykpKSB7XG4mIzQzO1x0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIGZyZWVfc2tiO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKSBcdTAwM2U9IElQQ19UWF9RU0laRSkge1xuJiM0MztcdFx0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCYjMzQ7VFggcXVldWUgZnVsbCwgZHJvcHBpbmcgbWVzc2FnZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVOT0JVRlM7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xLCBza2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2U6ICVkXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7ZnJlZV9za2I6XG4mIzQzO1x0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oc3RydWN0IHFjb21fYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogbG9va3VwIHJlc2VydmVkLW1lbW9yeSByZWdpb24gb2YgdGhlIHJlbW90ZXByb2Mgbm9kZSAqL1xuJiM0MztcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGVzYy1cdTAwM2VycHJvYy1cdTAwM2VkZXYucGFyZW50LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnJlcyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3VuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlbWVtX3BoeXMgPSByZXMuc3RhcnQ7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fcmVsb2MgPSByZXMuc3RhcnQ7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cmVzKTtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVx1MDAzZW1lbV9waHlzLCBkZXNjLVx1MDAzZW1lbV9zaXplKTtcbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNlbWVtX3JlZ2lvbikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O3VuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbjogJXBSXFxuXCYjMzQ7LCBcdTAwMjZyZXMpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJwcm9jICpycHJvYyA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHJwcm9jX3B1dChycHJvYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjO1xuJiM0MztcdHBoYW5kbGUgcnByb2NfcGhhbmRsZTtcbiYjNDM7XHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYXJnc1syXTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZXNjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3Fjb20scnByb2NcJiMzNDssIFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PRU5ULCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKHJwcm9jX3BoYW5kbGUpO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VycHJvYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwgXCYjMzQ7RmFpbGVkIHRvIGdldCByZW1vdGVwcm9jXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYnRxY29taXBjX3Jwcm9jX3B1dCwgZGVzYy1cdTAwM2VycHJvYyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0cWNvbWlwY19hbGxvY19tZW1vcnlfcmVnaW9uKGRlc2MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJncyhkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxpcGNcJiMzNDssIDIsIGFyZ3MpO1xuJiM0MztcdGlmIChJU19FUlIoZGVzYy1cdTAwM2VyZWdtYXApKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGVzYy1cdTAwM2VyZWdtYXApO1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZW9mZnNldCA9IGFyZ3NbMF07XG4mIzQzO1x0ZGVzYy1cdTAwM2ViaXQgPSBhcmdzWzFdO1xuJiM0MztcbiYjNDM7XHRkZXNjLVx1MDAzZWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlaXJxIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBkZXNjLVx1MDAzZWlycSwgXCYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgSVJRXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aGRldiA9IGhjaV9hbGxvY19kZXYoKTtcbiYjNDM7XHRpZiAoIWhkZXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpO1xuJiM0MztcdGRlc2MtXHUwMDNlaGRldiA9IGhkZXY7XG4mIzQzO1x0U0VUX0hDSURFVl9ERVYoaGRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGhkZXYtXHUwMDNlYnVzID0gSENJX0lQQztcbiYjNDM7XG4mIzQzO1x0aGRldi1cdTAwM2VvcGVuID0gYnRxY29taXBjX29wZW47XG4mIzQzO1x0aGRldi1cdTAwM2VjbG9zZSA9IGJ0cWNvbWlwY19jbG9zZTtcbiYjNDM7XHRoZGV2LVx1MDAzZXNodXRkb3duID0gYnRxY29taXBjX3NodXRkb3duO1xuJiM0MztcdGhkZXYtXHUwMDNlc2V0dXAgPSBidHFjb21pcGNfc2V0dXA7XG4mIzQzO1x0aGRldi1cdTAwM2VzZW5kID0gYnRxY29taXBjX3NlbmQ7XG4mIzQzO1x0aGRldi1cdTAwM2VmbHVzaCA9IGJ0cWNvbWlwY19mbHVzaDtcbiYjNDM7XHRoZGV2LVx1MDAzZXNldF9iZGFkZHIgPSBxY2Ffc2V0X2JkYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRoY2lfZnJlZV9kZXYoaGRldik7XG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FQlVTWSwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGhkZXZcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VoZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoY2lfdW5yZWdpc3Rlcl9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbiYjNDM7XHRoY2lfZnJlZV9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYnRxY29taXBjX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNTAxOC1idFwmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi99LFxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBidHFjb21pcGNfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBidHFjb21pcGNfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IGJ0cWNvbWlwY19yZW1vdmUsXG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YnRxY29taXBjXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gYnRxY29taXBjX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJ0cWNvbWlwY19kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1F1YWxjb21tIEJsdWV0b290aCBJUEMgRHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2MywxOCBAQCBjb25maWcgUFJVX1JFTU9URVBST0NcbiBcdCAgcHJvY2Vzc29ycyBvbiB2YXJpb3VzIFRJIFNvQ3MuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UmIzM5O3JlXG4gXHQgIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBQUlUgb3IgaWYgeW91IGFyZSB1bnN1cmUuXG4gXG4mIzQzO2NvbmZpZyBRQ09NX00wX0JUU1NfUElMXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEFSQ0hfUUNPTVxuJiM0MztcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbiYjNDM7XHRzZWxlY3QgUUNPTV9SUFJPQ19DT01NT05cbiYjNDM7XHRzZWxlY3QgUUNPTV9TQ01cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIFNlY3VyZSBQZXJpcGhlcmFsIEltYWdlciBMb2FkZXIgZm9yIHRoZVxuJiM0MztcdCAgUXVhbGNvbW0gQmx1ZXRvb3RoIFN1YnN5c3RlbSBydW5uaW5nIG9uIHRoZSBNMCByZW1vdGUgcHJvY2Vzc29yIGZvdW5kXG4mIzQzO1x0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxuJiM0MztcdCAgU2VjdXJlIENoYW5uZWwgTWFuYWdlciBjYWxsIHRvIFRydXN0Wm9uZS5cbiYjNDM7XG4gY29uZmlnIFFDT01fUElMX0lORk9cbiBcdHRyaXN0YXRlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlIGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXG5pbmRleCAxYzc1OThiODQ3NWQ2MC4uZGY4MGZhZjhkMGRmNmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVx0XHQmIzQzOz0gZGE4eHhfcmVtb3RlcHJvYy5vXG4gb2JqLSQoQ09ORklHX0tFWVNUT05FX1JFTU9URVBST0MpXHQmIzQzOz0ga2V5c3RvbmVfcmVtb3RlcHJvYy5vXG4gb2JqLSQoQ09ORklHX01FU09OX01YX0FPX0FSQ19SRU1PVEVQUk9DKSYjNDM7PSBtZXNvbl9teF9hb19hcmMub1xuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcdFx0JiM0Mzs9IHBydV9ycHJvYy5vXG4mIzQzO29iai0kKENPTkZJR19RQ09NX00wX0JUU1NfUElMKVx0XHQmIzQzOz0gcWNvbV9tMF9idHNzX3BpbC5vXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXHRcdCYjNDM7PSBxY29tX3BpbF9pbmZvLm9cbiBvYmotJChDT05GSUdfUUNPTV9SUFJPQ19DT01NT04pXHRcdCYjNDM7PSBxY29tX2NvbW1vbi5vXG4gb2JqLSQoQ09ORklHX1FDT01fUTZWNV9DT01NT04pXHRcdCYjNDM7PSBxY29tX3E2djUub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcxNjhlMjcwZTRkNDY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5AQCAtMCwwICYjNDM7MSwyNjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9xY29tL21kdF9sb2FkZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cWNvbV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBCVFNTX1BBU19JRFx0MHhjXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbTBfYnRzcyB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHBoeXNfYWRkcl90IG1lbV9waHlzO1xuJiM0MztcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm1lbV9yZWdpb247XG4mIzQzO1x0c2l6ZV90IG1lbV9zaXplO1xuJiM0MztcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXFjb21fc2NtX3Bhc19zdXBwb3J0ZWQoQlRTU19QQVNfSUQpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFwmIzM0O1BBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRCVFNTX1BBU19JRCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjb21fc2NtX3Bhc19hdXRoX2FuZF9yZXNldChCVFNTX1BBU19JRCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgcnByb2M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3Nfc3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJwcm9jLVx1MDAzZXN0YXRlID09IFJQUk9DX1JVTk5JTkcgfHwgcnByb2MtXHUwMDNlc3RhdGUgPT0gUlBST0NfQ1JBU0hFRCkge1xuJiM0MztcdFx0cmV0ID0gcWNvbV9zY21fcGFzX3NodXRkb3duKEJUU1NfUEFTX0lEKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtGYWlsZWQgdG8gc3RvcCBycHJvYzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cmV0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkZXZfaW5mbyhycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcJiMzNDtTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtMF9idHNzX2xvYWQoc3RydWN0IHJwcm9jICpycHJvYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcnM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpzZWdfZnc7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGVsZjMyX2hkciAqZWhkcjtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKm1ldGFkYXRhO1xuJiM0MztcdHNpemVfdCBtZXRhZGF0YV9zaXplO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGhkcnMgPSAoY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKikoZWhkciAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZmdywgcnByb2MtXHUwMDNlZmlybXdhcmUsIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1ldGFkYXRhID0gcWNvbV9tZHRfcmVhZF9tZXRhZGF0YShmdywgXHUwMDI2bWV0YWRhdGFfc2l6ZSwgcnByb2MtXHUwMDNlZmlybXdhcmUsXG4mIzQzO1x0XHRcdFx0XHQgIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuJiM0MztcdGlmIChJU19FUlIobWV0YWRhdGEpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKG1ldGFkYXRhKTtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHJlYWQgZmlybXdhcmUgbWV0YWRhdGE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgIG1ldGFkYXRhX3NpemUsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCYjMzQ7UEFTIGluaXQgaW1hZ2UgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHItXHUwMDNlZV9waG51bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVx1MDAzZWZpcm13YXJlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXNlZ19uYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRwaGRyID0gXHUwMDI2cGhkcnNbaV07XG4mIzQzO1xuJiM0MztcdFx0LyogT25seSBwcm9jZXNzIHZhbGlkIGxvYWRhYmxlIGRhdGEgc2VnbWVudHMgKi9cbiYjNDM7XHRcdGlmIChwaGRyLVx1MDAzZXBfdHlwZSAhPSBQVF9MT0FEIHx8ICFwaGRyLVx1MDAzZXBfbWVtc3opXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaGRyLVx1MDAzZXBfdmFkZHIgJiM0MzsgcGhkci1cdTAwM2VwX2ZpbGVzeiBcdTAwM2UgZGVzYy1cdTAwM2VtZW1fc2l6ZSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7U2VnbWVudCBkYXRhIGV4Y2VlZHMgdGhlIHJlc2VydmVkIG1lbW9yeSBhcmVhIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBDaGVjayBpZiBmaXJtd2FyZSBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudCBmaWxlcyAqL1xuJiM0MztcdFx0aWYgKHBoZHItXHUwMDNlcF9vZmZzZXQgXHUwMDNlIGZ3LVx1MDAzZXNpemUgfHxcbiYjNDM7XHRcdCAgICBwaGRyLVx1MDAzZXBfb2Zmc2V0ICYjNDM7IHBoZHItXHUwMDNlcF9maWxlc3ogXHUwMDNlIGZ3LVx1MDAzZXNpemUpIHtcbiYjNDM7XHRcdFx0c3ByaW50ZihzZWdfbmFtZSAmIzQzOyBzdHJsZW4oc2VnX25hbWUpIC0gMywgXCYjMzQ7YiUwMmRcJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnNlZ19mdywgc2VnX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcnByb2MtXHUwMDNlZGV2LnBhcmVudCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtDb3VsZCBub3QgZmluZCBzcGxpdCBzZWdtZW50IGJpbmFyeTogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRzZWdfbmFtZSk7XG4mIzQzO1x0XHRcdFx0Z290byBmcmVlX21ldGFkYXRhO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBVc2UgdGhlIHZpcnR1YWwgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhc1xuJiM0MztcdFx0XHQgKiB0aGUgb2Zmc2V0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jcHlfdG9pbyhkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgcGhkci1cdTAwM2VwX3ZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBzZWdfZnctXHUwMDNlZGF0YSwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4mIzQzO1xuJiM0MztcdFx0XHRyZWxlYXNlX2Zpcm13YXJlKHNlZ19mdyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtZW1jcHlfdG9pbyhkZXNjLVx1MDAzZW1lbV9yZWdpb24gJiM0MzsgcGhkci1cdTAwM2VwX3ZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBmdy1cdTAwM2VkYXRhICYjNDM7IHBoZHItXHUwMDNlcF9vZmZzZXQsIHBoZHItXHUwMDNlcF9maWxlc3opO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX21ldGFkYXRhOlxuJiM0MztcdGtmcmVlKG1ldGFkYXRhKTtcbiYjNDM7cmVsZWFzZV9mdzpcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJwcm9jX29wcyBtMF9idHNzX29wcyA9IHtcbiYjNDM7XHQuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LFxuJiM0MztcdC5zdG9wID0gbTBfYnRzc19zdG9wLFxuJiM0MztcdC5sb2FkID0gbTBfYnRzc19sb2FkLFxuJiM0MztcdC5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9yZWxvYyA9IHJlcy5zdGFydDtcbiYjNDM7XHRkZXNjLVx1MDAzZW1lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShcdTAwMjZyZXMpO1xuJiM0MztcdGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiA9IGRldm1faW9yZW1hcChkZXYsIGRlc2MtXHUwMDNlbWVtX3BoeXMsIGRlc2MtXHUwMDNlbWVtX3NpemUpO1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2VtZW1fcmVnaW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7dW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uOiAlcFJcXG5cJiMzNDssIFx1MDAyNnJlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfcGlsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHQvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbTBfYnRzcyAqZGVzYztcbiYjNDM7XHRzdHJ1Y3QgY2xrICpscG9fY2xrO1xuJiM0MztcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O2Zpcm13YXJlLW5hbWVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2ZndfbmFtZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFwmIzM0O20wYnRzc1wmIzM0OywgXHUwMDI2bTBfYnRzc19vcHMsXG4mIzQzO1x0XHRcdFx0IGZ3X25hbWUsIHNpemVvZigqZGVzYykpO1xuJiM0MztcdGlmICghcnByb2MpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgcnByb2NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbiYjNDM7XHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbTBfYnRzc19hbGxvY19tZW1vcnlfcmVnaW9uKGRlc2MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRscG9fY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcJiMzNDtidHNzX2xwb19jbGtcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIobHBvX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHBvX2NsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlYnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBcJiMzNDtidHNzX3Jlc2V0XCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZXNjLVx1MDAzZWJ0c3NfcmVzZXQpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgYnRzc19yZXNldFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGRlYXNzZXJ0IHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cnByb2MtXHUwMDNlYXV0b19ib290ID0gZmFsc2U7XG4mIzQzO1x0cmV0ID0gZGV2bV9ycHJvY19hZGQoZGV2LCBycHJvYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsXCYjMzQ7IH0sXG4mIzQzO1x0eyB9LFxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtMF9idHNzX29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG0wX2J0c3NfcGlsX2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBtMF9idHNzX3BpbF9wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtxY29tLW0wLWJ0c3MtcGlsXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gbTBfYnRzc19vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtMF9idHNzX3BpbF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1F1YWxjb21tIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTg1OGQ3MWZmY2VmMzZjNmU3YzQ5MzliOGFlZWMwZjQ4YjdlYjhhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDE0OjI0OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWZkMzNmODUxODU4OGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbApAQCAtMCwwICYjNDM7MSw2MyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFF1YWxjb21tIElQUTUwMTggQmx1ZXRvb3RoCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEdlb3JnZSBNb3Vzc2FsZW0gJmx0O2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb20mZ3Q7CiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSBxY29tLGlwcTUwMTgtYnQKJiM0MzsKJiM0MzsgIGludGVycnVwdHM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgIEludGVycnVwdCBsaW5lIGZyb20gdGhlIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gdG8gdGhlIGhvc3QgcHJvY2Vzc29yCiYjNDM7ICAgICAgICAgIHRvIG5vdGlmeSBpdCBvZiBldmVudHMgc3VjaCBhcyByZQomIzQzOwomIzQzOyAgcWNvbSxpcGM6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUtYXJyYXkKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byBhIHN5c2NvbiBub2RlIHJlcHJlc2VudGluZyB0aGUgQVBDUyByZWdpc3RlcnMKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyBvZmZzZXQgdG8gdGhlIHJlZ2lzdGVyIHdpdGhpbiB0aGUgc3lzY29uCiYjNDM7ICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgdGhlIGlwYyBiaXQgd2l0aGluIHRoZSByZWdpc3RlcgomIzQzOyAgICBkZXNjcmlwdGlvbjogfAomIzQzOyAgICAgIFRoZXNlIGVudHJpZXMgc3BlY2lmeSB0aGUgb3V0Z29pbmcgSVBDIGJpdCB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHJlbW90ZQomIzQzOyAgICAgIE0wIEJUU1MgY29yZSBvZiBhIGhvc3QgZXZlbnQgb3IgZm9yIHNlbmRpbmcgYW4gQUNLIGlmIHRoZSByZW1vdGUgcHJvY2Vzc29yCiYjNDM7ICAgICAgZXhwZWN0cyBpdC4KJiM0MzsKJiM0MzsgIHFjb20scnByb2M6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgcmVtb3RlIHByb2Nlc3NvciBub2RlIHJlcHJlc2VudGluZyB0aGUgTTAgQlRTUyBjb3JlLgomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsgIC0gcWNvbSxpcGMKJiM0MzsgIC0gcWNvbSxycHJvYwomIzQzOwomIzQzO2FsbE9mOgomIzQzOyAgLSAkcmVmOiBibHVldG9vdGgtY29udHJvbGxlci55YW1sIwomIzQzOyAgLSAkcmVmOiBxY29tLGJsdWV0b290aC1jb21tb24ueWFtbAomIzQzOwomIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oJmd0OwomIzQzOwomIzQzOyAgICBibHVldG9vdGg6IGJsdWV0b290aCB7CiYjNDM7ICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgcWNvbSxpcGMgPSAmbHQ7JmFtcDthcGNzX2dsYiA4IDIzJmd0OzsKJiM0MzsgICAgICBpbnRlcnJ1cHRzID0gJmx0O0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HJmd0OzsKJiM0MzsKJiM0MzsgICAgICBxY29tLHJwcm9jID0gJmx0OyZhbXA7bTBfYnRzcyZndDs7CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG0wLWJ0c3MtcGlsLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG0wLWJ0c3MtcGlsLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM5N2JiNjgxNWQ3MTZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlcgomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBHZW9yZ2UgTW91c3NhbGVtICZsdDtnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIFNlY3VyZSBJbWFnZSBMb2FkZXIgbG9hZHMgZmlybXdhcmUgYW5kIHBvd2VycyB1cAomIzQzOyAgdGhlIE0wIEJUU1MgcmVtb3RlIHByb2Nlc3NvciBjb3JlIG9uIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIHFjb20saXBxNTAxOC1idHNzLXBpbAomIzQzOwomIzQzOyAgZmlybXdhcmUtbmFtZToKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IEZpcm13YXJlIG5hbWUgZm9yIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIGNvcmUKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyBsb3cgcG93ZXIgb3NjaWxsYXRvciBjbG9jawomIzQzOwomIzQzOyAgY2xvY2stbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfbHBvX2NsawomIzQzOwomIzQzOyAgbWVtb3J5LXJlZ2lvbjoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNlcnZlZCBtZW1vcnkgY2FydmVvdXQKJiM0MzsKJiM0MzsgIHJlc2V0czoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNldAomIzQzOwomIzQzOyAgcmVzZXQtbmFtZXM6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gY29uc3Q6IGJ0c3NfcmVzZXQKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSBmaXJtd2FyZS1uYW1lCiYjNDM7ICAtIGNsb2NrcwomIzQzOyAgLSBjbG9jay1uYW1lcwomIzQzOyAgLSByZXNldHMKJiM0MzsgIC0gcmVzZXQtbmFtZXMKJiM0MzsgIC0gbWVtb3J5LXJlZ2lvbgomIzQzOwomIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1pcHE1MDE4LmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9yZXNldC9xY29tLGdjYy1pcHE1MDE4LmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHJlbW90ZXByb2MgewomIzQzOyAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgIGZpcm13YXJlLW5hbWUgPSAmIzM0O3FjYS9idF9md19wYXRjaC5tYm4mIzM0OzsKJiM0MzsKJiM0MzsgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfTFBPX0NMSyZndDs7CiYjNDM7ICAgICAgY2xvY2stbmFtZXMgPSAmIzM0O2J0c3NfbHBvX2NsayYjMzQ7OwomIzQzOyAgICAgIHJlc2V0cyA9ICZsdDsmYW1wO2djYyBHQ0NfQlRTU19CQ1ImZ3Q7OwomIzQzOyAgICAgIHJlc2V0LW5hbWVzID0gJiMzNDtidHNzX3Jlc2V0JiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgbWVtb3J5LXJlZ2lvbiA9ICZsdDsmYW1wO2J0c3NfcmVnaW9uJmd0OzsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9pcHE1MDE4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpCmluZGV4IDZmODAwNGEyMmExZmZkLi40ZmRmMjBjODdiMGE5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpCkBAIC0xNyw2ICYjNDM7MTcsMTcgQEAgLyB7CiAJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MiZndDs7CiAJI3NpemUtY2VsbHMgPSAmbHQ7MiZndDs7CiAKJiM0MzsJYmx1ZXRvb3RoOiBibHVldG9vdGggewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDs7CiYjNDM7CiYjNDM7CQlxY29tLGlwYyA9ICZsdDsmYW1wO2FwY3NfZ2xiIDggMjMmZ3Q7OwomIzQzOwkJaW50ZXJydXB0cyA9ICZsdDtHSUNfU1BJIDE2MiBJUlFfVFlQRV9FREdFX1JJU0lORyZndDs7CiYjNDM7CiYjNDM7CQlxY29tLHJwcm9jID0gJmx0OyZhbXA7bTBfYnRzcyZndDs7CiYjNDM7CiYjNDM7CQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CX07CiYjNDM7CiAJY2xvY2tzIHsKIAkJZ2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsgewogCQkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtY2xvY2smIzM0OzsKQEAgLTEzMSwxMSAmIzQzOzE0MiwzMSBAQCBwc2NpIHsKIAkJbWV0aG9kID0gJiMzNDtzbWMmIzM0OzsKIAl9OwogCiYjNDM7CW0wX2J0c3M6IHJlbW90ZXByb2MgewomIzQzOwkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsJiMzNDs7CiYjNDM7CiYjNDM7CQlmaXJtd2FyZS1uYW1lID0gJiMzNDtxY2EvYnRfZndfcGF0Y2gubWJuJiMzNDs7CiYjNDM7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfTFBPX0NMSyZndDs7CiYjNDM7CQljbG9jay1uYW1lcyA9ICYjMzQ7YnRzc19scG9fY2xrJiMzNDs7CiYjNDM7CQlyZXNldHMgPSAmbHQ7JmFtcDtnY2MgR0NDX0JUU1NfQkNSJmd0OzsKJiM0MzsJCXJlc2V0LW5hbWVzID0gJiMzNDtidHNzX3Jlc2V0JiMzNDs7CiYjNDM7CiYjNDM7CQltZW1vcnktcmVnaW9uID0gJmx0OyZhbXA7YnRzc19yZWdpb24mZ3Q7OwomIzQzOwomIzQzOwkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwl9OwomIzQzOwogCXJlc2VydmVkLW1lbW9yeSB7CiAJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzImZ3Q7OwogCQkjc2l6ZS1jZWxscyA9ICZsdDsyJmd0OzsKIAkJcmFuZ2VzOwogCiYjNDM7CQlidHNzX3JlZ2lvbjogYmx1ZXRvb3RoQDcwMDAwMDAgewomIzQzOwkJCXJlZyA9ICZsdDsweDAgMHgwNzAwMDAwMCAweDAgMHg1ODAwMCZndDs7CiYjNDM7CQkJbm8tbWFwOwomIzQzOwkJfTsKJiM0MzsKIAkJYm9vdGxvYWRlckA0YTgwMDAwMCB7CiAJCQlyZWcgPSAmbHQ7MHgwIDB4NGE4MDAwMDAgMHgwIDB4MjAwMDAwJmd0OzsKIAkJCW5vLW1hcDsKQEAgLTY0Nyw3ICYjNDM7Njc4LDggQEAgd2F0Y2hkb2c6IHdhdGNoZG9nQGIwMTcwMDAgewogCiAJCWFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAgewogCQkJY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWFwY3MtYXBwcy1nbG9iYWwmIzM0OywKLQkJCQkgICAgICYjMzQ7cWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWwmIzM0OzsKJiM0MzsJCQkJICAgICAmIzM0O3Fjb20saXBxNjAxOC1hcGNzLWFwcHMtZ2xvYmFsJiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDtzeXNjb24mIzM0OzsKIAkJCXJlZyA9ICZsdDsweDBiMTExMDAwIDB4MTAwMCZndDs7CiAJCQkjY2xvY2stY2VsbHMgPSAmbHQ7MSZndDs7CiAJCQljbG9ja3MgPSAmbHQ7JmFtcDthNTNwbGwmZ3Q7LCAmbHQ7JmFtcDt4b19ib2FyZF9jbGsmZ3Q7LCAmbHQ7JmFtcDtnY2MgR1BMTDAmZ3Q7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggNGU4YzI0ZDc1N2U5YTQuLjZiOGJlZDZhNmZmZGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTQxMyw2ICYjNDM7NDEzLDE3IEBAIGNvbmZpZyBCVF9NVEtVQVJUCiAJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWVkaWFUZWsgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcwogCSAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLgogCiYjNDM7Y29uZmlnIEJUX1FDT01JUEMKJiM0MzsJdHJpc3RhdGUgJiMzNDtRdWFsY29tbSBJUFE1MDE4IElQQyBiYXNlZCBIQ0kgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBCVF9RQ0EKJiM0MzsJaGVscAomIzQzOwkgIFF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBkcml2ZXIuCiYjNDM7CSAgVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBicmlkZ2UgSENJIGRhdGEgb250byBzaGFyZWQgbWVtb3J5IGJldHdlZW4KJiM0MzsJICB0aGUgaG9zdCBhbmQgdGhlIE0wIEJUU1MgY29yZS4KJiM0MzsKJiM0MzsJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgSENJIG92ZXIgUXVhbGNvbW0gSVBDIGludG8gdGhlCiYjNDM7CSAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuCiYjNDM7CiBjb25maWcgQlRfUUNPTVNNRAogCXRyaXN0YXRlICYjMzQ7UXVhbGNvbW0gU01EIGJhc2VkIEhDSSBzdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIFJQTVNHIHx8IChDT01QSUxFX1RFU1QgJmFtcDsmYW1wOyBSUE1TRz1uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUgYi9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZQppbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCkBAIC0yMCw2ICYjNDM7MjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTCkJCSYjNDM7PSBidG1ydmwubwogb2JqLSQoQ09ORklHX0JUX01SVkxfU0RJTykJJiM0Mzs9IGJ0bXJ2bF9zZGlvLm8KIG9iai0kKENPTkZJR19CVF9NVEtTRElPKQkmIzQzOz0gYnRtdGtzZGlvLm8KIG9iai0kKENPTkZJR19CVF9NVEtVQVJUKQkmIzQzOz0gYnRtdGt1YXJ0Lm8KJiM0MztvYmotJChDT05GSUdfQlRfUUNPTUlQQykJJiM0Mzs9IGJ0cWNvbWlwYy5vCiBvYmotJChDT05GSUdfQlRfUUNPTVNNRCkJJiM0Mzs9IGJ0cWNvbXNtZC5vCiBvYmotJChDT05GSUdfQlRfQkNNKQkJJiM0Mzs9IGJ0YmNtLm8KIG9iai0kKENPTkZJR19CVF9SVEwpCQkmIzQzOz0gYnRydGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKaW5kZXggMDRlYmUyOTBiYzc4NGUuLmUxMzZlOTE5NzZjZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKQEAgLTM4MCw2ICYjNDM7MzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCWJyZWFrOwogCiAJY2FzZSBUTFZfVFlQRV9OVk06CiYjNDM7CQlpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmIChmd19zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCB0bHZfdHlwZV9oZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc5NCw2ICYjNDM7Nzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLAogCWVsc2UKIAkJcm9tX3ZlciA9ICgoc29jX3ZlciAmYW1wOyAweDAwMDAwZjAwKSAmZ3Q7Jmd0OyAweDA0KSB8IChzb2NfdmVyICZhbXA7IDB4MDAwMDAwMGYpOwogCiYjNDM7CWlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOCkKJiM0MzsJCWdvdG8gZG93bmxvYWRfbnZtOwomIzQzOwogCWlmIChzb2NfdHlwZSA9PSBRQ0FfV0NONjc1MCkKIAkJcWNhX3NlbmRfcGF0Y2hfY29uZmlnX2NtZChoZGV2KTsKIApAQCAtODgxLDYgJiM0Mzs4ODcsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJaWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKQogCQlxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCAmYW1wO2JvYXJkaWQpOwogCiYjNDM7ZG93bmxvYWRfbnZtOgogCS8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovCiAJY29uZmlnLnR5cGUgPSBUTFZfVFlQRV9OVk07CiAJaWYgKGZpcm13YXJlX25hbWUpIHsKQEAgLTkzOSw2ICYjNDM7OTQ2LDEwIEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSwKIAkJCXFjYV9nZXRfbnZtX25hbWVfYnlfYm9hcmQoY29uZmlnLmZ3bmFtZSwgc2l6ZW9mKGNvbmZpZy5md25hbWUpLAogCQkJCSAmIzM0O2htdG52JiMzNDssIHNvY190eXBlLCB2ZXIsIHJvbV92ZXIsIGJvYXJkaWQpOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFFDQV9JUFE1MDE4OgomIzQzOwkJCXNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSwKJiM0MzsJCQkJICYjMzQ7cWNhL21wbnYlMDJ4LmJpbiYjMzQ7LCByb21fdmVyKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSwKIAkJCQkgJiMzNDtxY2EvbnZtXyUwOHguYmluJiMzNDssIHNvY192ZXIpOwpAQCAtOTU4LDYgJiM0Mzs5NjksOSBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CWlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOCkKJiM0MzsJCW1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpOwomIzQzOwogCXN3aXRjaCAoc29jX3R5cGUpIHsKIAljYXNlIFFDQV9RQ0EyMDY2OgogCWNhc2UgUUNBX1FDQTYzOTA6CkBAIC05NjUsNiAmIzQzOzk3OSw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSwKIAljYXNlIFFDQV9XQ042NzUwOgogCWNhc2UgUUNBX1dDTjY4NTU6CiAJY2FzZSBRQ0FfV0NONzg1MDoKJiM0MzsJY2FzZSBRQ0FfSVBRNTAxODoKIAkJZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7CiAJCWlmIChlcnIgJmx0OyAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTEwMDEsNiAmIzQzOzEwMTYsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsCiAJY2FzZSBRQ0FfV0NONjc1MDoKIAljYXNlIFFDQV9XQ042ODU1OgogCWNhc2UgUUNBX1dDTjc4NTA6CiYjNDM7CWNhc2UgUUNBX0lQUTUwMTg6CiAJCS8qIGdldCBmdyBidWlsZCBpbmZvICovCiAJCWVyciA9IHFjYV9yZWFkX2Z3X2J1aWxkX2luZm8oaGRldik7CiAJCWlmIChlcnIgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmgKaW5kZXggOGYzYzFiMWM3N2IzZGUuLjM0M2NkNjJkMTEzNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmgKQEAgLTU0LDYgJiM0Mzs1NCw4IEBACiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX0lECQkweDEyMDAKICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfTUFTSwkJMHgwMDAwZmYwMAogCiYjNDM7I2RlZmluZSBOVk1fUkVBRFlfREVMQVlfTVMJCTE1MDAKJiM0MzsKIGVudW0gcWNhX2JhdWRyYXRlIHsKIAlRQ0FfQkFVRFJBVEVfMTE1MjAwCT0gMCwKIAlRQ0FfQkFVRFJBVEVfNTc2MDAsCkBAIC0xNTgsNiAmIzQzOzE2MCw3IEBAIGVudW0gcWNhX2J0c29jX3R5cGUgewogCVFDQV9XQ042NzUwLAogCVFDQV9XQ042ODU1LAogCVFDQV9XQ043ODUwLAomIzQzOwlRQ0FfSVBRNTAxOCwKIH07CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19CVF9RQ0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NjJhNzViNmM0YTkwYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jCkBAIC0wLDAgJiM0MzsxLDkzOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfaXJxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3Jlc2VydmVkX21lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVnbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlbW90ZXByb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2J0cWNhLmgmIzM0OwomIzQzOwomIzQzOy8qKiBNZXNzYWdlIGhlYWRlciBmb3JtYXQuCiYjNDM7ICoKJiM0MzsgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIEJpdFBvcyB8ICAgIDE1ICAgIHwgMTQgfCAxMyB8IDEyIHwgMTEgfCAxMCB8ICA5ICB8ICA4ICB8ICAgIDcgLSAwICAgICB8CiYjNDM7ICogICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiBGaWVsZCAgfCBsb25nX21zZyB8QUNLIHwgICAgICAgIFJGVSAgICAgICAgfCAgcGt0X3R5cGUgfCAgICBjbWQgICAgICAgfAomIzQzOyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoKJiM0MzsgKiAtIGxvbmdfbXNnICAgOiBJZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIHRoZQomIzQzOyAqICAgICAgICAgICAgICAgIElQQ19NU0dfUExEX1NaLiBUaGUgcGF5bG9hZCBpbnN0ZWFkIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUKJiM0MzsgKiAgICAgICAgICAgICAgICBsb25nIG1lc3NhZ2UgYnVmZmVyIGluIHRoZSBzaGFyZWQgQlRTUyBtZW1vcnkgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiAtIEFDSyAgICAgICA6IFNldCBpZiBzZW5kaW5nIEFDSyBpZiByZXF1aXJlZCBieSBzZW5kaW5nIGFja25vd2xlZGVnZW1lbnQKJiM0MzsgKiAgICAgICAgICAgICAgICB0byBzZW5kZXIgaS5lLiBzZW5kIGFuIGFjayBJUEMgaW50ZXJydXB0IGlmIHNldC4KJiM0MzsgKgomIzQzOyAqIC0gUkZVICAgICAgICA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgomIzQzOyAqCiYjNDM7ICogLSBwa3RfdHlwZSAgIDogSVBDIFBhY2tldCBUeXBlCiYjNDM7ICoKJiM0MzsgKiAtIGNtZCAgICAgICAgOiBDb250YWlucyB1bmlxdWUgY29tbWFuZCBJRAomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgSVBDX01TR19IRFJfU1oJCTQKJiM0MzsjZGVmaW5lIElQQ19NU0dfUExEX1NaCQk0MAomIzQzOyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWgkoSVBDX01TR19IRFJfU1ogJiM0MzsgSVBDX01TR19QTERfU1opCiYjNDM7CiYjNDM7LyogTWVzc2FnZSBIZWFkZXIgKi8KJiM0MzsjZGVmaW5lIElQQ19IRFJfTE9OR19NU0cJQklUKDE1KQomIzQzOyNkZWZpbmUgSVBDX0hEUl9SRVFfQUNLCQlCSVQoMTQpCiYjNDM7I2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0sJR0VOTUFTSyg5LCA4KQomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVAkwCiYjNDM7I2RlZmluZSAgSVBDX0hEUl9QS1RfVFlQRV9IQ0kJMQomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU8JMgomIzQzOyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVCTMKJiM0MzsjZGVmaW5lIElQQ19IRFJfQ01EX01BU0sJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgSVBDX0NNRF9TVE9QCQkxCiYjNDM7I2RlZmluZSBJUENfQ01EX1NXSVRDSF9UT19VQVJUCTIKJiM0MzsjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QCTMKJiM0MzsjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QCTQKJiM0MzsjZGVmaW5lIElQQ19DTURfU1RBUlQJCTUKJiM0MzsKJiM0MzsjZGVmaW5lIElQQ19UWF9RU0laRQkJMzIKJiM0MzsKJiM0MzsjZGVmaW5lCVRPX0FQUFNfQUREUihhKQkJKGRlc2MtJmd0O21lbV9yZWdpb24gJiM0MzsgKGludCkodWludHB0cl90KWEpCiYjNDM7I2RlZmluZQlUT19CVF9BRERSKGEpCQkoYSAtIGRlc2MtJmd0O21lbV9yZWdpb24pCiYjNDM7I2RlZmluZSBJUENfTEJVRl9TWih3LCB4LCB5LCB6KQkoKChUT19CVF9BRERSKCh2b2lkICopdykgJiM0Mzsgdy0mZ3Q7eCkgLSB3LSZndDt5KSAvIHctJmd0O3opCiYjNDM7CiYjNDM7I2RlZmluZQlHRVRfTk9fT0ZfQkxPQ0tTKGEsIGIpICgoYSAmIzQzOyBiIC0gMSkgLyBiKQomIzQzOwomIzQzOyNkZWZpbmUgR0VUX1JYX0lOREVYX0ZST01fQlVGKHgsIHkpCSgoeCAtIGRlc2MtJmd0O3J4X2N0eHQtJmd0O2xyaW5nX2J1ZikgLyB5KQomIzQzOwomIzQzOyNkZWZpbmUgR0VUX1RYX0lOREVYX0ZST01fQlVGKHgsIHkpCSgoeCAtIGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xyaW5nX2J1ZikgLyB5KQomIzQzOwomIzQzOyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeikJCVwKJiM0MzsJKChidWYgJiM0MzsgbGVuKSAmZ3Q7IChkZXNjLSZndDtyeF9jdHh0LSZndDtscmluZ19idWYgJiM0MzsJXAomIzQzOwkoc3ogKiBkZXNjLSZndDtyeF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQpKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVMJNTAKJiM0MzsKJiM0MzsjZGVmaW5lIEJUU1NfUEFTX0lECTB4YwomIzQzOwomIzQzO3N0cnVjdCBsb25nX21zZ19pbmZvIHsKJiM0MzsJX19sZTE2IHNtc2dfZnJlZV9jbnQ7CiYjNDM7CV9fbGUxNiBsbXNnX2ZyZWVfY250OwomIzQzOwl1OCByaWR4OwomIzQzOwl1OCB3aWR4OwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IGlwY19hdXhfcHRyIHsKJiM0MzsJX19sZTMyIGxlbjsKJiM0MzsJX19sZTMyIGJ1ZjsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCByaW5nX2J1ZmZlciB7CiYjNDM7CV9fbGUxNiBtc2dfaGRyOwomIzQzOwlfX2xlMTYgbGVuOwomIzQzOwl1bmlvbiB7CiYjNDM7CQl1OCBzbXNnX2RhdGFbSVBDX01TR19QTERfU1pdOwomIzQzOwkJX19sZTMyIGxtc2dfZGF0YTsKJiM0MzsJfSBwYXlsb2FkOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gewomIzQzOwlfX2xlMzIgcmJ1ZjsKJiM0MzsJdTggcmluZ19idWZfY250OwomIzQzOwl1OCByaWR4OwomIzQzOwl1OCB3aWR4OwomIzQzOwl1OCB0aWR4OwomIzQzOwlfX2xlMzIgbmV4dDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBjb250ZXh0X2luZm8gewomIzQzOwlfX2xlMTYgdG90YWxfc2l6ZTsKJiM0MzsJdTggbG1zZ19idWZfY250OwomIzQzOwl1OCBzbXNnX2J1Zl9jbnQ7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvOwomIzQzOwlfX2xlMzIgc3JpbmdfYnVmOwomIzQzOwlfX2xlMzIgbHJpbmdfYnVmOwomIzQzOwlfX2xlMzIgcmVzZXJ2ZWQ7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKJiM0MztzdHJ1Y3QgcWNvbV9idHNzIHsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jOwomIzQzOwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKJiM0MzsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwl1MzIgYml0OwomIzQzOwlpbnQgaXJxOwomIzQzOwomIzQzOwl2b2lkICptZW1fcmVnaW9uOwomIzQzOwlwaHlzX2FkZHJfdCBtZW1fcGh5czsKJiM0MzsJcGh5c19hZGRyX3QgbWVtX3JlbG9jOwomIzQzOwlzaXplX3QgbWVtX3NpemU7CiYjNDM7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgdHhfcTsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CiYjNDM7CXN0cnVjdCBjb250ZXh0X2luZm8gKnR4X2N0eHQ7CiYjNDM7CXN0cnVjdCBjb250ZXh0X2luZm8gKnJ4X2N0eHQ7CiYjNDM7CXN0cnVjdCBsb25nX21zZ19pbmZvIGxtc2dfY3R4dDsKJiM0MzsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKmJ0c3NfYWxsb2NfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbGVuLAomIzQzOwkJCSAgICAgc3RydWN0IGlwY19hdXhfcHRyICphdXhfcHRyLCBib29sICppc19sYnVmX2Z1bGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLSZndDtkZXY7CiYjNDM7CXU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDsKJiM0MzsJdm9pZCAqcmV0X3B0cjsKJiM0MzsJdTMyIGxzejsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xyaW5nX2J1ZiA9PSAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtubyBsb25nIG1lc3NhZ2UgYnVmZmVyIGluaXRpYWxpemVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsc3ogPSBJUENfTEJVRl9TWihkZXNjLSZndDt0eF9jdHh0LCB0b3RhbF9zaXplLCBscmluZ19idWYsIGxtc2dfYnVmX2NudCk7CiYjNDM7CWJsa3MgPSBHRVRfTk9fT0ZfQkxPQ0tTKGxlbiwgbHN6KTsKJiM0MzsKJiM0MzsJaWYgKCFkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCB8fAomIzQzOwkJCShibGtzICZndDsgZGVzYy0mZ3Q7bG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiYjNDM7CiYjNDM7CWlkeCA9IGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4OwomIzQzOwomIzQzOwlpZiAoKGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICZndDsgZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250KSB7CiYjNDM7CQlibGtzX2NvbnN1bWVkID0gZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250IC0gaWR4OwomIzQzOwkJYXV4X3B0ci0mZ3Q7bGVuID0gbGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opOwomIzQzOwkJYXV4X3B0ci0mZ3Q7YnVmID0gZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bHJpbmdfYnVmOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ID0gKGRlc2MtJmd0O2xtc2dfY3R4dC53aWR4ICYjNDM7IGJsa3MpICUKJiM0MzsJCWRlc2MtJmd0O3R4X2N0eHQtJmd0O2xtc2dfYnVmX2NudDsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7bG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrczsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O2xtc2dfY3R4dC5sbXNnX2ZyZWVfY250ICZsdDs9CiYjNDM7CQkJKChkZXNjLSZndDt0eF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKQomIzQzOwkJKmlzX2xidWZfZnVsbCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bHJpbmdfYnVmKSAmIzQzOyAoaWR4ICogbHN6KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldF9wdHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqYnRzc19nZXRfdHhfcmJ1ZihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLAomIzQzOwkJCQkJCSBib29sICppc19zYnVmX2Z1bGwpCiYjNDM7ewomIzQzOwl1OCBpZHg7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsKJiM0MzsJZm9yIChyaW5mbyA9ICZhbXA7KGRlc2MtJmd0O3R4X2N0eHQtJmd0O3NyaW5nX2J1Zl9pbmZvKTsJcmluZm8gIT0gTlVMTDsKJiM0MzsJCXJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tJmd0O25leHQpKSB7CiYjNDM7CQlpZHggPSAocmluZm8tJmd0O3dpZHggJiM0MzsgMSkgJSAoZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7c21zZ19idWZfY250KTsKJiM0MzsKJiM0MzsJCWlmIChpZHggIT0gcmluZm8tJmd0O3RpZHgpIHsKJiM0MzsJCQlkZXNjLSZndDtsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tOwomIzQzOwomIzQzOwkJCWlmIChkZXNjLSZndDtsbXNnX2N0eHQuc21zZ19mcmVlX2NudCAmbHQ7PQomIzQzOwkJCQkoKGRlc2MtJmd0O3R4X2N0eHQtJmd0O3Ntc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpCiYjNDM7CQkJCSppc19zYnVmX2Z1bGwgPSB0cnVlOwomIzQzOwomIzQzOwkJCXJldHVybiByaW5mbzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX3NlbmQoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTE2IG1zZ19oZHIsCiYjNDM7CQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRlc2MtJmd0O2hkZXY7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjsKJiM0MzsJYm9vbCBpc19sYnVmX2Z1bGwgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTsKJiM0MzsJdTE2IGhkciA9IG1zZ19oZHI7CiYjNDM7CXZvaWQgKnB0cl9idWY7CiYjNDM7CXUzMiBsZW47CiYjNDM7CiYjNDM7CS8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCYjMzk7cyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovCiYjNDM7CWxlbiA9IHNrYi0mZ3Q7bGVuICYjNDM7IDE7CiYjNDM7CW1lbXNldCgmYW1wO2F1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTsKJiM0MzsKJiM0MzsJaWYgKGxlbiAmZ3Q7IElQQ19NU0dfUExEX1NaKSB7CiYjNDM7CQloZHIgfD0gSVBDX0hEUl9MT05HX01TRzsKJiM0MzsKJiM0MzsJCXB0cl9idWYgPSBidHNzX2FsbG9jX2xtc2coZGVzYywgbGVuLAomIzQzOwkJCQkJICAmYW1wO2F1eF9wdHIsICZhbXA7aXNfbGJ1Zl9mdWxsKTsKJiM0MzsJCWlmIChJU19FUlIocHRyX2J1ZikpIHsKJiM0MzsJCQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7bG9uZyBtc2cgYnVmIGZ1bGwmIzM0Oyk7CiYjNDM7CQkJaGRldi0mZ3Q7c3RhdC5lcnJfdHgmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHB0cl9idWYpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCAmYW1wO2lzX3NidWZfZnVsbCk7CiYjNDM7CWlmIChJU19FUlIocmluZm8pKSB7CiYjNDM7CQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7c2hvcnQgbXNnIGJ1ZiBmdWxsJiMzNDspOwomIzQzOwkJaGRldi0mZ3Q7c3RhdC5lcnJfdHgmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmluZm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJidWYgPSAmYW1wOygoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpKVtyaW5mby0mZ3Q7d2lkeF07CiYjNDM7CiYjNDM7CWlmIChsZW4gJmd0OyBJUENfTVNHX1BMRF9TWikKJiM0MzsJCXJidWYtJmd0O3BheWxvYWQubG1zZ19kYXRhID0gY3B1X3RvX2xlMzIoVE9fQlRfQUREUihwdHJfYnVmKSk7CiYjNDM7CWVsc2UKJiM0MzsJCXB0cl9idWYgPSByYnVmLSZndDtwYXlsb2FkLnNtc2dfZGF0YTsKJiM0MzsKJiM0MzsJLyogaWYgaXQmIzM5O3MgYSBzaG9ydCBtZXNzYWdlLCB0aGUgYXV4IGxlbiBhbmQgYnVmIGFyZSBOVUxMICovCiYjNDM7CW1lbWNweV90b2lvKHB0cl9idWYsICZhbXA7aGNpX3NrYl9wa3RfdHlwZShza2IpLCAxKTsKJiM0MzsJbWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiAmIzQzOyAxLCBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuIC0gYXV4X3B0ci5sZW4pOwomIzQzOwlpZiAoYXV4X3B0ci5idWYpIHsKJiM0MzsJCW1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksCiYjNDM7CQkJICAgIChza2ItJmd0O2RhdGEgJiM0MzsgKHNrYi0mZ3Q7bGVuIC0gYXV4X3B0ci5sZW4pKSwgYXV4X3B0ci5sZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19zYnVmX2Z1bGwgfHwgaXNfbGJ1Zl9mdWxsKQomIzQzOwkJaGRyIHw9IElQQ19IRFJfUkVRX0FDSzsKJiM0MzsKJiM0MzsJcmJ1Zi0mZ3Q7bXNnX2hkciA9IGNwdV90b19sZTE2KGhkcik7CiYjNDM7CXJidWYtJmd0O2xlbiA9IGNwdV90b19sZTE2KGxlbik7CiYjNDM7CiYjNDM7CXJpbmZvLSZndDt3aWR4ID0gKHJpbmZvLSZndDt3aWR4ICYjNDM7IDEpICUgZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7c21zZ19idWZfY250OwomIzQzOwomIzQzOwlyZWdtYXBfc2V0X2JpdHMoZGVzYy0mZ3Q7cmVnbWFwLCBkZXNjLSZndDtvZmZzZXQsIEJJVChkZXNjLSZndDtiaXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTE2IGhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO2Rlc2MtJmd0O3R4X3EpKSkgewomIzQzOwkJaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTsKJiM0MzsKJiM0MzsJCXJldCA9IGJ0c3Nfc2VuZChkZXNjLCBoZHIsIHNrYik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UmIzM0Oyk7CiYjNDM7CQkJc2tiX3F1ZXVlX2hlYWQoJmFtcDtkZXNjLSZndDt0eF9xLCBza2IpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLSZndDtoZGV2LCBza2IpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRzc19mcmVlX2xtc2coc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTMyIGxtc2csIHUxNiBsZW4pCiYjNDM7ewomIzQzOwl1OCBpZHg7CiYjNDM7CXU4IGJsa3M7CiYjNDM7CXUzMiBsc3ogPSBJUENfTEJVRl9TWihkZXNjLSZndDt0eF9jdHh0LCB0b3RhbF9zaXplLCBscmluZ19idWYsCiYjNDM7CQkJCSAgIGxtc2dfYnVmX2NudCk7CiYjNDM7CiYjNDM7CWlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opOwomIzQzOwomIzQzOwlpZiAoaWR4ICE9IGRlc2MtJmd0O2xtc2dfY3R4dC5yaWR4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2xtc2dfY3R4dC5yaWR4ICA9IChkZXNjLSZndDtsbXNnX2N0eHQucmlkeCAgJiM0MzsgYmxrcykgJQomIzQzOwkJZGVzYy0mZ3Q7dHhfY3R4dC0mZ3Q7bG1zZ19idWZfY250OwomIzQzOwomIzQzOwlkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCAmIzQzOz0gYmxrczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IHJpbmdfYnVmZmVyICpyYnVmOwomIzQzOwomIzQzOwlyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIocmluZm8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmluZm8pOwomIzQzOwomIzQzOwlyYnVmID0gJmFtcDsoKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpW3JpbmZvLSZndDt3aWR4XTsKJiM0MzsJcmJ1Zi0mZ3Q7bXNnX2hkciA9IGNwdV90b19sZTE2KG1zZ19oZHIpOwomIzQzOwlyYnVmLSZndDtsZW4gPSAwOwomIzQzOwomIzQzOwlyaW5mby0mZ3Q7d2lkeCA9IChyaW5mby0mZ3Q7d2lkeCAmIzQzOyAxKSAlIGRlc2MtJmd0O3R4X2N0eHQtJmd0O3Ntc2dfYnVmX2NudDsKJiM0MzsKJiM0MzsJcmVnbWFwX3NldF9iaXRzKGRlc2MtJmd0O3JlZ21hcCwgZGVzYy0mZ3Q7b2Zmc2V0LCBCSVQoZGVzYy0mZ3Q7Yml0KSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHNzX3JlY3ZfY3VzdF9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1OCBjbWQpCiYjNDM7ewomIzQzOwl1MTYgbXNnX2hkciA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1zZ19oZHIgfD0gY21kOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIElQQ19DTURfU1RPUDoKJiM0MzsJCWJ0X2Rldl9pbmZvKGRlc2MtJmd0O2hkZXYsICYjMzQ7QlRTUyBzdG9wcGVkLCBncmFjZWZ1bGx5IHN0b3BwaW5nIEFQU1MgSVBDJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSVBDX0NNRF9TVEFSVDoKJiM0MzsJCWRlc2MtJmd0O3R4X2N0eHQgPSAoc3RydWN0IGNvbnRleHRfaW5mbyAqKSgodm9pZCAqKWRlc2MtJmd0O3J4X2N0eHQgJiM0MzsKJiM0MzsJCQkJbGUxNl90b19jcHUoZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7dG90YWxfc2l6ZSkpOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LndpZHggPSAwOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnJpZHggPSAwOwomIzQzOwkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgPSBkZXNjLSZndDt0eF9jdHh0LSZndDtzbXNnX2J1Zl9jbnQ7CiYjNDM7CQlkZXNjLSZndDtsbXNnX2N0eHQubG1zZ19mcmVlX2NudCA9IGRlc2MtJmd0O3R4X2N0eHQtJmd0O2xtc2dfYnVmX2NudDsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnVubmluZywgdHJ1ZSk7CiYjNDM7CQl3YWtlX3VwKCZhbXA7ZGVzYy0mZ3Q7d2FpdF9xKTsKJiM0MzsKJiM0MzsJCWJ0X2Rldl9pbmZvKGRlc2MtJmd0O2hkZXYsICYjMzQ7QlRTUyBzdGFydGVkLCBpbml0aWFsaXppbmcgQVBTUyBCVCBJUEMmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlidF9kZXZfZXJyKGRlc2MtJmd0O2hkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgQ01EIElEOiAldSYjMzQ7LCBjbWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpKSkgewomIzQzOwkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBubyBtZXNzYWdlIHNlbnQmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJV1JJVEVfT05DRShkZXNjLSZndDtydW5uaW5nLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBzZW5kIGNvbnRyb2wgbWVzc2FnZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBwa3RfbGVuOwomIzQzOwomIzQzOwlpZiAobGVuICZsdDsgMSkKJiM0MzsJCXJldHVybiAtRVBST1RPOwomIzQzOwomIzQzOwlwa3RfdHlwZSA9IGRhdGFbMF07CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0X3R5cGUpIHsKJiM0MzsJY2FzZSBIQ0lfRVZFTlRfUEtUOgomIzQzOwl7CiYjNDM7CQlpZiAobGVuICZsdDsgSENJX0VWRU5UX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9ldmVudF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKShkYXRhICYjNDM7IDEpOwomIzQzOwomIzQzOwkJcGt0X2xlbiA9IEhDSV9FVkVOVF9IRFJfU0laRSAmIzQzOyBoZHItJmd0O3BsZW47CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEhDSV9DT01NQU5EX1BLVDogewomIzQzOwkJaWYgKGxlbiAmbHQ7IEhDSV9DT01NQU5EX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9jb21tYW5kX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKikoZGF0YSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCXBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItJmd0O3BsZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CiYjNDM7CXsKJiM0MzsJCWlmIChsZW4gJmx0OyBIQ0lfQUNMX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gSENJX0FDTF9IRFJfU0laRSAmIzQzOyBsZTE2X3RvX2NwdShoZHItJmd0O2RsZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6CiYjNDM7CXsKJiM0MzsJCWlmIChsZW4gJmx0OyBIQ0lfU0NPX0hEUl9TSVpFKQomIzQzOwkJCXJldHVybiAtRUlMU0VROwomIzQzOwkJc3RydWN0IGhjaV9zY29faGRyICpoZHIgPSAoc3RydWN0IGhjaV9zY29faGRyICopKGRhdGEgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gSENJX1NDT19IRFJfU0laRSAmIzQzOyBoZHItJmd0O2RsZW47CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FUFJPVE87CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBrdF9sZW4gJmd0OyBsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc2tiID0gYnRfc2tiX2FsbG9jKHBrdF9sZW4sIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJZGVzYy0mZ3Q7aGRldi0mZ3Q7c3RhdC5lcnJfcngmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSAodm9pZCAqKWRlc2MtJmd0O2hkZXY7CiYjNDM7CWhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlOwomIzQzOwlza2JfcHV0X2RhdGEoc2tiLCBkYXRhICYjNDM7IDEsIHBrdF9sZW4pOwomIzQzOwomIzQzOwloY2lfcmVjdl9mcmFtZShkZXNjLSZndDtoZGV2LCBza2IpOwomIzQzOwlkZXNjLSZndDtoZGV2LSZndDtzdGF0LmJ5dGVfcnggJiM0Mzs9IHBrdF9sZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBidHNzX3Byb2Nlc3Nfcngoc3RydWN0IHFjb21fYnRzcyAqZGVzYywKJiM0MzsJCQkJICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sCiYjNDM7CQkJCSAgYm9vbCAqYWNrLCB1OCAqcnhfY291bnQpCiYjNDM7ewomIzQzOwl1OCByaWR4LCBsYnVmX2lkeCwgYmxrc19jb25zdW1lZCwgcGt0X3R5cGUsIGNtZDsKJiM0MzsJc3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjsKJiM0MzsJdWludDhfdCAqcnhidWYgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBjaGFyICpidWY7CiYjNDM7CXUzMiBsc3o7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJpZHggPSByaW5mby0mZ3Q7cmlkeDsKJiM0MzsKJiM0MzsJd2hpbGUgKHJpZHggIT0gcmluZm8tJmd0O3dpZHgpIHsKJiM0MzsJCW1lbXNldCgmYW1wO2F1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTsKJiM0MzsKJiM0MzsJCXJidWYgPSAmYW1wOygoc3RydWN0IHJpbmdfYnVmZmVyICopKFRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1ZikpKVtyaWR4XTsKJiM0MzsKJiM0MzsJCWlmIChyYnVmLSZndDttc2dfaGRyICZhbXA7IElQQ19IRFJfTE9OR19NU0cpIHsKJiM0MzsJCQlyeGJ1ZiA9IFRPX0FQUFNfQUREUihyYnVmLSZndDtwYXlsb2FkLmxtc2dfZGF0YSk7CiYjNDM7CQkJbHN6ID0gSVBDX0xCVUZfU1ooZGVzYy0mZ3Q7cnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLAomIzQzOwkJCQkgICBsbXNnX2J1Zl9jbnQpOwomIzQzOwomIzQzOwkJCWlmIChJU19SWF9NRU1fTk9OX0NPTlRJR0lPVVMocmJ1Zi0mZ3Q7cGF5bG9hZC5sbXNnX2RhdGEsCiYjNDM7CQkJCQkJICAgICByYnVmLSZndDtsZW4sIGxzeikpIHsKJiM0MzsJCQkJbGJ1Zl9pZHggPSBHRVRfUlhfSU5ERVhfRlJPTV9CVUYoCiYjNDM7CQkJCQkJcmJ1Zi0mZ3Q7cGF5bG9hZC5sbXNnX2RhdGEsIGxzeik7CiYjNDM7CiYjNDM7CQkJCWJsa3NfY29uc3VtZWQgPSBkZXNjLSZndDtyeF9jdHh0LSZndDtsbXNnX2J1Zl9jbnQgLQomIzQzOwkJCQkJbGJ1Zl9pZHg7CiYjNDM7CQkJCWF1eF9wdHIubGVuID0gcmJ1Zi0mZ3Q7bGVuIC0gKGJsa3NfY29uc3VtZWQgKiBsc3opOwomIzQzOwkJCQlhdXhfcHRyLmJ1ZiA9IGRlc2MtJmd0O3J4X2N0eHQtJmd0O2xyaW5nX2J1ZjsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJ4YnVmID0gcmJ1Zi0mZ3Q7cGF5bG9hZC5zbXNnX2RhdGE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkqYWNrID0gKHJidWYtJmd0O21zZ19oZHIgJmFtcDsgSVBDX0hEUl9SRVFfQUNLKTsKJiM0MzsKJiM0MzsJCXBrdF90eXBlID0gRklFTERfR0VUKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgcmJ1Zi0mZ3Q7bXNnX2hkcik7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHBrdF90eXBlKSB7CiYjNDM7CQljYXNlIElQQ19IRFJfUEtUX1RZUEVfSENJOgomIzQzOwkJCWJ1ZiA9IGttYWxsb2MocmJ1Zi0mZ3Q7bGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJCQlpZiAoIWJ1ZikgewomIzQzOwkJCQlyaW5mby0mZ3Q7cmlkeCA9IHJpZHg7CiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQltZW1jcHlfZnJvbWlvKGJ1ZiwgcnhidWYsIHJidWYtJmd0O2xlbiAtIGF1eF9wdHIubGVuKTsKJiM0MzsKJiM0MzsJCQlpZiAoYXV4X3B0ci5idWYpCiYjNDM7CQkJCW1lbWNweV9mcm9taW8oYnVmICYjNDM7IChyYnVmLSZndDtsZW4gLSBhdXhfcHRyLmxlbiksCiYjNDM7CQkJCQkgICAgICBUT19BUFBTX0FERFIoYXV4X3B0ci5idWYpLCBhdXhfcHRyLmxlbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtJmd0O2xlbik7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJYnRfZGV2X2VycihkZXNjLSZndDtoZGV2LCAmIzM0O0ZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWQmIzM0OywgcmV0KTsKJiM0MzsJCQlrZnJlZShidWYpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBJUENfSERSX1BLVF9UWVBFX0NVU1Q6CiYjNDM7CQkJY21kID0gRklFTERfR0VUKElQQ19IRFJfQ01EX01BU0ssIHJidWYtJmd0O21zZ19oZHIpOwomIzQzOwkJCWJ0c3NfcmVjdl9jdXN0X2ZyYW1lKGRlc2MsIGNtZCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmlkeCA9IChyaWR4ICYjNDM7IDEpICUgcmluZm8tJmd0O3JpbmdfYnVmX2NudDsKJiM0MzsKJiM0MzsJCWlmIChyeF9jb3VudCkKJiM0MzsJCQkoKnJ4X2NvdW50KSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyaW5mby0mZ3Q7cmlkeCA9IHJpZHg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3NfcHJvY2Vzc19hY2soc3RydWN0IHFjb21fYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJc3RydWN0IHJpbmdfYnVmZmVyICpyYnVmOwomIzQzOwl1OCB0aWR4OwomIzQzOwomIzQzOwlmb3IgKHJpbmZvID0gJmFtcDtkZXNjLSZndDt0eF9jdHh0LSZndDtzcmluZ19idWZfaW5mbzsgcmluZm8gIT0gTlVMTDsKJiM0MzsJCXJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tJmd0O25leHQpKSB7CiYjNDM7CQl0aWR4ID0gcmluZm8tJmd0O3RpZHg7CiYjNDM7CQlyYnVmID0gKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby0mZ3Q7cmJ1Zik7CiYjNDM7CiYjNDM7CQl3aGlsZSAodGlkeCAhPSByaW5mby0mZ3Q7cmlkeCkgewomIzQzOwkJCWlmIChyYnVmW3RpZHhdLm1zZ19oZHIgJmFtcDsgSVBDX0hEUl9MT05HX01TRykgewomIzQzOwkJCQlidHNzX2ZyZWVfbG1zZyhkZXNjLAomIzQzOwkJCQkJICAgICAgIHJidWZbdGlkeF0ucGF5bG9hZC5sbXNnX2RhdGEsCiYjNDM7CQkJCQkgICAgICAgcmJ1Zlt0aWR4XS5sZW4pOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQl0aWR4ID0gKHRpZHggJiM0MzsgMSkgJSBkZXNjLSZndDt0eF9jdHh0LSZndDtzbXNnX2J1Zl9jbnQ7CiYjNDM7CQkJZGVzYy0mZ3Q7bG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmluZm8tJmd0O3RpZHggPSB0aWR4OwomIzQzOwomIzQzOwkJYnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFjb21fYnRzcywgd29yayk7CiYjNDM7CXN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbzsKJiM0MzsJYm9vbCBhY2sgPSBmYWxzZTsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRlc2MtJmd0O3Jwcm9jLSZndDtzdGF0ZSAhPSBSUFJPQ19SVU5OSU5HKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtkZXNjLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy0mZ3Q7cnVubmluZykpKSB7CiYjNDM7CQkvLyBGVyBzZXRzIG9mZnNldCBvZiBSWCBjb250ZXh0IGluZm8gYXQgc3RhcnQgb2YgbWVtb3J5IHJlZ2lvbiB1cG9uIGJvb3QKJiM0MzsJCW9mZnNldCA9IHJlYWRsKGRlc2MtJmd0O21lbV9yZWdpb24pOwomIzQzOwkJZGV2X2RiZyhkZXNjLSZndDtkZXYsICYjMzQ7b2Zmc2V0IGFmdGVyIE0wIGJvb3Q6IDB4JTA4eFxuJiMzNDssIG9mZnNldCk7CiYjNDM7CQlkZXNjLSZndDtyeF9jdHh0ID0gKHN0cnVjdCBjb250ZXh0X2luZm8gKikoZGVzYy0mZ3Q7bWVtX3JlZ2lvbiAmIzQzOyBvZmZzZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYnRzc19wcm9jZXNzX2FjayhkZXNjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHJpbmZvID0gJmFtcDsoZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7c3JpbmdfYnVmX2luZm8pOwomIzQzOwkgICAgIHJpbmZvICE9IE5VTEw7CiYjNDM7CSAgICAgcmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby0mZ3Q7bmV4dCkpIHsKJiM0MzsJCXJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgJmFtcDthY2ssCiYjNDM7CQkJCSAgICAgICZhbXA7ZGVzYy0mZ3Q7cnhfY3R4dC0mZ3Q7c21zZ19idWZfY250KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlidF9kZXZfZXJyKGRlc2MtJmd0O2hkZXYsICYjMzQ7RmFpbGVkIHRvIHByb2Nlc3MgcGVlciBtc2dzOiAlZCYjMzQ7LCByZXQpOwomIzQzOwkJCWdvdG8gc3Bpbl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFjaykKJiM0MzsJCXJlZ21hcF9zZXRfYml0cyhkZXNjLSZndDtyZWdtYXAsIGRlc2MtJmd0O29mZnNldCwgQklUKGRlc2MtJmd0O2JpdCkpOwomIzQzOwomIzQzO3NwaW5fdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO2Rlc2MtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgYnRzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGRhdGE7CiYjNDM7CiYjNDM7CXF1ZXVlX3dvcmsoZGVzYy0mZ3Q7d3EsICZhbXA7ZGVzYy0mZ3Q7d29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHNzX2luaXQoc3RydWN0IHFjb21fYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2Rlc2MtJmd0O3dhaXRfcSk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7ZGVzYy0mZ3Q7bG9jayk7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtkZXNjLSZndDt0eF9xKTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgmIzM0O2J0c3Nfd3EmIzM0Oyk7CiYjNDM7CWlmICghZGVzYy0mZ3Q7d3EpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7ZGVzYy0mZ3Q7d29yaywgYnRzc193b3JrZXIpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZGVzYy0mZ3Q7aXJxLCBOVUxMLCBidHNzX2lycV9oYW5kbGVyLAomIzQzOwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCwKJiM0MzsJCQkJCSYjMzQ7YnRzc19pcnEmIzM0OywgZGVzYyk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXG4mIzM0OywKJiM0MzsJCQlkZXNjLSZndDtpcnEsIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwl1OCBwa3RfdHlwZSA9IGhjaV9za2JfcGt0X3R5cGUoc2tiKTsKJiM0MzsKJiM0MzsJaGRldi0mZ3Q7c3RhdC5ieXRlX3R4ICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsJc3dpdGNoIChwa3RfdHlwZSkgewomIzQzOwljYXNlIEhDSV9DT01NQU5EX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuY21kX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuYWNsX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhDSV9TQ09EQVRBX1BLVDoKJiM0MzsJCWhkZXYtJmd0O3N0YXQuc2NvX3R4JiM0MzsmIzQzOzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0c3NfaW5pdChkZXNjKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYnRfZGV2X2VycihoZGV2LCAmIzM0O0ZhaWxlZCBpbml0aWFsaXppbmcgQlRTUzogJWQmIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogd2FpdCAyIHNlY29uZHMgZm9yIGZpbGVzeXN0ZW0gdG8gYmVjb21lIGF2YWlsYWJsZSAqLwomIzQzOwltc2xlZXAoMjAwMCk7CiYjNDM7CiYjNDM7CS8qIEJvb3QgTTAgZmlybXdhcmUgKi8KJiM0MzsJcmV0ID0gcnByb2NfYm9vdChkZXNjLSZndDtycHJvYyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTsKJiM0MzsJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRlc2MtJmd0O3dhaXRfcSwgUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpLAomIzQzOwkJCQkgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiYjNDM7CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQlidF9kZXZfZXJyKGhkZXYsICYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBCVFNTIHN0YXJ0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKJiM0MzsKJiM0MzsJcnByb2Nfc2h1dGRvd24oZGVzYy0mZ3Q7cnByb2MpOwomIzQzOwltc2xlZXAoUE9XRVJfQ09OVFJPTF9ERUxBWV9NUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnVubmluZywgZmFsc2UpOwomIzQzOwlpZiAoZGVzYy0mZ3Q7d3EgIT0gTlVMTCkgewomIzQzOwkJZGlzYWJsZV9pcnEoZGVzYy0mZ3Q7aXJxKTsKJiM0MzsJCWZsdXNoX3dvcmtxdWV1ZShkZXNjLSZndDt3cSk7CiYjNDM7CQlkZXZtX2ZyZWVfaXJxKGRlc2MtJmd0O2RldiwgZGVzYy0mZ3Q7aXJxLCBkZXNjKTsKJiM0MzsJCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rlc2MtJmd0O3R4X3EpOwomIzQzOwkJZGVzdHJveV93b3JrcXVldWUoZGVzYy0mZ3Q7d3EpOwomIzQzOwkJZGVzYy0mZ3Q7d3EgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBjb250cm9sbGVyIHRvIGRvIGJvdGggTEUgc2NhbiBhbmQgQlIvRURSIGlucXVpcnkKJiM0MzsJICogc2ltdWx0YW5lb3VzbHkuCiYjNDM7CSAqLwomIzQzOwloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TSU1VTFRBTkVPVVNfRElTQ09WRVJZKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlCiYjNDM7CSAqIHNldHVwIGZvciBldmVyeSBoY2kgdXAuCiYjNDM7CSAqLwomIzQzOwloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7CiYjNDM7CXJldCA9IHFjYV9yZWFkX3NvY192ZXJzaW9uKGhkZXYsICZhbXA7dmVyLCBRQ0FfSVBRNTAxOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gc2V0dXAgVUFSVDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlidF9kZXZfaW5mbyhoZGV2LCAmIzM0O1FDQSBCdWlsZCBJbmZvOiAlcyYjMzQ7LCBoZGV2LSZndDtmd19pbmZvKTsKJiM0MzsKJiM0MzsJLyogT2J0YWluIGFuZCBzZXQgQkQgYWRkcmVzcyBmcm9tIE5WTUVNIGNlbGwgKi8KJiM0MzsJaGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7CiYjNDM7CWhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19zZW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTE2IGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtJmd0O3J1bm5pbmcpKSkgewomIzQzOwkJYnRfZGV2X2VycihoZGV2LCAmIzM0O0JUU1Mgbm90IGluaXRpYWxpemVkLCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlJiMzNDspOwomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gZnJlZV9za2I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gYnRzc19zZW5kKGRlc2MsIGhkciwgc2tiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtkZXNjLSZndDt0eF9xKSAmZ3Q7PSBJUENfVFhfUVNJWkUpIHsKJiM0MzsJCQkJYnRfZGV2X2VycihoZGV2LCAmIzM0O1RYIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIG1lc3NhZ2UmIzM0Oyk7CiYjNDM7CQkJCWhkZXYtJmd0O3N0YXQuZXJyX3R4JiM0MzsmIzQzOzsKJiM0MzsJCQkJcmV0ID0gLUVOT0JVRlM7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtkZXNjLSZndDt0eF9xLCBza2IpOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJ0X2Rldl9lcnIoaGRldiwgJiMzNDtGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiAlZCYjMzQ7LCByZXQpOwomIzQzOwkJCWhkZXYtJmd0O3N0YXQuZXJyX3R4JiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlidHFjb21pcGNfdXBkYXRlX3N0YXRzKGRlc2MtJmd0O2hkZXYsIHNrYik7CiYjNDM7CiYjNDM7ZnJlZV9za2I6CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ0cWNvbWlwY19mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rlc2MtJmd0O3R4X3EpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBsb29rdXAgcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lvbiBvZiB0aGUgcmVtb3RlcHJvYyBub2RlICovCiYjNDM7CXJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGVzYy0mZ3Q7cnByb2MtJmd0O2Rldi5wYXJlbnQtJmd0O29mX25vZGUsIDAsICZhbXA7cmVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjLSZndDttZW1fcGh5cyA9IHJlcy5zdGFydDsKJiM0MzsJZGVzYy0mZ3Q7bWVtX3JlbG9jID0gcmVzLnN0YXJ0OwomIzQzOwlkZXNjLSZndDttZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoJmFtcDtyZXMpOwomIzQzOwlkZXNjLSZndDttZW1fcmVnaW9uID0gZGV2bV9pb3JlbWFwKGRldiwgZGVzYy0mZ3Q7bWVtX3BoeXMsIGRlc2MtJmd0O21lbV9zaXplKTsKJiM0MzsJaWYgKCFkZXNjLSZndDttZW1fcmVnaW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDt1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxuJiMzNDssICZhbXA7cmVzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcnByb2NfcHV0KHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jID0gZGF0YTsKJiM0MzsKJiM0MzsJcnByb2NfcHV0KHJwcm9jKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcWNvbV9idHNzICpkZXNjOwomIzQzOwlwaGFuZGxlIHJwcm9jX3BoYW5kbGU7CiYjNDM7CXN0cnVjdCBoY2lfZGV2ICpoZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgYXJnc1syXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGVzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGVzYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlc2MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwomIzQzOwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3Fjb20scnByb2MmIzM0OywgJmFtcDtycHJvY19waGFuZGxlKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0VOVCwgJiMzNDtGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O3Jwcm9jID0gcnByb2NfZ2V0X2J5X3BoYW5kbGUocnByb2NfcGhhbmRsZSk7CiYjNDM7CWlmICghZGVzYy0mZ3Q7cnByb2MpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsICYjMzQ7RmFpbGVkIHRvIGdldCByZW1vdGVwcm9jXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGJ0cWNvbWlwY19ycHJvY19wdXQsIGRlc2MtJmd0O3Jwcm9jKTsKJiM0MzsKJiM0MzsJcmV0ID0gYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oZGVzYyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlkZXNjLSZndDtyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3MoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3Fjb20saXBjJiMzNDssIDIsIGFyZ3MpOwomIzQzOwlpZiAoSVNfRVJSKGRlc2MtJmd0O3JlZ21hcCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkZXNjLSZndDtyZWdtYXApOwomIzQzOwomIzQzOwlkZXNjLSZndDtvZmZzZXQgPSBhcmdzWzBdOwomIzQzOwlkZXNjLSZndDtiaXQgPSBhcmdzWzFdOwomIzQzOwomIzQzOwlkZXNjLSZndDtpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwomIzQzOwlpZiAoZGVzYy0mZ3Q7aXJxICZsdDsgMCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZGVzYy0mZ3Q7aXJxLCAmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIElSUVxuJiMzNDspOwomIzQzOwomIzQzOwloZGV2ID0gaGNpX2FsbG9jX2RldigpOwomIzQzOwlpZiAoIWhkZXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpOwomIzQzOwlkZXNjLSZndDtoZGV2ID0gaGRldjsKJiM0MzsJU0VUX0hDSURFVl9ERVYoaGRldiwgJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwloZGV2LSZndDtidXMgPSBIQ0lfSVBDOwomIzQzOwomIzQzOwloZGV2LSZndDtvcGVuID0gYnRxY29taXBjX29wZW47CiYjNDM7CWhkZXYtJmd0O2Nsb3NlID0gYnRxY29taXBjX2Nsb3NlOwomIzQzOwloZGV2LSZndDtzaHV0ZG93biA9IGJ0cWNvbWlwY19zaHV0ZG93bjsKJiM0MzsJaGRldi0mZ3Q7c2V0dXAgPSBidHFjb21pcGNfc2V0dXA7CiYjNDM7CWhkZXYtJmd0O3NlbmQgPSBidHFjb21pcGNfc2VuZDsKJiM0MzsJaGRldi0mZ3Q7Zmx1c2ggPSBidHFjb21pcGNfZmx1c2g7CiYjNDM7CWhkZXYtJmd0O3NldF9iZGFkZHIgPSBxY2Ffc2V0X2JkYWRkcjsKJiM0MzsKJiM0MzsJcmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWhjaV9mcmVlX2RldihoZGV2KTsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVCVVNZLCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBoZGV2XG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidHFjb21pcGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CiYjNDM7CWlmICghZGVzYyB8fCAhZGVzYy0mZ3Q7aGRldikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGNpX3VucmVnaXN0ZXJfZGV2KGRlc2MtJmd0O2hkZXYpOwomIzQzOwloY2lfZnJlZV9kZXYoZGVzYy0mZ3Q7aGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJ0cWNvbWlwY19vZl9tYXRjaFtdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtxY29tLGlwcTUwMTgtYnQmIzM0OyB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovfSwKJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0gYnRxY29taXBjX3Byb2JlLAomIzQzOwkucmVtb3ZlID0gYnRxY29taXBjX3JlbW92ZSwKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtidHFjb21pcGMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGJ0cWNvbWlwY19vZl9tYXRjaCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYnRxY29taXBjX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7UXVhbGNvbW0gQmx1ZXRvb3RoIElQQyBEcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnCmluZGV4IGM1MjFjNzQ0ZTdkYmU1Li42YjUyZjc4ZjE0MjdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQwogCSAgcHJvY2Vzc29ycyBvbiB2YXJpb3VzIFRJIFNvQ3MuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UmIzM5O3JlCiAJICBub3QgaW50ZXJlc3RlZCBpbiB0aGUgUFJVIG9yIGlmIHlvdSBhcmUgdW5zdXJlLgogCiYjNDM7Y29uZmlnIFFDT01fTTBfQlRTU19QSUwKJiM0MzsJdHJpc3RhdGUgJiMzNDtRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IEFSQ0hfUUNPTQomIzQzOwlzZWxlY3QgUUNPTV9NRFRfTE9BREVSCiYjNDM7CXNlbGVjdCBRQ09NX1JQUk9DX0NPTU1PTgomIzQzOwlzZWxlY3QgUUNPTV9TQ00KJiM0MzsJaGVscAomIzQzOwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgU2VjdXJlIFBlcmlwaGVyYWwgSW1hZ2VyIExvYWRlciBmb3IgdGhlCiYjNDM7CSAgUXVhbGNvbW0gQmx1ZXRvb3RoIFN1YnN5c3RlbSBydW5uaW5nIG9uIHRoZSBNMCByZW1vdGUgcHJvY2Vzc29yIGZvdW5kCiYjNDM7CSAgaW4gdGhlIElQUTUwMTggU29DLiBUaGUgTTAgY29yZSBpcyBzdGFydGVkIGFuZCBzdG9wcGVkIHVzaW5nIGEKJiM0MzsJICBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIGNhbGwgdG8gVHJ1c3Rab25lLgomIzQzOwogY29uZmlnIFFDT01fUElMX0lORk8KIAl0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlCkBAIC0yMSw2ICYjNDM7MjEsNyBAQCBvYmotJChDT05GSUdfREE4WFhfUkVNT1RFUFJPQykJCSYjNDM7PSBkYTh4eF9yZW1vdGVwcm9jLm8KIG9iai0kKENPTkZJR19LRVlTVE9ORV9SRU1PVEVQUk9DKQkmIzQzOz0ga2V5c3RvbmVfcmVtb3RlcHJvYy5vCiBvYmotJChDT05GSUdfTUVTT05fTVhfQU9fQVJDX1JFTU9URVBST0MpJiM0Mzs9IG1lc29uX214X2FvX2FyYy5vCiBvYmotJChDT05GSUdfUFJVX1JFTU9URVBST0MpCQkmIzQzOz0gcHJ1X3Jwcm9jLm8KJiM0MztvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTCkJCSYjNDM7PSBxY29tX20wX2J0c3NfcGlsLm8KIG9iai0kKENPTkZJR19RQ09NX1BJTF9JTkZPKQkJJiM0Mzs9IHFjb21fcGlsX2luZm8ubwogb2JqLSQoQ09ORklHX1FDT01fUlBST0NfQ09NTU9OKQkJJiM0Mzs9IHFjb21fY29tbW9uLm8KIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKQkJJiM0Mzs9IHFjb21fcTZ2NS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fbTBfYnRzc19waWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzE2OGUyNzBlNGQ0NjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jCkBAIC0wLDAgJiM0MzsxLDI2MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZl9yZXNlcnZlZF9tZW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9xY29tL21kdF9sb2FkZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Fjb21fY29tbW9uLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQlRTU19QQVNfSUQJMHhjCiYjNDM7CiYjNDM7c3RydWN0IG0wX2J0c3MgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXBoeXNfYWRkcl90IG1lbV9waHlzOwomIzQzOwlwaHlzX2FkZHJfdCBtZW1fcmVsb2M7CiYjNDM7CXZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbjsKJiM0MzsJc2l6ZV90IG1lbV9zaXplOwomIzQzOwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbTBfYnRzc19zdGFydChzdHJ1Y3QgcnByb2MgKnJwcm9jKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFxY29tX3NjbV9wYXNfc3VwcG9ydGVkKEJUU1NfUEFTX0lEKSkgewomIzQzOwkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkmIzM0O1BBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XG4mIzM0OywKJiM0MzsJCQlCVFNTX1BBU19JRCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBxY29tX3NjbV9wYXNfYXV0aF9hbmRfcmVzZXQoQlRTU19QQVNfSUQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBycHJvYzogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtMF9idHNzX3N0b3Aoc3RydWN0IHJwcm9jICpycHJvYykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChycHJvYy0mZ3Q7c3RhdGUgPT0gUlBST0NfUlVOTklORyB8fCBycHJvYy0mZ3Q7c3RhdGUgPT0gUlBST0NfQ1JBU0hFRCkgewomIzQzOwkJcmV0ID0gcWNvbV9zY21fcGFzX3NodXRkb3duKEJUU1NfUEFTX0lEKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byBzdG9wIHJwcm9jOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRldl9pbmZvKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O1N1Y2Nlc3NmdWxseSBzdG9wcGVkIHJwcm9jXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbTBfYnRzc19sb2FkKHN0cnVjdCBycHJvYyAqcnByb2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbTBfYnRzcyAqZGVzYyA9IHJwcm9jLSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcnM7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2VnX2Z3OwomIzQzOwljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqcGhkcjsKJiM0MzsJY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqZWhkcjsKJiM0MzsJdm9pZCBfX2lvbWVtICptZXRhZGF0YTsKJiM0MzsJc2l6ZV90IG1ldGFkYXRhX3NpemU7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LSZndDtkYXRhOwomIzQzOwlwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICYjNDM7IDEpOwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7ZncsIHJwcm9jLSZndDtmaXJtd2FyZSwgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlOiAlZFxuJiMzNDssCiYjNDM7CQkJcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCAmYW1wO21ldGFkYXRhX3NpemUsIHJwcm9jLSZndDtmaXJtd2FyZSwKJiM0MzsJCQkJCSAgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwlpZiAoSVNfRVJSKG1ldGFkYXRhKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihtZXRhZGF0YSk7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIHJlYWQgZmlybXdhcmUgbWV0YWRhdGE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBxY29tX3NjbV9wYXNfaW5pdF9pbWFnZShCVFNTX1BBU19JRCwgbWV0YWRhdGEsCiYjNDM7CQkJCSAgICAgIG1ldGFkYXRhX3NpemUsIE5VTEwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJwcm9jLSZndDtkZXYucGFyZW50LCAmIzM0O1BBUyBpbml0IGltYWdlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3BobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhciAqc2VnX25hbWUgX19mcmVlKGtmcmVlKSA9IGtzdHJkdXAocnByb2MtJmd0O2Zpcm13YXJlLAomIzQzOwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghc2VnX25hbWUpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlwaGRyID0gJmFtcDtwaGRyc1tpXTsKJiM0MzsKJiM0MzsJCS8qIE9ubHkgcHJvY2VzcyB2YWxpZCBsb2FkYWJsZSBkYXRhIHNlZ21lbnRzICovCiYjNDM7CQlpZiAocGhkci0mZ3Q7cF90eXBlICE9IFBUX0xPQUQgfHwgIXBoZHItJmd0O3BfbWVtc3opCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAocGhkci0mZ3Q7cF92YWRkciAmIzQzOyBwaGRyLSZndDtwX2ZpbGVzeiAmZ3Q7IGRlc2MtJmd0O21lbV9zaXplKSB7CiYjNDM7CQkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkJJiMzNDtTZWdtZW50IGRhdGEgZXhjZWVkcyB0aGUgcmVzZXJ2ZWQgbWVtb3J5IGFyZWEhXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnQgZmlsZXMgKi8KJiM0MzsJCWlmIChwaGRyLSZndDtwX29mZnNldCAmZ3Q7IGZ3LSZndDtzaXplIHx8CiYjNDM7CQkgICAgcGhkci0mZ3Q7cF9vZmZzZXQgJiM0MzsgcGhkci0mZ3Q7cF9maWxlc3ogJmd0OyBmdy0mZ3Q7c2l6ZSkgewomIzQzOwkJCXNwcmludGYoc2VnX25hbWUgJiM0Mzsgc3RybGVuKHNlZ19uYW1lKSAtIDMsICYjMzQ7YiUwMmQmIzM0OywgaSk7CiYjNDM7CQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3NlZ19mdywgc2VnX25hbWUsCiYjNDM7CQkJCQkgICAgICAgcnByb2MtJmd0O2Rldi5wYXJlbnQpOwomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJZGV2X2VycihycHJvYy0mZ3Q7ZGV2LnBhcmVudCwKJiM0MzsJCQkJCSYjMzQ7Q291bGQgbm90IGZpbmQgc3BsaXQgc2VnbWVudCBiaW5hcnk6ICVzXG4mIzM0OywKJiM0MzsJCQkJCXNlZ19uYW1lKTsKJiM0MzsJCQkJZ290byBmcmVlX21ldGFkYXRhOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzCiYjNDM7CQkJICogdGhlIG9mZnNldAomIzQzOwkJCSAqLwomIzQzOwkJCW1lbWNweV90b2lvKGRlc2MtJmd0O21lbV9yZWdpb24gJiM0MzsgcGhkci0mZ3Q7cF92YWRkciwKJiM0MzsJCQkJICAgIHNlZ19mdy0mZ3Q7ZGF0YSwgcGhkci0mZ3Q7cF9maWxlc3opOwomIzQzOwomIzQzOwkJCXJlbGVhc2VfZmlybXdhcmUoc2VnX2Z3KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWVtY3B5X3RvaW8oZGVzYy0mZ3Q7bWVtX3JlZ2lvbiAmIzQzOyBwaGRyLSZndDtwX3ZhZGRyLAomIzQzOwkJCQkgICAgZnctJmd0O2RhdGEgJiM0MzsgcGhkci0mZ3Q7cF9vZmZzZXQsIHBoZHItJmd0O3BfZmlsZXN6KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX21ldGFkYXRhOgomIzQzOwlrZnJlZShtZXRhZGF0YSk7CiYjNDM7cmVsZWFzZV9mdzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnByb2Nfb3BzIG0wX2J0c3Nfb3BzID0gewomIzQzOwkuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LAomIzQzOwkuc3RvcCA9IG0wX2J0c3Nfc3RvcCwKJiM0MzsJLmxvYWQgPSBtMF9idHNzX2xvYWQsCiYjNDM7CS5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJlc291cmNlIHJlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtJmd0O29mX25vZGUsIDAsICZhbXA7cmVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7dW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjLSZndDttZW1fcGh5cyA9IHJlcy5zdGFydDsKJiM0MzsJZGVzYy0mZ3Q7bWVtX3JlbG9jID0gcmVzLnN0YXJ0OwomIzQzOwlkZXNjLSZndDttZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoJmFtcDtyZXMpOwomIzQzOwlkZXNjLSZndDttZW1fcmVnaW9uID0gZGV2bV9pb3JlbWFwKGRldiwgZGVzYy0mZ3Q7bWVtX3BoeXMsIGRlc2MtJmd0O21lbV9zaXplKTsKJiM0MzsJaWYgKCFkZXNjLSZndDttZW1fcmVnaW9uKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDt1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxuJiMzNDssICZhbXA7cmVzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG0wX2J0c3NfcGlsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwkvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWUgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbTBfYnRzcyAqZGVzYzsKJiM0MzsJc3RydWN0IGNsayAqbHBvX2NsazsKJiM0MzsJc3RydWN0IHJwcm9jICpycHJvYzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LSZndDtvZl9ub2RlLCAmIzM0O2Zpcm13YXJlLW5hbWUmIzM0OywKJiM0MzsJCQkJICAgICAgJmFtcDtmd19uYW1lKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlycHJvYyA9IGRldm1fcnByb2NfYWxsb2MoZGV2LCAmIzM0O20wYnRzcyYjMzQ7LCAmYW1wO20wX2J0c3Nfb3BzLAomIzQzOwkJCQkgZndfbmFtZSwgc2l6ZW9mKCpkZXNjKSk7CiYjNDM7CWlmICghcnByb2MpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBycHJvY1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVzYyA9IHJwcm9jLSZndDtwcml2OwomIzQzOwlkZXNjLSZndDtkZXYgPSBkZXY7CiYjNDM7CiYjNDM7CXJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWxwb19jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsICYjMzQ7YnRzc19scG9fY2xrJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKGxwb19jbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwb19jbGspLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGdldCBscG8gY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZGVzYy0mZ3Q7YnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAmIzM0O2J0c3NfcmVzZXQmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChkZXNjLSZndDtidHNzX3Jlc2V0KSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZXNjLSZndDtidHNzX3Jlc2V0KSwKJiM0MzsJCQkJICAgICAmIzM0O3VuYWJsZSB0byBhY3F1aXJlIGJ0c3NfcmVzZXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkZXNjLSZndDtidHNzX3Jlc2V0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLSZndDtkZXYucGFyZW50LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcnByb2MtJmd0O2F1dG9fYm9vdCA9IGZhbHNlOwomIzQzOwlyZXQgPSBkZXZtX3Jwcm9jX2FkZChkZXYsIHJwcm9jKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxpcHE1MDE4LWJ0c3MtcGlsJiMzNDsgfSwKJiM0MzsJeyB9LAomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbTBfYnRzc19waWxfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSBtMF9idHNzX3BpbF9wcm9iZSwKJiM0MzsJLmRyaXZlciA9IHsKJiM0MzsJCS5uYW1lID0gJiMzNDtxY29tLW0wLWJ0c3MtcGlsJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBtMF9idHNzX29mX21hdGNoLAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtMF9idHNzX3BpbF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1F1YWxjb21tIE0wIEJsdWV0b290aCBTdWJzeXN0ZW0gUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBOZXcgQmx1ZXRvb3RoIGFuZCBSZW1vdGVQcm9jIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB3aXRoIHNvbWUgbmV3IGtlcm5lbCBkcml2ZXJzIOKAkyBgYnRxY29taXBjLmNgIGFuZCBgcWNvbV9tMF9idHNzX3BpbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgaW50cm9kdWNpbmcgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/IExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhlc2UgYXJlIGJvdGggcGxhdGZvcm0gZHJpdmVycy4gIGBidHFjb21pcGMuY2AgaXMgZm9yICYjMzQ7cWNvbSxpcHE1MDE4LWJ0JiMzNDsgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgIGZvciAmIzM0O3Fjb20saXBxNTAxOC1idHNzLXBpbCYjMzQ7LiAgUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBRdWFsY29tbSBJUFE1MDE4LCB3aGljaCBpbXBsaWVzIGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gQ2FuIHRoZXNlIHJlYWxpc3RpY2FsbHkgYmUgZnV6emVkIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gIFBsYXRmb3JtIGRyaXZlcnMgb2Z0ZW4gbmVlZCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBJICprbm93KiBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcgYW5kIHNvbWUgbWVjaGFuaXNtLCBsaWtlIGBzeXpfZ2VuX3N5c2ZzYCBvciBieSBpbmplY3RpbmcgZGV2aWNlIG5vZGVzLiAgSG93ZXZlciwgdGhpcyBkcml2ZXIgcmVnaXN0ZXJzIGFuIEhDSSBkZXZpY2UuICBUaGUgKnByb2JlKiBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVuIHRoZSBIQ0kgZGV2aWNlIGdldHMgcmVnaXN0ZXJlZC4gSWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbiYjMzk7dCBjYWxsZWQsIHdlJiMzOTtyZSBkZWFkIGluIHRoZSB3YXRlciBmb3IgSENJIGZ1enppbmcuCgpUbyBnZXQgYGJ0cWNvbWlwY19wcm9iZWAgdG8gZXZlbiAqcnVuKiwgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBhIHBsYXRmb3JtIGRldmljZSB3aXRoIHRoYXQgJiMzNDtxY29tLGlwcTUwMTgtYnQmIzM0OyBjb21wYXRpYmxlIHN0cmluZy4gIFBsdXMsIGl0IG5lZWRzIHBoYW5kbGVzIGZvciBgcWNvbSxycHJvY2AsIGFuIGBxY29tLGlwY2Agc3lzY29uLCBhbmQgYW4gaW50ZXJydXB0LiAgSWYgSSYjMzk7bSBqdXN0IHJ1bm5pbmcgUUVNVSB4ODZfNjQgb3IgYXJtNjQgd2l0aG91dCB0aGlzIHNwZWNpZmljIERULCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkIHVubGVzcyBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgaXQgY29ycmVjdGx5LiBEb2VzIHN5emthbGxlciBvZmZlciBzb21lIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGFkZCBjYWxsPyBObywgaXQgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGRvIHRoYXQgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGV4aXN0aW5nIGRlc2NyaXB0aW9uIGluIHRoZSBrZXJuZWwuCgpTbywgcmVhbGlzdGljYWxseSwgYGJ0cWNvbWlwY19wcm9iZWAgaXMgcHJvYmFibHkgKnVucmVhY2hhYmxlKiB3aXRob3V0IGEgdmVyeSBzcGVjaWZpYyBkZXZpY2UgdHJlZSB0aGF0IG1hdGNoZXMuIFRoYXQgbWVhbnMgYHJwcm9jX2dldF9ieV9waGFuZGxlYCwgYHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJnc2AsIGFuZCBgcGxhdGZvcm1fZ2V0X2lycWAgd2lsbCBmYWlsLCBiZWNhdXNlIHRoZSBkZXZpY2UgdHJlZSB3b24mIzM5O3QgYmUgY29uc3RydWN0ZWQgd2l0aCB0aGUgcmlnaHQgT0Ygbm9kZXMgYW5kIHBoYW5kbGVzLiBTcGVjaWZpY2FsbHksIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtJmd0O29mX25vZGUsICYjMzQ7cWNvbSxycHJvYyYjMzQ7LCAmYW1wO3Jwcm9jX3BoYW5kbGUpYCB3b3VsZCBmYWlsLiAgSXQmIzM5O3MganVzdCBnb2luZyB0byByZXR1cm4gYC1FTk9FTlRgLgoKVGhlIHNhbWUgYXBwbGllcyB0byBgcWNvbV9tMF9idHNzX3BpbC5jYC4gSXQgZGVwZW5kcyBvbiB0aGluZ3MgbGlrZSBgZmlybXdhcmUtbmFtZWAgYW5kIHdpbGwgbGlrZWx5IGZhaWwgaW4gdGhlIGBwcm9iZWAgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMuIEkgbm90aWNlZCBzb21lIG1vZGlmaWNhdGlvbnMgaW4gYGJ0cWNhLmNgOiBhIGNoZWNrIGluIGBxY2FfdGx2X2NoZWNrX2RhdGFgIHRoYXQgaGFzIGEgY29uZGl0aW9uYWwgYGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBgcWNhX3Rsdl9jaGVja19kYXRhYCBpcyBwYXJ0IG9mIGZpcm13YXJlIGRvd25sb2FkIGZ1bmN0aW9uYWxpdHkuIGBzb2NfdHlwZWAgYmVpbmcgYFFDQV9JUFE1MDE4YCBpcyBvbmx5IHBhc3NlZCBmcm9tIGBidHFjb21pcGNfc2V0dXBgLiBIb3dldmVyLCBzaW5jZSBgYnRxY29taXBjX3NldHVwYCBpcyB1bnJlYWNoYWJsZSwgdGhpcyBjb2RlcGF0aCBpcyBhbHNvIGRlYWQuCgpXYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRoYXQgYFFDQV9JUFE1MDE4YCBtaWdodCBnZXQgdXNlZCB3aXRoIGBoY2lfdWFydGA/IExldCYjMzk7cyBjaGVjayB3aGVyZSBgUUNBX0lQUTUwMThgIGlzIHVzZWQuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRQ0FfSVBRNTAxOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9idHFjYS5jPTMxMD1zdGF0aWMgaW50IHFjYV90bHZfY2hlY2tfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTM4Mi1cdGNhc2UgVExWX1RZUEVfTlZNOlxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzozODM6XHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtMzg0LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM9NzcxPWludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTc5OS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6ODAwOlx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy04MDEtXHRcdGdvdG8gZG93bmxvYWRfbnZtO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtOTQ4LVx0XHRcdGJyZWFrO1xuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo5NDk6XHRcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk1MC1cdFx0XHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NzEtXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk3MjpcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtOTczLVx0XHRtc2xlZXAoTlZNX1JFQURZX0RFTEFZX01TKTtcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4MS1cdGNhc2UgUUNBX1dDTjc4NTA6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk4MjpcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4My1cdFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy0xMDE4LVx0Y2FzZSBRQ0FfV0NONzg1MDpcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6MTAxOTpcdGNhc2UgUUNBX0lQUTUwMTg6XG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMjAtXHRcdC8qIGdldCBmdyBidWlsZCBpbmZvICovXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaD0xNDk9ZW51bSBxY2FfYnRzb2NfdHlwZSB7XG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjItXHRRQ0FfV0NONzg1MCxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmg6MTYzOlx0UUNBX0lQUTUwMTgsXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oLTE2NC19O1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jPTczMT1zdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NDYtXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYzo3NDc6XHRyZXQgPSBxY2FfcmVhZF9zb2NfdmVyc2lvbihoZGV2LCBcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc0OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMtNzUwLVxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmM6NzUxOlx0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NTItXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDQKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFFDQV9JUFE1MDE4YC4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBwbGFjZXMgdGhpcyBpcyB1c2VkIGFyZSBpbiBgYnRxY29taXBjLmNgIHdoZW4gaXQmIzM5O3MgcGFzc2VkIHRvIGBxY2FfdWFydF9zZXR1cGAgb3IgYHFjYV9yZWFkX3NvY192ZXJzaW9uYC4gQW5kLCBpZiBJJiMzOTttIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGBidHFjb21pcGMuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBgcWNvbSxpcHE1MDE4LWJ0YC4KClRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogZ29pbmcgdG8gYmUgcHJlc2VudCBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgUUVNVSB4ODZfNjQsIGFybTY0IHZpcnQsIHRoYXQgc29ydCBvZiB0aGluZy4gU3l6a2FsbGVyLCBhcyBicmlsbGlhbnQgYXMgaXQgaXMsIGRvZXNuJiMzOTt0IGhhdmUgYSBtZWNoYW5pc20gdG8gbWFnaWNhbGx5IHNhdGlzZnkgdGhlIHJlYWxseSBjb21wbGV4IGRlcGVuZGVuY2llcyBpbmhlcmVudCBpbiB0aGVzZSBkZXZpY2UgdHJlZXMuIFNwZWNpZmljYWxseSwgaXQgY2FuJiMzOTt0IGhhbmRsZSB0aG9zZSBwaGFuZGxlcyBwb2ludGluZyB0byBgcnByb2NgLCBgc3lzY29uYCwgcmVzZXJ2ZWQgbWVtb3J5LCBhbmQgYWxsIHRoYXQgamF6ei4gU28sIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIGVhcmx5LiBUaGlzIG1lYW5zIGFueSBvZiB0aGUgYWN0dWFsIGZ1bmN0aW9uYWwgY29kZSBpbiBgYnRxY29taXBjLmNgIGFuZCBhbHNvIHRoZSBjb2RlIGluIGBxY29tX20wX2J0c3NfcGlsLmNgIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBhbnkgZnV6emluZyB3ZSB0cnkgdG8gZG8uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHNwZWNpZmljIHN1cHBvcnQgZm9yIGBxY29tLGlwcTUwMTgtYnRgLiBPa2F5LCBpdCAqZG9lcyogaGF2ZSBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgcGxhdGZvcm0gZGV2aWNlcy4gSG93ZXZlciwgZXZlbiBpZiBTeXprYWxsZXIgKmNvdWxkKiBjcmVhdGUgdGhlIGRldmljZSwgYG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDtxY29tLHJwcm9jJiMzNDssICZhbXA7cnByb2NfcGhhbmRsZSlgIHdpbGwgc3RpbGwgZmFpbC4gVGhlIGNyZWF0ZWQgZGV2aWNlIHdvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYG9mX25vZGVgIHdpdGggdGhlc2Ugc3BlY2lmaWMgcHJvcGVydGllcyBvciBwaGFuZGxlcy4gU28gYGJ0cWNvbWlwY19wcm9iZWAgd2lsbCByZXR1cm4gYC1FTk9FTlRgLgoKQW5kIHdhaXQsIHdoYXQgYWJvdXQgYHFjb21fbTBfYnRzc19waWwuY2A/IEl0IHJlbGllcyBvbiBgZmlybXdhcmUtbmFtZWAgZnJvbSB0aGUgYG9mX25vZGVgLCB3aGljaCBpcyBhbHNvIGdvaW5nIHRvIGZhaWwuIFNvLCB0aGUgY29kZSBpcyB0b3RhbGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCBjYW5ub3QgYmUgcHJvYmVkIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBkdWUgdG8gdGhvc2UgY29tcGxleCBkZXZpY2UgdHJlZSBkZXBlbmRlbmNpZXMgaW52b2x2aW5nIHBoYW5kbGVzLCByZXNlcnZlZCBtZW1vcnksIGFuZCBzaW1pbGFyIHRoaW5ncy4KCkxldCBtZSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb3JyZWN0LiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi5jb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBQZXJmZWN0LiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhpcyBzaXR1YXRpb24uCgpJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzIChidHFjb21pcGMgYW5kIHFjb21fbTBfYnRzc19waWwpIGZvciB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuIFRoZXNlIGRyaXZlcnMgcmVseSBvbiBjb21wbGV4IGRldmljZSB0cmVlIHByb3BlcnRpZXMgKHN1Y2ggYXMgcGhhbmRsZXMgdG8gcmVtb3RlcHJvYywgc3lzY29uLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UsIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBwcmVzZW50LCBtZWFuaW5nIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBmYWlsIGVhcmx5IGFuZCB0aGUgY29yZSBsb2dpYyB3aWxsIHJlbWFpbiB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyOS4yODY3MjkyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzQ5MTQyNjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyOS4yODY3MzYzODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDk0MTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4NThkNzFmZmNlZjM2YzZlN2M0OTM5YjhhZWVjMGY0OGI3ZWI4YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjQ6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXFxuQEAgLTAsMCArMSw2MyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBRdWFsY29tbSBJUFE1MDE4IEJsdWV0b290aFxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBHZW9yZ2UgTW91c3NhbGVtIFxcdTAwM2NnZW9yZ2UubW91c3NhbGVtQG91dGxvb2suY29tXFx1MDAzZVxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSBxY29tLGlwcTUwMTgtYnRcXG4rXFxuKyAgaW50ZXJydXB0czpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgSW50ZXJydXB0IGxpbmUgZnJvbSB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSB0byB0aGUgaG9zdCBwcm9jZXNzb3JcXG4rICAgICAgICAgIHRvIG5vdGlmeSBpdCBvZiBldmVudHMgc3VjaCBhcyByZVxcbitcXG4rICBxY29tLGlwYzpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUtYXJyYXlcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogcGhhbmRsZSB0byBhIHN5c2NvbiBub2RlIHJlcHJlc2VudGluZyB0aGUgQVBDUyByZWdpc3RlcnNcXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgb2Zmc2V0IHRvIHRoZSByZWdpc3RlciB3aXRoaW4gdGhlIHN5c2NvblxcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogdTMyIHJlcHJlc2VudGluZyB0aGUgaXBjIGJpdCB3aXRoaW4gdGhlIHJlZ2lzdGVyXFxuKyAgICBkZXNjcmlwdGlvbjogfFxcbisgICAgICBUaGVzZSBlbnRyaWVzIHNwZWNpZnkgdGhlIG91dGdvaW5nIElQQyBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIHRoZSByZW1vdGVcXG4rICAgICAgTTAgQlRTUyBjb3JlIG9mIGEgaG9zdCBldmVudCBvciBmb3Igc2VuZGluZyBhbiBBQ0sgaWYgdGhlIHJlbW90ZSBwcm9jZXNzb3JcXG4rICAgICAgZXhwZWN0cyBpdC5cXG4rXFxuKyAgcWNvbSxycHJvYzpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSByZW1vdGUgcHJvY2Vzc29yIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBNMCBCVFNTIGNvcmUuXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIGludGVycnVwdHNcXG4rICAtIHFjb20saXBjXFxuKyAgLSBxY29tLHJwcm9jXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGJsdWV0b290aC1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiBxY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oXFx1MDAzZVxcbitcXG4rICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcXG4rICAgICAgY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtYnRcXFwiO1xcbitcXG4rICAgICAgcWNvbSxpcGMgPSBcXHUwMDNjXFx1MDAyNmFwY3NfZ2xiIDggMjNcXHUwMDNlO1xcbisgICAgICBpbnRlcnJ1cHRzID0gXFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXFx1MDAzZTtcXG4rXFxuKyAgICAgIHFjb20scnByb2MgPSBcXHUwMDNjXFx1MDAyNm0wX2J0c3NcXHUwMDNlO1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk3YmI2ODE1ZDcxNmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXFxuQEAgLTAsMCArMSw3MiBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEdlb3JnZSBNb3Vzc2FsZW0gXFx1MDAzY2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBRdWFsY29tbSBNMCBCVFNTIFBlcmlwaGVyYWwgU2VjdXJlIEltYWdlIExvYWRlciBsb2FkcyBmaXJtd2FyZSBhbmQgcG93ZXJzIHVwXFxuKyAgdGhlIE0wIEJUU1MgcmVtb3RlIHByb2Nlc3NvciBjb3JlIG9uIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0gcWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxuK1xcbisgIGZpcm13YXJlLW5hbWU6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IEZpcm13YXJlIG5hbWUgZm9yIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIGNvcmVcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgbG93IHBvd2VyIG9zY2lsbGF0b3IgY2xvY2tcXG4rXFxuKyAgY2xvY2stbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBjb25zdDogYnRzc19scG9fY2xrXFxuK1xcbisgIG1lbW9yeS1yZWdpb246XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogTTAgQlRTUyByZXNlcnZlZCBtZW1vcnkgY2FydmVvdXRcXG4rXFxuKyAgcmVzZXRzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXRcXG4rXFxuKyAgcmVzZXQtbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgLSBjb25zdDogYnRzc19yZXNldFxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSBmaXJtd2FyZS1uYW1lXFxuKyAgLSBjbG9ja3NcXG4rICAtIGNsb2NrLW5hbWVzXFxuKyAgLSByZXNldHNcXG4rICAtIHJlc2V0LW5hbWVzXFxuKyAgLSBtZW1vcnktcmVnaW9uXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3Fjb20sZ2NjLWlwcTUwMTguaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9yZXNldC9xY29tLGdjYy1pcHE1MDE4LmhcXHUwMDNlXFxuK1xcbisgICAgcmVtb3RlcHJvYyB7XFxuKyAgICAgIGNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxcIjtcXG4rXFxuKyAgICAgIGZpcm13YXJlLW5hbWUgPSBcXFwicWNhL2J0X2Z3X3BhdGNoLm1iblxcXCI7XFxuK1xcbisgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXFx1MDAzZTtcXG4rICAgICAgY2xvY2stbmFtZXMgPSBcXFwiYnRzc19scG9fY2xrXFxcIjtcXG4rICAgICAgcmVzZXRzID0gXFx1MDAzY1xcdTAwMjZnY2MgR0NDX0JUU1NfQkNSXFx1MDAzZTtcXG4rICAgICAgcmVzZXQtbmFtZXMgPSBcXFwiYnRzc19yZXNldFxcXCI7XFxuK1xcbisgICAgICBtZW1vcnktcmVnaW9uID0gXFx1MDAzY1xcdTAwMjZidHNzX3JlZ2lvblxcdTAwM2U7XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxcbmluZGV4IDZmODAwNGEyMmExZmZkLi40ZmRmMjBjODdiMGE5YSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxcbkBAIC0xNyw2ICsxNywxNyBAQCAvIHtcXG4gXFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMlxcdTAwM2U7XFxuIFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzJcXHUwMDNlO1xcbiBcXG4rXFx0Ymx1ZXRvb3RoOiBibHVldG9vdGgge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1idFxcXCI7XFxuK1xcbitcXHRcXHRxY29tLGlwYyA9IFxcdTAwM2NcXHUwMDI2YXBjc19nbGIgOCAyM1xcdTAwM2U7XFxuK1xcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjR0lDX1NQSSAxNjIgSVJRX1RZUEVfRURHRV9SSVNJTkdcXHUwMDNlO1xcbitcXG4rXFx0XFx0cWNvbSxycHJvYyA9IFxcdTAwM2NcXHUwMDI2bTBfYnRzc1xcdTAwM2U7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHR9O1xcbitcXG4gXFx0Y2xvY2tzIHtcXG4gXFx0XFx0Z2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsge1xcbiBcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWNsb2NrXFxcIjtcXG5AQCAtMTMxLDExICsxNDIsMzEgQEAgcHNjaSB7XFxuIFxcdFxcdG1ldGhvZCA9IFxcXCJzbWNcXFwiO1xcbiBcXHR9O1xcbiBcXG4rXFx0bTBfYnRzczogcmVtb3RlcHJvYyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE1MDE4LWJ0c3MtcGlsXFxcIjtcXG4rXFxuK1xcdFxcdGZpcm13YXJlLW5hbWUgPSBcXFwicWNhL2J0X2Z3X3BhdGNoLm1iblxcXCI7XFxuK1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXFx1MDAzZTtcXG4rXFx0XFx0Y2xvY2stbmFtZXMgPSBcXFwiYnRzc19scG9fY2xrXFxcIjtcXG4rXFx0XFx0cmVzZXRzID0gXFx1MDAzY1xcdTAwMjZnY2MgR0NDX0JUU1NfQkNSXFx1MDAzZTtcXG4rXFx0XFx0cmVzZXQtbmFtZXMgPSBcXFwiYnRzc19yZXNldFxcXCI7XFxuK1xcbitcXHRcXHRtZW1vcnktcmVnaW9uID0gXFx1MDAzY1xcdTAwMjZidHNzX3JlZ2lvblxcdTAwM2U7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHR9O1xcbitcXG4gXFx0cmVzZXJ2ZWQtbWVtb3J5IHtcXG4gXFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMlxcdTAwM2U7XFxuIFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzJcXHUwMDNlO1xcbiBcXHRcXHRyYW5nZXM7XFxuIFxcbitcXHRcXHRidHNzX3JlZ2lvbjogYmx1ZXRvb3RoQDcwMDAwMDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcXHUwMDNlO1xcbitcXHRcXHRcXHRuby1tYXA7XFxuK1xcdFxcdH07XFxuK1xcbiBcXHRcXHRib290bG9hZGVyQDRhODAwMDAwIHtcXG4gXFx0XFx0XFx0cmVnID0gXFx1MDAzYzB4MCAweDRhODAwMDAwIDB4MCAweDIwMDAwMFxcdTAwM2U7XFxuIFxcdFxcdFxcdG5vLW1hcDtcXG5AQCAtNjQ3LDcgKzY3OCw4IEBAIHdhdGNoZG9nOiB3YXRjaGRvZ0BiMDE3MDAwIHtcXG4gXFxuIFxcdFxcdGFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAge1xcbiBcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1hcGNzLWFwcHMtZ2xvYmFsXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICBcXFwicWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcXFwiO1xcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJxY29tLGlwcTYwMTgtYXBjcy1hcHBzLWdsb2JhbFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcInN5c2NvblxcXCI7XFxuIFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDBiMTExMDAwIDB4MTAwMFxcdTAwM2U7XFxuIFxcdFxcdFxcdCNjbG9jay1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4gXFx0XFx0XFx0Y2xvY2tzID0gXFx1MDAzY1xcdTAwMjZhNTNwbGxcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNnhvX2JvYXJkX2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2Z2NjIEdQTEwwXFx1MDAzZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcXG5pbmRleCA0ZThjMjRkNzU3ZTlhNC4uNmI4YmVkNmE2ZmZkYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcXG5AQCAtNDEzLDYgKzQxMywxNyBAQCBjb25maWcgQlRfTVRLVUFSVFxcbiBcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNZWRpYVRlayBCbHVldG9vdGggVUFSVCBkZXZpY2VzXFxuIFxcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxcbiBcXG4rY29uZmlnIEJUX1FDT01JUENcXG4rXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgQlRfUUNBXFxuK1xcdGhlbHBcXG4rXFx0ICBRdWFsY29tbSBJUFE1MDE4IElQQyBiYXNlZCBIQ0kgZHJpdmVyLlxcbitcXHQgIFRoaXMgZHJpdmVyIGlzIHVzZWQgdG8gYnJpZGdlIEhDSSBkYXRhIG9udG8gc2hhcmVkIG1lbW9yeSBiZXR3ZWVuXFxuK1xcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXFxuK1xcbitcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBIQ0kgb3ZlciBRdWFsY29tbSBJUEMgaW50byB0aGVcXG4rXFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBhcyBhIG1vZHVsZS5cXG4rXFxuIGNvbmZpZyBCVF9RQ09NU01EXFxuIFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBTTUQgYmFzZWQgSENJIHN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiBSUE1TRz1uKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXFxuaW5kZXggZTZiMWMxMTgwZDFkYzkuLjA1ZjE5MDQ3YmVkMDdlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcXG5AQCAtMjAsNiArMjAsNyBAQCBvYmotJChDT05GSUdfQlRfTVJWTClcXHRcXHQrPSBidG1ydmwub1xcbiBvYmotJChDT05GSUdfQlRfTVJWTF9TRElPKVxcdCs9IGJ0bXJ2bF9zZGlvLm9cXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXFx0Kz0gYnRtdGtzZGlvLm9cXG4gb2JqLSQoQ09ORklHX0JUX01US1VBUlQpXFx0Kz0gYnRtdGt1YXJ0Lm9cXG4rb2JqLSQoQ09ORklHX0JUX1FDT01JUEMpXFx0Kz0gYnRxY29taXBjLm9cXG4gb2JqLSQoQ09ORklHX0JUX1FDT01TTUQpXFx0Kz0gYnRxY29tc21kLm9cXG4gb2JqLSQoQ09ORklHX0JUX0JDTSlcXHRcXHQrPSBidGJjbS5vXFxuIG9iai0kKENPTkZJR19CVF9SVEwpXFx0XFx0Kz0gYnRydGwub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi5lMTM2ZTkxOTc2Y2ZiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jXFxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbkBAIC0zODAsNiArMzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBUTFZfVFlQRV9OVk06XFxuK1xcdFxcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoZndfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgdGx2X3R5cGVfaGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC03OTQsNiArNzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJvbV92ZXIgPSAoKHNvY192ZXIgXFx1MDAyNiAweDAwMDAwZjAwKSBcXHUwMDNlXFx1MDAzZSAweDA0KSB8IChzb2NfdmVyIFxcdTAwMjYgMHgwMDAwMDAwZik7XFxuIFxcbitcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuK1xcdFxcdGdvdG8gZG93bmxvYWRfbnZtO1xcbitcXG4gXFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxcbiBcXHRcXHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xcbiBcXG5AQCAtODgxLDYgKzg4Nyw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0aWYgKHNvY190eXBlID09IFFDQV9RQ0EyMDY2IHx8IHNvY190eXBlID09IFFDQV9XQ043ODUwKVxcbiBcXHRcXHRxY2FfcmVhZF9md19ib2FyZF9pZChoZGV2LCBcXHUwMDI2Ym9hcmRpZCk7XFxuIFxcbitkb3dubG9hZF9udm06XFxuIFxcdC8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovXFxuIFxcdGNvbmZpZy50eXBlID0gVExWX1RZUEVfTlZNO1xcbiBcXHRpZiAoZmlybXdhcmVfbmFtZSkge1xcbkBAIC05MzksNiArOTQ2LDEwIEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0XFx0XFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuIFxcdFxcdFxcdFxcdCBcXFwiaG10bnZcXFwiLCBzb2NfdHlwZSwgdmVyLCByb21fdmVyLCBib2FyZGlkKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgUUNBX0lQUTUwMTg6XFxuK1xcdFxcdFxcdHNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSxcXG4rXFx0XFx0XFx0XFx0IFxcXCJxY2EvbXBudiUwMnguYmluXFxcIiwgcm9tX3Zlcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuIFxcdFxcdFxcdFxcdCBcXFwicWNhL252bV8lMDh4LmJpblxcXCIsIHNvY192ZXIpO1xcbkBAIC05NTgsNiArOTY5LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuK1xcdFxcdG1zbGVlcChOVk1fUkVBRFlfREVMQVlfTVMpO1xcbitcXG4gXFx0c3dpdGNoIChzb2NfdHlwZSkge1xcbiBcXHRjYXNlIFFDQV9RQ0EyMDY2OlxcbiBcXHRjYXNlIFFDQV9RQ0E2MzkwOlxcbkBAIC05NjUsNiArOTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbiBcXHRjYXNlIFFDQV9XQ042NzUwOlxcbiBcXHRjYXNlIFFDQV9XQ042ODU1OlxcbiBcXHRjYXNlIFFDQV9XQ043ODUwOlxcbitcXHRjYXNlIFFDQV9JUFE1MDE4OlxcbiBcXHRcXHRlcnIgPSBxY2FfZGlzYWJsZV9zb2NfbG9nZ2luZyhoZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTEwMDEsNiArMTAxNiw3IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcXG4gXFx0Y2FzZSBRQ0FfV0NONjc1MDpcXG4gXFx0Y2FzZSBRQ0FfV0NONjg1NTpcXG4gXFx0Y2FzZSBRQ0FfV0NONzg1MDpcXG4rXFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG4gXFx0XFx0LyogZ2V0IGZ3IGJ1aWxkIGluZm8gKi9cXG4gXFx0XFx0ZXJyID0gcWNhX3JlYWRfZndfYnVpbGRfaW5mbyhoZGV2KTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXFxuaW5kZXggOGYzYzFiMWM3N2IzZGUuLjM0M2NkNjJkMTEzNzE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmhcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXFxuQEAgLTU0LDYgKzU0LDggQEBcXG4gI2RlZmluZSBRQ0FfSFNQX0dGX1NPQ19JRFxcdFxcdDB4MTIwMFxcbiAjZGVmaW5lIFFDQV9IU1BfR0ZfU09DX01BU0tcXHRcXHQweDAwMDBmZjAwXFxuIFxcbisjZGVmaW5lIE5WTV9SRUFEWV9ERUxBWV9NU1xcdFxcdDE1MDBcXG4rXFxuIGVudW0gcWNhX2JhdWRyYXRlIHtcXG4gXFx0UUNBX0JBVURSQVRFXzExNTIwMFxcdD0gMCxcXG4gXFx0UUNBX0JBVURSQVRFXzU3NjAwLFxcbkBAIC0xNTgsNiArMTYwLDcgQEAgZW51bSBxY2FfYnRzb2NfdHlwZSB7XFxuIFxcdFFDQV9XQ042NzUwLFxcbiBcXHRRQ0FfV0NONjg1NSxcXG4gXFx0UUNBX1dDTjc4NTAsXFxuK1xcdFFDQV9JUFE1MDE4LFxcbiB9O1xcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1FDQSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY2MmE3NWI2YzRhOTBiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXFxuQEAgLTAsMCArMSw5MzkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9yZXNlcnZlZF9tZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZW1vdGVwcm9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJ0cWNhLmhcXFwiXFxuK1xcbisvKiogTWVzc2FnZSBoZWFkZXIgZm9ybWF0LlxcbisgKlxcbisgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBCaXRQb3MgfCAgICAxNSAgICB8IDE0IHwgMTMgfCAxMiB8IDExIHwgMTAgfCAgOSAgfCAgOCAgfCAgICA3IC0gMCAgICAgfFxcbisgKiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiBGaWVsZCAgfCBsb25nX21zZyB8QUNLIHwgICAgICAgIFJGVSAgICAgICAgfCAgcGt0X3R5cGUgfCAgICBjbWQgICAgICAgfFxcbisgKiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcbisgKiAtIGxvbmdfbXNnICAgOiBJZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIHRoZVxcbisgKiAgICAgICAgICAgICAgICBJUENfTVNHX1BMRF9TWi4gVGhlIHBheWxvYWQgaW5zdGVhZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlXFxuKyAqICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSBidWZmZXIgaW4gdGhlIHNoYXJlZCBCVFNTIG1lbW9yeSBzcGFjZS5cXG4rICpcXG4rICogLSBBQ0sgICAgICAgOiBTZXQgaWYgc2VuZGluZyBBQ0sgaWYgcmVxdWlyZWQgYnkgc2VuZGluZyBhY2tub3dsZWRlZ2VtZW50XFxuKyAqICAgICAgICAgICAgICAgIHRvIHNlbmRlciBpLmUuIHNlbmQgYW4gYWNrIElQQyBpbnRlcnJ1cHQgaWYgc2V0LlxcbisgKlxcbisgKiAtIFJGVSAgICAgICAgOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS5cXG4rICpcXG4rICogLSBwa3RfdHlwZSAgIDogSVBDIFBhY2tldCBUeXBlXFxuKyAqXFxuKyAqIC0gY21kICAgICAgICA6IENvbnRhaW5zIHVuaXF1ZSBjb21tYW5kIElEXFxuKyAqL1xcbitcXG4rI2RlZmluZSBJUENfTVNHX0hEUl9TWlxcdFxcdDRcXG4rI2RlZmluZSBJUENfTVNHX1BMRF9TWlxcdFxcdDQwXFxuKyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWlxcdChJUENfTVNHX0hEUl9TWiArIElQQ19NU0dfUExEX1NaKVxcbitcXG4rLyogTWVzc2FnZSBIZWFkZXIgKi9cXG4rI2RlZmluZSBJUENfSERSX0xPTkdfTVNHXFx0QklUKDE1KVxcbisjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1xcdFxcdEJJVCgxNClcXG4rI2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0tcXHRHRU5NQVNLKDksIDgpXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQ1VTVFxcdDBcXG4rI2RlZmluZSAgSVBDX0hEUl9QS1RfVFlQRV9IQ0lcXHQxXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU9cXHQyXFxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfUkZVXFx0M1xcbisjZGVmaW5lIElQQ19IRFJfQ01EX01BU0tcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIElQQ19DTURfU1RPUFxcdFxcdDFcXG4rI2RlZmluZSBJUENfQ01EX1NXSVRDSF9UT19VQVJUXFx0MlxcbisjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QXFx0M1xcbisjZGVmaW5lIElQQ19DTURfQ09MTEVDVF9EVU1QXFx0NFxcbisjZGVmaW5lIElQQ19DTURfU1RBUlRcXHRcXHQ1XFxuK1xcbisjZGVmaW5lIElQQ19UWF9RU0laRVxcdFxcdDMyXFxuK1xcbisjZGVmaW5lXFx0VE9fQVBQU19BRERSKGEpXFx0XFx0KGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyAoaW50KSh1aW50cHRyX3QpYSlcXG4rI2RlZmluZVxcdFRPX0JUX0FERFIoYSlcXHRcXHQoYSAtIGRlc2MtXFx1MDAzZW1lbV9yZWdpb24pXFxuKyNkZWZpbmUgSVBDX0xCVUZfU1oodywgeCwgeSwgeilcXHQoKChUT19CVF9BRERSKCh2b2lkICopdykgKyB3LVxcdTAwM2V4KSAtIHctXFx1MDAzZXkpIC8gdy1cXHUwMDNleilcXG4rXFxuKyNkZWZpbmVcXHRHRVRfTk9fT0ZfQkxPQ0tTKGEsIGIpICgoYSArIGIgLSAxKSAvIGIpXFxuK1xcbisjZGVmaW5lIEdFVF9SWF9JTkRFWF9GUk9NX0JVRih4LCB5KVxcdCgoeCAtIGRlc2MtXFx1MDAzZXJ4X2N0eHQtXFx1MDAzZWxyaW5nX2J1ZikgLyB5KVxcbitcXG4rI2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcXHQoKHggLSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYpIC8geSlcXG4rXFxuKyNkZWZpbmUgSVNfUlhfTUVNX05PTl9DT05USUdJT1VTKGJ1ZiwgbGVuLCBzeilcXHRcXHRcXFxcXFxuK1xcdCgoYnVmICsgbGVuKSBcXHUwMDNlIChkZXNjLVxcdTAwM2VyeF9jdHh0LVxcdTAwM2VscmluZ19idWYgK1xcdFxcXFxcXG4rXFx0KHN6ICogZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250KSkpXFxuK1xcbisjZGVmaW5lIFBPV0VSX0NPTlRST0xfREVMQVlfTVNcXHQ1MFxcbitcXG4rI2RlZmluZSBCVFNTX1BBU19JRFxcdDB4Y1xcbitcXG4rc3RydWN0IGxvbmdfbXNnX2luZm8ge1xcbitcXHRfX2xlMTYgc21zZ19mcmVlX2NudDtcXG4rXFx0X19sZTE2IGxtc2dfZnJlZV9jbnQ7XFxuK1xcdHU4IHJpZHg7XFxuK1xcdHU4IHdpZHg7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgaXBjX2F1eF9wdHIge1xcbitcXHRfX2xlMzIgbGVuO1xcbitcXHRfX2xlMzIgYnVmO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IHJpbmdfYnVmZmVyIHtcXG4rXFx0X19sZTE2IG1zZ19oZHI7XFxuK1xcdF9fbGUxNiBsZW47XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0dTggc21zZ19kYXRhW0lQQ19NU0dfUExEX1NaXTtcXG4rXFx0XFx0X19sZTMyIGxtc2dfZGF0YTtcXG4rXFx0fSBwYXlsb2FkO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IHJpbmdfYnVmZmVyX2luZm8ge1xcbitcXHRfX2xlMzIgcmJ1ZjtcXG4rXFx0dTggcmluZ19idWZfY250O1xcbitcXHR1OCByaWR4O1xcbitcXHR1OCB3aWR4O1xcbitcXHR1OCB0aWR4O1xcbitcXHRfX2xlMzIgbmV4dDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBjb250ZXh0X2luZm8ge1xcbitcXHRfX2xlMTYgdG90YWxfc2l6ZTtcXG4rXFx0dTggbG1zZ19idWZfY250O1xcbitcXHR1OCBzbXNnX2J1Zl9jbnQ7XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvO1xcbitcXHRfX2xlMzIgc3JpbmdfYnVmO1xcbitcXHRfX2xlMzIgbHJpbmdfYnVmO1xcbitcXHRfX2xlMzIgcmVzZXJ2ZWQ7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdHJ1Y3QgcWNvbV9idHNzIHtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jO1xcbitcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcXG4rXFxuK1xcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIGJpdDtcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdHZvaWQgKm1lbV9yZWdpb247XFxuK1xcdHBoeXNfYWRkcl90IG1lbV9waHlzO1xcbitcXHRwaHlzX2FkZHJfdCBtZW1fcmVsb2M7XFxuK1xcdHNpemVfdCBtZW1fc2l6ZTtcXG4rXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcTtcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xO1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcbitcXHRzdHJ1Y3QgY29udGV4dF9pbmZvICp0eF9jdHh0O1xcbitcXHRzdHJ1Y3QgY29udGV4dF9pbmZvICpyeF9jdHh0O1xcbitcXHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XFxuK1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rXFxuK3N0YXRpYyB2b2lkICpidHNzX2FsbG9jX2xtc2coc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTMyIGxlbixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXBjX2F1eF9wdHIgKmF1eF9wdHIsIGJvb2wgKmlzX2xidWZfZnVsbClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVxcdTAwM2VkZXY7XFxuK1xcdHU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDtcXG4rXFx0dm9pZCAqcmV0X3B0cjtcXG4rXFx0dTMyIGxzejtcXG4rXFxuK1xcdGlmIChkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYgPT0gMCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIm5vIGxvbmcgbWVzc2FnZSBidWZmZXIgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFx0fVxcbitcXG4rXFx0bHN6ID0gSVBDX0xCVUZfU1ooZGVzYy1cXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLCBsbXNnX2J1Zl9jbnQpO1xcbitcXHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XFxuK1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IHx8XFxuK1xcdFxcdFxcdChibGtzIFxcdTAwM2UgZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcXG4rXFxuK1xcdGlkeCA9IGRlc2MtXFx1MDAzZWxtc2dfY3R4dC53aWR4O1xcbitcXG4rXFx0aWYgKChkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpIFxcdTAwM2UgZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250KSB7XFxuK1xcdFxcdGJsa3NfY29uc3VtZWQgPSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VsbXNnX2J1Zl9jbnQgLSBpZHg7XFxuK1xcdFxcdGF1eF9wdHItXFx1MDAzZWxlbiA9IGxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcXG4rXFx0XFx0YXV4X3B0ci1cXHUwMDNlYnVmID0gZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbHJpbmdfYnVmO1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCA9IChkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpICVcXG4rXFx0XFx0ZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcXG4rXFxuK1xcdGlmIChkZXNjLVxcdTAwM2VsbXNnX2N0eHQubG1zZ19mcmVlX2NudCBcXHUwMDNjPVxcbitcXHRcXHRcXHQoKGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZWxtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXFxuK1xcdFxcdCppc19sYnVmX2Z1bGwgPSB0cnVlO1xcbitcXG4rXFx0cmV0X3B0ciA9IFRPX0FQUFNfQUREUihkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VscmluZ19idWYpICsgKGlkeCAqIGxzeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0X3B0cjtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpidHNzX2dldF90eF9yYnVmKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sICppc19zYnVmX2Z1bGwpXFxuK3tcXG4rXFx0dTggaWR4O1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcbitcXHRmb3IgKHJpbmZvID0gXFx1MDAyNihkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzcmluZ19idWZfaW5mbyk7XFx0cmluZm8gIT0gTlVMTDtcXG4rXFx0XFx0cmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby1cXHUwMDNlbmV4dCkpIHtcXG4rXFx0XFx0aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSAoZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlc21zZ19idWZfY250KTtcXG4rXFxuK1xcdFxcdGlmIChpZHggIT0gcmluZm8tXFx1MDAzZXRpZHgpIHtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQtLTtcXG4rXFxuK1xcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCBcXHUwMDNjPVxcbitcXHRcXHRcXHRcXHQoKGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXFxuK1xcdFxcdFxcdFxcdCppc19zYnVmX2Z1bGwgPSB0cnVlO1xcbitcXG4rXFx0XFx0XFx0cmV0dXJuIHJpbmZvO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0c3Nfc2VuZChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcixcXG4rXFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGVzYy1cXHUwMDNlaGRldjtcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xcbitcXHRzdHJ1Y3QgaXBjX2F1eF9wdHIgYXV4X3B0cjtcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyICpyYnVmO1xcbitcXHRib29sIGlzX2xidWZfZnVsbCA9IGZhbHNlO1xcbitcXHRib29sIGlzX3NidWZfZnVsbCA9IGZhbHNlO1xcbitcXHR1MTYgaGRyID0gbXNnX2hkcjtcXG4rXFx0dm9pZCAqcHRyX2J1ZjtcXG4rXFx0dTMyIGxlbjtcXG4rXFxuK1xcdC8qIEFjY291bnQgZm9yIEhDSSBwYWNrZXQgdHlwZSBhcyBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgc2tiIHBheWxvYWQgKi9cXG4rXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gKyAxO1xcbitcXHRtZW1zZXQoXFx1MDAyNmF1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBJUENfTVNHX1BMRF9TWikge1xcbitcXHRcXHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcXG4rXFxuK1xcdFxcdHB0cl9idWYgPSBidHNzX2FsbG9jX2xtc2coZGVzYywgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZhdXhfcHRyLCBcXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwdHJfYnVmKSkge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJsb25nIG1zZyBidWYgZnVsbFxcXCIpO1xcbitcXHRcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmVycl90eCsrO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHJfYnVmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgXFx1MDAyNmlzX3NidWZfZnVsbCk7XFxuK1xcdGlmIChJU19FUlIocmluZm8pKSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcInNob3J0IG1zZyBidWYgZnVsbFxcXCIpO1xcbitcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmVycl90eCsrO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKSkpW3JpbmZvLVxcdTAwM2V3aWR4XTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBJUENfTVNHX1BMRF9TWilcXG4rXFx0XFx0cmJ1Zi1cXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEgPSBjcHVfdG9fbGUzMihUT19CVF9BRERSKHB0cl9idWYpKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwdHJfYnVmID0gcmJ1Zi1cXHUwMDNlcGF5bG9hZC5zbXNnX2RhdGE7XFxuK1xcbitcXHQvKiBpZiBpdCdzIGEgc2hvcnQgbWVzc2FnZSwgdGhlIGF1eCBsZW4gYW5kIGJ1ZiBhcmUgTlVMTCAqL1xcbitcXHRtZW1jcHlfdG9pbyhwdHJfYnVmLCBcXHUwMDI2aGNpX3NrYl9wa3RfdHlwZShza2IpLCAxKTtcXG4rXFx0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiArIDEsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XFxuK1xcdGlmIChhdXhfcHRyLmJ1Zikge1xcbitcXHRcXHRtZW1jcHlfdG9pbyhUT19BUFBTX0FERFIoYXV4X3B0ci5idWYpLFxcbitcXHRcXHRcXHQgICAgKHNrYi1cXHUwMDNlZGF0YSArIChza2ItXFx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSksIGF1eF9wdHIubGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX3NidWZfZnVsbCB8fCBpc19sYnVmX2Z1bGwpXFxuK1xcdFxcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XFxuK1xcbitcXHRyYnVmLVxcdTAwM2Vtc2dfaGRyID0gY3B1X3RvX2xlMTYoaGRyKTtcXG4rXFx0cmJ1Zi1cXHUwMDNlbGVuID0gY3B1X3RvX2xlMTYobGVuKTtcXG4rXFxuK1xcdHJpbmZvLVxcdTAwM2V3aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcbitcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHFjb21fYnRzcyAqZGVzYylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSkpKSB7XFxuK1xcdFxcdGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XFxuK1xcbitcXHRcXHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNmRlc2MtXFx1MDAzZXR4X3EsIHNrYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRidHFjb21pcGNfdXBkYXRlX3N0YXRzKGRlc2MtXFx1MDAzZWhkZXYsIHNrYik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0c3NfZnJlZV9sbXNnKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHUzMiBsbXNnLCB1MTYgbGVuKVxcbit7XFxuK1xcdHU4IGlkeDtcXG4rXFx0dTggYmxrcztcXG4rXFx0dTMyIGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXFx1MDAzZXR4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcXG4rXFx0XFx0XFx0XFx0ICAgbG1zZ19idWZfY250KTtcXG4rXFxuK1xcdGlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opO1xcbitcXG4rXFx0aWYgKGlkeCAhPSBkZXNjLVxcdTAwM2VsbXNnX2N0eHQucmlkeClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YmxrcyA9IEdFVF9OT19PRl9CTE9DS1MobGVuLCBsc3opO1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnJpZHggID0gKGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5yaWR4ICArIGJsa3MpICVcXG4rXFx0XFx0ZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgKz0gYmxrcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcilcXG4re1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcXG4rXFxuK1xcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihyaW5mbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJpbmZvKTtcXG4rXFxuK1xcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKilUT19BUFBTX0FERFIocmluZm8tXFx1MDAzZXJidWYpKVtyaW5mby1cXHUwMDNld2lkeF07XFxuK1xcdHJidWYtXFx1MDAzZW1zZ19oZHIgPSBjcHVfdG9fbGUxNihtc2dfaGRyKTtcXG4rXFx0cmJ1Zi1cXHUwMDNlbGVuID0gMDtcXG4rXFxuK1xcdHJpbmZvLVxcdTAwM2V3aWR4ID0gKHJpbmZvLVxcdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcbitcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3JlY3ZfY3VzdF9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1OCBjbWQpXFxuK3tcXG4rXFx0dTE2IG1zZ19oZHIgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXNnX2hkciB8PSBjbWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGNtZCkge1xcbitcXHRjYXNlIElQQ19DTURfU1RPUDpcXG4rXFx0XFx0YnRfZGV2X2luZm8oZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgc3RvcHBlZCwgZ3JhY2VmdWxseSBzdG9wcGluZyBBUFNTIElQQ1xcXCIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJUENfQ01EX1NUQVJUOlxcbitcXHRcXHRkZXNjLVxcdTAwM2V0eF9jdHh0ID0gKHN0cnVjdCBjb250ZXh0X2luZm8gKikoKHZvaWQgKilkZXNjLVxcdTAwM2VyeF9jdHh0ICtcXG4rXFx0XFx0XFx0XFx0bGUxNl90b19jcHUoZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNldG90YWxfc2l6ZSkpO1xcbitcXHRcXHRkZXNjLVxcdTAwM2VsbXNnX2N0eHQud2lkeCA9IDA7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5yaWR4ID0gMDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQgPSBkZXNjLVxcdTAwM2V0eF9jdHh0LVxcdTAwM2VzbXNnX2J1Zl9jbnQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250ID0gZGVzYy1cXHUwMDNldHhfY3R4dC1cXHUwMDNlbG1zZ19idWZfY250O1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcsIHRydWUpO1xcbitcXHRcXHR3YWtlX3VwKFxcdTAwMjZkZXNjLVxcdTAwM2V3YWl0X3EpO1xcbitcXG4rXFx0XFx0YnRfZGV2X2luZm8oZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgc3RhcnRlZCwgaW5pdGlhbGl6aW5nIEFQU1MgQlQgSVBDXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnRfZGV2X2VycihkZXNjLVxcdTAwM2VoZGV2LCBcXFwiVW5zdXBwb3J0ZWQgQ01EIElEOiAldVxcXCIsIGNtZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnVubmluZykpKSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkJUU1Mgbm90IGluaXRpYWxpemVkLCBubyBtZXNzYWdlIHNlbnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcXG4rXFxuK1xcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRidF9kZXZfZXJyKGRlc2MtXFx1MDAzZWhkZXYsIFxcXCJGYWlsZWQgdG8gc2VuZCBjb250cm9sIG1lc3NhZ2VcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgYnRzc19yZWN2X2hjaV9mcmFtZShzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBjaGFyIHBrdF90eXBlO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgcGt0X2xlbjtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzYyAxKVxcbitcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFxuK1xcdHBrdF90eXBlID0gZGF0YVswXTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0X3R5cGUpIHtcXG4rXFx0Y2FzZSBIQ0lfRVZFTlRfUEtUOlxcbitcXHR7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfRVZFTlRfSERSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlMU0VRO1xcbitcXHRcXHRzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHN0cnVjdCBoY2lfZXZlbnRfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfRVZFTlRfSERSX1NJWkUgKyBoZHItXFx1MDAzZXBsZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfQ09NTUFORF9IRFJfU0laRSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSUxTRVE7XFxuK1xcdFxcdHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSArIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlcGxlbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgSENJX0FDTERBVEFfUEtUOlxcbitcXHR7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBIQ0lfQUNMX0hEUl9TSVpFKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTFNFUTtcXG4rXFx0XFx0c3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgKyAxKTtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBIQ0lfQUNMX0hEUl9TSVpFICsgbGUxNl90b19jcHUoaGRyLVxcdTAwM2VkbGVuKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XFxuK1xcdHtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIEhDSV9TQ09fSERSX1NJWkUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlMU0VRO1xcbitcXHRcXHRzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikoZGF0YSArIDEpO1xcbitcXG4rXFx0XFx0cGt0X2xlbiA9IEhDSV9TQ09fSERSX1NJWkUgKyBoZHItXFx1MDAzZWRsZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGt0X2xlbiBcXHUwMDNlIGxlbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRza2IgPSBidF9za2JfYWxsb2MocGt0X2xlbiwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZWhkZXYtXFx1MDAzZXN0YXQuZXJyX3J4Kys7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRza2ItXFx1MDAzZWRldiA9ICh2b2lkICopZGVzYy1cXHUwMDNlaGRldjtcXG4rXFx0aGNpX3NrYl9wa3RfdHlwZShza2IpID0gcGt0X3R5cGU7XFxuK1xcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgKyAxLCBwa3RfbGVuKTtcXG4rXFxuK1xcdGhjaV9yZWN2X2ZyYW1lKGRlc2MtXFx1MDAzZWhkZXYsIHNrYik7XFxuK1xcdGRlc2MtXFx1MDAzZWhkZXYtXFx1MDAzZXN0YXQuYnl0ZV9yeCArPSBwa3RfbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3NfcHJvY2Vzc19yeChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICBib29sICphY2ssIHU4ICpyeF9jb3VudClcXG4re1xcbitcXHR1OCByaWR4LCBsYnVmX2lkeCwgYmxrc19jb25zdW1lZCwgcGt0X3R5cGUsIGNtZDtcXG4rXFx0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XFxuK1xcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcXG4rXFx0dWludDhfdCAqcnhidWYgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuK1xcdHUzMiBsc3o7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyaWR4ID0gcmluZm8tXFx1MDAzZXJpZHg7XFxuK1xcbitcXHR3aGlsZSAocmlkeCAhPSByaW5mby1cXHUwMDNld2lkeCkge1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmF1eF9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBjX2F1eF9wdHIpKTtcXG4rXFxuK1xcdFxcdHJidWYgPSBcXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKSkpW3JpZHhdO1xcbitcXG4rXFx0XFx0aWYgKHJidWYtXFx1MDAzZW1zZ19oZHIgXFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XFxuK1xcdFxcdFxcdHJ4YnVmID0gVE9fQVBQU19BRERSKHJidWYtXFx1MDAzZXBheWxvYWQubG1zZ19kYXRhKTtcXG4rXFx0XFx0XFx0bHN6ID0gSVBDX0xCVUZfU1ooZGVzYy1cXHUwMDNlcnhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxcbitcXHRcXHRcXHRcXHQgICBsbXNnX2J1Zl9jbnQpO1xcbitcXG4rXFx0XFx0XFx0aWYgKElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhyYnVmLVxcdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICByYnVmLVxcdTAwM2VsZW4sIGxzeikpIHtcXG4rXFx0XFx0XFx0XFx0bGJ1Zl9pZHggPSBHRVRfUlhfSU5ERVhfRlJPTV9CVUYoXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJidWYtXFx1MDAzZXBheWxvYWQubG1zZ19kYXRhLCBsc3opO1xcbitcXG4rXFx0XFx0XFx0XFx0Ymxrc19jb25zdW1lZCA9IGRlc2MtXFx1MDAzZXJ4X2N0eHQtXFx1MDAzZWxtc2dfYnVmX2NudCAtXFxuK1xcdFxcdFxcdFxcdFxcdGxidWZfaWR4O1xcbitcXHRcXHRcXHRcXHRhdXhfcHRyLmxlbiA9IHJidWYtXFx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcXG4rXFx0XFx0XFx0XFx0YXV4X3B0ci5idWYgPSBkZXNjLVxcdTAwM2VyeF9jdHh0LVxcdTAwM2VscmluZ19idWY7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cnhidWYgPSByYnVmLVxcdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0KmFjayA9IChyYnVmLVxcdTAwM2Vtc2dfaGRyIFxcdTAwMjYgSVBDX0hEUl9SRVFfQUNLKTtcXG4rXFxuK1xcdFxcdHBrdF90eXBlID0gRklFTERfR0VUKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgcmJ1Zi1cXHUwMDNlbXNnX2hkcik7XFxuK1xcbitcXHRcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuK1xcdFxcdGNhc2UgSVBDX0hEUl9QS1RfVFlQRV9IQ0k6XFxuK1xcdFxcdFxcdGJ1ZiA9IGttYWxsb2MocmJ1Zi1cXHUwMDNlbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0XFx0aWYgKCFidWYpIHtcXG4rXFx0XFx0XFx0XFx0cmluZm8tXFx1MDAzZXJpZHggPSByaWR4O1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIHJ4YnVmLCByYnVmLVxcdTAwM2VsZW4gLSBhdXhfcHRyLmxlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoYXV4X3B0ci5idWYpXFxuK1xcdFxcdFxcdFxcdG1lbWNweV9mcm9taW8oYnVmICsgKHJidWYtXFx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gYnRzc19yZWN2X2hjaV9mcmFtZShkZXNjLCBidWYsIHJidWYtXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGJ0X2Rldl9lcnIoZGVzYy1cXHUwMDNlaGRldiwgXFxcIkZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWRcXFwiLCByZXQpO1xcbitcXHRcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0NVU1Q6XFxuK1xcdFxcdFxcdGNtZCA9IEZJRUxEX0dFVChJUENfSERSX0NNRF9NQVNLLCByYnVmLVxcdTAwM2Vtc2dfaGRyKTtcXG4rXFx0XFx0XFx0YnRzc19yZWN2X2N1c3RfZnJhbWUoZGVzYywgY21kKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyaWR4ID0gKHJpZHggKyAxKSAlIHJpbmZvLVxcdTAwM2VyaW5nX2J1Zl9jbnQ7XFxuK1xcbitcXHRcXHRpZiAocnhfY291bnQpXFxuK1xcdFxcdFxcdCgqcnhfY291bnQpKys7XFxuK1xcbitcXHRcXHRyaW5mby1cXHUwMDNlcmlkeCA9IHJpZHg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHNzX3Byb2Nlc3NfYWNrKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XFxuK1xcdHU4IHRpZHg7XFxuK1xcbitcXHRmb3IgKHJpbmZvID0gXFx1MDAyNmRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNyaW5nX2J1Zl9pbmZvOyByaW5mbyAhPSBOVUxMO1xcbitcXHRcXHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVxcdTAwM2VuZXh0KSkge1xcbitcXHRcXHR0aWR4ID0gcmluZm8tXFx1MDAzZXRpZHg7XFxuK1xcdFxcdHJidWYgPSAoc3RydWN0IHJpbmdfYnVmZmVyICopVE9fQVBQU19BRERSKHJpbmZvLVxcdTAwM2VyYnVmKTtcXG4rXFxuK1xcdFxcdHdoaWxlICh0aWR4ICE9IHJpbmZvLVxcdTAwM2VyaWR4KSB7XFxuK1xcdFxcdFxcdGlmIChyYnVmW3RpZHhdLm1zZ19oZHIgXFx1MDAyNiBJUENfSERSX0xPTkdfTVNHKSB7XFxuK1xcdFxcdFxcdFxcdGJ0c3NfZnJlZV9sbXNnKGRlc2MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcmJ1Zlt0aWR4XS5sZW4pO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHR0aWR4ID0gKHRpZHggKyAxKSAlIGRlc2MtXFx1MDAzZXR4X2N0eHQtXFx1MDAzZXNtc2dfYnVmX2NudDtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlbG1zZ19jdHh0LnNtc2dfZnJlZV9jbnQrKztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmluZm8tXFx1MDAzZXRpZHggPSB0aWR4O1xcbitcXG4rXFx0XFx0YnRzc19wcm9jZXNzX3R4X3F1ZXVlKGRlc2MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxY29tX2J0c3MsIHdvcmspO1xcbitcXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XFxuK1xcdGJvb2wgYWNrID0gZmFsc2U7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoZGVzYy1cXHUwMDNlcnByb2MtXFx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVxcdTAwM2VydW5uaW5nKSkpIHtcXG4rXFx0XFx0Ly8gRlcgc2V0cyBvZmZzZXQgb2YgUlggY29udGV4dCBpbmZvIGF0IHN0YXJ0IG9mIG1lbW9yeSByZWdpb24gdXBvbiBib290XFxuK1xcdFxcdG9mZnNldCA9IHJlYWRsKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24pO1xcbitcXHRcXHRkZXZfZGJnKGRlc2MtXFx1MDAzZWRldiwgXFxcIm9mZnNldCBhZnRlciBNMCBib290OiAweCUwOHhcXFxcblxcXCIsIG9mZnNldCk7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJ4X2N0eHQgPSAoc3RydWN0IGNvbnRleHRfaW5mbyAqKShkZXNjLVxcdTAwM2VtZW1fcmVnaW9uICsgb2Zmc2V0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnRzc19wcm9jZXNzX2FjayhkZXNjKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChyaW5mbyA9IFxcdTAwMjYoZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xcbitcXHQgICAgIHJpbmZvICE9IE5VTEw7XFxuK1xcdCAgICAgcmluZm8gPSAoc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKikodWludHB0cl90KShyaW5mby1cXHUwMDNlbmV4dCkpIHtcXG4rXFx0XFx0cmV0ID0gYnRzc19wcm9jZXNzX3J4KGRlc2MsIHJpbmZvLCBcXHUwMDI2YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGVzYy1cXHUwMDNlcnhfY3R4dC1cXHUwMDNlc21zZ19idWZfY250KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGRlc2MtXFx1MDAzZWhkZXYsIFxcXCJGYWlsZWQgdG8gcHJvY2VzcyBwZWVyIG1zZ3M6ICVkXFxcIiwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byBzcGluX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoYWNrKVxcbitcXHRcXHRyZWdtYXBfc2V0X2JpdHMoZGVzYy1cXHUwMDNlcmVnbWFwLCBkZXNjLVxcdTAwM2VvZmZzZXQsIEJJVChkZXNjLVxcdTAwM2ViaXQpKTtcXG4rXFxuK3NwaW5fdW5sb2NrOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBidHNzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGRhdGE7XFxuK1xcbitcXHRxdWV1ZV93b3JrKGRlc2MtXFx1MDAzZXdxLCBcXHUwMDI2ZGVzYy1cXHUwMDNld29yayk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRzc19pbml0KHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZGVzYy1cXHUwMDNld2FpdF9xKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRlc2MtXFx1MDAzZWxvY2spO1xcbitcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZkZXNjLVxcdTAwM2V0eF9xKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXFxcImJ0c3Nfd3FcXFwiKTtcXG4rXFx0aWYgKCFkZXNjLVxcdTAwM2V3cSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmRlc2MtXFx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkZXNjLVxcdTAwM2VpcnEsIE5VTEwsIGJ0c3NfaXJxX2hhbmRsZXIsXFxuK1xcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJidHNzX2lycVxcXCIsIGRlc2MpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJlcnJvciByZWdpc3RlcmluZyBpcnFbJWRdIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VpcnEsIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHU4IHBrdF90eXBlID0gaGNpX3NrYl9wa3RfdHlwZShza2IpO1xcbitcXG4rXFx0aGRldi1cXHUwMDNlc3RhdC5ieXRlX3R4ICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuK1xcdGNhc2UgSENJX0NPTU1BTkRfUEtUOlxcbitcXHRcXHRoZGV2LVxcdTAwM2VzdGF0LmNtZF90eCsrO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBIQ0lfQUNMREFUQV9QS1Q6XFxuK1xcdFxcdGhkZXYtXFx1MDAzZXN0YXQuYWNsX3R4Kys7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhDSV9TQ09EQVRBX1BLVDpcXG4rXFx0XFx0aGRldi1cXHUwMDNlc3RhdC5zY29fdHgrKztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBidHNzX2luaXQoZGVzYyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YnRfZGV2X2VycihoZGV2LCBcXFwiRmFpbGVkIGluaXRpYWxpemluZyBCVFNTOiAlZFxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHdhaXQgMiBzZWNvbmRzIGZvciBmaWxlc3lzdGVtIHRvIGJlY29tZSBhdmFpbGFibGUgKi9cXG4rXFx0bXNsZWVwKDIwMDApO1xcbitcXG4rXFx0LyogQm9vdCBNMCBmaXJtd2FyZSAqL1xcbitcXHRyZXQgPSBycHJvY19ib290KGRlc2MtXFx1MDAzZXJwcm9jKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJGYWlsZWQgdG8gYm9vdCBNMCBwcm9jZXNzb3I6ICVkXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xcbitcXHRyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGVzYy1cXHUwMDNld2FpdF9xLCBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnVubmluZyksXFxuK1xcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcXG4rXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIlRpbWVvdXQgd2FpdGluZyBmb3IgQlRTUyBzdGFydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XFxuK1xcbitcXHRycHJvY19zaHV0ZG93bihkZXNjLVxcdTAwM2VycHJvYyk7XFxuK1xcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4re1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xcbitcXG4rXFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VydW5uaW5nLCBmYWxzZSk7XFxuK1xcdGlmIChkZXNjLVxcdTAwM2V3cSAhPSBOVUxMKSB7XFxuK1xcdFxcdGRpc2FibGVfaXJxKGRlc2MtXFx1MDAzZWlycSk7XFxuK1xcdFxcdGZsdXNoX3dvcmtxdWV1ZShkZXNjLVxcdTAwM2V3cSk7XFxuK1xcdFxcdGRldm1fZnJlZV9pcnEoZGVzYy1cXHUwMDNlZGV2LCBkZXNjLVxcdTAwM2VpcnEsIGRlc2MpO1xcbitcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNmRlc2MtXFx1MDAzZXR4X3EpO1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShkZXNjLVxcdTAwM2V3cSk7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXdxID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRxY29taXBjX3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY2FfYnRzb2NfdmVyc2lvbiB2ZXI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XFxuK1xcdCAqIHNpbXVsdGFuZW91c2x5LlxcbitcXHQgKi9cXG4rXFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTk9OX1BFUlNJU1RFTlRfU0VUVVAgUVVJUksgdG8gZW5zdXJlIHRvIGV4ZWN1dGVcXG4rXFx0ICogc2V0dXAgZm9yIGV2ZXJ5IGhjaSB1cC5cXG4rXFx0ICovXFxuK1xcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX05PTl9QRVJTSVNURU5UX1NFVFVQKTtcXG4rXFx0cmV0ID0gcWNhX3JlYWRfc29jX3ZlcnNpb24oaGRldiwgXFx1MDAyNnZlciwgUUNBX0lQUTUwMTgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldCA9IHFjYV91YXJ0X3NldHVwKGhkZXYsIDAsIFFDQV9JUFE1MDE4LCB2ZXIsIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBVQVJUOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0YnRfZGV2X2luZm8oaGRldiwgXFxcIlFDQSBCdWlsZCBJbmZvOiAlc1xcXCIsIGhkZXYtXFx1MDAzZWZ3X2luZm8pO1xcbitcXG4rXFx0LyogT2J0YWluIGFuZCBzZXQgQkQgYWRkcmVzcyBmcm9tIE5WTUVNIGNlbGwgKi9cXG4rXFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuK1xcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfc2VuZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1MTYgaGRyID0gRklFTERfUFJFUChJUENfSERSX1BLVF9UWVBFX01BU0ssIElQQ19IRFJfUEtUX1RZUEVfSENJKTtcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXJ1bm5pbmcpKSkge1xcbitcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJCVFNTIG5vdCBpbml0aWFsaXplZCwgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZVxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSkgXFx1MDAzZT0gSVBDX1RYX1FTSVpFKSB7XFxuK1xcdFxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcIlRYIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIG1lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0XFx0XFx0aGRldi1cXHUwMDNlc3RhdC5lcnJfdHgrKztcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOT0JVRlM7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXNjLVxcdTAwM2V0eF9xLCBza2IpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRidF9kZXZfZXJyKGhkZXYsIFxcXCJGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiAlZFxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdGhkZXYtXFx1MDAzZXN0YXQuZXJyX3R4Kys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLVxcdTAwM2VoZGV2LCBza2IpO1xcbitcXG4rZnJlZV9za2I6XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2ZGVzYy1cXHUwMDNldHhfcSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19hbGxvY19tZW1vcnlfcmVnaW9uKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGVzYy1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogbG9va3VwIHJlc2VydmVkLW1lbW9yeSByZWdpb24gb2YgdGhlIHJlbW90ZXByb2Mgbm9kZSAqL1xcbitcXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRlc2MtXFx1MDAzZXJwcm9jLVxcdTAwM2VkZXYucGFyZW50LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcInVuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcXG4rXFx0ZGVzYy1cXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnJlcyk7XFxuK1xcdGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVxcdTAwM2VtZW1fcGh5cywgZGVzYy1cXHUwMDNlbWVtX3NpemUpO1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZW1lbV9yZWdpb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJ1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxcXFxuXFxcIiwgXFx1MDAyNnJlcyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBycHJvYyAqcnByb2MgPSBkYXRhO1xcbitcXG4rXFx0cnByb2NfcHV0KHJwcm9jKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjO1xcbitcXHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XFxuK1xcdHN0cnVjdCBoY2lfZGV2ICpoZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgYXJnc1syXTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRlc2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFkZXNjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWRldiA9IGRldjtcXG4rXFxuK1xcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLHJwcm9jXFxcIiwgXFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9FTlQsIFxcXCJGYWlsZWQgdG8gZ2V0IHJlbW90ZXByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXJwcm9jID0gcnByb2NfZ2V0X2J5X3BoYW5kbGUocnByb2NfcGhhbmRsZSk7XFxuK1xcdGlmICghZGVzYy1cXHUwMDNlcnByb2MpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwgXFxcIkZhaWxlZCB0byBnZXQgcmVtb3RlcHJvY1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBidHFjb21pcGNfcnByb2NfcHV0LCBkZXNjLVxcdTAwM2VycHJvYyk7XFxuK1xcbitcXHRyZXQgPSBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfYXJncyhkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLGlwY1xcXCIsIDIsIGFyZ3MpO1xcbitcXHRpZiAoSVNfRVJSKGRlc2MtXFx1MDAzZXJlZ21hcCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRlc2MtXFx1MDAzZXJlZ21hcCk7XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VvZmZzZXQgPSBhcmdzWzBdO1xcbitcXHRkZXNjLVxcdTAwM2ViaXQgPSBhcmdzWzFdO1xcbitcXG4rXFx0ZGVzYy1cXHUwMDNlaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTtcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZWlycSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZGVzYy1cXHUwMDNlaXJxLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgSVJRXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7XFxuK1xcdGlmICghaGRldilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRoY2lfc2V0X2RydmRhdGEoaGRldiwgZGVzYyk7XFxuK1xcdGRlc2MtXFx1MDAzZWhkZXYgPSBoZGV2O1xcbitcXHRTRVRfSENJREVWX0RFVihoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aGRldi1cXHUwMDNlYnVzID0gSENJX0lQQztcXG4rXFxuK1xcdGhkZXYtXFx1MDAzZW9wZW4gPSBidHFjb21pcGNfb3BlbjtcXG4rXFx0aGRldi1cXHUwMDNlY2xvc2UgPSBidHFjb21pcGNfY2xvc2U7XFxuK1xcdGhkZXYtXFx1MDAzZXNodXRkb3duID0gYnRxY29taXBjX3NodXRkb3duO1xcbitcXHRoZGV2LVxcdTAwM2VzZXR1cCA9IGJ0cWNvbWlwY19zZXR1cDtcXG4rXFx0aGRldi1cXHUwMDNlc2VuZCA9IGJ0cWNvbWlwY19zZW5kO1xcbitcXHRoZGV2LVxcdTAwM2VmbHVzaCA9IGJ0cWNvbWlwY19mbHVzaDtcXG4rXFx0aGRldi1cXHUwMDNlc2V0X2JkYWRkciA9IHFjYV9zZXRfYmRhZGRyO1xcbitcXG4rXFx0cmV0ID0gaGNpX3JlZ2lzdGVyX2RldihoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aGNpX2ZyZWVfZGV2KGhkZXYpO1xcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FQlVTWSwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBoZGV2XFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFxuK1xcdGlmICghZGVzYyB8fCAhZGVzYy1cXHUwMDNlaGRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGNpX3VucmVnaXN0ZXJfZGV2KGRlc2MtXFx1MDAzZWhkZXYpO1xcbitcXHRoY2lfZnJlZV9kZXYoZGVzYy1cXHUwMDNlaGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJ0cWNvbWlwY19vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC1idFxcXCIgfSxcXG4rXFx0eyAvKiBzZW50aW5lbCAqL30sXFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBidHFjb21pcGNfZHJpdmVyID0ge1xcbitcXHQucHJvYmUgPSBidHFjb21pcGNfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBidHFjb21pcGNfcmVtb3ZlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJidHFjb21pcGNcXFwiLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBidHFjb21pcGNfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK307XFxuK1xcbittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJ0cWNvbWlwY19kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRdWFsY29tbSBCbHVldG9vdGggSVBDIERyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnIGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xcbkBAIC0xNjMsNiArMTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQ1xcbiBcXHQgIHByb2Nlc3NvcnMgb24gdmFyaW91cyBUSSBTb0NzLiBJdCdzIHNhZmUgdG8gc2F5IE4gaGVyZSBpZiB5b3UncmVcXG4gXFx0ICBub3QgaW50ZXJlc3RlZCBpbiB0aGUgUFJVIG9yIGlmIHlvdSBhcmUgdW5zdXJlLlxcbiBcXG4rY29uZmlnIFFDT01fTTBfQlRTU19QSUxcXG4rXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIE0wIEJUU1MgUGVyaXBoZXJhbCBJbWFnZSBMb2FkZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgQVJDSF9RQ09NXFxuK1xcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4rXFx0c2VsZWN0IFFDT01fUlBST0NfQ09NTU9OXFxuK1xcdHNlbGVjdCBRQ09NX1NDTVxcbitcXHRoZWxwXFxuK1xcdCAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBTZWN1cmUgUGVyaXBoZXJhbCBJbWFnZXIgTG9hZGVyIGZvciB0aGVcXG4rXFx0ICBRdWFsY29tbSBCbHVldG9vdGggU3Vic3lzdGVtIHJ1bm5pbmcgb24gdGhlIE0wIHJlbW90ZSBwcm9jZXNzb3IgZm91bmRcXG4rXFx0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxcbitcXHQgIFNlY3VyZSBDaGFubmVsIE1hbmFnZXIgY2FsbCB0byBUcnVzdFpvbmUuXFxuK1xcbiBjb25maWcgUUNPTV9QSUxfSU5GT1xcbiBcXHR0cmlzdGF0ZVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlIGIvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXFxuaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxcbkBAIC0yMSw2ICsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVxcdFxcdCs9IGRhOHh4X3JlbW90ZXByb2Mub1xcbiBvYmotJChDT05GSUdfS0VZU1RPTkVfUkVNT1RFUFJPQylcXHQrPSBrZXlzdG9uZV9yZW1vdGVwcm9jLm9cXG4gb2JqLSQoQ09ORklHX01FU09OX01YX0FPX0FSQ19SRU1PVEVQUk9DKSs9IG1lc29uX214X2FvX2FyYy5vXFxuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcXHRcXHQrPSBwcnVfcnByb2Mub1xcbitvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTClcXHRcXHQrPSBxY29tX20wX2J0c3NfcGlsLm9cXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXFx0XFx0Kz0gcWNvbV9waWxfaW5mby5vXFxuIG9iai0kKENPTkZJR19RQ09NX1JQUk9DX0NPTU1PTilcXHRcXHQrPSBxY29tX2NvbW1vbi5vXFxuIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKVxcdFxcdCs9IHFjb21fcTZ2NS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzE2OGUyNzBlNGQ0NjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fbTBfYnRzc19waWwuY1xcbkBAIC0wLDAgKzEsMjYxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lbGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZXNldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL3Fjb20vbWR0X2xvYWRlci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInFjb21fY29tbW9uLmhcXFwiXFxuK1xcbisjZGVmaW5lIEJUU1NfUEFTX0lEXFx0MHhjXFxuK1xcbitzdHJ1Y3QgbTBfYnRzcyB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0cGh5c19hZGRyX3QgbWVtX3BoeXM7XFxuK1xcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcXG4rXFx0dm9pZCBfX2lvbWVtICptZW1fcmVnaW9uO1xcbitcXHRzaXplX3QgbWVtX3NpemU7XFxuK1xcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xcbit9O1xcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghcWNvbV9zY21fcGFzX3N1cHBvcnRlZChCVFNTX1BBU19JRCkpIHtcXG4rXFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCxcXG4rXFx0XFx0XFx0XFxcIlBBUyBpcyBub3QgYXZhaWxhYmxlIGZvciBwZXJpcGhlcmFsOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRCVFNTX1BBU19JRCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBxY29tX3NjbV9wYXNfYXV0aF9hbmRfcmVzZXQoQlRTU19QQVNfSUQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsIFxcXCJGYWlsZWQgdG8gc3RhcnQgcnByb2M6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3N0b3Aoc3RydWN0IHJwcm9jICpycHJvYylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHJwcm9jLVxcdTAwM2VzdGF0ZSA9PSBSUFJPQ19SVU5OSU5HIHx8IHJwcm9jLVxcdTAwM2VzdGF0ZSA9PSBSUFJPQ19DUkFTSEVEKSB7XFxuK1xcdFxcdHJldCA9IHFjb21fc2NtX3Bhc19zaHV0ZG93bihCVFNTX1BBU19JRCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCwgXFxcIkZhaWxlZCB0byBzdG9wIHJwcm9jOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGV2X2luZm8ocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsIFxcXCJTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG0wX2J0c3NfbG9hZChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbit7XFxuK1xcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRycztcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpzZWdfZnc7XFxuK1xcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICplaGRyO1xcbitcXHR2b2lkIF9faW9tZW0gKm1ldGFkYXRhO1xcbitcXHRzaXplX3QgbWV0YWRhdGFfc2l6ZTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICsgMSk7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZmdywgcnByb2MtXFx1MDAzZWZpcm13YXJlLCBycHJvYy1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCwgXFxcIkZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCBcXHUwMDI2bWV0YWRhdGFfc2l6ZSwgcnByb2MtXFx1MDAzZWZpcm13YXJlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJwcm9jLVxcdTAwM2VkZXYucGFyZW50KTtcXG4rXFx0aWYgKElTX0VSUihtZXRhZGF0YSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihtZXRhZGF0YSk7XFxuK1xcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gcmVhZCBmaXJtd2FyZSBtZXRhZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgICBtZXRhZGF0YV9zaXplLCBOVUxMKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJwcm9jLVxcdTAwM2VkZXYucGFyZW50LCBcXFwiUEFTIGluaXQgaW1hZ2UgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBmcmVlX21ldGFkYXRhO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci1cXHUwMDNlZV9waG51bTsgaSsrKSB7XFxuK1xcdFxcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVxcdTAwM2VmaXJtd2FyZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNlZ19uYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdHBoZHIgPSBcXHUwMDI2cGhkcnNbaV07XFxuK1xcbitcXHRcXHQvKiBPbmx5IHByb2Nlc3MgdmFsaWQgbG9hZGFibGUgZGF0YSBzZWdtZW50cyAqL1xcbitcXHRcXHRpZiAocGhkci1cXHUwMDNlcF90eXBlICE9IFBUX0xPQUQgfHwgIXBoZHItXFx1MDAzZXBfbWVtc3opXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHBoZHItXFx1MDAzZXBfdmFkZHIgKyBwaGRyLVxcdTAwM2VwX2ZpbGVzeiBcXHUwMDNlIGRlc2MtXFx1MDAzZW1lbV9zaXplKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIocnByb2MtXFx1MDAzZWRldi5wYXJlbnQsXFxuK1xcdFxcdFxcdFxcdFxcXCJTZWdtZW50IGRhdGEgZXhjZWVkcyB0aGUgcmVzZXJ2ZWQgbWVtb3J5IGFyZWEhXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX21ldGFkYXRhO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBDaGVjayBpZiBmaXJtd2FyZSBpcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudCBmaWxlcyAqL1xcbitcXHRcXHRpZiAocGhkci1cXHUwMDNlcF9vZmZzZXQgXFx1MDAzZSBmdy1cXHUwMDNlc2l6ZSB8fFxcbitcXHRcXHQgICAgcGhkci1cXHUwMDNlcF9vZmZzZXQgKyBwaGRyLVxcdTAwM2VwX2ZpbGVzeiBcXHUwMDNlIGZ3LVxcdTAwM2VzaXplKSB7XFxuK1xcdFxcdFxcdHNwcmludGYoc2VnX25hbWUgKyBzdHJsZW4oc2VnX25hbWUpIC0gMywgXFxcImIlMDJkXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNnNlZ19mdywgc2VnX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBycHJvYy1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihycHJvYy1cXHUwMDNlZGV2LnBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkNvdWxkIG5vdCBmaW5kIHNwbGl0IHNlZ21lbnQgYmluYXJ5OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0c2VnX25hbWUpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGZyZWVfbWV0YWRhdGE7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzXFxuK1xcdFxcdFxcdCAqIHRoZSBvZmZzZXRcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1lbWNweV90b2lvKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyBwaGRyLVxcdTAwM2VwX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgc2VnX2Z3LVxcdTAwM2VkYXRhLCBwaGRyLVxcdTAwM2VwX2ZpbGVzeik7XFxuK1xcbitcXHRcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHNlZ19mdyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1lbWNweV90b2lvKGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gKyBwaGRyLVxcdTAwM2VwX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgZnctXFx1MDAzZWRhdGEgKyBwaGRyLVxcdTAwM2VwX29mZnNldCwgcGhkci1cXHUwMDNlcF9maWxlc3opO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZnJlZV9tZXRhZGF0YTpcXG4rXFx0a2ZyZWUobWV0YWRhdGEpO1xcbityZWxlYXNlX2Z3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBycHJvY19vcHMgbTBfYnRzc19vcHMgPSB7XFxuK1xcdC5zdGFydCA9IG0wX2J0c3Nfc3RhcnQsXFxuK1xcdC5zdG9wID0gbTBfYnRzc19zdG9wLFxcbitcXHQubG9hZCA9IG0wX2J0c3NfbG9hZCxcXG4rXFx0LmdldF9ib290X2FkZHIgPSBycHJvY19lbGZfZ2V0X2Jvb3RfYWRkcixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgbTBfYnRzc19hbGxvY19tZW1vcnlfcmVnaW9uKHN0cnVjdCBtMF9idHNzICpkZXNjKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJlc291cmNlIHJlcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcInVuYWJsZSB0byBhY3F1aXJlIG1lbW9yeS1yZWdpb24gcmVzb3VyY2VcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcXG4rXFx0ZGVzYy1cXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xcbitcXHRkZXNjLVxcdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnJlcyk7XFxuK1xcdGRlc2MtXFx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVxcdTAwM2VtZW1fcGh5cywgZGVzYy1cXHUwMDNlbWVtX3NpemUpO1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZW1lbV9yZWdpb24pIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJ1bmFibGUgdG8gbWFwIG1lbW9yeSByZWdpb246ICVwUlxcXFxuXFxcIiwgXFx1MDAyNnJlcyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtMF9idHNzX3BpbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbit7XFxuK1xcdC8vIHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDtcXG4rXFx0c3RydWN0IG0wX2J0c3MgKmRlc2M7XFxuK1xcdHN0cnVjdCBjbGsgKmxwb19jbGs7XFxuK1xcdHN0cnVjdCBycHJvYyAqcnByb2M7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJmaXJtd2FyZS1uYW1lXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmZ3X25hbWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFxcXCJtMGJ0c3NcXFwiLCBcXHUwMDI2bTBfYnRzc19vcHMsXFxuK1xcdFxcdFxcdFxcdCBmd19uYW1lLCBzaXplb2YoKmRlc2MpKTtcXG4rXFx0aWYgKCFycHJvYykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBycHJvY1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkZXNjID0gcnByb2MtXFx1MDAzZXByaXY7XFxuK1xcdGRlc2MtXFx1MDAzZWRldiA9IGRldjtcXG4rXFxuK1xcdHJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGxwb19jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIFxcXCJidHNzX2xwb19jbGtcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihscG9fY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwb19jbGspLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRkZXNjLVxcdTAwM2VidHNzX3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsIFxcXCJidHNzX3Jlc2V0XFxcIik7XFxuK1xcdGlmIChJU19FUlJfT1JfTlVMTChkZXNjLVxcdTAwM2VidHNzX3Jlc2V0KSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRlc2MtXFx1MDAzZWJ0c3NfcmVzZXQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bmFibGUgdG8gYWNxdWlyZSBidHNzX3Jlc2V0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cXHUwMDNlYnRzc19yZXNldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLVxcdTAwM2VkZXYucGFyZW50LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBkZWFzc2VydCByZXNldFxcXFxuXFxcIik7XFxuK1xcbitcXHRycHJvYy1cXHUwMDNlYXV0b19ib290ID0gZmFsc2U7XFxuK1xcdHJldCA9IGRldm1fcnByb2NfYWRkKGRldiwgcnByb2MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnByb2MpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG0wX2J0c3Nfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTUwMTgtYnRzcy1waWxcXFwiIH0sXFxuK1xcdHsgfSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtMF9idHNzX3BpbF9kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZSA9IG0wX2J0c3NfcGlsX3Byb2JlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJxY29tLW0wLWJ0c3MtcGlsXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbTBfYnRzc19vZl9tYXRjaCxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobTBfYnRzc19waWxfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiUXVhbGNvbW0gTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBQZXJpcGhlcmFsIEltYWdlIExvYWRlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjI5Ljg3MjU1NDUxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDU0NzA4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGJ0cWNvbWlwYyBhbmQgcWNvbV9tMF9idHNzX3BpbCkgZm9yIHRoZSBRdWFsY29tbSBJUFE1MDE4IFNvQy4gVGhlc2UgZHJpdmVycyByZWx5IG9uIGNvbXBsZXggZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoc3VjaCBhcyBwaGFuZGxlcyB0byByZW1vdGVwcm9jLCBzeXNjb24sIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSwgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIGRlcGVuZGVuY2llcyBhcmUgbm90IHByZXNlbnQsIG1lYW5pbmcgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIGZhaWwgZWFybHkgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVtYWluIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODU4ZDcxZmZjZWYzNmM2ZTdjNDkzOWI4YWVlYzBmNDhiN2ViOGExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjQ6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20saXBxNTAxOC1idC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmZDMzZjg1MTg1ODhjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGlwcTUwMTgtYnQueWFtbFxuQEAgLTAsMCArMSw2MyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9ibHVldG9vdGgvcWNvbSxpcHE1MDE4LWJ0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFF1YWxjb21tIElQUTUwMTggQmx1ZXRvb3RoXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEdlb3JnZSBNb3Vzc2FsZW0gXHUwMDNjZ2VvcmdlLm1vdXNzYWxlbUBvdXRsb29rLmNvbVx1MDAzZVxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gcWNvbSxpcHE1MDE4LWJ0XG4rXG4rICBpbnRlcnJ1cHRzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBJbnRlcnJ1cHQgbGluZSBmcm9tIHRoZSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIHRvIHRoZSBob3N0IHByb2Nlc3NvclxuKyAgICAgICAgICB0byBub3RpZnkgaXQgb2YgZXZlbnRzIHN1Y2ggYXMgcmVcbitcbisgIHFjb20saXBjOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlLWFycmF5XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHBoYW5kbGUgdG8gYSBzeXNjb24gbm9kZSByZXByZXNlbnRpbmcgdGhlIEFQQ1MgcmVnaXN0ZXJzXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IHUzMiByZXByZXNlbnRpbmcgb2Zmc2V0IHRvIHRoZSByZWdpc3RlciB3aXRoaW4gdGhlIHN5c2NvblxuKyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiB1MzIgcmVwcmVzZW50aW5nIHRoZSBpcGMgYml0IHdpdGhpbiB0aGUgcmVnaXN0ZXJcbisgICAgZGVzY3JpcHRpb246IHxcbisgICAgICBUaGVzZSBlbnRyaWVzIHNwZWNpZnkgdGhlIG91dGdvaW5nIElQQyBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIHRoZSByZW1vdGVcbisgICAgICBNMCBCVFNTIGNvcmUgb2YgYSBob3N0IGV2ZW50IG9yIGZvciBzZW5kaW5nIGFuIEFDSyBpZiB0aGUgcmVtb3RlIHByb2Nlc3NvclxuKyAgICAgIGV4cGVjdHMgaXQuXG4rXG4rICBxY29tLHJwcm9jOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBoYW5kbGUgdG8gdGhlIHJlbW90ZSBwcm9jZXNzb3Igbm9kZSByZXByZXNlbnRpbmcgdGhlIE0wIEJUU1MgY29yZS5cbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSBpbnRlcnJ1cHRzXG4rICAtIHFjb20saXBjXG4rICAtIHFjb20scnByb2NcbitcbithbGxPZjpcbisgIC0gJHJlZjogYmx1ZXRvb3RoLWNvbnRyb2xsZXIueWFtbCNcbisgIC0gJHJlZjogcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oXHUwMDNlXG4rXG4rICAgIGJsdWV0b290aDogYmx1ZXRvb3RoIHtcbisgICAgICBjb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRcIjtcbitcbisgICAgICBxY29tLGlwYyA9IFx1MDAzY1x1MDAyNmFwY3NfZ2xiIDggMjNcdTAwM2U7XG4rICAgICAgaW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMTYyIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuK1xuKyAgICAgIHFjb20scnByb2MgPSBcdTAwM2NcdTAwMjZtMF9idHNzXHUwMDNlO1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTdiYjY4MTVkNzE2ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtMC1idHNzLXBpbC55YW1sXG5AQCAtMCwwICsxLDcyIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9yZW1vdGVwcm9jL3Fjb20sbTAtYnRzcy1waWwueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclxuK1xuK21haW50YWluZXJzOlxuKyAgLSBHZW9yZ2UgTW91c3NhbGVtIFx1MDAzY2dlb3JnZS5tb3Vzc2FsZW1Ab3V0bG9vay5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFF1YWxjb21tIE0wIEJUU1MgUGVyaXBoZXJhbCBTZWN1cmUgSW1hZ2UgTG9hZGVyIGxvYWRzIGZpcm13YXJlIGFuZCBwb3dlcnMgdXBcbisgIHRoZSBNMCBCVFNTIHJlbW90ZSBwcm9jZXNzb3IgY29yZSBvbiB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSBxY29tLGlwcTUwMTgtYnRzcy1waWxcbitcbisgIGZpcm13YXJlLW5hbWU6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBGaXJtd2FyZSBuYW1lIGZvciB0aGUgTTAgQmx1ZXRvb3RoIFN1YnN5c3RlbSBjb3JlXG4rXG4rICBjbG9ja3M6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgbG93IHBvd2VyIG9zY2lsbGF0b3IgY2xvY2tcbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBidHNzX2xwb19jbGtcbitcbisgIG1lbW9yeS1yZWdpb246XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXJ2ZWQgbWVtb3J5IGNhcnZlb3V0XG4rXG4rICByZXNldHM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IE0wIEJUU1MgcmVzZXRcbitcbisgIHJlc2V0LW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBidHNzX3Jlc2V0XG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gZmlybXdhcmUtbmFtZVxuKyAgLSBjbG9ja3NcbisgIC0gY2xvY2stbmFtZXNcbisgIC0gcmVzZXRzXG4rICAtIHJlc2V0LW5hbWVzXG4rICAtIG1lbW9yeS1yZWdpb25cbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9xY29tLGdjYy1pcHE1MDE4LmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcmVzZXQvcWNvbSxnY2MtaXBxNTAxOC5oXHUwMDNlXG4rXG4rICAgIHJlbW90ZXByb2Mge1xuKyAgICAgIGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiO1xuK1xuKyAgICAgIGZpcm13YXJlLW5hbWUgPSBcInFjYS9idF9md19wYXRjaC5tYm5cIjtcbitcbisgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZnY2MgR0NDX0JUU1NfTFBPX0NMS1x1MDAzZTtcbisgICAgICBjbG9jay1uYW1lcyA9IFwiYnRzc19scG9fY2xrXCI7XG4rICAgICAgcmVzZXRzID0gXHUwMDNjXHUwMDI2Z2NjIEdDQ19CVFNTX0JDUlx1MDAzZTtcbisgICAgICByZXNldC1uYW1lcyA9IFwiYnRzc19yZXNldFwiO1xuK1xuKyAgICAgIG1lbW9yeS1yZWdpb24gPSBcdTAwM2NcdTAwMjZidHNzX3JlZ2lvblx1MDAzZTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vaXBxNTAxOC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuaW5kZXggNmY4MDA0YTIyYTFmZmQuLjRmZGYyMGM4N2IwYTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL2lwcTUwMTguZHRzaVxuQEAgLTE3LDYgKzE3LDE3IEBAIC8ge1xuIFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFx0I3NpemUtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFxuK1x0Ymx1ZXRvb3RoOiBibHVldG9vdGgge1xuK1x0XHRjb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRcIjtcbitcbitcdFx0cWNvbSxpcGMgPSBcdTAwM2NcdTAwMjZhcGNzX2dsYiA4IDIzXHUwMDNlO1xuK1x0XHRpbnRlcnJ1cHRzID0gXHUwMDNjR0lDX1NQSSAxNjIgSVJRX1RZUEVfRURHRV9SSVNJTkdcdTAwM2U7XG4rXG4rXHRcdHFjb20scnByb2MgPSBcdTAwM2NcdTAwMjZtMF9idHNzXHUwMDNlO1xuK1xuK1x0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHR9O1xuK1xuIFx0Y2xvY2tzIHtcbiBcdFx0Z2VwaHlfcnhfY2xrOiBnZXBoeS1yeC1jbGsge1xuIFx0XHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLWNsb2NrXCI7XG5AQCAtMTMxLDExICsxNDIsMzEgQEAgcHNjaSB7XG4gXHRcdG1ldGhvZCA9IFwic21jXCI7XG4gXHR9O1xuIFxuK1x0bTBfYnRzczogcmVtb3RlcHJvYyB7XG4rXHRcdGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiO1xuK1xuK1x0XHRmaXJtd2FyZS1uYW1lID0gXCJxY2EvYnRfZndfcGF0Y2gubWJuXCI7XG4rXG4rXHRcdGNsb2NrcyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19MUE9fQ0xLXHUwMDNlO1xuK1x0XHRjbG9jay1uYW1lcyA9IFwiYnRzc19scG9fY2xrXCI7XG4rXHRcdHJlc2V0cyA9IFx1MDAzY1x1MDAyNmdjYyBHQ0NfQlRTU19CQ1JcdTAwM2U7XG4rXHRcdHJlc2V0LW5hbWVzID0gXCJidHNzX3Jlc2V0XCI7XG4rXG4rXHRcdG1lbW9yeS1yZWdpb24gPSBcdTAwM2NcdTAwMjZidHNzX3JlZ2lvblx1MDAzZTtcbitcbitcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0fTtcbitcbiBcdHJlc2VydmVkLW1lbW9yeSB7XG4gXHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMlx1MDAzZTtcbiBcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MyXHUwMDNlO1xuIFx0XHRyYW5nZXM7XG4gXG4rXHRcdGJ0c3NfcmVnaW9uOiBibHVldG9vdGhANzAwMDAwMCB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMHgwIDB4MDcwMDAwMDAgMHgwIDB4NTgwMDBcdTAwM2U7XG4rXHRcdFx0bm8tbWFwO1xuK1x0XHR9O1xuK1xuIFx0XHRib290bG9hZGVyQDRhODAwMDAwIHtcbiBcdFx0XHRyZWcgPSBcdTAwM2MweDAgMHg0YTgwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4gXHRcdFx0bm8tbWFwO1xuQEAgLTY0Nyw3ICs2NzgsOCBAQCB3YXRjaGRvZzogd2F0Y2hkb2dAYjAxNzAwMCB7XG4gXG4gXHRcdGFwY3NfZ2xiOiBtYWlsYm94QGIxMTEwMDAge1xuIFx0XHRcdGNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1hcGNzLWFwcHMtZ2xvYmFsXCIsXG4tXHRcdFx0XHQgICAgIFwicWNvbSxpcHE2MDE4LWFwY3MtYXBwcy1nbG9iYWxcIjtcbitcdFx0XHRcdCAgICAgXCJxY29tLGlwcTYwMTgtYXBjcy1hcHBzLWdsb2JhbFwiLFxuK1x0XHRcdFx0ICAgICBcInN5c2NvblwiO1xuIFx0XHRcdHJlZyA9IFx1MDAzYzB4MGIxMTEwMDAgMHgxMDAwXHUwMDNlO1xuIFx0XHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4gXHRcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2YTUzcGxsXHUwMDNlLCBcdTAwM2NcdTAwMjZ4b19ib2FyZF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmdjYyBHUExMMFx1MDAzZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuaW5kZXggNGU4YzI0ZDc1N2U5YTQuLjZiOGJlZDZhNmZmZGMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1xuQEAgLTQxMyw2ICs0MTMsMTcgQEAgY29uZmlnIEJUX01US1VBUlRcbiBcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1lZGlhVGVrIEJsdWV0b290aCBVQVJUIGRldmljZXNcbiBcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidG10a3VhcnQpLlxuIFxuK2NvbmZpZyBCVF9RQ09NSVBDXG4rXHR0cmlzdGF0ZSBcIlF1YWxjb21tIElQUTUwMTggSVBDIGJhc2VkIEhDSSBzdXBwb3J0XCJcbitcdHNlbGVjdCBCVF9RQ0FcbitcdGhlbHBcbitcdCAgUXVhbGNvbW0gSVBRNTAxOCBJUEMgYmFzZWQgSENJIGRyaXZlci5cbitcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBicmlkZ2UgSENJIGRhdGEgb250byBzaGFyZWQgbWVtb3J5IGJldHdlZW5cbitcdCAgdGhlIGhvc3QgYW5kIHRoZSBNMCBCVFNTIGNvcmUuXG4rXG4rXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBIQ0kgb3ZlciBRdWFsY29tbSBJUEMgaW50byB0aGVcbitcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgYXMgYSBtb2R1bGUuXG4rXG4gY29uZmlnIEJUX1FDT01TTURcbiBcdHRyaXN0YXRlIFwiUXVhbGNvbW0gU01EIGJhc2VkIEhDSSBzdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gUlBNU0cgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgUlBNU0c9bilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlXG5pbmRleCBlNmIxYzExODBkMWRjOS4uMDVmMTkwNDdiZWQwN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGVcbkBAIC0yMCw2ICsyMCw3IEBAIG9iai0kKENPTkZJR19CVF9NUlZMKVx0XHQrPSBidG1ydmwub1xuIG9iai0kKENPTkZJR19CVF9NUlZMX1NESU8pXHQrPSBidG1ydmxfc2Rpby5vXG4gb2JqLSQoQ09ORklHX0JUX01US1NESU8pXHQrPSBidG10a3NkaW8ub1xuIG9iai0kKENPTkZJR19CVF9NVEtVQVJUKVx0Kz0gYnRtdGt1YXJ0Lm9cbitvYmotJChDT05GSUdfQlRfUUNPTUlQQylcdCs9IGJ0cWNvbWlwYy5vXG4gb2JqLSQoQ09ORklHX0JUX1FDT01TTUQpXHQrPSBidHFjb21zbWQub1xuIG9iai0kKENPTkZJR19CVF9CQ00pXHRcdCs9IGJ0YmNtLm9cbiBvYmotJChDT05GSUdfQlRfUlRMKVx0XHQrPSBidHJ0bC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi5lMTM2ZTkxOTc2Y2ZiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbkBAIC0zODAsNiArMzgwLDkgQEAgc3RhdGljIGludCBxY2FfdGx2X2NoZWNrX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBUTFZfVFlQRV9OVk06XG4rXHRcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbitcdFx0XHRicmVhaztcbitcbiBcdFx0aWYgKGZ3X3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgdGx2X3R5cGVfaGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC03OTQsNiArNzk3LDkgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0ZWxzZVxuIFx0XHRyb21fdmVyID0gKChzb2NfdmVyIFx1MDAyNiAweDAwMDAwZjAwKSBcdTAwM2VcdTAwM2UgMHgwNCkgfCAoc29jX3ZlciBcdTAwMjYgMHgwMDAwMDAwZik7XG4gXG4rXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXG4rXHRcdGdvdG8gZG93bmxvYWRfbnZtO1xuK1xuIFx0aWYgKHNvY190eXBlID09IFFDQV9XQ042NzUwKVxuIFx0XHRxY2Ffc2VuZF9wYXRjaF9jb25maWdfY21kKGhkZXYpO1xuIFxuQEAgLTg4MSw2ICs4ODcsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRpZiAoc29jX3R5cGUgPT0gUUNBX1FDQTIwNjYgfHwgc29jX3R5cGUgPT0gUUNBX1dDTjc4NTApXG4gXHRcdHFjYV9yZWFkX2Z3X2JvYXJkX2lkKGhkZXYsIFx1MDAyNmJvYXJkaWQpO1xuIFxuK2Rvd25sb2FkX252bTpcbiBcdC8qIERvd25sb2FkIE5WTSBjb25maWd1cmF0aW9uICovXG4gXHRjb25maWcudHlwZSA9IFRMVl9UWVBFX05WTTtcbiBcdGlmIChmaXJtd2FyZV9uYW1lKSB7XG5AQCAtOTM5LDYgKzk0NiwxMCBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRcdFx0cWNhX2dldF9udm1fbmFtZV9ieV9ib2FyZChjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4gXHRcdFx0XHQgXCJobXRudlwiLCBzb2NfdHlwZSwgdmVyLCByb21fdmVyLCBib2FyZGlkKTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBRQ0FfSVBRNTAxODpcbitcdFx0XHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXG4rXHRcdFx0XHQgXCJxY2EvbXBudiUwMnguYmluXCIsIHJvbV92ZXIpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHNucHJpbnRmKGNvbmZpZy5md25hbWUsIHNpemVvZihjb25maWcuZnduYW1lKSxcbiBcdFx0XHRcdCBcInFjYS9udm1fJTA4eC5iaW5cIiwgc29jX3Zlcik7XG5AQCAtOTU4LDYgKzk2OSw5IEBAIGludCBxY2FfdWFydF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDhfdCBiYXVkcmF0ZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbitcdGlmIChzb2NfdHlwZSA9PSBRQ0FfSVBRNTAxOClcbitcdFx0bXNsZWVwKE5WTV9SRUFEWV9ERUxBWV9NUyk7XG4rXG4gXHRzd2l0Y2ggKHNvY190eXBlKSB7XG4gXHRjYXNlIFFDQV9RQ0EyMDY2OlxuIFx0Y2FzZSBRQ0FfUUNBNjM5MDpcbkBAIC05NjUsNiArOTc5LDcgQEAgaW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxuIFx0Y2FzZSBRQ0FfV0NONjc1MDpcbiBcdGNhc2UgUUNBX1dDTjY4NTU6XG4gXHRjYXNlIFFDQV9XQ043ODUwOlxuK1x0Y2FzZSBRQ0FfSVBRNTAxODpcbiBcdFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xMDAxLDYgKzEwMTYsNyBAQCBpbnQgcWNhX3VhcnRfc2V0dXAoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQ4X3QgYmF1ZHJhdGUsXG4gXHRjYXNlIFFDQV9XQ042NzUwOlxuIFx0Y2FzZSBRQ0FfV0NONjg1NTpcbiBcdGNhc2UgUUNBX1dDTjc4NTA6XG4rXHRjYXNlIFFDQV9JUFE1MDE4OlxuIFx0XHQvKiBnZXQgZncgYnVpbGQgaW5mbyAqL1xuIFx0XHRlcnIgPSBxY2FfcmVhZF9md19idWlsZF9pbmZvKGhkZXYpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmggYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5pbmRleCA4ZjNjMWIxYzc3YjNkZS4uMzQzY2Q2MmQxMTM3MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5oXG5AQCAtNTQsNiArNTQsOCBAQFxuICNkZWZpbmUgUUNBX0hTUF9HRl9TT0NfSURcdFx0MHgxMjAwXG4gI2RlZmluZSBRQ0FfSFNQX0dGX1NPQ19NQVNLXHRcdDB4MDAwMGZmMDBcbiBcbisjZGVmaW5lIE5WTV9SRUFEWV9ERUxBWV9NU1x0XHQxNTAwXG4rXG4gZW51bSBxY2FfYmF1ZHJhdGUge1xuIFx0UUNBX0JBVURSQVRFXzExNTIwMFx0PSAwLFxuIFx0UUNBX0JBVURSQVRFXzU3NjAwLFxuQEAgLTE1OCw2ICsxNjAsNyBAQCBlbnVtIHFjYV9idHNvY190eXBlIHtcbiBcdFFDQV9XQ042NzUwLFxuIFx0UUNBX1dDTjY4NTUsXG4gXHRRQ0FfV0NONzg1MCxcbitcdFFDQV9JUFE1MDE4LFxuIH07XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1FDQSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY2MmE3NWI2YzRhOTBiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuY1xuQEAgLTAsMCArMSw5MzkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlbW90ZXByb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnRxY2EuaFwiXG4rXG4rLyoqIE1lc3NhZ2UgaGVhZGVyIGZvcm1hdC5cbisgKlxuKyAqICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogQml0UG9zIHwgICAgMTUgICAgfCAxNCB8IDEzIHwgMTIgfCAxMSB8IDEwIHwgIDkgIHwgIDggIHwgICAgNyAtIDAgICAgIHxcbisgKiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIEZpZWxkICB8IGxvbmdfbXNnIHxBQ0sgfCAgICAgICAgUkZVICAgICAgICB8ICBwa3RfdHlwZSB8ICAgIGNtZCAgICAgICB8XG4rICogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlxuKyAqIC0gbG9uZ19tc2cgICA6IElmIHNldCwgaW5kaWNhdGVzIHRoYXQgdGhlIHBheWxvYWQgaXMgbGFyZ2VyIHRoYW4gdGhlXG4rICogICAgICAgICAgICAgICAgSVBDX01TR19QTERfU1ouIFRoZSBwYXlsb2FkIGluc3RlYWQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZVxuKyAqICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSBidWZmZXIgaW4gdGhlIHNoYXJlZCBCVFNTIG1lbW9yeSBzcGFjZS5cbisgKlxuKyAqIC0gQUNLICAgICAgIDogU2V0IGlmIHNlbmRpbmcgQUNLIGlmIHJlcXVpcmVkIGJ5IHNlbmRpbmcgYWNrbm93bGVkZWdlbWVudFxuKyAqICAgICAgICAgICAgICAgIHRvIHNlbmRlciBpLmUuIHNlbmQgYW4gYWNrIElQQyBpbnRlcnJ1cHQgaWYgc2V0LlxuKyAqXG4rICogLSBSRlUgICAgICAgIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4rICpcbisgKiAtIHBrdF90eXBlICAgOiBJUEMgUGFja2V0IFR5cGVcbisgKlxuKyAqIC0gY21kICAgICAgICA6IENvbnRhaW5zIHVuaXF1ZSBjb21tYW5kIElEXG4rICovXG4rXG4rI2RlZmluZSBJUENfTVNHX0hEUl9TWlx0XHQ0XG4rI2RlZmluZSBJUENfTVNHX1BMRF9TWlx0XHQ0MFxuKyNkZWZpbmUgSVBDX1RPVEFMX01TR19TWlx0KElQQ19NU0dfSERSX1NaICsgSVBDX01TR19QTERfU1opXG4rXG4rLyogTWVzc2FnZSBIZWFkZXIgKi9cbisjZGVmaW5lIElQQ19IRFJfTE9OR19NU0dcdEJJVCgxNSlcbisjZGVmaW5lIElQQ19IRFJfUkVRX0FDS1x0XHRCSVQoMTQpXG4rI2RlZmluZSBJUENfSERSX1BLVF9UWVBFX01BU0tcdEdFTk1BU0soOSwgOClcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0NVU1RcdDBcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX0hDSVx0MVxuKyNkZWZpbmUgIElQQ19IRFJfUEtUX1RZUEVfQVVESU9cdDJcbisjZGVmaW5lICBJUENfSERSX1BLVF9UWVBFX1JGVVx0M1xuKyNkZWZpbmUgSVBDX0hEUl9DTURfTUFTS1x0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgSVBDX0NNRF9TVE9QXHRcdDFcbisjZGVmaW5lIElQQ19DTURfU1dJVENIX1RPX1VBUlRcdDJcbisjZGVmaW5lIElQQ19DTURfUFJFUEFSRV9EVU1QXHQzXG4rI2RlZmluZSBJUENfQ01EX0NPTExFQ1RfRFVNUFx0NFxuKyNkZWZpbmUgSVBDX0NNRF9TVEFSVFx0XHQ1XG4rXG4rI2RlZmluZSBJUENfVFhfUVNJWkVcdFx0MzJcbitcbisjZGVmaW5lXHRUT19BUFBTX0FERFIoYSlcdFx0KGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIChpbnQpKHVpbnRwdHJfdClhKVxuKyNkZWZpbmVcdFRPX0JUX0FERFIoYSlcdFx0KGEgLSBkZXNjLVx1MDAzZW1lbV9yZWdpb24pXG4rI2RlZmluZSBJUENfTEJVRl9TWih3LCB4LCB5LCB6KVx0KCgoVE9fQlRfQUREUigodm9pZCAqKXcpICsgdy1cdTAwM2V4KSAtIHctXHUwMDNleSkgLyB3LVx1MDAzZXopXG4rXG4rI2RlZmluZVx0R0VUX05PX09GX0JMT0NLUyhhLCBiKSAoKGEgKyBiIC0gMSkgLyBiKVxuK1xuKyNkZWZpbmUgR0VUX1JYX0lOREVYX0ZST01fQlVGKHgsIHkpXHQoKHggLSBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbHJpbmdfYnVmKSAvIHkpXG4rXG4rI2RlZmluZSBHRVRfVFhfSU5ERVhfRlJPTV9CVUYoeCwgeSlcdCgoeCAtIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYpIC8geSlcbitcbisjZGVmaW5lIElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhidWYsIGxlbiwgc3opXHRcdFxcXG4rXHQoKGJ1ZiArIGxlbikgXHUwMDNlIChkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbHJpbmdfYnVmICtcdFxcXG4rXHQoc3ogKiBkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250KSkpXG4rXG4rI2RlZmluZSBQT1dFUl9DT05UUk9MX0RFTEFZX01TXHQ1MFxuK1xuKyNkZWZpbmUgQlRTU19QQVNfSURcdDB4Y1xuK1xuK3N0cnVjdCBsb25nX21zZ19pbmZvIHtcbitcdF9fbGUxNiBzbXNnX2ZyZWVfY250O1xuK1x0X19sZTE2IGxtc2dfZnJlZV9jbnQ7XG4rXHR1OCByaWR4O1xuK1x0dTggd2lkeDtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCBpcGNfYXV4X3B0ciB7XG4rXHRfX2xlMzIgbGVuO1xuK1x0X19sZTMyIGJ1Zjtcbit9IF9fcGFja2VkO1xuK1xuK3N0cnVjdCByaW5nX2J1ZmZlciB7XG4rXHRfX2xlMTYgbXNnX2hkcjtcbitcdF9fbGUxNiBsZW47XG4rXHR1bmlvbiB7XG4rXHRcdHU4IHNtc2dfZGF0YVtJUENfTVNHX1BMRF9TWl07XG4rXHRcdF9fbGUzMiBsbXNnX2RhdGE7XG4rXHR9IHBheWxvYWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyB7XG4rXHRfX2xlMzIgcmJ1ZjtcbitcdHU4IHJpbmdfYnVmX2NudDtcbitcdHU4IHJpZHg7XG4rXHR1OCB3aWR4O1xuK1x0dTggdGlkeDtcbitcdF9fbGUzMiBuZXh0O1xuK30gX19wYWNrZWQ7XG4rXG4rc3RydWN0IGNvbnRleHRfaW5mbyB7XG4rXHRfX2xlMTYgdG90YWxfc2l6ZTtcbitcdHU4IGxtc2dfYnVmX2NudDtcbitcdHU4IHNtc2dfYnVmX2NudDtcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvIHNyaW5nX2J1Zl9pbmZvO1xuK1x0X19sZTMyIHNyaW5nX2J1ZjtcbitcdF9fbGUzMiBscmluZ19idWY7XG4rXHRfX2xlMzIgcmVzZXJ2ZWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgcWNvbV9idHNzIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBycHJvYyAqcnByb2M7XG4rXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbitcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHUzMiBvZmZzZXQ7XG4rXHR1MzIgYml0O1xuK1x0aW50IGlycTtcbitcbitcdHZvaWQgKm1lbV9yZWdpb247XG4rXHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbitcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbitcdHNpemVfdCBtZW1fc2l6ZTtcbitcbitcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcTtcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK1xuK1x0c3RydWN0IGNvbnRleHRfaW5mbyAqdHhfY3R4dDtcbitcdHN0cnVjdCBjb250ZXh0X2luZm8gKnJ4X2N0eHQ7XG4rXHRzdHJ1Y3QgbG9uZ19tc2dfaW5mbyBsbXNnX2N0eHQ7XG4rXG4rXHRib29sIHJ1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBidHFjb21pcGNfdXBkYXRlX3N0YXRzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbitzdGF0aWMgdm9pZCAqYnRzc19hbGxvY19sbXNnKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIHUzMiBsZW4sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgaXBjX2F1eF9wdHIgKmF1eF9wdHIsIGJvb2wgKmlzX2xidWZfZnVsbClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbitcdHU4IGlkeCwgYmxrcywgYmxrc19jb25zdW1lZDtcbitcdHZvaWQgKnJldF9wdHI7XG4rXHR1MzIgbHN6O1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VscmluZ19idWYgPT0gMCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJubyBsb25nIG1lc3NhZ2UgYnVmZmVyIGluaXRpYWxpemVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbitcdH1cbitcbitcdGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLCBsbXNnX2J1Zl9jbnQpO1xuK1x0YmxrcyA9IEdFVF9OT19PRl9CTE9DS1MobGVuLCBsc3opO1xuK1xuK1x0aWYgKCFkZXNjLVx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IHx8XG4rXHRcdFx0KGJsa3MgXHUwMDNlIGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbitcbitcdGlkeCA9IGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHg7XG4rXG4rXHRpZiAoKGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggKyBibGtzKSBcdTAwM2UgZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCkge1xuK1x0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtIGlkeDtcbitcdFx0YXV4X3B0ci1cdTAwM2VsZW4gPSBsZW4gLSAoYmxrc19jb25zdW1lZCAqIGxzeik7XG4rXHRcdGF1eF9wdHItXHUwMDNlYnVmID0gZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZjtcbitcdH1cbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAoZGVzYy1cdTAwM2VsbXNnX2N0eHQud2lkeCArIGJsa3MpICVcbitcdFx0ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudDtcbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgLT0gYmxrcztcbitcbitcdGlmIChkZXNjLVx1MDAzZWxtc2dfY3R4dC5sbXNnX2ZyZWVfY250IFx1MDAzYz1cbitcdFx0XHQoKGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VsbXNnX2J1Zl9jbnQgKiAyMCkgLyAxMDApKVxuK1x0XHQqaXNfbGJ1Zl9mdWxsID0gdHJ1ZTtcbitcbitcdHJldF9wdHIgPSBUT19BUFBTX0FERFIoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxyaW5nX2J1ZikgKyAoaWR4ICogbHN6KTtcbitcbitcdHJldHVybiByZXRfcHRyO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKmJ0c3NfZ2V0X3R4X3JidWYoc3RydWN0IHFjb21fYnRzcyAqZGVzYyxcbitcdFx0XHRcdFx0XHQgYm9vbCAqaXNfc2J1Zl9mdWxsKVxuK3tcbitcdHU4IGlkeDtcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbitcbitcdGZvciAocmluZm8gPSBcdTAwMjYoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvKTtcdHJpbmZvICE9IE5VTEw7XG4rXHRcdHJpbmZvID0gKHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICopKHVpbnRwdHJfdCkocmluZm8tXHUwMDNlbmV4dCkpIHtcbitcdFx0aWR4ID0gKHJpbmZvLVx1MDAzZXdpZHggKyAxKSAlIChkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250KTtcbitcbitcdFx0aWYgKGlkeCAhPSByaW5mby1cdTAwM2V0aWR4KSB7XG4rXHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudC0tO1xuK1xuK1x0XHRcdGlmIChkZXNjLVx1MDAzZWxtc2dfY3R4dC5zbXNnX2ZyZWVfY250IFx1MDAzYz1cbitcdFx0XHRcdCgoZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCAqIDIwKSAvIDEwMCkpXG4rXHRcdFx0XHQqaXNfc2J1Zl9mdWxsID0gdHJ1ZTtcbitcbitcdFx0XHRyZXR1cm4gcmluZm87XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuK31cbitcbitzdGF0aWMgaW50IGJ0c3Nfc2VuZChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcixcbitcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGVzYy1cdTAwM2VoZGV2O1xuK1x0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xuK1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXHRib29sIGlzX2xidWZfZnVsbCA9IGZhbHNlO1xuK1x0Ym9vbCBpc19zYnVmX2Z1bGwgPSBmYWxzZTtcbitcdHUxNiBoZHIgPSBtc2dfaGRyO1xuK1x0dm9pZCAqcHRyX2J1ZjtcbitcdHUzMiBsZW47XG4rXG4rXHQvKiBBY2NvdW50IGZvciBIQ0kgcGFja2V0IHR5cGUgYXMgaXQncyBub3QgaW5jbHVkZWQgaW4gdGhlIHNrYiBwYXlsb2FkICovXG4rXHRsZW4gPSBza2ItXHUwMDNlbGVuICsgMTtcbitcdG1lbXNldChcdTAwMjZhdXhfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGlwY19hdXhfcHRyKSk7XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBJUENfTVNHX1BMRF9TWikge1xuK1x0XHRoZHIgfD0gSVBDX0hEUl9MT05HX01TRztcbitcbitcdFx0cHRyX2J1ZiA9IGJ0c3NfYWxsb2NfbG1zZyhkZXNjLCBsZW4sXG4rXHRcdFx0XHRcdCAgXHUwMDI2YXV4X3B0ciwgXHUwMDI2aXNfbGJ1Zl9mdWxsKTtcbitcdFx0aWYgKElTX0VSUihwdHJfYnVmKSkge1xuK1x0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJsb25nIG1zZyBidWYgZnVsbFwiKTtcbitcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4Kys7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocHRyX2J1Zik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJpbmZvID0gYnRzc19nZXRfdHhfcmJ1ZihkZXNjLCBcdTAwMjZpc19zYnVmX2Z1bGwpO1xuK1x0aWYgKElTX0VSUihyaW5mbykpIHtcbitcdFx0YnRfZGV2X2VycihoZGV2LCBcInNob3J0IG1zZyBidWYgZnVsbFwiKTtcbitcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCsrO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihyaW5mbyk7XG4rXHR9XG4rXG4rXHRyYnVmID0gXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKSlbcmluZm8tXHUwMDNld2lkeF07XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBJUENfTVNHX1BMRF9TWilcbitcdFx0cmJ1Zi1cdTAwM2VwYXlsb2FkLmxtc2dfZGF0YSA9IGNwdV90b19sZTMyKFRPX0JUX0FERFIocHRyX2J1ZikpO1xuK1x0ZWxzZVxuK1x0XHRwdHJfYnVmID0gcmJ1Zi1cdTAwM2VwYXlsb2FkLnNtc2dfZGF0YTtcbitcbitcdC8qIGlmIGl0J3MgYSBzaG9ydCBtZXNzYWdlLCB0aGUgYXV4IGxlbiBhbmQgYnVmIGFyZSBOVUxMICovXG4rXHRtZW1jcHlfdG9pbyhwdHJfYnVmLCBcdTAwMjZoY2lfc2tiX3BrdF90eXBlKHNrYiksIDEpO1xuK1x0bWVtY3B5X3RvaW8oKHU4ICopcHRyX2J1ZiArIDEsIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pO1xuK1x0aWYgKGF1eF9wdHIuYnVmKSB7XG4rXHRcdG1lbWNweV90b2lvKFRPX0FQUFNfQUREUihhdXhfcHRyLmJ1ZiksXG4rXHRcdFx0ICAgIChza2ItXHUwMDNlZGF0YSArIChza2ItXHUwMDNlbGVuIC0gYXV4X3B0ci5sZW4pKSwgYXV4X3B0ci5sZW4pO1xuK1x0fVxuK1xuK1x0aWYgKGlzX3NidWZfZnVsbCB8fCBpc19sYnVmX2Z1bGwpXG4rXHRcdGhkciB8PSBJUENfSERSX1JFUV9BQ0s7XG4rXG4rXHRyYnVmLVx1MDAzZW1zZ19oZHIgPSBjcHVfdG9fbGUxNihoZHIpO1xuK1x0cmJ1Zi1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihsZW4pO1xuK1xuK1x0cmluZm8tXHUwMDNld2lkeCA9IChyaW5mby1cdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBoZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZkZXNjLVx1MDAzZXR4X3EpKSkge1xuK1x0XHRoZHIgPSBGSUVMRF9QUkVQKElQQ19IRFJfUEtUX1RZUEVfTUFTSywgSVBDX0hEUl9QS1RfVFlQRV9IQ0kpO1xuK1xuK1x0XHRyZXQgPSBidHNzX3NlbmQoZGVzYywgaGRyLCBza2IpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiKTtcbitcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZkZXNjLVx1MDAzZXR4X3EsIHNrYik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0YnRxY29taXBjX3VwZGF0ZV9zdGF0cyhkZXNjLVx1MDAzZWhkZXYsIHNrYik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBidHNzX2ZyZWVfbG1zZyhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MzIgbG1zZywgdTE2IGxlbilcbit7XG4rXHR1OCBpZHg7XG4rXHR1OCBibGtzO1xuK1x0dTMyIGxzeiA9IElQQ19MQlVGX1NaKGRlc2MtXHUwMDNldHhfY3R4dCwgdG90YWxfc2l6ZSwgbHJpbmdfYnVmLFxuK1x0XHRcdFx0ICAgbG1zZ19idWZfY250KTtcbitcbitcdGlkeCA9IEdFVF9UWF9JTkRFWF9GUk9NX0JVRihsbXNnLCBsc3opO1xuK1xuK1x0aWYgKGlkeCAhPSBkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRibGtzID0gR0VUX05PX09GX0JMT0NLUyhsZW4sIGxzeik7XG4rXG4rXHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ICA9IChkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ICArIGJsa3MpICVcbitcdFx0ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudDtcbitcbitcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgKz0gYmxrcztcbit9XG4rXG4rc3RhdGljIGludCBidHNzX3NlbmRfY3RybChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLCB1MTYgbXNnX2hkcilcbit7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm87XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXG4rXHRyaW5mbyA9IGJ0c3NfZ2V0X3R4X3JidWYoZGVzYywgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKHJpbmZvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocmluZm8pO1xuK1xuK1x0cmJ1ZiA9IFx1MDAyNigoc3RydWN0IHJpbmdfYnVmZmVyICopVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKVtyaW5mby1cdTAwM2V3aWR4XTtcbitcdHJidWYtXHUwMDNlbXNnX2hkciA9IGNwdV90b19sZTE2KG1zZ19oZHIpO1xuK1x0cmJ1Zi1cdTAwM2VsZW4gPSAwO1xuK1xuK1x0cmluZm8tXHUwMDNld2lkeCA9IChyaW5mby1cdTAwM2V3aWR4ICsgMSkgJSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlc21zZ19idWZfY250O1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19yZWN2X2N1c3RfZnJhbWUoc3RydWN0IHFjb21fYnRzcyAqZGVzYywgdTggY21kKVxuK3tcbitcdHUxNiBtc2dfaGRyID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRtc2dfaGRyIHw9IGNtZDtcbitcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIElQQ19DTURfU1RPUDpcbitcdFx0YnRfZGV2X2luZm8oZGVzYy1cdTAwM2VoZGV2LCBcIkJUU1Mgc3RvcHBlZCwgZ3JhY2VmdWxseSBzdG9wcGluZyBBUFNTIElQQ1wiKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElQQ19DTURfU1RBUlQ6XG4rXHRcdGRlc2MtXHUwMDNldHhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKCh2b2lkICopZGVzYy1cdTAwM2VyeF9jdHh0ICtcbitcdFx0XHRcdGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlcnhfY3R4dC1cdTAwM2V0b3RhbF9zaXplKSk7XG4rXHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0LndpZHggPSAwO1xuK1x0XHRkZXNjLVx1MDAzZWxtc2dfY3R4dC5yaWR4ID0gMDtcbitcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCA9IGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQ7XG4rXHRcdGRlc2MtXHUwMDNlbG1zZ19jdHh0Lmxtc2dfZnJlZV9jbnQgPSBkZXNjLVx1MDAzZXR4X2N0eHQtXHUwMDNlbG1zZ19idWZfY250O1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnVubmluZywgdHJ1ZSk7XG4rXHRcdHdha2VfdXAoXHUwMDI2ZGVzYy1cdTAwM2V3YWl0X3EpO1xuK1xuK1x0XHRidF9kZXZfaW5mbyhkZXNjLVx1MDAzZWhkZXYsIFwiQlRTUyBzdGFydGVkLCBpbml0aWFsaXppbmcgQVBTUyBCVCBJUENcIik7XG4rXHRcdHJldHVybjtcbitcdGRlZmF1bHQ6XG4rXHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcIlVuc3VwcG9ydGVkIENNRCBJRDogJXVcIiwgY21kKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSkpIHtcbitcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiQlRTUyBub3QgaW5pdGlhbGl6ZWQsIG5vIG1lc3NhZ2Ugc2VudFwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcbitcbitcdHJldCA9IGJ0c3Nfc2VuZF9jdHJsKGRlc2MsIG1zZ19oZHIpO1xuK1x0aWYgKHJldClcbitcdFx0YnRfZGV2X2VycihkZXNjLVx1MDAzZWhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgY29udHJvbCBtZXNzYWdlXCIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBidHNzX3JlY3ZfaGNpX2ZyYW1lKHN0cnVjdCBxY29tX2J0c3MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IHBrdF9sZW47XG4rXG4rXHRpZiAobGVuIFx1MDAzYyAxKVxuK1x0XHRyZXR1cm4gLUVQUk9UTztcbitcbitcdHBrdF90eXBlID0gZGF0YVswXTtcbitcbitcdHN3aXRjaCAocGt0X3R5cGUpIHtcbitcdGNhc2UgSENJX0VWRU5UX1BLVDpcbitcdHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0VWRU5UX0hEUl9TSVpFKVxuK1x0XHRcdHJldHVybiAtRUlMU0VRO1xuK1x0XHRzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHN0cnVjdCBoY2lfZXZlbnRfaGRyICopKGRhdGEgKyAxKTtcbitcbitcdFx0cGt0X2xlbiA9IEhDSV9FVkVOVF9IRFJfU0laRSArIGhkci1cdTAwM2VwbGVuO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNhc2UgSENJX0NPTU1BTkRfUEtUOiB7XG4rXHRcdGlmIChsZW4gXHUwMDNjIEhDSV9DT01NQU5EX0hEUl9TSVpFKVxuK1x0XHRcdHJldHVybiAtRUlMU0VRO1xuK1x0XHRzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKShkYXRhICsgMSk7XG4rXG4rXHRcdHBrdF9sZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSArIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VwbGVuKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEhDSV9BQ0xEQVRBX1BLVDpcbitcdHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgSENJX0FDTF9IRFJfU0laRSlcbitcdFx0XHRyZXR1cm4gLUVJTFNFUTtcbitcdFx0c3RydWN0IGhjaV9hY2xfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9hY2xfaGRyICopKGRhdGEgKyAxKTtcbitcbitcdFx0cGt0X2xlbiA9IEhDSV9BQ0xfSERSX1NJWkUgKyBsZTE2X3RvX2NwdShoZHItXHUwMDNlZGxlbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBIQ0lfU0NPREFUQV9QS1Q6XG4rXHR7XG4rXHRcdGlmIChsZW4gXHUwMDNjIEhDSV9TQ09fSERSX1NJWkUpXG4rXHRcdFx0cmV0dXJuIC1FSUxTRVE7XG4rXHRcdHN0cnVjdCBoY2lfc2NvX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfc2NvX2hkciAqKShkYXRhICsgMSk7XG4rXG4rXHRcdHBrdF9sZW4gPSBIQ0lfU0NPX0hEUl9TSVpFICsgaGRyLVx1MDAzZWRsZW47XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXG4rXHRpZiAocGt0X2xlbiBcdTAwM2UgbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNrYiA9IGJ0X3NrYl9hbGxvYyhwa3RfbGVuLCBHRlBfQVRPTUlDKTtcbitcdGlmICghc2tiKSB7XG4rXHRcdGRlc2MtXHUwMDNlaGRldi1cdTAwM2VzdGF0LmVycl9yeCsrO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHNrYi1cdTAwM2VkZXYgPSAodm9pZCAqKWRlc2MtXHUwMDNlaGRldjtcbitcdGhjaV9za2JfcGt0X3R5cGUoc2tiKSA9IHBrdF90eXBlO1xuK1x0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSArIDEsIHBrdF9sZW4pO1xuK1xuK1x0aGNpX3JlY3ZfZnJhbWUoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuK1x0ZGVzYy1cdTAwM2VoZGV2LVx1MDAzZXN0YXQuYnl0ZV9yeCArPSBwa3RfbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3NfcHJvY2Vzc19yeChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqcmluZm8sXG4rXHRcdFx0XHQgIGJvb2wgKmFjaywgdTggKnJ4X2NvdW50KVxuK3tcbitcdHU4IHJpZHgsIGxidWZfaWR4LCBibGtzX2NvbnN1bWVkLCBwa3RfdHlwZSwgY21kO1xuK1x0c3RydWN0IGlwY19hdXhfcHRyIGF1eF9wdHI7XG4rXHRzdHJ1Y3QgcmluZ19idWZmZXIgKnJidWY7XG4rXHR1aW50OF90ICpyeGJ1ZiA9IE5VTEw7XG4rXHR1bnNpZ25lZCBjaGFyICpidWY7XG4rXHR1MzIgbHN6O1xuK1x0aW50IHJldDtcbitcbitcdHJpZHggPSByaW5mby1cdTAwM2VyaWR4O1xuK1xuK1x0d2hpbGUgKHJpZHggIT0gcmluZm8tXHUwMDNld2lkeCkge1xuK1x0XHRtZW1zZXQoXHUwMDI2YXV4X3B0ciwgMCwgc2l6ZW9mKHN0cnVjdCBpcGNfYXV4X3B0cikpO1xuK1xuK1x0XHRyYnVmID0gXHUwMDI2KChzdHJ1Y3QgcmluZ19idWZmZXIgKikoVE9fQVBQU19BRERSKHJpbmZvLVx1MDAzZXJidWYpKSlbcmlkeF07XG4rXG4rXHRcdGlmIChyYnVmLVx1MDAzZW1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbitcdFx0XHRyeGJ1ZiA9IFRPX0FQUFNfQUREUihyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhKTtcbitcdFx0XHRsc3ogPSBJUENfTEJVRl9TWihkZXNjLVx1MDAzZXJ4X2N0eHQsIHRvdGFsX3NpemUsIGxyaW5nX2J1ZixcbitcdFx0XHRcdCAgIGxtc2dfYnVmX2NudCk7XG4rXG4rXHRcdFx0aWYgKElTX1JYX01FTV9OT05fQ09OVElHSU9VUyhyYnVmLVx1MDAzZXBheWxvYWQubG1zZ19kYXRhLFxuK1x0XHRcdFx0XHRcdCAgICAgcmJ1Zi1cdTAwM2VsZW4sIGxzeikpIHtcbitcdFx0XHRcdGxidWZfaWR4ID0gR0VUX1JYX0lOREVYX0ZST01fQlVGKFxuK1x0XHRcdFx0XHRcdHJidWYtXHUwMDNlcGF5bG9hZC5sbXNnX2RhdGEsIGxzeik7XG4rXG4rXHRcdFx0XHRibGtzX2NvbnN1bWVkID0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxtc2dfYnVmX2NudCAtXG4rXHRcdFx0XHRcdGxidWZfaWR4O1xuK1x0XHRcdFx0YXV4X3B0ci5sZW4gPSByYnVmLVx1MDAzZWxlbiAtIChibGtzX2NvbnN1bWVkICogbHN6KTtcbitcdFx0XHRcdGF1eF9wdHIuYnVmID0gZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZWxyaW5nX2J1ZjtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cnhidWYgPSByYnVmLVx1MDAzZXBheWxvYWQuc21zZ19kYXRhO1xuK1x0XHR9XG4rXG4rXHRcdCphY2sgPSAocmJ1Zi1cdTAwM2Vtc2dfaGRyIFx1MDAyNiBJUENfSERSX1JFUV9BQ0spO1xuK1xuK1x0XHRwa3RfdHlwZSA9IEZJRUxEX0dFVChJUENfSERSX1BLVF9UWVBFX01BU0ssIHJidWYtXHUwMDNlbXNnX2hkcik7XG4rXG4rXHRcdHN3aXRjaCAocGt0X3R5cGUpIHtcbitcdFx0Y2FzZSBJUENfSERSX1BLVF9UWVBFX0hDSTpcbitcdFx0XHRidWYgPSBrbWFsbG9jKHJidWYtXHUwMDNlbGVuLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRpZiAoIWJ1Zikge1xuK1x0XHRcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bWVtY3B5X2Zyb21pbyhidWYsIHJ4YnVmLCByYnVmLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKTtcbitcbitcdFx0XHRpZiAoYXV4X3B0ci5idWYpXG4rXHRcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiArIChyYnVmLVx1MDAzZWxlbiAtIGF1eF9wdHIubGVuKSxcbitcdFx0XHRcdFx0ICAgICAgVE9fQVBQU19BRERSKGF1eF9wdHIuYnVmKSwgYXV4X3B0ci5sZW4pO1xuK1xuK1x0XHRcdHJldCA9IGJ0c3NfcmVjdl9oY2lfZnJhbWUoZGVzYywgYnVmLCByYnVmLVx1MDAzZWxlbik7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGJ0X2Rldl9lcnIoZGVzYy1cdTAwM2VoZGV2LCBcIkZhaWxlZCB0byBwcm9jZXNzIEhDSSBmcmFtZTogJWRcIiwgcmV0KTtcbitcdFx0XHRrZnJlZShidWYpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElQQ19IRFJfUEtUX1RZUEVfQ1VTVDpcbitcdFx0XHRjbWQgPSBGSUVMRF9HRVQoSVBDX0hEUl9DTURfTUFTSywgcmJ1Zi1cdTAwM2Vtc2dfaGRyKTtcbitcdFx0XHRidHNzX3JlY3ZfY3VzdF9mcmFtZShkZXNjLCBjbWQpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJpZHggPSAocmlkeCArIDEpICUgcmluZm8tXHUwMDNlcmluZ19idWZfY250O1xuK1xuK1x0XHRpZiAocnhfY291bnQpXG4rXHRcdFx0KCpyeF9jb3VudCkrKztcbitcbitcdFx0cmluZm8tXHUwMDNlcmlkeCA9IHJpZHg7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRzc19wcm9jZXNzX2FjayhzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCByaW5nX2J1ZmZlcl9pbmZvICpyaW5mbztcbitcdHN0cnVjdCByaW5nX2J1ZmZlciAqcmJ1ZjtcbitcdHU4IHRpZHg7XG4rXG4rXHRmb3IgKHJpbmZvID0gXHUwMDI2ZGVzYy1cdTAwM2V0eF9jdHh0LVx1MDAzZXNyaW5nX2J1Zl9pbmZvOyByaW5mbyAhPSBOVUxMO1xuK1x0XHRyaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4rXHRcdHRpZHggPSByaW5mby1cdTAwM2V0aWR4O1xuK1x0XHRyYnVmID0gKHN0cnVjdCByaW5nX2J1ZmZlciAqKVRPX0FQUFNfQUREUihyaW5mby1cdTAwM2VyYnVmKTtcbitcbitcdFx0d2hpbGUgKHRpZHggIT0gcmluZm8tXHUwMDNlcmlkeCkge1xuK1x0XHRcdGlmIChyYnVmW3RpZHhdLm1zZ19oZHIgXHUwMDI2IElQQ19IRFJfTE9OR19NU0cpIHtcbitcdFx0XHRcdGJ0c3NfZnJlZV9sbXNnKGRlc2MsXG4rXHRcdFx0XHRcdCAgICAgICByYnVmW3RpZHhdLnBheWxvYWQubG1zZ19kYXRhLFxuK1x0XHRcdFx0XHQgICAgICAgcmJ1Zlt0aWR4XS5sZW4pO1xuK1x0XHRcdH1cbitcbitcdFx0XHR0aWR4ID0gKHRpZHggKyAxKSAlIGRlc2MtXHUwMDNldHhfY3R4dC1cdTAwM2VzbXNnX2J1Zl9jbnQ7XG4rXHRcdFx0ZGVzYy1cdTAwM2VsbXNnX2N0eHQuc21zZ19mcmVlX2NudCsrO1xuK1x0XHR9XG4rXG4rXHRcdHJpbmZvLVx1MDAzZXRpZHggPSB0aWR4O1xuK1xuK1x0XHRidHNzX3Byb2Nlc3NfdHhfcXVldWUoZGVzYyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ0c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxY29tX2J0c3MsIHdvcmspO1xuK1x0c3RydWN0IHJpbmdfYnVmZmVyX2luZm8gKnJpbmZvO1xuK1x0Ym9vbCBhY2sgPSBmYWxzZTtcbitcdHUzMiBvZmZzZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNlcnByb2MtXHUwMDNlc3RhdGUgIT0gUlBST0NfUlVOTklORylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmRlc2MtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAodW5saWtlbHkoIVJFQURfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcpKSkge1xuK1x0XHQvLyBGVyBzZXRzIG9mZnNldCBvZiBSWCBjb250ZXh0IGluZm8gYXQgc3RhcnQgb2YgbWVtb3J5IHJlZ2lvbiB1cG9uIGJvb3RcbitcdFx0b2Zmc2V0ID0gcmVhZGwoZGVzYy1cdTAwM2VtZW1fcmVnaW9uKTtcbitcdFx0ZGV2X2RiZyhkZXNjLVx1MDAzZWRldiwgXCJvZmZzZXQgYWZ0ZXIgTTAgYm9vdDogMHglMDh4XFxuXCIsIG9mZnNldCk7XG4rXHRcdGRlc2MtXHUwMDNlcnhfY3R4dCA9IChzdHJ1Y3QgY29udGV4dF9pbmZvICopKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIG9mZnNldCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRidHNzX3Byb2Nlc3NfYWNrKGRlc2MpO1xuK1x0fVxuK1xuK1x0Zm9yIChyaW5mbyA9IFx1MDAyNihkZXNjLVx1MDAzZXJ4X2N0eHQtXHUwMDNlc3JpbmdfYnVmX2luZm8pO1xuK1x0ICAgICByaW5mbyAhPSBOVUxMO1xuK1x0ICAgICByaW5mbyA9IChzdHJ1Y3QgcmluZ19idWZmZXJfaW5mbyAqKSh1aW50cHRyX3QpKHJpbmZvLVx1MDAzZW5leHQpKSB7XG4rXHRcdHJldCA9IGJ0c3NfcHJvY2Vzc19yeChkZXNjLCByaW5mbywgXHUwMDI2YWNrLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVzYy1cdTAwM2VyeF9jdHh0LVx1MDAzZXNtc2dfYnVmX2NudCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRidF9kZXZfZXJyKGRlc2MtXHUwMDNlaGRldiwgXCJGYWlsZWQgdG8gcHJvY2VzcyBwZWVyIG1zZ3M6ICVkXCIsIHJldCk7XG4rXHRcdFx0Z290byBzcGluX3VubG9jaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGFjaylcbitcdFx0cmVnbWFwX3NldF9iaXRzKGRlc2MtXHUwMDNlcmVnbWFwLCBkZXNjLVx1MDAzZW9mZnNldCwgQklUKGRlc2MtXHUwMDNlYml0KSk7XG4rXG4rc3Bpbl91bmxvY2s6XG4rXHRzcGluX3VubG9jayhcdTAwMjZkZXNjLVx1MDAzZWxvY2spO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgYnRzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBkYXRhO1xuK1xuK1x0cXVldWVfd29yayhkZXNjLVx1MDAzZXdxLCBcdTAwMjZkZXNjLVx1MDAzZXdvcmspO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IGJ0c3NfaW5pdChzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGVzYy1cdTAwM2V3YWl0X3EpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2Vsb2NrKTtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGVzYy1cdTAwM2V0eF9xKTtcbitcbitcdGRlc2MtXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcImJ0c3Nfd3FcIik7XG4rXHRpZiAoIWRlc2MtXHUwMDNld3EpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZkZXNjLVx1MDAzZXdvcmssIGJ0c3Nfd29ya2VyKTtcbitcbitcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkZXNjLVx1MDAzZWlycSwgTlVMTCwgYnRzc19pcnFfaGFuZGxlcixcbitcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XCJidHNzX2lycVwiLCBkZXNjKTtcbitcbitcdGlmIChyZXQpXG4rXHRcdGRldl9lcnIoZGV2LCBcImVycm9yIHJlZ2lzdGVyaW5nIGlycVslZF0gcmV0ID0gJWRcXG5cIixcbitcdFx0XHRkZXNjLVx1MDAzZWlycSwgcmV0KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTggcGt0X3R5cGUgPSBoY2lfc2tiX3BrdF90eXBlKHNrYik7XG4rXG4rXHRoZGV2LVx1MDAzZXN0YXQuYnl0ZV90eCArPSBza2ItXHUwMDNlbGVuO1xuK1x0c3dpdGNoIChwa3RfdHlwZSkge1xuK1x0Y2FzZSBIQ0lfQ09NTUFORF9QS1Q6XG4rXHRcdGhkZXYtXHUwMDNlc3RhdC5jbWRfdHgrKztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhDSV9BQ0xEQVRBX1BLVDpcbitcdFx0aGRldi1cdTAwM2VzdGF0LmFjbF90eCsrO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSENJX1NDT0RBVEFfUEtUOlxuK1x0XHRoZGV2LVx1MDAzZXN0YXQuc2NvX3R4Kys7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4re1xuK1x0c3RydWN0IHFjb21fYnRzcyAqZGVzYyA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTtcbitcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBidHNzX2luaXQoZGVzYyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJGYWlsZWQgaW5pdGlhbGl6aW5nIEJUU1M6ICVkXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKiB3YWl0IDIgc2Vjb25kcyBmb3IgZmlsZXN5c3RlbSB0byBiZWNvbWUgYXZhaWxhYmxlICovXG4rXHRtc2xlZXAoMjAwMCk7XG4rXG4rXHQvKiBCb290IE0wIGZpcm13YXJlICovXG4rXHRyZXQgPSBycHJvY19ib290KGRlc2MtXHUwMDNlcnByb2MpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRidF9kZXZfZXJyKGhkZXYsIFwiRmFpbGVkIHRvIGJvb3QgTTAgcHJvY2Vzc29yOiAlZFwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bXNsZWVwKFBPV0VSX0NPTlRST0xfREVMQVlfTVMpO1xuK1x0cmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRlc2MtXHUwMDNld2FpdF9xLCBSRUFEX09OQ0UoZGVzYy1cdTAwM2VydW5uaW5nKSxcbitcdFx0XHRcdCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTtcbitcbitcdGlmICghcmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJUaW1lb3V0IHdhaXRpbmcgZm9yIEJUU1Mgc3RhcnRcIik7XG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7XG4rXG4rXHRycHJvY19zaHV0ZG93bihkZXNjLVx1MDAzZXJwcm9jKTtcbitcdG1zbGVlcChQT1dFUl9DT05UUk9MX0RFTEFZX01TKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zaHV0ZG93bihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1xuK1x0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJ1bm5pbmcsIGZhbHNlKTtcbitcdGlmIChkZXNjLVx1MDAzZXdxICE9IE5VTEwpIHtcbitcdFx0ZGlzYWJsZV9pcnEoZGVzYy1cdTAwM2VpcnEpO1xuK1x0XHRmbHVzaF93b3JrcXVldWUoZGVzYy1cdTAwM2V3cSk7XG4rXHRcdGRldm1fZnJlZV9pcnEoZGVzYy1cdTAwM2VkZXYsIGRlc2MtXHUwMDNlaXJxLCBkZXNjKTtcbitcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRlc2MtXHUwMDNld3EpO1xuK1x0XHRkZXNjLVx1MDAzZXdxID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNhX2J0c29jX3ZlcnNpb24gdmVyO1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgY29udHJvbGxlciB0byBkbyBib3RoIExFIHNjYW4gYW5kIEJSL0VEUiBpbnF1aXJ5XG4rXHQgKiBzaW11bHRhbmVvdXNseS5cbitcdCAqL1xuK1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU0lNVUxUQU5FT1VTX0RJU0NPVkVSWSk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE5PTl9QRVJTSVNURU5UX1NFVFVQIFFVSVJLIHRvIGVuc3VyZSB0byBleGVjdXRlXG4rXHQgKiBzZXR1cCBmb3IgZXZlcnkgaGNpIHVwLlxuK1x0ICovXG4rXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XG4rXHRyZXQgPSBxY2FfcmVhZF9zb2NfdmVyc2lvbihoZGV2LCBcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgVUFSVDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGJ0X2Rldl9pbmZvKGhkZXYsIFwiUUNBIEJ1aWxkIEluZm86ICVzXCIsIGhkZXYtXHUwMDNlZndfaW5mbyk7XG4rXG4rXHQvKiBPYnRhaW4gYW5kIHNldCBCRCBhZGRyZXNzIGZyb20gTlZNRU0gY2VsbCAqL1xuK1x0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XG4rXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnRxY29taXBjX3NlbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTE2IGhkciA9IEZJRUxEX1BSRVAoSVBDX0hEUl9QS1RfVFlQRV9NQVNLLCBJUENfSERSX1BLVF9UWVBFX0hDSSk7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseSghUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnVubmluZykpKSB7XG4rXHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJCVFNTIG5vdCBpbml0aWFsaXplZCwgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiKTtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byBmcmVlX3NrYjtcbitcdH1cbitcbitcdHJldCA9IGJ0c3Nfc2VuZChkZXNjLCBoZHIsIHNrYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuK1x0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNmRlc2MtXHUwMDNldHhfcSkgXHUwMDNlPSBJUENfVFhfUVNJWkUpIHtcbitcdFx0XHRcdGJ0X2Rldl9lcnIoaGRldiwgXCJUWCBxdWV1ZSBmdWxsLCBkcm9wcGluZyBtZXNzYWdlXCIpO1xuK1x0XHRcdFx0aGRldi1cdTAwM2VzdGF0LmVycl90eCsrO1xuK1x0XHRcdFx0cmV0ID0gLUVOT0JVRlM7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRlc2MtXHUwMDNldHhfcSwgc2tiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogJWRcIiwgcmV0KTtcbitcdFx0XHRoZGV2LVx1MDAzZXN0YXQuZXJyX3R4Kys7XG4rXHRcdH1cbitcdH1cbitcbitcdGJ0cWNvbWlwY191cGRhdGVfc3RhdHMoZGVzYy1cdTAwM2VoZGV2LCBza2IpO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGJ0cWNvbWlwY19mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgcWNvbV9idHNzICpkZXNjID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpO1xuK1xuK1x0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmRlc2MtXHUwMDNldHhfcSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBidHFjb21pcGNfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9idHNzICpkZXNjKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRlc2MtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJlc291cmNlIHJlcztcbitcdGludCByZXQ7XG4rXG4rXHQvKiBsb29rdXAgcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lvbiBvZiB0aGUgcmVtb3RlcHJvYyBub2RlICovXG4rXHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRlc2MtXHUwMDNlcnByb2MtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJ1bmFibGUgdG8gYWNxdWlyZSBtZW1vcnktcmVnaW9uIHJlc291cmNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0ZGVzYy1cdTAwM2VtZW1fcGh5cyA9IHJlcy5zdGFydDtcbitcdGRlc2MtXHUwMDNlbWVtX3JlbG9jID0gcmVzLnN0YXJ0O1xuK1x0ZGVzYy1cdTAwM2VtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cmVzKTtcbitcdGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiA9IGRldm1faW9yZW1hcChkZXYsIGRlc2MtXHUwMDNlbWVtX3BoeXMsIGRlc2MtXHUwMDNlbWVtX3NpemUpO1xuK1x0aWYgKCFkZXNjLVx1MDAzZW1lbV9yZWdpb24pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwidW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uOiAlcFJcXG5cIiwgXHUwMDI2cmVzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3Jwcm9jX3B1dCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBycHJvYyAqcnByb2MgPSBkYXRhO1xuK1xuK1x0cnByb2NfcHV0KHJwcm9jKTtcbit9XG4rXG4rc3RhdGljIGludCBidHFjb21pcGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2M7XG4rXHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XG4rXHRzdHJ1Y3QgaGNpX2RldiAqaGRldjtcbitcdHVuc2lnbmVkIGludCBhcmdzWzJdO1xuK1x0aW50IHJldDtcbitcbitcdGRlc2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVzYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbitcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCJxY29tLHJwcm9jXCIsIFx1MDAyNnJwcm9jX3BoYW5kbGUpKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9FTlQsIFwiRmFpbGVkIHRvIGdldCByZW1vdGVwcm9jIGhhbmRsZVxcblwiKTtcbitcbitcdGRlc2MtXHUwMDNlcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcbitcdGlmICghZGVzYy1cdTAwM2VycHJvYylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLCBcIkZhaWxlZCB0byBnZXQgcmVtb3RlcHJvY1xcblwiKTtcbitcbitcdGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGJ0cWNvbWlwY19ycHJvY19wdXQsIGRlc2MtXHUwMDNlcnByb2MpO1xuK1xuK1x0cmV0ID0gYnRxY29taXBjX2FsbG9jX21lbW9yeV9yZWdpb24oZGVzYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGVzYy1cdTAwM2VyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3MoZGV2LVx1MDAzZW9mX25vZGUsIFwicWNvbSxpcGNcIiwgMiwgYXJncyk7XG4rXHRpZiAoSVNfRVJSKGRlc2MtXHUwMDNlcmVnbWFwKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZGVzYy1cdTAwM2VyZWdtYXApO1xuK1xuK1x0ZGVzYy1cdTAwM2VvZmZzZXQgPSBhcmdzWzBdO1xuK1x0ZGVzYy1cdTAwM2ViaXQgPSBhcmdzWzFdO1xuK1xuK1x0ZGVzYy1cdTAwM2VpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xuK1x0aWYgKGRlc2MtXHUwMDNlaXJxIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGRlc2MtXHUwMDNlaXJxLCBcIkZhaWxlZCB0byBhY3F1aXJlIElSUVxcblwiKTtcbitcbitcdGhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7XG4rXHRpZiAoIWhkZXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aGNpX3NldF9kcnZkYXRhKGhkZXYsIGRlc2MpO1xuK1x0ZGVzYy1cdTAwM2VoZGV2ID0gaGRldjtcbitcdFNFVF9IQ0lERVZfREVWKGhkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGhkZXYtXHUwMDNlYnVzID0gSENJX0lQQztcbitcbitcdGhkZXYtXHUwMDNlb3BlbiA9IGJ0cWNvbWlwY19vcGVuO1xuK1x0aGRldi1cdTAwM2VjbG9zZSA9IGJ0cWNvbWlwY19jbG9zZTtcbitcdGhkZXYtXHUwMDNlc2h1dGRvd24gPSBidHFjb21pcGNfc2h1dGRvd247XG4rXHRoZGV2LVx1MDAzZXNldHVwID0gYnRxY29taXBjX3NldHVwO1xuK1x0aGRldi1cdTAwM2VzZW5kID0gYnRxY29taXBjX3NlbmQ7XG4rXHRoZGV2LVx1MDAzZWZsdXNoID0gYnRxY29taXBjX2ZsdXNoO1xuK1x0aGRldi1cdTAwM2VzZXRfYmRhZGRyID0gcWNhX3NldF9iZGFkZHI7XG4rXG4rXHRyZXQgPSBoY2lfcmVnaXN0ZXJfZGV2KGhkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRoY2lfZnJlZV9kZXYoaGRldik7XG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVCVVNZLCBcIkZhaWxlZCB0byByZWdpc3RlciBoZGV2XFxuXCIpO1xuK1x0fVxuK1xuK1x0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGVzYyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRxY29taXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBxY29tX2J0c3MgKmRlc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VoZGV2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoY2lfdW5yZWdpc3Rlcl9kZXYoZGVzYy1cdTAwM2VoZGV2KTtcbitcdGhjaV9mcmVlX2RldihkZXNjLVx1MDAzZWhkZXYpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBidHFjb21pcGNfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInFjb20saXBxNTAxOC1idFwiIH0sXG4rXHR7IC8qIHNlbnRpbmVsICovfSxcbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJ0cWNvbWlwY19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnRxY29taXBjX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IGJ0cWNvbWlwY19wcm9iZSxcbitcdC5yZW1vdmUgPSBidHFjb21pcGNfcmVtb3ZlLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImJ0cWNvbWlwY1wiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBidHFjb21pcGNfb2ZfbWF0Y2gsXG4rXHR9LFxuK307XG4rXG4rbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihidHFjb21pcGNfZHJpdmVyKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJRdWFsY29tbSBCbHVldG9vdGggSVBDIERyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnXG5pbmRleCBjNTIxYzc0NGU3ZGJlNS4uNmI1MmY3OGYxNDI3ZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdcbkBAIC0xNjMsNiArMTYzLDE4IEBAIGNvbmZpZyBQUlVfUkVNT1RFUFJPQ1xuIFx0ICBwcm9jZXNzb3JzIG9uIHZhcmlvdXMgVEkgU29Dcy4gSXQncyBzYWZlIHRvIHNheSBOIGhlcmUgaWYgeW91J3JlXG4gXHQgIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBQUlUgb3IgaWYgeW91IGFyZSB1bnN1cmUuXG4gXG4rY29uZmlnIFFDT01fTTBfQlRTU19QSUxcbitcdHRyaXN0YXRlIFwiUXVhbGNvbW0gTTAgQlRTUyBQZXJpcGhlcmFsIEltYWdlIExvYWRlclwiXG4rXHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBBUkNIX1FDT01cbitcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcbitcdHNlbGVjdCBRQ09NX1JQUk9DX0NPTU1PTlxuK1x0c2VsZWN0IFFDT01fU0NNXG4rXHRoZWxwXG4rXHQgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgU2VjdXJlIFBlcmlwaGVyYWwgSW1hZ2VyIExvYWRlciBmb3IgdGhlXG4rXHQgIFF1YWxjb21tIEJsdWV0b290aCBTdWJzeXN0ZW0gcnVubmluZyBvbiB0aGUgTTAgcmVtb3RlIHByb2Nlc3NvciBmb3VuZFxuK1x0ICBpbiB0aGUgSVBRNTAxOCBTb0MuIFRoZSBNMCBjb3JlIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgdXNpbmcgYVxuK1x0ICBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIGNhbGwgdG8gVHJ1c3Rab25lLlxuK1xuIGNvbmZpZyBRQ09NX1BJTF9JTkZPXG4gXHR0cmlzdGF0ZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZSBiL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZVxuaW5kZXggMWM3NTk4Yjg0NzVkNjAuLmRmODBmYWY4ZDBkZjZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGVcbkBAIC0yMSw2ICsyMSw3IEBAIG9iai0kKENPTkZJR19EQThYWF9SRU1PVEVQUk9DKVx0XHQrPSBkYTh4eF9yZW1vdGVwcm9jLm9cbiBvYmotJChDT05GSUdfS0VZU1RPTkVfUkVNT1RFUFJPQylcdCs9IGtleXN0b25lX3JlbW90ZXByb2Mub1xuIG9iai0kKENPTkZJR19NRVNPTl9NWF9BT19BUkNfUkVNT1RFUFJPQykrPSBtZXNvbl9teF9hb19hcmMub1xuIG9iai0kKENPTkZJR19QUlVfUkVNT1RFUFJPQylcdFx0Kz0gcHJ1X3Jwcm9jLm9cbitvYmotJChDT05GSUdfUUNPTV9NMF9CVFNTX1BJTClcdFx0Kz0gcWNvbV9tMF9idHNzX3BpbC5vXG4gb2JqLSQoQ09ORklHX1FDT01fUElMX0lORk8pXHRcdCs9IHFjb21fcGlsX2luZm8ub1xuIG9iai0kKENPTkZJR19RQ09NX1JQUk9DX0NPTU1PTilcdFx0Kz0gcWNvbV9jb21tb24ub1xuIG9iai0kKENPTkZJR19RQ09NX1E2VjVfQ09NTU9OKVx0XHQrPSBxY29tX3E2djUub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9xY29tX20wX2J0c3NfcGlsLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcxNjhlMjcwZTRkNDY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9tMF9idHNzX3BpbC5jXG5AQCAtMCwwICsxLDI2MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3Jlc2VydmVkX21lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL3Fjb20vbWR0X2xvYWRlci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJxY29tX2NvbW1vbi5oXCJcbitcbisjZGVmaW5lIEJUU1NfUEFTX0lEXHQweGNcbitcbitzdHJ1Y3QgbTBfYnRzcyB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRwaHlzX2FkZHJfdCBtZW1fcGh5cztcbitcdHBoeXNfYWRkcl90IG1lbV9yZWxvYztcbitcdHZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbjtcbitcdHNpemVfdCBtZW1fc2l6ZTtcbitcdHN0cnVjdCByZXNldF9jb250cm9sICpidHNzX3Jlc2V0O1xuK307XG4rXG4rc3RhdGljIGludCBtMF9idHNzX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcWNvbV9zY21fcGFzX3N1cHBvcnRlZChCVFNTX1BBU19JRCkpIHtcbitcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LFxuK1x0XHRcdFwiUEFTIGlzIG5vdCBhdmFpbGFibGUgZm9yIHBlcmlwaGVyYWw6IDB4JXhcXG5cIixcbitcdFx0XHRCVFNTX1BBU19JRCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0cmV0ID0gcWNvbV9zY21fcGFzX2F1dGhfYW5kX3Jlc2V0KEJUU1NfUEFTX0lEKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihycHJvYy1cdTAwM2VkZXYucGFyZW50LCBcIkZhaWxlZCB0byBzdGFydCBycHJvYzogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG0wX2J0c3Nfc3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocnByb2MtXHUwMDNlc3RhdGUgPT0gUlBST0NfUlVOTklORyB8fCBycHJvYy1cdTAwM2VzdGF0ZSA9PSBSUFJPQ19DUkFTSEVEKSB7XG4rXHRcdHJldCA9IHFjb21fc2NtX3Bhc19zaHV0ZG93bihCVFNTX1BBU19JRCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsIFwiRmFpbGVkIHRvIHN0b3AgcnByb2M6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcbitcdFx0ZGV2X2luZm8ocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJTdWNjZXNzZnVsbHkgc3RvcHBlZCBycHJvY1xcblwiKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG0wX2J0c3NfbG9hZChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdHN0cnVjdCBtMF9idHNzICpkZXNjID0gcnByb2MtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpwaGRycztcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc2VnX2Z3O1xuK1x0Y29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICplaGRyO1xuK1x0dm9pZCBfX2lvbWVtICptZXRhZGF0YTtcbitcdHNpemVfdCBtZXRhZGF0YV9zaXplO1xuK1x0aW50IGksIHJldDtcbitcbitcdGVoZHIgPSAoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwaGRycyA9IChjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKShlaGRyICsgMSk7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBycHJvYy1cdTAwM2VmaXJtd2FyZSwgcnByb2MtXHUwMDNlZGV2LnBhcmVudCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJGYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZTogJWRcXG5cIixcbitcdFx0XHRyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWV0YWRhdGEgPSBxY29tX21kdF9yZWFkX21ldGFkYXRhKGZ3LCBcdTAwMjZtZXRhZGF0YV9zaXplLCBycHJvYy1cdTAwM2VmaXJtd2FyZSxcbitcdFx0XHRcdFx0ICBycHJvYy1cdTAwM2VkZXYucGFyZW50KTtcbitcdGlmIChJU19FUlIobWV0YWRhdGEpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIobWV0YWRhdGEpO1xuK1x0XHRkZXZfZXJyKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsXG4rXHRcdFx0XCJGYWlsZWQgdG8gcmVhZCBmaXJtd2FyZSBtZXRhZGF0YTogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0fVxuK1xuK1x0cmV0ID0gcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UoQlRTU19QQVNfSUQsIG1ldGFkYXRhLFxuK1x0XHRcdFx0ICAgICAgbWV0YWRhdGFfc2l6ZSwgTlVMTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCwgXCJQQVMgaW5pdCBpbWFnZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZnJlZV9tZXRhZGF0YTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVoZHItXHUwMDNlZV9waG51bTsgaSsrKSB7XG4rXHRcdGNoYXIgKnNlZ19uYW1lIF9fZnJlZShrZnJlZSkgPSBrc3RyZHVwKHJwcm9jLVx1MDAzZWZpcm13YXJlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFzZWdfbmFtZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0cGhkciA9IFx1MDAyNnBoZHJzW2ldO1xuK1xuK1x0XHQvKiBPbmx5IHByb2Nlc3MgdmFsaWQgbG9hZGFibGUgZGF0YSBzZWdtZW50cyAqL1xuK1x0XHRpZiAocGhkci1cdTAwM2VwX3R5cGUgIT0gUFRfTE9BRCB8fCAhcGhkci1cdTAwM2VwX21lbXN6KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAocGhkci1cdTAwM2VwX3ZhZGRyICsgcGhkci1cdTAwM2VwX2ZpbGVzeiBcdTAwM2UgZGVzYy1cdTAwM2VtZW1fc2l6ZSkge1xuK1x0XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbitcdFx0XHRcdFwiU2VnbWVudCBkYXRhIGV4Y2VlZHMgdGhlIHJlc2VydmVkIG1lbW9yeSBhcmVhIVxcblwiKTtcbitcdFx0XHRnb3RvIGZyZWVfbWV0YWRhdGE7XG4rXHRcdH1cbitcbitcdFx0LyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgc3BsaXQgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnQgZmlsZXMgKi9cbitcdFx0aWYgKHBoZHItXHUwMDNlcF9vZmZzZXQgXHUwMDNlIGZ3LVx1MDAzZXNpemUgfHxcbitcdFx0ICAgIHBoZHItXHUwMDNlcF9vZmZzZXQgKyBwaGRyLVx1MDAzZXBfZmlsZXN6IFx1MDAzZSBmdy1cdTAwM2VzaXplKSB7XG4rXHRcdFx0c3ByaW50ZihzZWdfbmFtZSArIHN0cmxlbihzZWdfbmFtZSkgLSAzLCBcImIlMDJkXCIsIGkpO1xuK1x0XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2c2VnX2Z3LCBzZWdfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIHJwcm9jLVx1MDAzZWRldi5wYXJlbnQpO1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGRldl9lcnIocnByb2MtXHUwMDNlZGV2LnBhcmVudCxcbitcdFx0XHRcdFx0XCJDb3VsZCBub3QgZmluZCBzcGxpdCBzZWdtZW50IGJpbmFyeTogJXNcXG5cIixcbitcdFx0XHRcdFx0c2VnX25hbWUpO1xuK1x0XHRcdFx0Z290byBmcmVlX21ldGFkYXRhO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFVzZSB0aGUgdmlydHVhbCBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzXG4rXHRcdFx0ICogdGhlIG9mZnNldFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNweV90b2lvKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIHBoZHItXHUwMDNlcF92YWRkcixcbitcdFx0XHRcdCAgICBzZWdfZnctXHUwMDNlZGF0YSwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4rXG4rXHRcdFx0cmVsZWFzZV9maXJtd2FyZShzZWdfZncpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1lbWNweV90b2lvKGRlc2MtXHUwMDNlbWVtX3JlZ2lvbiArIHBoZHItXHUwMDNlcF92YWRkcixcbitcdFx0XHRcdCAgICBmdy1cdTAwM2VkYXRhICsgcGhkci1cdTAwM2VwX29mZnNldCwgcGhkci1cdTAwM2VwX2ZpbGVzeik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfbWV0YWRhdGE6XG4rXHRrZnJlZShtZXRhZGF0YSk7XG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBycHJvY19vcHMgbTBfYnRzc19vcHMgPSB7XG4rXHQuc3RhcnQgPSBtMF9idHNzX3N0YXJ0LFxuK1x0LnN0b3AgPSBtMF9idHNzX3N0b3AsXG4rXHQubG9hZCA9IG0wX2J0c3NfbG9hZCxcbitcdC5nZXRfYm9vdF9hZGRyID0gcnByb2NfZWxmX2dldF9ib290X2FkZHIsXG4rfTtcbitcbitzdGF0aWMgaW50IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgbTBfYnRzcyAqZGVzYylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXNjLVx1MDAzZWRldjtcbitcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwidW5hYmxlIHRvIGFjcXVpcmUgbWVtb3J5LXJlZ2lvbiByZXNvdXJjZVxcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGRlc2MtXHUwMDNlbWVtX3BoeXMgPSByZXMuc3RhcnQ7XG4rXHRkZXNjLVx1MDAzZW1lbV9yZWxvYyA9IHJlcy5zdGFydDtcbitcdGRlc2MtXHUwMDNlbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnJlcyk7XG4rXHRkZXNjLVx1MDAzZW1lbV9yZWdpb24gPSBkZXZtX2lvcmVtYXAoZGV2LCBkZXNjLVx1MDAzZW1lbV9waHlzLCBkZXNjLVx1MDAzZW1lbV9zaXplKTtcbitcdGlmICghZGVzYy1cdTAwM2VtZW1fcmVnaW9uKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcInVuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbjogJXBSXFxuXCIsIFx1MDAyNnJlcyk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbTBfYnRzc19waWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHQvLyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYnRzc19yZXNldDtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0Y29uc3QgY2hhciAqZndfbmFtZSA9IE5VTEw7XG4rXHRzdHJ1Y3QgbTBfYnRzcyAqZGVzYztcbitcdHN0cnVjdCBjbGsgKmxwb19jbGs7XG4rXHRzdHJ1Y3QgcnByb2MgKnJwcm9jO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi1cdTAwM2VvZl9ub2RlLCBcImZpcm13YXJlLW5hbWVcIixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmZ3X25hbWUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIFwibTBidHNzXCIsIFx1MDAyNm0wX2J0c3Nfb3BzLFxuK1x0XHRcdFx0IGZ3X25hbWUsIHNpemVvZigqZGVzYykpO1xuK1x0aWYgKCFycHJvYykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gYWxsb2NhdGUgcnByb2NcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZGVzYyA9IHJwcm9jLVx1MDAzZXByaXY7XG4rXHRkZXNjLVx1MDAzZWRldiA9IGRldjtcbitcbitcdHJldCA9IG0wX2J0c3NfYWxsb2NfbWVtb3J5X3JlZ2lvbihkZXNjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRscG9fY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcImJ0c3NfbHBvX2Nsa1wiKTtcbitcdGlmIChJU19FUlIobHBvX2NsaykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscG9fY2xrKSxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gZ2V0IGxwbyBjbG9ja1xcblwiKTtcbitcbitcdGRlc2MtXHUwMDNlYnRzc19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBcImJ0c3NfcmVzZXRcIik7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRlc2MtXHUwMDNlYnRzc19yZXNldCksXG4rXHRcdFx0XHQgICAgIFwidW5hYmxlIHRvIGFjcXVpcmUgYnRzc19yZXNldFxcblwiKTtcbitcbitcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGVzYy1cdTAwM2VidHNzX3Jlc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHJwcm9jLVx1MDAzZWRldi5wYXJlbnQsIHJldCxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRcXG5cIik7XG4rXG4rXHRycHJvYy1cdTAwM2VhdXRvX2Jvb3QgPSBmYWxzZTtcbitcdHJldCA9IGRldm1fcnByb2NfYWRkKGRldiwgcnByb2MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJwcm9jKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtMF9idHNzX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJxY29tLGlwcTUwMTgtYnRzcy1waWxcIiB9LFxuK1x0eyB9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTBfYnRzc19vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbTBfYnRzc19waWxfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gbTBfYnRzc19waWxfcHJvYmUsXG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicWNvbS1tMC1idHNzLXBpbFwiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBtMF9idHNzX29mX21hdGNoLFxuK1x0fSxcbit9O1xuK1xuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobTBfYnRzc19waWxfZHJpdmVyKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJRdWFsY29tbSBNMCBCbHVldG9vdGggU3Vic3lzdGVtIFBlcmlwaGVyYWwgSW1hZ2UgTG9hZGVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6MjkuODcyNTU2MTA5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDMwMjg5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3IgTmV3IEJsdWV0b290aCBhbmQgUmVtb3RlUHJvYyBEcml2ZXJzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHdpdGggc29tZSBuZXcga2VybmVsIGRyaXZlcnMg4oCTIGBidHFjb21pcGMuY2AgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgZGlnIGluLlxuXG5UaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhlc2UgYXJlIGJvdGggcGxhdGZvcm0gZHJpdmVycy4gIGBidHFjb21pcGMuY2AgaXMgZm9yIFwicWNvbSxpcHE1MDE4LWJ0XCIgYW5kIGBxY29tX20wX2J0c3NfcGlsLmNgIGZvciBcInFjb20saXBxNTAxOC1idHNzLXBpbFwiLiAgUmlnaHQgYXdheSwgSSdtIHRoaW5raW5nIFF1YWxjb21tIElQUTUwMTgsIHdoaWNoIGltcGxpZXMgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCBhbmQgdGhhdCByYWlzZXMgYSBmbGFnLiBDYW4gdGhlc2UgcmVhbGlzdGljYWxseSBiZSBmdXp6ZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyAgUGxhdGZvcm0gZHJpdmVycyBvZnRlbiBuZWVkIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgSSAqa25vdyogc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIGJ1dCBpdCBuZWVkcyBhIGNvbXBhdGlibGUgc3RyaW5nIGFuZCBzb21lIG1lY2hhbmlzbSwgbGlrZSBgc3l6X2dlbl9zeXNmc2Agb3IgYnkgaW5qZWN0aW5nIGRldmljZSBub2Rlcy4gIEhvd2V2ZXIsIHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBhbiBIQ0kgZGV2aWNlLiAgVGhlICpwcm9iZSogZnVuY3Rpb24gaXMgdGhlIGNyaXRpY2FsIHBvaW50LCBiZWNhdXNlIHRoYXQncyB3aGVuIHRoZSBIQ0kgZGV2aWNlIGdldHMgcmVnaXN0ZXJlZC4gSWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbid0IGNhbGxlZCwgd2UncmUgZGVhZCBpbiB0aGUgd2F0ZXIgZm9yIEhDSSBmdXp6aW5nLlxuXG5UbyBnZXQgYGJ0cWNvbWlwY19wcm9iZWAgdG8gZXZlbiAqcnVuKiwgaXQncyBnb2luZyB0byBuZWVkIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGggdGhhdCBcInFjb20saXBxNTAxOC1idFwiIGNvbXBhdGlibGUgc3RyaW5nLiAgUGx1cywgaXQgbmVlZHMgcGhhbmRsZXMgZm9yIGBxY29tLHJwcm9jYCwgYW4gYHFjb20saXBjYCBzeXNjb24sIGFuZCBhbiBpbnRlcnJ1cHQuICBJZiBJJ20ganVzdCBydW5uaW5nIFFFTVUgeDg2XzY0IG9yIGFybTY0IHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBEVCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgc3l6a2FsbGVyIGNhbiBzb21laG93IGluc3RhbnRpYXRlIGl0IGNvcnJlY3RseS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBhZGQgY2FsbD8gTm8sIGl0IGRvZXNuJ3QgZ2VuZXJhbGx5IGRvIHRoYXQgdW5sZXNzIHRoZXJlJ3MgYW4gZXhpc3RpbmcgZGVzY3JpcHRpb24gaW4gdGhlIGtlcm5lbC5cblxuU28sIHJlYWxpc3RpY2FsbHksIGBidHFjb21pcGNfcHJvYmVgIGlzIHByb2JhYmx5ICp1bnJlYWNoYWJsZSogd2l0aG91dCBhIHZlcnkgc3BlY2lmaWMgZGV2aWNlIHRyZWUgdGhhdCBtYXRjaGVzLiBUaGF0IG1lYW5zIGBycHJvY19nZXRfYnlfcGhhbmRsZWAsIGBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX2FyZ3NgLCBhbmQgYHBsYXRmb3JtX2dldF9pcnFgIHdpbGwgZmFpbCwgYmVjYXVzZSB0aGUgZGV2aWNlIHRyZWUgd29uJ3QgYmUgY29uc3RydWN0ZWQgd2l0aCB0aGUgcmlnaHQgT0Ygbm9kZXMgYW5kIHBoYW5kbGVzLiBTcGVjaWZpY2FsbHksIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtXHUwMDNlb2Zfbm9kZSwgXCJxY29tLHJwcm9jXCIsIFx1MDAyNnJwcm9jX3BoYW5kbGUpYCB3b3VsZCBmYWlsLiAgSXQncyBqdXN0IGdvaW5nIHRvIHJldHVybiBgLUVOT0VOVGAuXG5cblRoZSBzYW1lIGFwcGxpZXMgdG8gYHFjb21fbTBfYnRzc19waWwuY2AuIEl0IGRlcGVuZHMgb24gdGhpbmdzIGxpa2UgYGZpcm13YXJlLW5hbWVgIGFuZCB3aWxsIGxpa2VseSBmYWlsIGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGVudHJ5IHBvaW50cy4gSSBub3RpY2VkIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiBgYnRxY2EuY2A6IGEgY2hlY2sgaW4gYHFjYV90bHZfY2hlY2tfZGF0YWAgdGhhdCBoYXMgYSBjb25kaXRpb25hbCBgaWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KWAuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gYHFjYV90bHZfY2hlY2tfZGF0YWAgaXMgcGFydCBvZiBmaXJtd2FyZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LiBgc29jX3R5cGVgIGJlaW5nIGBRQ0FfSVBRNTAxOGAgaXMgb25seSBwYXNzZWQgZnJvbSBgYnRxY29taXBjX3NldHVwYC4gSG93ZXZlciwgc2luY2UgYGJ0cWNvbWlwY19zZXR1cGAgaXMgdW5yZWFjaGFibGUsIHRoaXMgY29kZXBhdGggaXMgYWxzbyBkZWFkLlxuXG5XYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRoYXQgYFFDQV9JUFE1MDE4YCBtaWdodCBnZXQgdXNlZCB3aXRoIGBoY2lfdWFydGA/IExldCdzIGNoZWNrIHdoZXJlIGBRQ0FfSVBRNTAxOGAgaXMgdXNlZC4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTQ1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjQ2LjAxNTU4NzE5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQyOTMxNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlFDQV9JUFE1MDE4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM9MzEwPXN0YXRpYyBpbnQgcWNhX3Rsdl9jaGVja19kYXRhKHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy0zODItXFx0Y2FzZSBUTFZfVFlQRV9OVk06XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzozODM6XFx0XFx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtMzg0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYz03NzE9aW50IHFjYV91YXJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1aW50OF90IGJhdWRyYXRlLFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy03OTktXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo4MDA6XFx0aWYgKHNvY190eXBlID09IFFDQV9JUFE1MDE4KVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMtODAxLVxcdFxcdGdvdG8gZG93bmxvYWRfbnZtO1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NDgtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYzo5NDk6XFx0XFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk1MC1cXHRcXHRcXHRzbnByaW50Zihjb25maWcuZnduYW1lLCBzaXplb2YoY29uZmlnLmZ3bmFtZSksXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk3MS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjk3MjpcXHRpZiAoc29jX3R5cGUgPT0gUUNBX0lQUTUwMTgpXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05NzMtXFx0XFx0bXNsZWVwKE5WTV9SRUFEWV9ERUxBWV9NUyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTk4MS1cXHRjYXNlIFFDQV9XQ043ODUwOlxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmM6OTgyOlxcdGNhc2UgUUNBX0lQUTUwMTg6XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYy05ODMtXFx0XFx0ZXJyID0gcWNhX2Rpc2FibGVfc29jX2xvZ2dpbmcoaGRldik7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMTgtXFx0Y2FzZSBRQ0FfV0NONzg1MDpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jOjEwMTk6XFx0Y2FzZSBRQ0FfSVBRNTAxODpcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jLTEwMjAtXFx0XFx0LyogZ2V0IGZ3IGJ1aWxkIGluZm8gKi9cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmg9MTQ5PWVudW0gcWNhX2J0c29jX3R5cGUge1xcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjItXFx0UUNBX1dDTjc4NTAsXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaDoxNjM6XFx0UUNBX0lQUTUwMTgsXFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuaC0xNjQtfTtcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jPTczMT1zdGF0aWMgaW50IGJ0cWNvbWlwY19zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc0Ni1cXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19OT05fUEVSU0lTVEVOVF9TRVRVUCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmM6NzQ3OlxcdHJldCA9IHFjYV9yZWFkX3NvY192ZXJzaW9uKGhkZXYsIFxcdTAwMjZ2ZXIsIFFDQV9JUFE1MDE4KTtcXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYy03NDgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0cWNvbWlwYy5jLTc1MC1cXG5kcml2ZXJzL2JsdWV0b290aC9idHFjb21pcGMuYzo3NTE6XFx0cmV0ID0gcWNhX3VhcnRfc2V0dXAoaGRldiwgMCwgUUNBX0lQUTUwMTgsIHZlciwgTlVMTCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRxY29taXBjLmMtNzUyLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6NDguMjU4NTI0MDE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1MTk0NTcyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQ29kZSBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFFDQV9JUFE1MDE4YC4gSXQgbG9va3MgbGlrZSB0aGUgb25seSBwbGFjZXMgdGhpcyBpcyB1c2VkIGFyZSBpbiBgYnRxY29taXBjLmNgIHdoZW4gaXQncyBwYXNzZWQgdG8gYHFjYV91YXJ0X3NldHVwYCBvciBgcWNhX3JlYWRfc29jX3ZlcnNpb25gLiBBbmQsIGlmIEknbSByZWFkaW5nIHRoaXMgY29ycmVjdGx5LCBgYnRxY29taXBjLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYHFjb20saXBxNTAxOC1idGAuXG5cblRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogZ29pbmcgdG8gYmUgcHJlc2VudCBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgUUVNVSB4ODZfNjQsIGFybTY0IHZpcnQsIHRoYXQgc29ydCBvZiB0aGluZy4gU3l6a2FsbGVyLCBhcyBicmlsbGlhbnQgYXMgaXQgaXMsIGRvZXNuJ3QgaGF2ZSBhIG1lY2hhbmlzbSB0byBtYWdpY2FsbHkgc2F0aXNmeSB0aGUgcmVhbGx5IGNvbXBsZXggZGVwZW5kZW5jaWVzIGluaGVyZW50IGluIHRoZXNlIGRldmljZSB0cmVlcy4gU3BlY2lmaWNhbGx5LCBpdCBjYW4ndCBoYW5kbGUgdGhvc2UgcGhhbmRsZXMgcG9pbnRpbmcgdG8gYHJwcm9jYCwgYHN5c2NvbmAsIHJlc2VydmVkIG1lbW9yeSwgYW5kIGFsbCB0aGF0IGphenouIFNvLCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCBlYXJseS4gVGhpcyBtZWFucyBhbnkgb2YgdGhlIGFjdHVhbCBmdW5jdGlvbmFsIGNvZGUgaW4gYGJ0cWNvbWlwYy5jYCBhbmQgYWxzbyB0aGUgY29kZSBpbiBgcWNvbV9tMF9idHNzX3BpbC5jYCBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgYW55IGZ1enppbmcgd2UgdHJ5IHRvIGRvLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHNwZWNpZmljIHN1cHBvcnQgZm9yIGBxY29tLGlwcTUwMTgtYnRgLiBPa2F5LCBpdCAqZG9lcyogaGF2ZSBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgcGxhdGZvcm0gZGV2aWNlcy4gSG93ZXZlciwgZXZlbiBpZiBTeXprYWxsZXIgKmNvdWxkKiBjcmVhdGUgdGhlIGRldmljZSwgYG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi1cdTAwM2VvZl9ub2RlLCBcInFjb20scnByb2NcIiwgXHUwMDI2cnByb2NfcGhhbmRsZSlgIHdpbGwgc3RpbGwgZmFpbC4gVGhlIGNyZWF0ZWQgZGV2aWNlIHdvbid0IGhhdmUgYSB2YWxpZCBgb2Zfbm9kZWAgd2l0aCB0aGVzZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9yIHBoYW5kbGVzLiBTbyBgYnRxY29taXBjX3Byb2JlYCB3aWxsIHJldHVybiBgLUVOT0VOVGAuXG5cbkFuZCB3YWl0LCB3aGF0IGFib3V0IGBxY29tX20wX2J0c3NfcGlsLmNgPyBJdCByZWxpZXMgb24gYGZpcm13YXJlLW5hbWVgIGZyb20gdGhlIGBvZl9ub2RlYCwgd2hpY2ggaXMgYWxzbyBnb2luZyB0byBmYWlsLiBTbywgdGhlIGNvZGUgaXMgdG90YWxseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGNhbm5vdCBiZSBwcm9iZWQgaW4gb3VyIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGR1ZSB0byB0aG9zZSBjb21wbGV4IGRldmljZSB0cmVlIGRlcGVuZGVuY2llcyBpbnZvbHZpbmcgcGhhbmRsZXMsIHJlc2VydmVkIG1lbW9yeSwgYW5kIHNpbWlsYXIgdGhpbmdzLlxuXG5MZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgdG8gbWFrZSBzdXJlIEknbSBjb3JyZWN0LiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi5jb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBQZXJmZWN0LiBUaGF0J3MgZXhhY3RseSB0aGlzIHNpdHVhdGlvbi5cblxuSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MDQsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI1OjAyLjc3Nzk4NDQzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYnRxY29taXBjIGFuZCBxY29tX20wX2J0c3NfcGlsKSBmb3IgdGhlIFF1YWxjb21tIElQUTUwMTggU29DLiBUaGVzZSBkcml2ZXJzIHJlbHkgb24gY29tcGxleCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChzdWNoIGFzIHBoYW5kbGVzIHRvIHJlbW90ZXByb2MsIHN5c2NvbiwgYW5kIHJlc2VydmVkIG1lbW9yeSByZWdpb25zKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLCB0aGVzZSBkZXZpY2UgdHJlZSBub2RlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlc2VudCwgbWVhbmluZyB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgZmFpbCBlYXJseSBhbmQgdGhlIGNvcmUgbG9naWMgd2lsbCByZW1haW4gdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzIChidHFjb21pcGMgYW5kIHFjb21fbTBfYnRzc19waWwpIGZvciB0aGUgUXVhbGNvbW0gSVBRNTAxOCBTb0MuIFRoZXNlIGRyaXZlcnMgcmVseSBvbiBjb21wbGV4IGRldmljZSB0cmVlIHByb3BlcnRpZXMgKHN1Y2ggYXMgcGhhbmRsZXMgdG8gcmVtb3RlcHJvYywgc3lzY29uLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UsIHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBwcmVzZW50LCBtZWFuaW5nIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBmYWlsIGVhcmx5IGFuZCB0aGUgY29yZSBsb2dpYyB3aWxsIHJlbWFpbiB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznt4[1] Phase: Running StartedAt: 2026-06-25 14:25:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznt4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-25 14:25:14 +0000 UTC FinishedAt: 2026-06-25 14:25:20 +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,}