Name: series-workflowb7w48 Phase: Failed StartedAt: 2026-07-07 14:30:53 +0000 UTC FinishedAt: 2026-07-07 14:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7w48[0] Phase: Succeeded StartedAt: 2026-07-07 14:30:54 +0000 UTC FinishedAt: 2026-07-07 14:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7w48[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 14:30:54 +0000 UTC FinishedAt: 2026-07-07 14:44:48 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIxOCBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBvbiB0aGUgTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCByZWdpc3RlciBhbmQgZXhwZWN0cyBzcGVjaWZpYyB2YWx1ZXMgbGlrZSAweDkwMDIgb3IgMHg5MDAxKS4gU2luY2UgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIFFFTVUgb3IgYSBnZW5lcmljIE1ESU8gbW9jayBkZXZpY2UgaW4gdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBuZXdseSBhZGRlZCBMRUQgY2xhc3NkZXYgb3BlcmF0aW9ucyBhbmQgU01JIHJlYWQvd3JpdGUgd3JhcHBlcnMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzAsNyAmIzQzOzE4MjMwLDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX01DVVx0XHQxMFxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDYxNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX0xJTktdXHRcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxuJiM0MztcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4mIzQzO1x0XHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XG4mIzQzO1x0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xuJiM0MztcdFx0KmZsYWdzcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpmbGFnc3AgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xuJiM0MztcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbiYjNDM7XHRpZiAoZ3JvdXAgPT0gMikge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdH1cbiYjNDM7XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIG1hc2ssIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4mIzQzO1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XG4mIzQzO1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbiYjNDM7XHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XG4mIzQzO1x0Ym9vbCBmb3JjZV9oaWdoO1xuJiM0MztcdGJvb2wgZm9yY2VfbG93O1xuJiM0MztcdGludCBwb2xhcml0eTtcbiYjNDM7XHR1MzIgZ3JvdXA7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtObyBMRURzIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZncm91cCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cJiMzNDssIGdyb3VwLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtaGlnaFwmIzM0Oyk7XG4mIzQzO1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1sb3dcJiMzNDspO1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XG4mIzQzO1xuJiM0MztcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFsZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuJiM0MztcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHQqaW52X21hc2twIHw9IGJpdDtcbiYjNDM7XHRcdGlmIChwb2xhcml0eSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVkKVxuJiM0MztcdFx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVkKSB7XG4mIzQzO1x0XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHUzMiBpbnZfY3RybCA9IDA7XG4mIzQzO1x0dTMyIGludl9tYXNrID0gMDtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCYjMzQ7bGVkc1wmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuJiM0MztcdFx0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpIHtcbiYjNDM7XHRcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnZfbWFzaylcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCAmIzQzOzEsMTU3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCAmIzQzOzEsODggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSFxuJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4mIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjNDM7ICpcbiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuJiM0MztcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjAKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnJiMzNDsKIAomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7CiYjNDM7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWcmIzM0OwogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7CkBAIC0xNTgsMTIgJiM0MzsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1CiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KLQotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKLQlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKLQkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDUgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0MztvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwomIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAubwomIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vCiYjNDM7eXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwotI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVCQkxMAomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwogCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCAmbHQ7PSAocG9ydCkgJmFtcDsmYW1wOyAocG9ydCkgJmx0OyA5KQpAQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHsKIAlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7CiAJdTY0IHJ4X2ZyYW1lczsKIAl1NjQgdHhfZnJhbWVzOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwomIzQzOwl1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDYxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHsKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwKJiM0MzsJCQkJCSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsCiYjNDM7CVtUUklHR0VSX05FVERFVl9MSU5LXzEwXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0sCiYjNDM7CVtUUklHR0VSX05FVERFVl9MSU5LXzEwMDBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sCiYjNDM7CVtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF0JPSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfVFhdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfUlhdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKQomIzQzOwkJaWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAobWFzayAmYW1wOyZhbXA7ICh2YWwgJmFtcDsgbWFzaykgPT0gbWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IEJJVChpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7CiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCWN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OwomIzQzOwljaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdOwomIzQzOwllbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkOwomIzQzOwlib29sIGZvcmNlX2hpZ2g7CiYjNDM7CWJvb2wgZm9yY2VfbG93OwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJYm9vbCBvbjsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtObyBMRURzIGZvciBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWlmIChncm91cCAmZ3Q7PSBZVDkyMVhfTEVEX0dST1VQX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXG4mIzM0OywgZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJcG9ydCwgZ3JvdXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJbGVkLSZndDtwb3J0ID0gcHA7CiYjNDM7CWxlZC0mZ3Q7Z3JvdXAgPSBncm91cDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCAmYW1wO29uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlsZWRfY2RldiA9ICZhbXA7bGVkLSZndDtjZGV2OwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzcyA9IG9uOwomIzQzOwlsZWRfY2Rldi0mZ3Q7bWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZzsKJiM0MzsJbGVkX2NkZXYtJmd0O2JsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDsKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9ICYjMzQ7bmV0ZGV2JiMzNDs7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgJiMzNDstJXU6JTAyZDolMDJ1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTsKJiM0MzsJaW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXsKJiM0MzsJCS5md25vZGUgPSBmd25vZGUsCiYjNDM7CQkuZGV2aWNlbmFtZSA9IG5hbWUsCiYjNDM7CQkuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLAomIzQzOwl9OwomIzQzOwlyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgJmFtcDtpbml0X2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb2xhcml0eSkgewomIzQzOwkJdTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CiYjNDM7CQkqaW52X21hc2twIHw9IGJpdDsKJiM0MzsJCWlmIChwb2xhcml0eSAmZ3Q7IDApCiYjNDM7CQkJKmludl9jdHJscCB8PSBiaXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKGxlZCkKJiM0MzsJCQkJZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsICZhbXA7bGVkLSZndDtjZGV2KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwomIzQzOwkJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJCWlmIChsZWQpIHsKJiM0MzsJCQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1MzIgaW52X2N0cmwgPSAwOwomIzQzOwl1MzIgaW52X21hc2sgPSAwOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKJiM0MzsJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwomIzQzOwomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtJmd0O2RuLCAmIzM0O2xlZHMmIzM0Oyk7CiYjNDM7CQlpZiAoIWxlZHNfbnApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsCiYjNDM7CQkJCQkgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkJICAgICAgICZhbXA7aW52X21hc2ssICZhbXA7aW52X2N0cmwpOwomIzQzOwkJCWlmIChyZXMpIHsKJiM0MzsJCQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJCWdvdG8gZXJyOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW52X21hc2spCiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsKJiM0MztlbmQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX0xFRFNfSAomIzQzOyNkZWZpbmUgX1lUX0xFRFNfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMCQkJMHhkMDAwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTgkJCUJJVCgyMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NCUdFTk1BU0soMjAsIDE5KQkvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NCQlHRU5NQVNLKDE2LCAxMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX00JCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpCQkoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX00JCQlHRU5NQVNLKDE3LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJUwlCSVQoMTcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lOREkJQklUKDE2KQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCkJCSgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NCQlHRU5NQVNLKDMxLCAzMCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00JCUdFTk1BU0soMjksIDI4KQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVAJQklUKDI3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NCQlHRU5NQVNLKDI2LCAyNSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzIJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNAkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzYJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCkJCSgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApCQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KQkvKiBjeWNsZSA9IDUxMiAmbHQ7Jmx0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxNikpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycCkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX00JCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOSwkJQklUKDE1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTksJQklUKDE0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOSwlCSVQoMTMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwJQklUKDEyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGCUJJVCgxMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOSwkJQklUKDEwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LCQlCSVQoOSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWAkJQklUKDgpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgJCUJJVCg3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNCQlCSVQoNikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNCQlCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0JCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOSwlCSVQoMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOSwlCSVQoMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOSwkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMCQkweGQwMTAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTksJCUdFTk1BU0soMjUsIDI0KQkvKiBkZWxheT8gKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1cJCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NCQlHRU5NQVNLKDEsIDApCS8qICNncnAgLSAxICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KQkoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpKSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTCQkweGQwMWM0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlYJCTB4ZDAxYzgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KQlCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpCSgweGQwMWQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOCTY0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRgk1MTIKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYCTIwNDgKJiM0MzsKJiM0MzsvKiAyICogbGNtKDIsIDMsIDQsIDYpICovCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT00JCTI0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSkJKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSkKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWQgewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgY2hhciBncm91cDsKJiM0MzsKJiM0MzsJYm9vbCB1c2VfY3ljbGU6MTsKJiM0MzsJYm9vbCB1c2VfZHV0eToxOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTU3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKQEAgLTAsMCAmIzQzOzEsODggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSAomIzQzOyNkZWZpbmUgX1lUX1NNSV9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmRwYXJ0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssCiYjNDM7CQkJICAgdTMyIHZhbCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQomIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KJiM0MzsgKgomIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCiYjNDM7ewomIzQzOwkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwomIzQzOwkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUOTIxNSBMRUQgU3VwcG9ydCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBJdCYjMzk7cyBtb3ZpbmcgdGhlIGV4aXN0aW5nIGRyaXZlciBjb2RlLCBgeXQ5MjF4LmNgLCBhbmQgc3BsaXR0aW5nIGl0IGludG8gYGNoaXAuY2AsIGBsZWRzLmNgLCBhbmQgYHNtaS5jYCB3aXRoaW4gYSBgbW90b3Jjb21tYCBzdWJkaXJlY3RvcnkgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYS9gLiBBIG5ldyBjb25maWcgb3B0aW9uLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2AsIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBoYXJkd2FyZS1kZXBlbmRlbnQsIGVzcGVjaWFsbHkgRFNBIHN3aXRjaGVzLgoKSSBrbm93IFFFTVUgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGhhdmUgaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgdGhleSYjMzk7cmUgZW11bGF0ZWQuIFNvLCBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIGZvciB0aGUgWVQ5MjE1IGluIFFFTVU/IE9yIGlzIHRoaXMgcHVyZWx5IGEgaGFyZHdhcmUgdGhpbmc/IERTQSBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFyZSB1c3VhbGx5IGZvciBlbWJlZGRlZCBzd2l0Y2hlcywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0aGluZ3MgYXJlIGluc3RhbnRpYXRlZC4gQ2FuIHRoZXkgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBvciBtYXliZSB0aHJvdWdoIEkyQyBvciBNRElPIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudD8gV2FpdCwgc3l6a2FsbGVyICpjYW4qIGluc3RhbnRpYXRlIEkyQy9NRElPIGRldmljZXMsIGlmIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBvciBldmVuIHRocm91Z2ggZHVtbXkgZGV2aWNlcy4gSWYgaXQmIzM5O3MgYSBoYXJkd2FyZSBkcml2ZXIgdGhvdWdoLCByZWFjaGluZyBpdCBpcyBnb2luZyB0byBjb21lIGRvd24gdG8gbW9ja2luZyB0aGUgTURJTyBidXMuIEhhbmcgb24sIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIE1ESU8vSTJDIGZ1enppbmcgc3VwcG9ydC4gSSBzaG91bGQgY2hlY2sgaWYgYE5FVF9EU0FfWVQ5MjFYYCBpcyBzb21ldGhpbmcgd2UgZnV6ei4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBsZWRzLmNgLCBhZGRpbmcgZnVuY3Rpb25zIGxpa2UgYHl0OTIxeF9sZWRfc2V0dXBgLCBgeXQ5MjF4X2xlZF9mb3JjZV9zZXRgLCBgeXQ5MjF4X2xlZF9ibGlua19zZXRgLCBhbmQgYHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXRgLiBUaGVzZSBhcmUgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMuIENhbiB0aGVzZSBiZSByZWFjaGVkPyBZZXMsIGRlZmluaXRlbHkgdmlhIHN5c2ZzISBCdXQgdGhlIGNhdGNoIGlzLCB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHByb2JlZCBmaXJzdC4gUHJvYmluZyBhIERTQSBzd2l0Y2jigKYgdGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuIFdlJiMzOTtsbCBuZWVkIGFuIE1ESU8gYnVzIGFuZCBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHNldHVwLiBEb2VzIHN5emthbGxlciBzdXBwb3J0IERTQSBzd2l0Y2ggcHJvYmluZz8KClR5cGljYWxseSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gcmVhZCBJRCByZWdpc3RlcnMsIHdpbGwgZmFpbCB0byBwcm9iZSB1bmxlc3MgdGhlIGFjdHVhbCBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIGVtdWxhdGVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgYHl0OTIxeF9tZGlvX3JlYWRgIG9yIGFueXRoaW5nIHNpbWlsYXIgcmVhZHMgYSBoYXJkd2FyZSBJRC4gTGV0JiMzOTtzIGRvIGEga2VybmVsIHNlYXJjaCBmb3IgYHl0OTIxeGAgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Jlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByb2JlIHBhdGggdG8gc2VlIGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGV2ZW4gZ2V0IHRoaXMgdGhpbmcgb2ZmIHRoZSBncm91bmQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTURJTyBQcm9iZSBJc3N1ZSoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIHplcm8gaW4gb24gYSBwb3RlbnRpYWwgcHJvYmxlbSByZWxhdGVkIHRvIGFuIE1ESU8gaW50ZXJmYWNlIHByb2JlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBmdW5jdGlvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiByZWxhdGVkIHRvIHRoYXQgcGFydGljdWxhciBjaGlwc2V0LiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWUga2luZCBvZiBpbml0aWFsaXphdGlvbiBvciBkZXZpY2UgZGlzY292ZXJ5IGlzc3VlIHdpdGhpbiB0aGUgTURJTyBmcmFtZXdvcmsuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiB3aGVyZSB0aGluZ3MgZ28gc2lkZXdheXMg4oCTIHRpbWluZyBwcm9ibGVtcywgaW5jb3JyZWN0IHJlZ2lzdGVyIGFjY2Vzc2VzLCBvciBwb3RlbnRpYWxseSBhIGRyaXZlci1zcGVjaWZpYyBidWcgaW4gdGhlIHByb2JlIHJvdXRpbmUgaXRzZWxmLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgbG9ncywgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSByb290IGNhdXNlLCBhbmQgYmVnaW4gdGVzdGluZyBmb3IgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlLip5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWA6CgoqKkFuYWx5emluZyBgeXQ5MjF4X21kaW9fcHJvYmVgKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gKmRvKi4gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIE1ESU8gaW50ZXJmYWNlLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgYXNzb2NpYXRlZCB3aXRoIGEgWVQ5MjF4IGRldmljZS4gJiMzNDtQcm9iZSYjMzQ7IGlzIGEgY29tbW9uIHRlcm0sIHNvIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgZGV2aWNlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGRpc2NvdmVycyBhbmQgc2V0cyB1cCB0aGUgTURJTyBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBZVDkyMXggY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQgY29uZmlndXJlcyB0aGUgTURJTyBidXMsIGFuZCB3aGF0IHNwZWNpZmljIHJlc291cmNlcyBpdCYjMzk7cyBsaWtlbHkgdG8gYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIG92ZXJhbGwgc3RyYXRlZ3kgZm9yIG1hbmFnaW5nIHRoaXMgTURJTyBjb21wb25lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyByZWdpc3RlciByZWFkcywgd3JpdGVzLCBvciBkZWxheXMgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgYWRkcmVzc2VkPyBBbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IG90aGVyIGRldmljZXMgd2lsbCBpdCBpbnRlcmFjdCB3aXRoPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgYSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiwgd2hpY2ggd291bGQgc3VnZ2VzdCBhIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZSB0cmVlIG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjAwOlx0XHQuZ2V0X3N0cmluZ3NcdFx0PSB5dDkyMXhfZHNhX2dldF9zdHJpbmdzLFxuNDYwMTpcdFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMsXG40NjAyOlx0XHQuZ2V0X3NzZXRfY291bnRcdFx0PSB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50LFxuNDYwMzpcdFx0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMsXG40NjA0Olx0XHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuNDYwNTpcdFx0LmdldF9ybW9uX3N0YXRzXHRcdD0geXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyxcbjQ2MDY6XHRcdC5nZXRfc3RhdHM2NFx0XHQ9IHl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQsXG40NjA3Olx0XHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzLFxuNDYwODpcdFx0LyogZWVlICovXG40NjA5Olx0XHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuNDYxMDpcdFx0LnNldF9tYWNfZWVlXHRcdD0geXQ5MjF4X2RzYV9zZXRfbWFjX2VlZSxcbjQ2MTE6XHRcdC8qIG10dSAqL1xuNDYxMjpcdFx0LnBvcnRfY2hhbmdlX210dVx0PSB5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dSxcbjQ2MTM6XHRcdC5wb3J0X21heF9tdHVcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWF4X210dSxcbjQ2MTQ6XHRcdC8qIHJhdGUgKi9cbjQ2MTU6XHRcdC5wb3J0X3BvbGljZXJfZGVsXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbCxcbjQ2MTY6XHRcdC5wb3J0X3BvbGljZXJfYWRkXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZCxcbjQ2MTc6XHRcdC5wb3J0X3NldHVwX3RjXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxuNDYxODpcdFx0LyogYWNsICovXG40NjE5Olx0XHQuY2xzX2Zsb3dlcl9kZWxcdFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfZGVsLFxuNDYyMDpcdFx0LmNsc19mbG93ZXJfYWRkXHRcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2FkZCxcbjQ2MjE6XHRcdC8qIGhzciAqL1xuNDYyMjpcdFx0LnBvcnRfaHNyX2xlYXZlXHRcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZSxcbjQ2MjM6XHRcdC5wb3J0X2hzcl9qb2luXHRcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxuNDYyNDpcdFx0LyogbWlycm9yICovXG40NjI1Olx0XHQucG9ydF9taXJyb3JfZGVsXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfZGVsLFxuNDYyNjpcdFx0LnBvcnRfbWlycm9yX2FkZFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2FkZCxcbjQ2Mjc6XHRcdC8qIGxhZyAqL1xuNDYyODpcdFx0LnBvcnRfbGFnX2xlYXZlXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19sZWF2ZSxcbjQ2Mjk6XHRcdC5wb3J0X2xhZ19qb2luXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19qb2luLFxuNDYzMDpcdFx0LyogZmRiICovXG40NjMxOlx0XHQucG9ydF9mZGJfZHVtcFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZHVtcCxcbjQ2MzI6XHRcdC5wb3J0X2Zhc3RfYWdlXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2Zhc3RfYWdlLFxuNDYzMzpcdFx0LnNldF9hZ2VpbmdfdGltZVx0PSB5dDkyMXhfZHNhX3NldF9hZ2VpbmdfdGltZSxcbjQ2MzQ6XHRcdC5wb3J0X2ZkYl9kZWxcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2RlbCxcbjQ2MzU6XHRcdC5wb3J0X2ZkYl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2FkZCxcbjQ2MzY6XHRcdC5wb3J0X21kYl9kZWxcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2RlbCxcbjQ2Mzc6XHRcdC5wb3J0X21kYl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2FkZCxcbjQ2Mzg6XHRcdC8qIHZsYW4gKi9cbjQ2Mzk6XHRcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2ZpbHRlcmluZyxcbjQ2NDA6XHRcdC5wb3J0X3ZsYW5fZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZGVsLFxuNDY0MTpcdFx0LnBvcnRfdmxhbl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9hZGQsXG40NjQyOlx0XHQvKiBicmlkZ2UgKi9cbjQ2NDM6XHRcdC5wb3J0X3ByZV9icmlkZ2VfZmxhZ3NcdD0geXQ5MjF4X2RzYV9wb3J0X3ByZV9icmlkZ2VfZmxhZ3MsXG40NjQ0Olx0XHQucG9ydF9icmlkZ2VfZmxhZ3NcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9mbGFncyxcbjQ2NDU6XHRcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSB5dDkyMXhfZHNhX3BvcnRfYnJpZGdlX2xlYXZlLFxuNDY0NjpcdFx0LnBvcnRfYnJpZGdlX2pvaW5cdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9qb2luLFxuNDY0NzpcdFx0LyogbXN0ICovXG40NjQ4Olx0XHQucG9ydF9tc3Rfc3RhdGVfc2V0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tc3Rfc3RhdGVfc2V0LFxuNDY0OTpcdFx0LnZsYW5fbXN0aV9zZXRcdFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXG40NjUwOlx0XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zdHBfc3RhdGVfc2V0LFxuNDY1MTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG40NjUyOlx0XHQvKiBkY2IgKi9cbjQ2NTM6XHRcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG40NjU0Olx0XHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLFxuNDY1NTpcdFx0LnBvcnRfZ2V0X2FwcHRydXN0XHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXG40NjU2Olx0XHQucG9ydF9zZXRfYXBwdHJ1c3RcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9hcHB0cnVzdCxcbjQ2NTc6XHQjZW5kaWZcbjQ2NTg6XHRcdC8qIHBvcnQgKi9cbjQ2NTk6XHRcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbCxcbjQ2NjA6XHRcdC5waHlsaW5rX2dldF9jYXBzXHQ9IHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcyxcbjQ2NjE6XHRcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxuNDY2MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG40NjYzOlx0XHQvKiBkc2NwICovXG40NjY0Olx0XHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZHNjcF9wcmlvLFxuNDY2NTpcdFx0LnBvcnRfZGVsX2RzY3BfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfZGVsX2RzY3BfcHJpbyxcbjQ2NjY6XHRcdC5wb3J0X2FkZF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXG40NjY3Olx0I2VuZGlmXG40NjY4Olx0XHQvKiBjaGlwICovXG40NjY5Olx0XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG40NjcwOlx0fTtcbjQ2NzE6XHRcbjQ2NzI6XHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NjczOlx0e1xuNDY3NDpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbjQ2NzU6XHRcbjQ2NzY6XHRcdGlmICghcHJpdilcbjQ2Nzc6XHRcdFx0cmV0dXJuO1xuNDY3ODpcdFxuNDY3OTpcdFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbjQ2ODA6XHR9XG40NjgxOlx0XG40NjgyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ2ODM6XHR7XG40Njg0Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuNDY4NTpcdFxuNDY4NjpcdFx0aWYgKCFwcml2KVxuNDY4NzpcdFx0XHRyZXR1cm47XG40Njg4Olx0XG40Njg5Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG40NjkwOlx0XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG40NjkxOlx0I2VuZGlmXG40NjkyOlx0XG40NjkzOlx0XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbjQ2OTQ6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40Njk1Olx0XG40Njk2Olx0XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuNDY5NzpcdFx0fVxuNDY5ODpcdFxuNDY5OTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYHl0OTIxeF9tZGlvX3Byb2JlYC4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBvZiBNRElPIGFuZCBkcml2ZXIgcHJvYmluZywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWNzIHJlbGF0ZWQgdG8gdGhlIFlUOTIxeCBjaGlwc2V0IGFuZCBhbnl0aGluZyB1bnVzdWFsIG9yIG5vdGV3b3J0aHkgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IHl0OTIxeF9tZGlvX3Byb2JlKioKCiogICAqKkVudHJ5IFBvaW50IGFuZCBQdXJwb3NlOioqIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGluZGVlZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZS4gSSBleHBlY3QgdG8gc2VlIGl0IGFzIHBhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyByZWdpc3RyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcmVkIHRoZSBwcm9iZTsgbGlrZWx5LCB0aGUgc3lzdGVtIGRldGVjdGVkIGEgZGV2aWNlIG1hdGNoaW5nIGEga25vd24gSUQsIGFuZCBub3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogSSYjMzk7bGwgYmUgbG9va2luZyBhdCB3aGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGluY2x1ZGVzIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUgTURJTyBjb21tdW5pY2F0aW9uIG9yIFBIWSBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IHVudXN1YWwgbWVtb3J5IG1hcHBpbmcgc3RyYXRlZ2llcyBiZWluZyB1c2VkPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cyB0byBsb29rIG91dCBmb3I/CiogICAqKk1ESU8gSW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHBhcnQuIEhvdyBpcyB0aGUgTURJTyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgb3IgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGUgWVQ5MjF4PyBJJiMzOTttIGV4cGVjdGluZyBzdGFuZGFyZCBNRElPIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBwb3RlbnRpYWxseSB3aXRoIGEgdmVuZG9yLXNwZWNpZmljIHR3aXN0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgTURJTyBjb250cm9sbGVyLgoqICAgKipQSFkgRGV0ZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIElzIHRoZXJlIFBIWSBkZXRlY3Rpb24gaW52b2x2ZWQgaGVyZSwgb3IgaXMgaXQgYXNzdW1lZCBhIHNwZWNpZmljIFBIWSBpcyBjb25uZWN0ZWQ/IEhvdyBkb2VzIGl0IGhhbmRsZSB2YXJpb3VzIFBIWSB0eXBlcz8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBzZXRzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGluY2x1ZGluZyBhbnkgcG93ZXItdXAgb3IgcmVzZXQgc2VxdWVuY2VzLiBXaGF0IGFib3V0IHRoZSBNRElPIGJ1cyBzcGVlZCwgYXJlIHRoZXJlIGFueSBzcGVlZCBhZGp1c3RtZW50cz8KKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFJvYnVzdG5lc3M6KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IFdoYXQgZG9lcyBpdCBkbyBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZXNwb25kaW5nLCBpZiB0aGVyZSBhcmUgTURJTyBlcnJvcnMsIG9yIGlmIHRoZSBQSFkgY29uZmlndXJhdGlvbiBmYWlscz8gQXJlIHRoZXJlIHJldHJ5IG1lY2hhbmlzbXM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBsb29rIGZvciBgcHJpbnRrYCBjYWxscyBhbmQgb3RoZXIgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcmVwb3J0aW5nLgoqICAgKipEcml2ZXIgTW9kZWwgSW50ZWdyYXRpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYmluZGluZ3MgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdGhlIGRldmljZSB0cmVlPyBJJiMzOTtsbCBjaGVjayBmb3IgdGhlIHVzZSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgZGV2aWNlIHByaXZhdGUgZGF0YSwgYW5kIG9mIGNvdXJzZSBhbnkgbmV0d29yayBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uLgoqICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvd2VyLXVwIG9yIHBvd2VyLWRvd24gc2VxdWVuY2VzIG9yIGNhbGxiYWNrcyBkZWZpbmVkPwoqICAgKipDb25jdXJyZW5jeToqKiBBcmUgdGhlcmUgYW55IGNvbmN1cnJlbmN5IGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGg/IEFyZSB0aGVyZSBhbnkgbG9ja3MgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIG9yIGhhcmR3YXJlIHJlZ2lzdGVycz8KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhbmQgUEhZLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBtYW5hZ2VzIGhhcmR3YXJlIHJlc291cmNlcywgZGV0ZWN0cyBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBpcyBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBZVDkyMXggTURJTyBpbnRlcmZhY2UuIEkgd2lsbCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZvciBhbnkgc3VidGxlIGFyZWFzLCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcwMDpcdFxuNDcwMTpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7XG40NzAyOlx0XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbjQ3MDM6XHRcbjQ3MDQ6XHRcdFx0aWYgKCFhY2xibGspXG40NzA1Olx0XHRcdFx0Y29udGludWU7XG40NzA2Olx0XHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG40NzA3Olx0XHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbjQ3MDg6XHRcbjQ3MDk6XHRcdFx0XHRpZiAoIWFjbHJ1bGUpXG40NzEwOlx0XHRcdFx0XHRjb250aW51ZTtcbjQ3MTE6XHRcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG40NzEyOlx0XHRcdH1cbjQ3MTM6XHRcdFx0a3ZmcmVlKGFjbGJsayk7XG40NzE0Olx0XHR9XG40NzE1Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDcxNjpcdH1cbjQ3MTc6XHRcbjQ3MTg6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MTk6XHR7XG40NzIwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3MjE6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzIyOlx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzIzOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzI0Olx0XG40NzI1Olx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzI2Olx0XHRpZiAoIXByaXYpXG40NzI3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDcyODpcdFxuNDcyOTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDczMDpcdFx0aWYgKCFtZGlvKVxuNDczMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3MzI6XHRcbjQ3MzM6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzM0Olx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzM1Olx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3MzY6XHRcbjQ3Mzc6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzM4Olx0XG40NzM5Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDc0MDpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3NDE6XHRcbjQ3NDI6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDc0MzpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NDQ6XHRcbjQ3NDU6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc0NjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NDc6XHRcdH1cbjQ3NDg6XHRcbjQ3NDk6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NTA6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NTE6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NTI6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzUzOlx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NTQ6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NTU6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc1NjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzU3Olx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc1ODpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NTk6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NjA6XHRcbjQ3NjE6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzYyOlx0XG40NzYzOlx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzY0Olx0fVxuNDc2NTpcdFxuNDc2NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc2NzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbjQ3Njg6XHRcdHt9XG40NzY5Olx0fTtcbjQ3NzA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuNDc3MTpcdFxuNDc3MjpcdHN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuNDc3MzpcdFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG40Nzc0Olx0XHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuNDc3NTpcdFx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG40Nzc2Olx0XHQubWRpb2Rydi5kcml2ZXIgPSB7XG40Nzc3Olx0XHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG40Nzc4Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbjQ3Nzk6XHRcdH0sXG40NzgwOlx0fTtcbjQ3ODE6XHRcbjQ3ODI6XHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbjQ3ODM6XHRcbjQ3ODQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0RhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbjQ3ODU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaFwmIzM0Oyk7XG40Nzg2Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NDkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIHl0OTIxeF9tZGlvX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIEhtbSwgdGhlIGNvZGUgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0b3VjaGluZyBhbnkgaGFyZHdhcmUgSUQgcmVnaXN0ZXJzLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyBza2lwcGluZyBzdHJhaWdodCB0byByZWdpc3RlcmluZyB0aGUgRFNBIHN3aXRjaC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgaG9sZCBvbi4uLiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGNhbGwgdGhhdCBhY3R1YWxseSBzZXRzIHRoaW5ncyBpbiBtb3Rpb24uIFRoYXQsIGluIHR1cm4sIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhlIGBzZXR1cGAgY2FsbGJhY2ssIHdoaWNoIEkgc2VlIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gUmlnaHQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIHByb2JlIGxpa2VseSBqdXN0IGhhbmRsZXMgdGhlIGluaXRpYWwgcmVnaXN0cmF0aW9uLCBhbmQgdGhlIHJlYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBoYXBwZW5pbmcgKmFmdGVyKiB0aGF0LiBTbywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU0MDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuNDU0MTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VvZl9ub2RlO1xuNDU0MjpcdFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbjQ1NDM6XHRcdGludCByZXM7XG40NTQ0Olx0XG40NTQ1Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU0NjpcdFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG40NTQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ4Olx0XG40NTQ5Olx0XHRpZiAocmVzKVxuNDU1MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDU1MTpcdFxuNDU1MjpcdFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcbjQ1NTM6XHRcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcbjQ1NTQ6XHRcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxuNDU1NTpcdFx0ICovXG40NTU2Olx0XHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbjQ1NTc6XHRcdGlmIChjaGlsZCkge1xuNDU1ODpcdFx0XHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XG40NTU5Olx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbjQ1NjA6XHRcdFx0aWYgKHJlcylcbjQ1NjE6XHRcdFx0XHRyZXR1cm4gcmVzO1xuNDU2MjpcdFx0fVxuNDU2MzpcdFxuNDU2NDpcdFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cbjQ1NjU6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW8tZXh0ZXJuYWxcJiMzNDspO1xuNDU2NjpcdFx0aWYgKGNoaWxkKSB7XG40NTY3Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1Njg6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2OTpcdFx0XHRpZiAocmVzKVxuNDU3MDpcdFx0XHRcdHJldHVybiByZXM7XG40NTcxOlx0XG40NTcyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnRlc3RlZCBleHRlcm5hbCBtZGlvIGJ1c1xcblwmIzM0Oyk7XG40NTczOlx0XHRcdHJldHVybiAtRU5PREVWO1xuNDU3NDpcdFx0fVxuNDU3NTpcdFxuNDU3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1Nzc6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xuNDU3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3OTpcdFxuNDU4MDpcdFx0aWYgKHJlcylcbjQ1ODE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1ODI6XHRcbjQ1ODM6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbjQ1ODQ6XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuNDU4NTpcdFx0aWYgKHJlcylcbjQ1ODY6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG40NTg3Olx0I2VuZGlmXG40NTg4Olx0XG40NTg5Olx0XHRyZXR1cm4gMDtcbjQ1OTA6XHR9XG40NTkxOlx0XG40NTkyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcbjQ1OTM6XHRcdC5tYWNfbGlua19kb3duXHQ9IHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24sXG40NTk0Olx0XHQubWFjX2xpbmtfdXBcdD0geXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAsXG40NTk1Olx0XHQubWFjX2NvbmZpZ1x0PSB5dDkyMXhfcGh5bGlua19tYWNfY29uZmlnLFxuNDU5NjpcdH07XG40NTk3Olx0XG40NTk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG40NTk5Olx0XHQvKiBtaWIgKi9cbjQ2MDA6XHRcdC5nZXRfc3RyaW5nc1x0XHQ9IHl0OTIxeF9kc2FfZ2V0X3N0cmluZ3MsXG40NjAxOlx0XHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyxcbjQ2MDI6XHRcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQsXG40NjAzOlx0XHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyxcbjQ2MDQ6XHRcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMsXG40NjA1Olx0XHQuZ2V0X3Jtb25fc3RhdHNcdFx0PSB5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzLFxuNDYwNjpcdFx0LmdldF9zdGF0czY0XHRcdD0geXQ5MjF4X2RzYV9nZXRfc3RhdHM2NCxcbjQ2MDc6XHRcdC5nZXRfcGF1c2Vfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMsXG40NjA4Olx0XHQvKiBlZWUgKi9cbjQ2MDk6XHRcdC5zdXBwb3J0X2VlZVx0XHQ9IGRzYV9zdXBwb3J0c19lZWUsXG40NjEwOlx0XHQuc2V0X21hY19lZWVcdFx0PSB5dDkyMXhfZHNhX3NldF9tYWNfZWVlLFxuNDYxMTpcdFx0LyogbXR1ICovXG40NjEyOlx0XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IHl0OTIxeF9kc2FfcG9ydF9jaGFuZ2VfbXR1LFxuNDYxMzpcdFx0LnBvcnRfbWF4X210dVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1LFxuNDYxNDpcdFx0LyogcmF0ZSAqL1xuNDYxNTpcdFx0LnBvcnRfcG9saWNlcl9kZWxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsLFxuNDYxNjpcdFx0LnBvcnRfcG9saWNlcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxuNDYxNzpcdFx0LnBvcnRfc2V0dXBfdGNcdFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXBfdGMsXG40NjE4Olx0XHQvKiBhY2wgKi9cbjQ2MTk6XHRcdC5jbHNfZmxvd2VyX2RlbFx0XHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9kZWwsXG40NjIwOlx0XHQuY2xzX2Zsb3dlcl9hZGRcdFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfYWRkLFxuNDYyMTpcdFx0LyogaHNyICovXG40NjIyOlx0XHQucG9ydF9oc3JfbGVhdmVcdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2xlYXZlLFxuNDYyMzpcdFx0LnBvcnRfaHNyX2pvaW5cdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXG40NjI0Olx0XHQvKiBtaXJyb3IgKi9cbjQ2MjU6XHRcdC5wb3J0X21pcnJvcl9kZWxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9kZWwsXG40NjI2Olx0XHQucG9ydF9taXJyb3JfYWRkXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfYWRkLFxuNDYyNzpcdFx0LyogbGFnICovXG40NjI4Olx0XHQucG9ydF9sYWdfbGVhdmVcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2xlYXZlLFxuNDYyOTpcdFx0LnBvcnRfbGFnX2pvaW5cdFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2pvaW4sXG40NjMwOlx0XHQvKiBmZGIgKi9cbjQ2MzE6XHRcdC5wb3J0X2ZkYl9kdW1wXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kdW1wLFxuNDYzMjpcdFx0LnBvcnRfZmFzdF9hZ2VcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmFzdF9hZ2UsXG40NjMzOlx0XHQuc2V0X2FnZWluZ190aW1lXHQ9IHl0OTIxeF9kc2Ffc2V0X2FnZWluZ190aW1lLFxuNDYzNDpcdFx0LnBvcnRfZmRiX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZGVsLFxuNDYzNTpcdFx0LnBvcnRfZmRiX2FkZFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfYWRkLFxuNDYzNjpcdFx0LnBvcnRfbWRiX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfZGVsLFxuNDYzNzpcdFx0LnBvcnRfbWRiX2FkZFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfYWRkLFxuNDYzODpcdFx0LyogdmxhbiAqL1xuNDYzOTpcdFx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk1OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBiYXNlZCBvbiBpdHMgbmFtZSwgYHl0OTIxeF9jaGlwX3Jlc2V0YCAqY291bGQqIGJlIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGZvciBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBVbmRlcnN0YW5kaW5nIGl0cyBpbm5lciB3b3JraW5ncyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9jaGlwX3Jlc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IGp1bXBlZCB0byB0aG9zZSB0d28gZnVuY3Rpb25zOiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ3V0IHRlbGxzIG1lIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsbHksIG9uZ29pbmcgaGVhbHRoIG1vbml0b3Jpbmcgb2YgYSBgeXQ5MjF4YCBjaGlwc2V0LCB3aGljaCBpcyBwcm9iYWJseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBlbWJlZGRlZCBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgcmVzZXQgZnVuY3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgYnJpbmdpbmcgdGhlIGNoaXAgaW50byBhIGRlZmluZWQsIGtub3duIHN0YXRlLiBUaGUgbWV0aG9kIHVzZWQgd291bGQgbGlrZWx5IGRlcGVuZCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBmdWxsLXBvd2VyIHJlc2V0LCBhIHNvZnQgcmVzZXQsIG9yIG1heWJlIGV2ZW4gYSBzZWxlY3RpdmUgcmVzZXQgb2Ygc3BlY2lmaWMgc3ViLW1vZHVsZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyB0aGUgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIHdyaXR0ZW4sIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgZm9yIHNpZ25hbCBhc3NlcnRpb24vZGUtYXNzZXJ0aW9uIOKAkyBhcmUgd2hlcmUgdGhlIGRldmlsIGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkYXRhc2hlZXQgb3IgdGhlIGRyaXZlciBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBudWFuY2VzLgoKYHl0OTIxeF9jaGlwX2RldGVjdGAuLi4gdGhpcyBvbmUmIzM5O3MgaW1tZWRpYXRlbHkgbW9yZSBpbnRlcmVzdGluZy4gV2hhdCBraW5kIG9mIGRldGVjdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBzaW1wbGUgSUQgcmVhZCwgYSBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgc2lnbmF0dXJlIGNoZWNrLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBoYXJkd2FyZSBwcm9iaW5nIHNlcXVlbmNlPyBUaGUgYXBwcm9hY2ggc2VsZWN0ZWQgd291bGQgcmVhbGx5IHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSYjMzk7cyBlcnJvciBoYW5kbGluZy4gSWRlYWxseSwgaXQmIzM5O3Mgbm90IGp1c3QgYSBibGluZCBJRCByZWFkOyBpdCBpbmNvcnBvcmF0ZXMgc29tZSByZWR1bmRhbmN5LCBtYXliZSBhIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBvciBhIHNhbml0eSBjaGVjayBvbiByZXBvcnRlZCBjYXBhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgaGVyZS4gV2hhdCBoYXBwZW5zIGlmIHRoZSBjaGlwIGZhaWxzIHRvIGRldGVjdCBhdCBwb3dlci11cD8gV2hhdCYjMzk7cyB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtPyBSZXRyeSBsb2dpYz8gRXJyb3IgcmVwb3J0aW5nPyBJcyB0aGVyZSBhIHRpbWVvdXQsIGFuZCBob3cgaXMgdGhhdCBoYW5kbGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBib3RoIGZ1bmN0aW9ucyB0byBnYWluIGEgY2xlYXIgcGljdHVyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSYjMzk7cyByZXNpbGllbmNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIyNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyMjg6XHR7XG40MjI5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40MjMwOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG40MjMxOlx0XHR1OCBleHRtb2RlO1xuNDIzMjpcdFx0dTMyIGNoaXBpZDtcbjQyMzM6XHRcdHUzMiBtYWpvcjtcbjQyMzQ6XHRcdHUzMiBtb2RlO1xuNDIzNTpcdFx0dTMyIHZhbDtcbjQyMzY6XHRcdGludCByZXM7XG40MjM3Olx0XG40MjM4Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG40MjM5Olx0XHRpZiAocmVzKVxuNDI0MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI0MTpcdFxuNDI0MjpcdFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG40MjQzOlx0XG40MjQ0Olx0XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG40MjQ1Olx0XHRcdGlmIChpbmZvLVx1MDAzZW1ham9yID09IG1ham9yKVxuNDI0NjpcdFx0XHRcdGJyZWFrO1xuNDI0NzpcdFx0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbjQyNDg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cJiMzNDssIGNoaXBpZCk7XG40MjQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI1MDpcdFx0fVxuNDI1MTpcdFxuNDI1MjpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFx1MDAyNm1vZGUpO1xuNDI1MzpcdFx0aWYgKHJlcylcbjQyNTQ6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTU6XHRcdHJlcyA9IHl0OTIxeF9lZGF0YV9yZWFkKHByaXYsIFlUOTIxWF9FREFUQV9FWFRNT0RFLCBcdTAwMjZleHRtb2RlKTtcbjQyNTY6XHRcdGlmIChyZXMpXG40MjU3Olx0XHRcdHJldHVybiByZXM7XG40MjU4Olx0XG40MjU5Olx0XHRmb3IgKDsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlbW9kZSA9PSBtb2RlIFx1MDAyNlx1MDAyNlxuNDI2MTpcdFx0XHQgICAgaW5mby1cdTAwM2VleHRtb2RlID09IGV4dG1vZGUpXG40MjYyOlx0XHRcdFx0YnJlYWs7XG40MjYzOlx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI2NDpcdFx0XHRkZXZfZXJyKGRldixcbjQyNjU6XHRcdFx0XHRcJiMzNDtVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcblwmIzM0OyxcbjQyNjY6XHRcdFx0XHRjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI2NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjQyNjg6XHRcdH1cbjQyNjk6XHRcbjQyNzA6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfU1lTX0NMSywgXHUwMDI2dmFsKTtcbjQyNzE6XHRcdGlmIChyZXMpXG40MjcyOlx0XHRcdHJldHVybiByZXM7XG40MjczOlx0XHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRwcml2LVx1MDAzZWN5Y2xlX25zID0gaW5mby1cdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcbjQyNzY6XHRcdFx0YnJlYWs7XG40Mjc3Olx0XHRjYXNlIFlUOTIxWF9TWVNfQ0xLXzE0M006XG40Mjc4Olx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSA3O1xuNDI3OTpcdFx0XHRicmVhaztcbjQyODA6XHRcdGRlZmF1bHQ6XG40MjgxOlx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSA4O1xuNDI4MjpcdFx0fVxuNDI4MzpcdFxuNDI4NDpcdFx0LyogUHJpbnQgY2hpcGlkIGhlcmUgc2luY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4gbG93ZXIgMTYgYml0cyAqL1xuNDI4NTpcdFx0ZGV2X2luZm8oZGV2LFxuNDI4NjpcdFx0XHQgXCYjMzQ7TW90b3Jjb21tICVzIGV0aGVybmV0IHN3aXRjaCwgY2hpcGlkOiAweCV4LCBjaGlwbW9kZTogMHgleCAweCV4XFxuXCYjMzQ7LFxuNDI4NzpcdFx0XHQgaW5mby1cdTAwM2VuYW1lLCBjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI4ODpcdFxuNDI4OTpcdFx0cHJpdi1cdTAwM2VpbmZvID0gaW5mbztcbjQyOTA6XHRcbjQyOTE6XHRcdHJldHVybiAwO1xuNDI5MjpcdH1cbjQyOTM6XHRcbjQyOTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyOTU6XHR7XG40Mjk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40Mjk3Olx0XHR1MTYgZXRoX3BfdGFnO1xuNDI5ODpcdFx0dTMyIHZhbDtcbjQyOTk6XHRcdGludCByZXM7XG40MzAwOlx0XG40MzAxOlx0XHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XG40MzAyOlx0XHRpZiAocmVzKVxuNDMwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwNDpcdFxuNDMwNTpcdFx0LyogUmVzZXQgKi9cbjQzMDY6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG40MzA3Olx0XHRpZiAocmVzKVxuNDMwODpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwOTpcdFxuNDMxMDpcdFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xuNDMxMTpcdFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xuNDMxMjpcdFxuNDMxMzpcdFx0dmFsID0gMDtcbjQzMTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfUlNULCB+MCwgXHUwMDI2dmFsKTtcbjQzMTU6XHRcdGlmIChyZXMpXG40MzE2Olx0XHRcdHJldHVybiByZXM7XG40MzE3Olx0XG40MzE4Olx0XHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXG40MzE5Olx0XHQgKiBiZWZvcmUuXG40MzIwOlx0XHQgKi9cbjQzMjE6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuNDMyMjpcdFx0aWYgKHJlcylcbjQzMjM6XHRcdFx0cmV0dXJuIHJlcztcbjQzMjQ6XHRcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbjQzMjU6XHRcdGlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7XG40MzI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcXG5cJiMzNDssIGV0aF9wX3RhZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBZVDkyMVggQ2hpcCBEZXRlY3Rpb24gTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBoYW5kbGVzIHRoZSBgWVQ5MjFYX0NISVBfSURgLiBJdCBleHBlY3RzIGEgc3BlY2lmaWMgbWFqb3IgdmVyc2lvbiwgYW5kIGlmIGl0IGRvZXNuJiMzOTt0IGdldCBpdCwgaXQgdGhyb3dzIGEgYC1FTk9ERVZgIGVycm9yLiBTaW5jZSB0aGlzIGlzIGFuIE1ESU8gZGV2aWNlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHN5emthbGxlciBhbmQgaXRzIGFiaWxpdHkgdG8gZW11bGF0ZSByZWFkcyBhbmQgd3JpdGVzIHZpYSBNRElPLCBlaXRoZXIgdGhyb3VnaCBhIG1vY2sgZGV2aWNlIG9yIGJ5IGluamVjdGluZyBmYXVsdHMuCgpCdXQgaGVyZSYjMzk7cyB0aGUgc25hZy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJhbCogTURJTyBtb2NrIGRldmljZSB0aGF0IGNhbiBqdXN0IHNwaXQgb3V0IGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBtZGlvYnVzX3JlYWRgIHVubGVzcyBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgY29kZWQgZm9yLiBUaGVuIEkgdGhvdWdodCwgb2theSwgaXQgaGFzIHNwZWNpZmljIG1vY2tzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZrbXNgIGZvciBEUk0sIGB2aGNpYCBmb3IgVVNCLCBldGMuIEJ1dCBkb2VzIGl0IGhhdmUgKmFueXRoaW5nKiBmb3IgTURJTz8gSSBmb3VuZCBgbWRpby1tb2NrYCBhbmQgYG1kaW8tYmNtLXVuaW1hY2AsIHdoaWNoIGFyZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBub3RoaW5nIGdlbmVyaWMuIFRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIHNvbHV0aW9uLgoKTWF5YmUgSSBjb3VsZCBsZXZlcmFnZSBgYnBmYCB0byBpbnRlcmNlcHQgdGhlIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBkdW1teSBNRElPIGJ1cyBJJiMzOTttIG1pc3Npbmc/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSBhZ2Fpbi4gV2FpdCwgZGlkIHN5emthbGxlciBldmVyIGltcGxlbWVudCBgc3l6X21kaW9fcmVhZGAgb3IgYHN5el9tZGlvX3dyaXRlYD8gTm8sIEkgZG9uJiMzOTt0IHNlZSB0aG9zZSB0aGVyZS4KCkFscmlnaHQsIHdoYXQgaWYgdGhlIGRldmljZSBpcyBjcmVhdGVkIHRocm91Z2ggYSBkZXZpY2UgdHJlZT8gU3l6a2FsbGVyICpjYW4qIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcywgYnV0IHRoYXQgd291bGRuJiMzOTt0IGhlbHAgbWUgZW11bGF0ZSB0aGUgaGFyZHdhcmUmIzM5O3MgcmVzcG9uc2UsIGVzcGVjaWFsbHkgdGhlIGNydWNpYWwgYFlUOTIxWF9DSElQX0lEYCB2YWx1ZS4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIFRoZSBjb2RlIHJldmVhbHMgdGhhdCBgeXQ5MjF4X3JlZ19yZWFkYCB1c2VzIGBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkYC4gU28gdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQgYHl0OTIxeF9yZWdfb3BzX21kaW9gIGFjdHVhbGx5ICppcyouIFRoYXQgd2lsbCBiZSBrZXkuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfcmVnX29wc19tZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTIzNj1zdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb193cml0ZSh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHl0OTIxeF9yZWdfb3BzX21kaW8gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzMtXHQucmVhZCA9IHl0OTIxeF9yZWdfbWRpb19yZWFkLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MTg9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDczOC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Mzk6XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc0MC1cdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjY4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1ESU8gYnVzIHJlYWQuIFRoZSBmdW5jdGlvbiBgbWRpb2J1c19yZWFkYCBpcyB0aGUga2V5IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHJlc3BvbmRpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXQmIzM5O2xsIHJldHVybiBlaXRoZXIgYDB4ZmZmZmAgb3IgYC1FSU9gLiBJZiBpdCYjMzk7cyBgMHhmZmZmYCwgdGhlbiBgY2hpcGlkYCBpcyBnb2luZyB0byBiZSBgMHhmZmZmZmZmZmAuIENvbnNlcXVlbnRseSwgYG1ham9yYCBpcyBhbHNvIGdvaW5nIHRvIGJlIGAweGZmZmZgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIGB5dDkyMXhfaW5mb3NgIGhhbmRsZSBhIGAweGZmZmZgIHZhbHVlPyBJIGhpZ2hseSBkb3VidCBpdCYjMzk7cyBleHBlY3RpbmcgdGhhdCwgc28gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGhhcHBlbnMgd2hlbiBgbWFqb3JgIHRha2VzIHRoYXQgdmFsdWUgYW5kIGl0JiMzOTtzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGV4cGVjdGVkIHZhbHVlcyB3aXRoaW4gYHl0OTIxeF9pbmZvc2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGFuZCBzZWUgaG93IGB5dDkyMXhfaW5mb3NgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9pbmZvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05OT1zdHJ1Y3QgeXQ5MjF4X2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNDMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjQ0Olx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVx1MDAzZW5hbWU7IGluZm8mIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0NS1cdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjM5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggcmVsZXZhbnQgdGVjaG5pY2FsIGNvbnRleHRzLgoKKipBbmFseXppbmcgYHl0OTIxeF9pbmZvc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYHl0OTIxeF9pbmZvc2AuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVwcmVzZW50cyBzb21lIHNvcnQgb2Ygc3RydWN0dXJlZCBkYXRhIG9yIGNvbmZpZ3VyYXRpb24gZmlsZSByZWxhdGVkIHRvIHRoZSBgeXQ5MjF4YCBwcm9qZWN0IG9yIGNvbXBvbmVudC4gSXQgY291bGQgY29udGFpbiBhbnkgbnVtYmVyIG9mIHRoaW5ncyDigJMgc2V0dGluZ3MsIG1ldGFkYXRhLCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMsIHBlcmhhcHMgZXZlbiBwZXJmb3JtYW5jZSBtZXRyaWNzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgb2Ygd2hhdCB0aGF0IGB5dDkyMXhgIGlzIHVzZWQgZm9yLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQga2luZCBvZiBwcm9qZWN0IGlzIHRoaXM/IFdoYXQmIzM5O3MgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZXNlIGZpbGVzIHdpdGhpbiB0aGlzIGVjb3N5c3RlbT8gSXMgaXQgbGlrZWx5IFlBTUwsIEpTT04sIGEgY3VzdG9tIGZvcm1hdCwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBuYW1lICYjMzk7aW5mb3MmIzM5OyBpbXBsaWVzIHNvbWV0aGluZyBpbmZvcm1hdGlvbmFsIOKAkyBkZXRhaWxzLCBpZiB5b3Ugd2lsbCwgYnV0IEkgbmVlZCBhIHdob2xlIGxvdCBtb3JlIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpdHMgcmVsZXZhbmNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZGF0YS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiAxMTc6XHRcdHtcbiAxMTg6XHRcdFx0XCYjMzQ7WVQ5MjE1U0NcJiMzNDssIFlUOTIxNV9NQUpPUiwgMSwgMCxcbiAxMTk6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4gMTIwOlx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMjE6XHRcdH0sXG4gMTIyOlx0XHR7XG4gMTIzOlx0XHRcdFwmIzM0O1lUOTIxNVNcJiMzNDssIFlUOTIxNV9NQUpPUiwgMiwgMCxcbiAxMjQ6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4gMTI1Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMjY6XHRcdH0sXG4gMTI3Olx0XHR7XG4gMTI4Olx0XHRcdFwmIzM0O1lUOTIxNVJCXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDMsIDAsXG4gMTI5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxuIDEzMDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gMTMxOlx0XHR9LFxuIDEzMjpcdFx0e1xuIDEzMzpcdFx0XHRcJiMzNDtZVDkyMTROQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAyLFxuIDEzNDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4gMTM1Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMzY6XHRcdH0sXG4gMTM3Olx0XHR7XG4gMTM4Olx0XHRcdFwmIzM0O1lUOTIxM05CXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDMsIDMsXG4gMTM5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcbiAxNDA6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxuIDE0MTpcdFx0fSxcbiAxNDI6XHRcdHtcbiAxNDM6XHRcdFx0XCYjMzQ7WVQ5MjE4TlwmIzM0OywgWVQ5MjE4X01BSk9SLCAwLCAwLFxuIDE0NDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig4KSxcbiAxNDU6XHRcdFx0MCxcbiAxNDY6XHRcdH0sXG4gMTQ3Olx0XHR7XG4gMTQ4Olx0XHRcdFwmIzM0O1lUOTIxOE1CXCYjMzQ7LCBZVDkyMThfTUFKT1IsIDEsIDAsXG4gMTQ5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIDE1MDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gMTUxOlx0XHR9LFxuIDE1MjpcdFx0e31cbiAxNTM6XHR9O1xuIDE1NDpcdFxuIDE1NTpcdCNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiAxNTY6XHRcbiAxNTc6XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuIDE1ODpcdCAqXG4gMTU5Olx0ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuIDE2MDpcdCAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiAxNjE6XHQgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbiAxNjI6XHQgKi9cbiAxNjM6XHQjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuIDE2NDpcdFxuIDE2NTpcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBZVDkyMTUvWVQ5MjE4IHNpdHVhdGlvbi4gRmlyc3QsIHRoZSBgbWFqb3JgIHZlcnNpb24gbmVlZHMgdG8gYmUgZWl0aGVyIGBZVDkyMTVfTUFKT1JgIG9yIGBZVDkyMThfTUFKT1JgLiBOb3csIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCB3aWxsIGluZXZpdGFibHkgZmFpbC4gQW5kIGlmIHRoYXQgZmFpbHMsIGB5dDkyMXhfY2hpcF9yZXNldGAgZmFpbHMgdG9vLiBUaGlzIGZhaWx1cmUgY2FzY2FkZXMg4oCTIGB5dDkyMXhfZHNhX3NldHVwYCBnb2VzIGRvd24gd2l0aCBpdCwgbGVhZGluZyB0byBhIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBmYWlsdXJlLCBhbmQgdWx0aW1hdGVseSwgdGhlIGRyZWFkZWQgYHl0OTIxeF9tZGlvX3Byb2JlYCBmYWlsdXJlLiBJdCYjMzk7cyBhIGNoYWluIHJlYWN0aW9uLgoKVGhlIHByb2JsZW0/IEluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgdXNlcywgb3IgZXZlbiBqdXN0IGluIFFFTVUsIHRoZSBkZXZpY2Ugd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUgYmVjYXVzZSBpdCYjMzk7cyBleHBlY3RpbmcgYSBwaHlzaWNhbCBoYXJkd2FyZSByZXNwb25zZSB0aGF0IGlzbiYjMzk7dCB0aGVyZS4KCkhvbGQgb24sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiBNRElPIGVtdWxhdG9yIHRoYXQgY2FuIHJldHVybiAqc3BlY2lmaWMqIGBZVDkyMVhfQ0hJUF9JRGAgdmFsdWVzLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG1pc3NpbmcuIEkgd2FzIGhvcGluZyBJIGNvdWxkIHNvbWVob3cgZ2V0IHRvIGB5dDkyMXhfbGVkc19zZXR1cGAsIGJ1dCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB5dDkyMXhfZHNhX3NldHVwYCwgKmFmdGVyKiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfc2V0dXBgLiBTbywgd2l0aCB0aGUgZmFpbHVyZSBmcm9tIHRoZSBpbml0aWFsIGhhcmR3YXJlIGRldGVjdGlvbiwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBMRUQgc2V0dXAgY29kZS4KCkxldCYjMzk7cyBkb3VibGUgY2hlY2suIENhbiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgYmUgY2FsbGVkIGFueXdoZXJlIGVsc2U/IE5vcGUuIE9ubHkgYHl0OTIxeF9tZGlvX3Byb2JlYCBjYWxscyBpdC4gT2theSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgTEVELXJlbGF0ZWQgY29kZT8gVGhlIGNvZGUgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCwgd2hpY2ggdXNlcyBgZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YCB0byByZWdpc3RlciB0aGUgTEVEcy4gQnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFuZCBgeXQ5MjF4X2xlZHNfc2V0dXBgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgeXQ5MjF4X2RzYV9zZXR1cGAuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogU2luY2UgYHl0OTIxeF9jaGlwX2RldGVjdGAgZmFpbHMgZWFybHksIHRoZSB3aG9sZSBgeXQ5MjF4X2RzYV9zZXR1cGAgZnVuY3Rpb24gZmFpbHMgdG9vLCBhbmQgdGhlIExFRCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoaXMuCgpJIHdhcyBob3BpbmcgdGhlcmUgd2FzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgdGhhdCBTeXprYWxsZXIgKmNvdWxkKiBsZXZlcmFnZSB0byBpbmplY3QgYXJiaXRyYXJ5IHJlc3BvbnNlcy4gVGhlcmUmIzM5O3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2suY2A/IE5vIHN1Y2ggbHVjay4gVGhlcmUgYXJlIHZhcmlvdXMgTURJTyBkcml2ZXJzIGxpa2UgYG1kaW8tZ3Bpby5jYCwgYG1kaW8tbXV4LmNgLCBhbmQgc28gb24uCgpTeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tZ3Bpb2AgdG8gY29uc3RydWN0IGFuIE1ESU8gYnVzLiBIb3dldmVyLCBpdCAqY2Fubm90KiBtb2NrIHRoZSByZXNwb25zZXMgb2YgYSBzcGVjaWZpYyBQSFkvc3dpdGNoIGNoaXAgdW5sZXNzIGl0JiMzOTtzIGVtdWxhdGVkIGluIFFFTVUuIEFuZCBRRU1VLCBhcyBmYXIgYXMgSSBrbm93LCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBNb3RvcmNvbW0gWVQ5MjE1LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgaXMgdXR0ZXJseSB1bnJlYWNoYWJsZSBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gbG9jayB0aGF0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gdGhlIERTQSBEcml2ZXI6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IE1ESU8gZW11bGF0aW9uIHRoYXQgY291bGQgaGVscC4gSSBrbm93IFFFTVUgZG9lcyBoYXZlIHNvbWUgTURJTyBlbXVsYXRpb24sIGJ1dCBpdCYjMzk7cyBzcGVjaWZpYyB0byBjZXJ0YWluIE1BQ3MgYW5kIFBIWXMsIGFuZCBjcml0aWNhbGx5LCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIERTQSBzd2l0Y2hlcyBvbiB0aGUgTURJTyBidXMuIFNvLCB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIOKAkyBubyBkaWNlIHRoZXJlLiBBbmQgdGhlIHN5emthbGxlciBlbnZpcm9ubWVudCwgYXQgbGVhc3QgYXMgSSB1bmRlcnN0YW5kIGl0LCBpc24mIzM5O3Qgc2V0IHVwIHRvIGVtdWxhdGUgdGhpcyBzd2l0Y2ggZWl0aGVyLgoKVGhlIG5leHQgcXVlc3Rpb24gd2FzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIGxldmVyYWdlIGVCUEYgdG8gbW9jayB0aGUgYG1kaW9idXNfcmVhZGAgY2FsbHMsIGVmZmVjdGl2ZWx5IGJ5cGFzc2luZyB0aGUgTURJTyBzZXR1cC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgZUJQRiBmb3IgdGhhdCBraW5kIG9mIGhhcmR3YXJlIHJlZ2lzdGVyIG1vY2tpbmcuIEl0IHJlbGllcyBvbiBwcmUtZXhpc3Rpbmcga2VybmVsIGludGVyZmFjZXMgb3IgUUVNVSYjMzk7cyBidWlsdC1pbiBlbXVsYXRpb24sIGFuZCBzaW5jZSB0aGVyZSYjMzk7cyBubyBgbWRpb3NpbWAgb3Igc2ltaWxhciBoZXJlLCB0aGF0IHBhdGggaXMgYmxvY2tlZC4gVGhhdCBzZWFscyBpdDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgd2VudCBiYWNrIGFuZCBleGFtaW5lZCBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggaW1wYWN0cyBgbGVkcy5jYCBhbmQgYHNtaS5jYCB3aXRoaW4gdGhlIERTQSBkcml2ZXIuIGBzbWkuY2AgaGFzIHJlZ2lzdGVyIHJlYWQvd3JpdGUgd3JhcHBlcnMsIGFuZCBgbGVkcy5jYCBjb250YWlucyBMRUQtcmVsYXRlZCBvcGVyYXRpb25zLiBIb3dldmVyLCBib3RoIG9mIHRoZXNlIHJlcXVpcmUgdGhlIGB5dDkyMXhfcHJpdmAgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSwgY3JpdGljYWxseSwgaXMgYWxsb2NhdGVkIHdpdGhpbiBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJZiB0aGF0IGZ1bmN0aW9uIGZhaWxzLCB0aGUgYHByaXZgIHN0cnVjdHVyZSBpcyBmcmVlZCwgYW5kIG5vIExFRHMgYXJlIHJlZ2lzdGVyZWQuIFRoZXJlZm9yZSwgZnVuY3Rpb25zIGxpa2UgYHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nYCBhbmQgYHl0OTIxeF9jbGVkX2JsaW5rX3NldGAsIGFyZSBuZXZlciBnb2luZyB0byBiZSBjYWxsZWQuIEl0JiMzOTtzIHVucmVhY2hhYmxlIGNvZGUuCgpOb3csIGEgZmluYWwsIHF1aWNrIGNoZWNrLiBXaGF0IGlmIGB5dDkyMXhfcmVnX3JlYWRgIHJldHVybnMgMD8gQ291bGQgYHl0OTIxeF9jaGlwX2RldGVjdGAgc3VjY2VlZCB1bmRlciB0aG9zZSBjaXJjdW1zdGFuY2VzPyBJZiBgeXQ5MjF4X3JlZ19yZWFkYCBpcyAwLCB0aGVuIHRoZSBgY2hpcGlkYCB2YWx1ZSB3aWxsIGJlIDAuIFNvIGBtYWpvcmAgd291bGQgYmUgc2V0IHRvIHdoYXRldmVyIGBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIDApYCBldmFsdWF0ZXMgdG8uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgWVQ5MjFYX0NISVBfSURfTUFKT1JgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtZVDkyMVhfQ0hJUF9JRF9NQUpPUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI0MjpcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC0yOS0jZGVmaW5lIFlUOTIxWF9DSElQX0lEXHRcdFx0MHg4MDAwOFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6MzA6I2RlZmluZSAgWVQ5MjFYX0NISVBfSURfTUFKT1JcdFx0XHRHRU5NQVNLKDMxLCAxNilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTMxLSNkZWZpbmUgWVQ5MjFYX0VYVF9DUFVfUE9SVFx0XHQweDgwMDBjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Mjg2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENoaXAgSWRlbnRpZmljYXRpb24gYW5kIE1ham9yIFZlcnNpb24gTnVtYmVycyoqCgpPa2F5LCBzbyBpZiB0aGUgYGNoaXBpZGAgdmFsdWUgaXMgMCwgdGhlIGBtYWpvcmAgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGFsc28gYmUgMC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcyBkYXRhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgYHl0OTIxeF9pbmZvc2AgZGF0YSBzdHJ1Y3R1cmUgYWdhaW4uIEkgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIGRlZmluaXRpb25zIG9mIGBZVDkyMTVfTUFKT1JgIGFuZCBgWVQ5MjE4X01BSk9SYCBiZWNhdXNlIHRoZXNlIGFyZSBrZXkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGNoaXBpZGAsIHRoZSBgbWFqb3JgIHZlcnNpb24sIGFuZCB0aGVzZSBjb25zdGFudHMgaXMgcHJvYmFibHkgY3JpdGljYWwgZm9yIHByb3BlciBkZXZpY2UgaWRlbnRpZmljYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1lUOTIxNV9NQUpPUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY9c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cdHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODpcdFx0XCYjMzQ7WVQ5MjE1U0NcJiMzNDssIFlUOTIxNV9NQUpPUiwgMSwgMCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOS1cdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTIyLVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTIzOlx0XHRcJiMzNDtZVDkyMTVTXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDIsIDAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjQtXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEyNy1cdHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyODpcdFx0XCYjMzQ7WVQ5MjE1UkJcJiMzNDssIFlUOTIxNV9NQUpPUiwgMywgMCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEyOS1cdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTMyLVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTMzOlx0XHRcJiMzNDtZVDkyMTROQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAyLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM0LVx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM3LVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTM4Olx0XHRcJiMzNDtZVDkyMTNOQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAzLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM5LVx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3NC1cdGNhc2UgMDpcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNzU6XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3Ni1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg9ODA4PWVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTgzNy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oOjgzODojZGVmaW5lIFlUOTIxNV9NQUpPUlx0MHg5MDAyXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MzktI2RlZmluZSBZVDkyMThfTUFKT1JcdDB4OTAwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM1OQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFlUOTIxNV9NQUpPUmAgaXMgZGVmaW5lZCBhcyBgMHg5MDAyYCwgYW5kIGBZVDkyMThfTUFKT1JgIGlzIGRlZmluZWQgYXMgYDB4OTAwMWAuIE5vdywgaWYgdGhlIGBjaGlwaWRgIHZhcmlhYmxlIGhhcHBlbnMgdG8gYmUgemVybyBvciBgMHhmZmZmZmZmZmAsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYG1ham9yYCB2YWx1ZSB3aWxsIGJlIGVpdGhlciB6ZXJvIG9yIGAweGZmZmZgLiBOZWl0aGVyIG9mIHRob3NlIG1ham9yIHZhbHVlcyB3aWxsIG1hdGNoIGVpdGhlciBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzIChgMHg5MDAyYCBvciBgMHg5MDAxYCkuIFRoaXMgbWVhbnMgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCBpbiB0aGlzIHNjZW5hcmlvLgoKQ29uc2VxdWVudGx5LCBzaW5jZSB0aGUgY2hpcCBkZXRlY3Rpb24gZmFpbHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBuZXZlciBleGVjdXRlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIElmIHRoZSBwcm9iZSBmdW5jdGlvbiBuZXZlciBydW5zLCB0aGVuIHRoZSBzdWJzZXF1ZW50IExFRCBjb2RlLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIHJlbGllcyBvbiBhIHN1Y2Nlc3NmdWwgcHJvYmUsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEl04oCZcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgaW4gdGhpcyBzZXR1cC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGFueSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgcGh5c2ljYWwgaGFyZHdhcmUg4oCTIHNwZWNpZmljYWxseSB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggc3dpdGNoIGNoaXAg4oCTIGZvciBzdWNjZXNzZnVsIHByb2JpbmcuIFFFTVUsIG9yIGFueSB2aXJ0dWFsaXphdGlvbiBzZXR1cCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLiBTbywgYW55IGF0dGVtcHQgdG8gZnV6eiB0aGlzIGNvZGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgZ29pbmcgdG8gaGl0IGEgZGVhZCBlbmQsIG1ha2luZyBpdCBhIHdhc3RlIG9mIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni4xMDEzMTE1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2OTgzNDI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIxOCBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBvbiB0aGUgTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCByZWdpc3RlciBhbmQgZXhwZWN0cyBzcGVjaWZpYyB2YWx1ZXMgbGlrZSAweDkwMDIgb3IgMHg5MDAxKS4gU2luY2UgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIFFFTVUgb3IgYSBnZW5lcmljIE1ESU8gbW9jayBkZXZpY2UgaW4gdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBuZXdseSBhZGRlZCBMRUQgY2xhc3NkZXYgb3BlcmF0aW9ucyBhbmQgU01JIHJlYWQvd3JpdGUgd3JhcHBlcnMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni4xMDEzMTgzNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTU2NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5MjM2MjcyNDY4NmIwZTdjOTZhMjFmNmM3ZTY5OWY5MGQ5OWRkNTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNDo0Mjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXFx0XFx0MTBcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbiBcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbkBAIC0wLDAgKzEsNjE1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VsZWRzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVxcdTAwM2Vwb3J0KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXFx1MDAzZWluZGV4XSlcXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbitcXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxcbit7XFxuK1xcdHN3aXRjaCAoZ3JvdXApIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Km9ucCA9ICh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBjdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpkdXR5cClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5O1xcbitcXG4rXFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcXG4rXFx0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGZvciAoOyBjeWNsZSBcXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZT0gMSwgY3ljbGUgXFx1MDAzZVxcdTAwM2U9IDEpXFxuK1xcdFxcdGlmIChjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdCpjeWNsZXAgPSBjeWNsZTtcXG4rXFxuK1xcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcXG4rXFx0XFx0XFx0XFx0ICAgICAob24gXFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXFxuK1xcdFxcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcXG4rXFx0XFx0XFx0ZHV0eSA9IGR1dHlzW2ldO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRpZiAob24gXFx1MDAzZSBvZmYpXFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xcbitcXHQqZHV0eXAgPSBkdXR5O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgY2hhciBkdXR5O1xcbitcXHRib29sIHVzZV9jeWNsZTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKCEqb25wIFxcdTAwMjZcXHUwMDI2ICEqb2ZmcCkge1xcbitcXHRcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXFxuK1xcdFxcdFxcdGlmIChpICE9IGdyb3VwIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpIHtcXG4rXFx0XFx0XFx0XFx0ZHV0eSA9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIGNoYW5nZV9jeWNsZTtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfZHV0eTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcXHUwMDI2Y3ljbGUsIFxcdTAwMjZkdXR5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGN5Y2xlIFxcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBjeWNsZSAhPSBwcC1cXHUwMDNlbGVkX2N5Y2xlO1xcbitcXHRcXHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxcbitcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xcbitcXHRcXHRcXHQgICAgIGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXFx1MDAzZWxlZHNbaV0pXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAoKGNoYW5nZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2N5Y2xlKSB8fFxcbitcXHRcXHRcXHRcXHQgICAgKGNoYW5nZV9kdXR5IFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0aWYgKHZhbCAhPSBjdHJsKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0c3dpdGNoIChkdXR5IFxcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChkdXR5IFxcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRpZiAodXNlX2N5Y2xlKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XFxuK1xcdH1cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcXG4rXFxuK1xcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XFxuK1xcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XFxuK1xcdFtUUklHR0VSX05FVERFVl9MSU5LXVxcdFxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxcbitcXHRcXHRcXHRcXHRcXHQgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTSxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRixcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXFxuK1xcdFtUUklHR0VSX05FVERFVl9UWF1cXHRcXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfUlhdXFx0XFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sXFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKVxcbitcXHRcXHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgX19UUklHR0VSX05FVERFVl9NQVg7IGkrKykge1xcbitcXHRcXHR1MzIgbWFzayA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKG1hc2sgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDI2IG1hc2spID09IG1hc2spXFxuK1xcdFxcdFxcdCpmbGFnc3AgfD0gQklUKGkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gMDtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7XFxuK1xcdFxcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdFxcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGlmIChncm91cCBcXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAocHAtXFx1MDAzZWxlZHNbZ3JvdXBdKVxcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFxuK1xcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1oaWdoXFxcIik7XFxuK1xcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWxvd1xcXCIpO1xcbitcXHRpZiAoZm9yY2VfaGlnaCBcXHUwMDI2XFx1MDAyNiBmb3JjZV9sb3cpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xcbitcXG4rXFx0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFsZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRsZWQtXFx1MDAzZXBvcnQgPSBwcDtcXG4rXFx0bGVkLVxcdTAwM2Vncm91cCA9IGdyb3VwO1xcbitcXG4rXFx0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFxcdTAwMjZvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGxlZF9jZGV2ID0gXFx1MDAyNmxlZC1cXHUwMDNlY2RldjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3MgPSBvbjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXFxcIm5ldGRldlxcXCI7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcXFwiLSV1OiUwMmQ6JTAydVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xcbitcXHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xcbitcXHRcXHQuZndub2RlID0gZndub2RlLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAocG9sYXJpdHkpIHtcXG4rXFx0XFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XFxuK1xcbitcXHRcXHQqaW52X21hc2twIHw9IGJpdDtcXG4rXFx0XFx0aWYgKHBvbGFyaXR5IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Kmludl9jdHJscCB8PSBiaXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZClcXG4rXFx0XFx0XFx0XFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFxcdTAwMjZsZWQtXFx1MDAzZWNkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni41Mzc4MTc2MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTI2MTgzMDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCJcbiBcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIlxuK1xuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wiXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCArMSw1IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInl0OTIxeC5oXCJcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwiLCByZXMpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXHRcdDEwXG4rXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyZTY4ZTJmMjFkNjdlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2MTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS11cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8XG4rXHRcdFx0XHRcdCAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuK1x0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNLFxuK1x0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuK1x0W1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbitcdFtUUklHR0VSX05FVERFVl9UWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWCxcbitcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbit9O1xuK1xuK3N0YXRpYyBib29sXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHRcdFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4rXHRcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSsrKSB7XG4rXHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmIChtYXNrIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAyNiBtYXNrKSA9PSBtYXNrKVxuK1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdHUzMiBhZGRyO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gMDtcbitcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7XG4rXHRcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0XHRjdHJsIHw9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1x0fVxuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXG4rXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGJvb2wgZm9yY2VfaGlnaDtcbitcdGJvb2wgZm9yY2VfbG93O1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0Ym9vbCBvbjtcbitcdGludCByZXM7XG4rXG4rXHRpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTm8gTEVEcyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRwb3J0LCBncm91cCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuK1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4rXG4rXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0ZGVmYXVsdDpcbitcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKHBvbGFyaXR5KSB7XG4rXHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1xuK1x0XHQqaW52X21hc2twIHw9IGJpdDtcbitcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdFx0aWYgKGxlZClcbitcdFx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdH1cbitcdH1cbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdFx0aWYgKGxlZCkge1xuK1x0XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgaW52X2N0cmwgPSAwO1xuK1x0dTMyIGludl9tYXNrID0gMDtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuK1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4rXHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4rXG4rXHRcdGlmICghZHAtXHUwMDNlZG4pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0XHRpZiAoIWxlZHNfbnApXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuK1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbitcdFx0XHRcdFx0ICAgICAgIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4rXHRcdFx0aWYgKHJlcykge1xuK1x0XHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZW5kO1xuK1xuK1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbitcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4rXHQgKi9cbitcdGlmIChpbnZfbWFzaylcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuK1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbitcbitlbmQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbitcdHJldHVybiByZXM7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICsxLDEyMSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX0xFRFNfSFxuKyNkZWZpbmUgX1lUX0xFRFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rXG4rXHRib29sIHVzZV9jeWNsZToxO1xuK1x0Ym9vbCB1c2VfZHV0eToxO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbitcbisjZWxzZVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuK1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuK1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4rXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqdmFscCA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuK3tcbitcdGludCByZXM7XG4rXHR1MzIgdjtcbitcdHUzMiB1O1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0dSA9IHY7XG4rXHR1IFx1MDAyNj0gfm1hc2s7XG4rXHR1IHw9IHZhbDtcbitcdGlmICh1ID09IHYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbitcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdHUgfD0gdmFsc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCArMSw4OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX1NNSV9IXG4rI2RlZmluZSBfWVRfU01JX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuK1x0XHRcdCAgIHUzMiB2YWwpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbit9XG4rXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbisgKlxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4rICovXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4re1xuK1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4rXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbitcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4rXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuK31cbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQyOjQ2LjUzNzgxOTQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQ1ODY1NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUOTIxNSBMRUQgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQncyBtb3ZpbmcgdGhlIGV4aXN0aW5nIGRyaXZlciBjb2RlLCBgeXQ5MjF4LmNgLCBhbmQgc3BsaXR0aW5nIGl0IGludG8gYGNoaXAuY2AsIGBsZWRzLmNgLCBhbmQgYHNtaS5jYCB3aXRoaW4gYSBgbW90b3Jjb21tYCBzdWJkaXJlY3RvcnkgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYS9gLiBBIG5ldyBjb25maWcgb3B0aW9uLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2AsIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBoYXJkd2FyZS1kZXBlbmRlbnQsIGVzcGVjaWFsbHkgRFNBIHN3aXRjaGVzLlxuXG5JIGtub3cgUUVNVSBkb2Vzbid0IHR5cGljYWxseSBoYXZlIGhhcmR3YXJlIGRyaXZlcnMgdW5sZXNzIHRoZXkncmUgZW11bGF0ZWQuIFNvLCBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIGZvciB0aGUgWVQ5MjE1IGluIFFFTVU/IE9yIGlzIHRoaXMgcHVyZWx5IGEgaGFyZHdhcmUgdGhpbmc/IERTQSBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFyZSB1c3VhbGx5IGZvciBlbWJlZGRlZCBzd2l0Y2hlcywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0aGluZ3MgYXJlIGluc3RhbnRpYXRlZC4gQ2FuIHRoZXkgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBvciBtYXliZSB0aHJvdWdoIEkyQyBvciBNRElPIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudD8gV2FpdCwgc3l6a2FsbGVyICpjYW4qIGluc3RhbnRpYXRlIEkyQy9NRElPIGRldmljZXMsIGlmIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBvciBldmVuIHRocm91Z2ggZHVtbXkgZGV2aWNlcy4gSWYgaXQncyBhIGhhcmR3YXJlIGRyaXZlciB0aG91Z2gsIHJlYWNoaW5nIGl0IGlzIGdvaW5nIHRvIGNvbWUgZG93biB0byBtb2NraW5nIHRoZSBNRElPIGJ1cy4gSGFuZyBvbiwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgTURJTy9JMkMgZnV6emluZyBzdXBwb3J0LiBJIHNob3VsZCBjaGVjayBpZiBgTkVUX0RTQV9ZVDkyMVhgIGlzIHNvbWV0aGluZyB3ZSBmdXp6LlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgbGVkcy5jYCwgYWRkaW5nIGZ1bmN0aW9ucyBsaWtlIGB5dDkyMXhfbGVkX3NldHVwYCwgYHl0OTIxeF9sZWRfZm9yY2Vfc2V0YCwgYHl0OTIxeF9sZWRfYmxpbmtfc2V0YCwgYW5kIGB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0YC4gVGhlc2UgYXJlIExFRCBjbGFzc2RldiBvcGVyYXRpb25zLiBDYW4gdGhlc2UgYmUgcmVhY2hlZD8gWWVzLCBkZWZpbml0ZWx5IHZpYSBzeXNmcyEgQnV0IHRoZSBjYXRjaCBpcywgdGhlIGRldmljZSBuZWVkcyB0byBiZSBwcm9iZWQgZmlyc3QuIFByb2JpbmcgYSBEU0Egc3dpdGNo4oCmIHRoYXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LiBXZSdsbCBuZWVkIGFuIE1ESU8gYnVzIGFuZCBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHNldHVwLiBEb2VzIHN5emthbGxlciBzdXBwb3J0IERTQSBzd2l0Y2ggcHJvYmluZz9cblxuVHlwaWNhbGx5LCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbmVlZCB0byByZWFkIElEIHJlZ2lzdGVycywgd2lsbCBmYWlsIHRvIHByb2JlIHVubGVzcyB0aGUgYWN0dWFsIGhhcmR3YXJlIGlzIHByZXNlbnQgb3IgZW11bGF0ZWQuIEkgbmVlZCB0byBjaGVjayBpZiBgeXQ5MjF4X21kaW9fcmVhZGAgb3IgYW55dGhpbmcgc2ltaWxhciByZWFkcyBhIGhhcmR3YXJlIElELiBMZXQncyBkbyBhIGtlcm5lbCBzZWFyY2ggZm9yIGB5dDkyMXhgIHRvIHNlZSBleGFjdGx5IGhvdyBpdCBwcm9iZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGV2ZW4gZ2V0IHRoaXMgdGhpbmcgb2ZmIHRoZSBncm91bmQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQyOjU3LjY4MzY4NzI4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5MjI5MDk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjAwLjQ3MjkyMjc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMzU4ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNRElPIFByb2JlIElzc3VlKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIHByb2JsZW0gcmVsYXRlZCB0byBhbiBNRElPIGludGVyZmFjZSBwcm9iZS4gSSdtIHRoaW5raW5nIHRoZSBmdW5jdGlvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiByZWxhdGVkIHRvIHRoYXQgcGFydGljdWxhciBjaGlwc2V0LiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBkaXNjb3ZlcnkgaXNzdWUgd2l0aGluIHRoZSBNRElPIGZyYW1ld29yay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnbyBzaWRld2F5cyDigJMgdGltaW5nIHByb2JsZW1zLCBpbmNvcnJlY3QgcmVnaXN0ZXIgYWNjZXNzZXMsIG9yIHBvdGVudGlhbGx5IGEgZHJpdmVyLXNwZWNpZmljIGJ1ZyBpbiB0aGUgcHJvYmUgcm91dGluZSBpdHNlbGYuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIGFuZCBsb2dzLCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIHJvb3QgY2F1c2UsIGFuZCBiZWdpbiB0ZXN0aW5nIGZvciBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MDYuOTk2NTEzMTgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Njg2Mzk5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmUuKnl0OTIxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoxMC42NjUxNTg2NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMyMzA0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHl0OTIxeF9tZGlvX3Byb2JlYDpcblxuKipBbmFseXppbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYHl0OTIxeF9tZGlvX3Byb2JlYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byAqZG8qLiBXaGF0J3MgaXRzIHB1cnBvc2U/IEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBpbnRlcmZhY2UsIGFuZCBzcGVjaWZpY2FsbHksIG9uZSBhc3NvY2lhdGVkIHdpdGggYSBZVDkyMXggZGV2aWNlLiBcIlByb2JlXCIgaXMgYSBjb21tb24gdGVybSwgc28gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiB0aGUgZGV2aWNlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlzY292ZXJzIGFuZCBzZXRzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIFlUOTIxeCBjaGlwc2V0LiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaG93IGl0IGNvbmZpZ3VyZXMgdGhlIE1ESU8gYnVzLCBhbmQgd2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgaXQncyBsaWtlbHkgdG8gYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBtYW5hZ2luZyB0aGlzIE1ESU8gY29tcG9uZW50LiBBcmUgdGhlcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMsIHdyaXRlcywgb3IgZGVsYXlzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGFkZHJlc3NlZD8gQW5kIHdoYXQncyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IG90aGVyIGRldmljZXMgd2lsbCBpdCBpbnRlcmFjdCB3aXRoPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBhIHBsYXRmb3JtIGRldmljZSBvciByZXNvdXJjZSBhbGxvY2F0aW9uLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlIHRyZWUgb3Igc2ltaWxhciBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoxNS41OTc0NjQ4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MDA6XFx0XFx0LmdldF9zdHJpbmdzXFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zdHJpbmdzLFxcbjQ2MDE6XFx0XFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzLFxcbjQ2MDI6XFx0XFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50LFxcbjQ2MDM6XFx0XFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzLFxcbjQ2MDQ6XFx0XFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuNDYwNTpcXHRcXHQuZ2V0X3Jtb25fc3RhdHNcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMsXFxuNDYwNjpcXHRcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQsXFxuNDYwNzpcXHRcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyxcXG40NjA4OlxcdFxcdC8qIGVlZSAqL1xcbjQ2MDk6XFx0XFx0LnN1cHBvcnRfZWVlXFx0XFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxcbjQ2MTA6XFx0XFx0LnNldF9tYWNfZWVlXFx0XFx0PSB5dDkyMXhfZHNhX3NldF9tYWNfZWVlLFxcbjQ2MTE6XFx0XFx0LyogbXR1ICovXFxuNDYxMjpcXHRcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSB5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dSxcXG40NjEzOlxcdFxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1LFxcbjQ2MTQ6XFx0XFx0LyogcmF0ZSAqL1xcbjQ2MTU6XFx0XFx0LnBvcnRfcG9saWNlcl9kZWxcXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbCxcXG40NjE2OlxcdFxcdC5wb3J0X3BvbGljZXJfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXFxuNDYxNzpcXHRcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxcbjQ2MTg6XFx0XFx0LyogYWNsICovXFxuNDYxOTpcXHRcXHQuY2xzX2Zsb3dlcl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9kZWwsXFxuNDYyMDpcXHRcXHQuY2xzX2Zsb3dlcl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9hZGQsXFxuNDYyMTpcXHRcXHQvKiBoc3IgKi9cXG40NjIyOlxcdFxcdC5wb3J0X2hzcl9sZWF2ZVxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZSxcXG40NjIzOlxcdFxcdC5wb3J0X2hzcl9qb2luXFx0XFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXFxuNDYyNDpcXHRcXHQvKiBtaXJyb3IgKi9cXG40NjI1OlxcdFxcdC5wb3J0X21pcnJvcl9kZWxcXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfZGVsLFxcbjQ2MjY6XFx0XFx0LnBvcnRfbWlycm9yX2FkZFxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9hZGQsXFxuNDYyNzpcXHRcXHQvKiBsYWcgKi9cXG40NjI4OlxcdFxcdC5wb3J0X2xhZ19sZWF2ZVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19sZWF2ZSxcXG40NjI5OlxcdFxcdC5wb3J0X2xhZ19qb2luXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2pvaW4sXFxuNDYzMDpcXHRcXHQvKiBmZGIgKi9cXG40NjMxOlxcdFxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2R1bXAsXFxuNDYzMjpcXHRcXHQucG9ydF9mYXN0X2FnZVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2Zhc3RfYWdlLFxcbjQ2MzM6XFx0XFx0LnNldF9hZ2VpbmdfdGltZVxcdD0geXQ5MjF4X2RzYV9zZXRfYWdlaW5nX3RpbWUsXFxuNDYzNDpcXHRcXHQucG9ydF9mZGJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2RlbCxcXG40NjM1OlxcdFxcdC5wb3J0X2ZkYl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfYWRkLFxcbjQ2MzY6XFx0XFx0LnBvcnRfbWRiX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9kZWwsXFxuNDYzNzpcXHRcXHQucG9ydF9tZGJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2FkZCxcXG40NjM4OlxcdFxcdC8qIHZsYW4gKi9cXG40NjM5OlxcdFxcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcsXFxuNDY0MDpcXHRcXHQucG9ydF92bGFuX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZGVsLFxcbjQ2NDE6XFx0XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2FkZCxcXG40NjQyOlxcdFxcdC8qIGJyaWRnZSAqL1xcbjQ2NDM6XFx0XFx0LnBvcnRfcHJlX2JyaWRnZV9mbGFnc1xcdD0geXQ5MjF4X2RzYV9wb3J0X3ByZV9icmlkZ2VfZmxhZ3MsXFxuNDY0NDpcXHRcXHQucG9ydF9icmlkZ2VfZmxhZ3NcXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfZmxhZ3MsXFxuNDY0NTpcXHRcXHQucG9ydF9icmlkZ2VfbGVhdmVcXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfbGVhdmUsXFxuNDY0NjpcXHRcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9qb2luLFxcbjQ2NDc6XFx0XFx0LyogbXN0ICovXFxuNDY0ODpcXHRcXHQucG9ydF9tc3Rfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcXG40NjQ5OlxcdFxcdC52bGFuX21zdGlfc2V0XFx0XFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXFxuNDY1MDpcXHRcXHQucG9ydF9zdHBfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcXG40NjUxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY1MjpcXHRcXHQvKiBkY2IgKi9cXG40NjUzOlxcdFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbjQ2NTQ6XFx0XFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuNDY1NTpcXHRcXHQucG9ydF9nZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXFxuNDY1NjpcXHRcXHQucG9ydF9zZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXFxuNDY1NzpcXHQjZW5kaWZcXG40NjU4OlxcdFxcdC8qIHBvcnQgKi9cXG40NjU5OlxcdFxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXFxuNDY2MDpcXHRcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbjQ2NjE6XFx0XFx0LnBvcnRfc2V0dXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcXG40NjYyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY2MzpcXHRcXHQvKiBkc2NwICovXFxuNDY2NDpcXHRcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG40NjY1OlxcdFxcdC5wb3J0X2RlbF9kc2NwX3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9kZWxfZHNjcF9wcmlvLFxcbjQ2NjY6XFx0XFx0LnBvcnRfYWRkX2RzY3BfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXFxuNDY2NzpcXHQjZW5kaWZcXG40NjY4OlxcdFxcdC8qIGNoaXAgKi9cXG40NjY5OlxcdFxcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjF4X2RzYV9zZXR1cCxcXG40NjcwOlxcdH07XFxuNDY3MTpcXHRcXG40NjcyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NjczOlxcdHtcXG40Njc0OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuNDY3NTpcXHRcXG40Njc2OlxcdFxcdGlmICghcHJpdilcXG40Njc3OlxcdFxcdFxcdHJldHVybjtcXG40Njc4OlxcdFxcbjQ2Nzk6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ2ODM6XFx0e1xcbjQ2ODQ6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG40Njg1OlxcdFxcbjQ2ODY6XFx0XFx0aWYgKCFwcml2KVxcbjQ2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2ODg6XFx0XFxuNDY4OTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NjkwOlxcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG40NjkxOlxcdCNlbmRpZlxcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbjQ2OTQ6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40Njk1OlxcdFxcbjQ2OTY6XFx0XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkKTtcXG40Njk3OlxcdFxcdH1cXG40Njk4OlxcdFxcbjQ2OTk6XFx0XFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFxcdTAwMjZwcml2LVxcdTAwM2Vkcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjE1LjU5NzY5MzM4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTI0NjM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgSSB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHByaW5jaXBsZXMgb2YgTURJTyBhbmQgZHJpdmVyIHByb2JpbmcsIHNvIEknbGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWNzIHJlbGF0ZWQgdG8gdGhlIFlUOTIxeCBjaGlwc2V0IGFuZCBhbnl0aGluZyB1bnVzdWFsIG9yIG5vdGV3b3J0aHkgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiB5dDkyMXhfbWRpb19wcm9iZSoqXG5cbiogICAqKkVudHJ5IFBvaW50IGFuZCBQdXJwb3NlOioqIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGluZGVlZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZS4gSSBleHBlY3QgdG8gc2VlIGl0IGFzIHBhcnQgb2YgdGhlIGRyaXZlcidzIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIHByb2JlOyBsaWtlbHksIHRoZSBzeXN0ZW0gZGV0ZWN0ZWQgYSBkZXZpY2UgbWF0Y2hpbmcgYSBrbm93biBJRCwgYW5kIG5vdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogSSdsbCBiZSBsb29raW5nIGF0IHdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaW5jbHVkZXMgYW55IGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZSBNRElPIGNvbW11bmljYXRpb24gb3IgUEhZIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyBzdHJhdGVnaWVzIGJlaW5nIHVzZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIHRvIGxvb2sgb3V0IGZvcj9cbiogICAqKk1ESU8gSW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHBhcnQuIEhvdyBpcyB0aGUgTURJTyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgb3IgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGUgWVQ5MjF4PyBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIE1ESU8gaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBvdGVudGlhbGx5IHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgdHdpc3QuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIE1ESU8gY29udHJvbGxlci5cbiogICAqKlBIWSBEZXRlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb246KiogSXMgdGhlcmUgUEhZIGRldGVjdGlvbiBpbnZvbHZlZCBoZXJlLCBvciBpcyBpdCBhc3N1bWVkIGEgc3BlY2lmaWMgUEhZIGlzIGNvbm5lY3RlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHZhcmlvdXMgUEhZIHR5cGVzPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgc2V0cyB1cCBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBpbmNsdWRpbmcgYW55IHBvd2VyLXVwIG9yIHJlc2V0IHNlcXVlbmNlcy4gV2hhdCBhYm91dCB0aGUgTURJTyBidXMgc3BlZWQsIGFyZSB0aGVyZSBhbnkgc3BlZWQgYWRqdXN0bWVudHM/XG4qICAgKipFcnJvciBIYW5kbGluZyBhbmQgUm9idXN0bmVzczoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkb2VzIGl0IGRvIGlmIHRoZSBkZXZpY2UgaXNuJ3QgcmVzcG9uZGluZywgaWYgdGhlcmUgYXJlIE1ESU8gZXJyb3JzLCBvciBpZiB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gZmFpbHM/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSdsbCBsb29rIGZvciBgcHJpbnRrYCBjYWxscyBhbmQgb3RoZXIgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcmVwb3J0aW5nLlxuKiAgICoqRHJpdmVyIE1vZGVsIEludGVncmF0aW9uOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGJpbmRpbmdzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGxpa2UgbmV0d29yayBpbnRlcmZhY2VzIG9yIHRoZSBkZXZpY2UgdHJlZT8gSSdsbCBjaGVjayBmb3IgdGhlIHVzZSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgZGV2aWNlIHByaXZhdGUgZGF0YSwgYW5kIG9mIGNvdXJzZSBhbnkgbmV0d29yayBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uLlxuKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBIb3cgZG9lcyBpdCBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudD8gQXJlIHRoZXJlIGFueSBwb3dlci11cCBvciBwb3dlci1kb3duIHNlcXVlbmNlcyBvciBjYWxsYmFja3MgZGVmaW5lZD9cbiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGFueSBsb2NrcyBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGJyaW5ncyB1cCB0aGUgTURJTyBpbnRlcmZhY2UgYW5kIFBIWS4gVGhpcyBpbmNsdWRlcyBob3cgaXQgbWFuYWdlcyBoYXJkd2FyZSByZXNvdXJjZXMsIGRldGVjdHMgYW5kIGNvbmZpZ3VyZXMgdGhlIFBIWSwgYW5kIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgaXMgaG93IHRoaXMgZHJpdmVyIGJyaW5ncyB1cCBhbmQgY29uZmlndXJlcyB0aGUgWVQ5MjF4IE1ESU8gaW50ZXJmYWNlLiBJIHdpbGwgY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSBmb3IgYW55IHN1YnRsZSBhcmVhcywgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjIxLjI1MDE1OTc1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MDA6XFx0XFxuNDcwMTpcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlYWNsX2Jsa3MpOyBpKyspIHtcXG40NzAyOlxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cXHUwMDNlYWNsX2Jsa3NbaV07XFxuNDcwMzpcXHRcXG40NzA0OlxcdFxcdFxcdGlmICghYWNsYmxrKVxcbjQ3MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDcwNjpcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVxcdTAwM2VydWxlcyk7IGorKykge1xcbjQ3MDc6XFx0XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cXHUwMDNlcnVsZXNbal07XFxuNDcwODpcXHRcXG40NzA5OlxcdFxcdFxcdFxcdGlmICghYWNscnVsZSlcXG40NzEwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ3MTE6XFx0XFx0XFx0XFx0a3ZmcmVlKGFjbHJ1bGUpO1xcbjQ3MTI6XFx0XFx0XFx0fVxcbjQ3MTM6XFx0XFx0XFx0a3ZmcmVlKGFjbGJsayk7XFxuNDcxNDpcXHRcXHR9XFxuNDcxNTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDcxNjpcXHR9XFxuNDcxNzpcXHRcXG40NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbjQ3Njg6XFx0XFx0e31cXG40NzY5OlxcdH07XFxuNDc3MDpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG40NzczOlxcdFxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbjQ3NzQ6XFx0XFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG40Nzc1OlxcdFxcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxcbjQ3NzY6XFx0XFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xcbjQ3Nzc6XFx0XFx0XFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcXG40Nzc4OlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcXG40Nzc5OlxcdFxcdH0sXFxuNDc4MDpcXHR9O1xcbjQ3ODE6XFx0XFxuNDc4MjpcXHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcXG40NzgzOlxcdFxcbjQ3ODQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiRGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbjQ3ODU6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggU3dpdGNoXFxcIik7XFxuNDc4NjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjIxLjI1MDQwMTE5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY3MzYxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIHl0OTIxeF9tZGlvX3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBIbW0sIHRoZSBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBiZSB0b3VjaGluZyBhbnkgaGFyZHdhcmUgSUQgcmVnaXN0ZXJzLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHByb2JlIGZ1bmN0aW9uLiBJdCdzIHNraXBwaW5nIHN0cmFpZ2h0IHRvIHJlZ2lzdGVyaW5nIHRoZSBEU0Egc3dpdGNoLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgaG9sZCBvbi4uLiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGNhbGwgdGhhdCBhY3R1YWxseSBzZXRzIHRoaW5ncyBpbiBtb3Rpb24uIFRoYXQsIGluIHR1cm4sIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhlIGBzZXR1cGAgY2FsbGJhY2ssIHdoaWNoIEkgc2VlIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gUmlnaHQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIHByb2JlIGxpa2VseSBqdXN0IGhhbmRsZXMgdGhlIGluaXRpYWwgcmVnaXN0cmF0aW9uLCBhbmQgdGhlIHJlYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBoYXBwZW5pbmcgKmFmdGVyKiB0aGF0LiBTbywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGB5dDkyMXhfZHNhX3NldHVwYC4gVGhhdCdzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MjcuNjE3NzY0NjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG40NTg3OlxcdCNlbmRpZlxcbjQ1ODg6XFx0XFxuNDU4OTpcXHRcXHRyZXR1cm4gMDtcXG40NTkwOlxcdH1cXG40NTkxOlxcdFxcbjQ1OTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcXG40NTkzOlxcdFxcdC5tYWNfbGlua19kb3duXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfbGlua19kb3duLFxcbjQ1OTQ6XFx0XFx0Lm1hY19saW5rX3VwXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cCxcXG40NTk1OlxcdFxcdC5tYWNfY29uZmlnXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfY29uZmlnLFxcbjQ1OTY6XFx0fTtcXG40NTk3OlxcdFxcbjQ1OTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuNDU5OTpcXHRcXHQvKiBtaWIgKi9cXG40NjAwOlxcdFxcdC5nZXRfc3RyaW5nc1xcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyxcXG40NjAxOlxcdFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyxcXG40NjAyOlxcdFxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudCxcXG40NjAzOlxcdFxcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyxcXG40NjA0OlxcdFxcdC5nZXRfZXRoX2N0cmxfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbjQ2MDU6XFx0XFx0LmdldF9ybW9uX3N0YXRzXFx0XFx0PSB5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzLFxcbjQ2MDY6XFx0XFx0LmdldF9zdGF0czY0XFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zdGF0czY0LFxcbjQ2MDc6XFx0XFx0LmdldF9wYXVzZV9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMsXFxuNDYwODpcXHRcXHQvKiBlZWUgKi9cXG40NjA5OlxcdFxcdC5zdXBwb3J0X2VlZVxcdFxcdD0gZHNhX3N1cHBvcnRzX2VlZSxcXG40NjEwOlxcdFxcdC5zZXRfbWFjX2VlZVxcdFxcdD0geXQ5MjF4X2RzYV9zZXRfbWFjX2VlZSxcXG40NjExOlxcdFxcdC8qIG10dSAqL1xcbjQ2MTI6XFx0XFx0LnBvcnRfY2hhbmdlX210dVxcdD0geXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUsXFxuNDYxMzpcXHRcXHQucG9ydF9tYXhfbXR1XFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWF4X210dSxcXG40NjE0OlxcdFxcdC8qIHJhdGUgKi9cXG40NjE1OlxcdFxcdC5wb3J0X3BvbGljZXJfZGVsXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwsXFxuNDYxNjpcXHRcXHQucG9ydF9wb2xpY2VyX2FkZFxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxcbjQ2MTc6XFx0XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cF90YyxcXG40NjE4OlxcdFxcdC8qIGFjbCAqL1xcbjQ2MTk6XFx0XFx0LmNsc19mbG93ZXJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfZGVsLFxcbjQ2MjA6XFx0XFx0LmNsc19mbG93ZXJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfYWRkLFxcbjQ2MjE6XFx0XFx0LyogaHNyICovXFxuNDYyMjpcXHRcXHQucG9ydF9oc3JfbGVhdmVcXHRcXHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3JfbGVhdmUsXFxuNDYyMzpcXHRcXHQucG9ydF9oc3Jfam9pblxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxcbjQ2MjQ6XFx0XFx0LyogbWlycm9yICovXFxuNDYyNTpcXHRcXHQucG9ydF9taXJyb3JfZGVsXFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2RlbCxcXG40NjI2OlxcdFxcdC5wb3J0X21pcnJvcl9hZGRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfYWRkLFxcbjQ2Mjc6XFx0XFx0LyogbGFnICovXFxuNDYyODpcXHRcXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfbGVhdmUsXFxuNDYyOTpcXHRcXHQucG9ydF9sYWdfam9pblxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19qb2luLFxcbjQ2MzA6XFx0XFx0LyogZmRiICovXFxuNDYzMTpcXHRcXHQucG9ydF9mZGJfZHVtcFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kdW1wLFxcbjQ2MzI6XFx0XFx0LnBvcnRfZmFzdF9hZ2VcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mYXN0X2FnZSxcXG40NjMzOlxcdFxcdC5zZXRfYWdlaW5nX3RpbWVcXHQ9IHl0OTIxeF9kc2Ffc2V0X2FnZWluZ190aW1lLFxcbjQ2MzQ6XFx0XFx0LnBvcnRfZmRiX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kZWwsXFxuNDYzNTpcXHRcXHQucG9ydF9mZGJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2FkZCxcXG40NjM2OlxcdFxcdC5wb3J0X21kYl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfZGVsLFxcbjQ2Mzc6XFx0XFx0LnBvcnRfbWRiX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9hZGQsXFxuNDYzODpcXHRcXHQvKiB2bGFuICovXFxuNDYzOTpcXHRcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoyNy42MTgwNjU3MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MDE3MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIGB5dDkyMXhfY2hpcF9yZXNldGAgRnVuY3Rpb25hbGl0eSoqXG5cbkhtbSwgYmFzZWQgb24gaXRzIG5hbWUsIGB5dDkyMXhfY2hpcF9yZXNldGAgKmNvdWxkKiBiZSBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhhdCdzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgZm9yIGB5dDkyMXhfY2hpcF9yZXNldGAgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQncyBkb2luZy4gVW5kZXJzdGFuZGluZyBpdHMgaW5uZXIgd29ya2luZ3MgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MzEuNDY4MjQxMDI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEzNTIxNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9jaGlwX3Jlc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0NS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzozNC4wODE3Njc3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5ODcxNTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHl0OTIxeF9jaGlwX3Jlc2V0YCBhbmQgYHl0OTIxeF9jaGlwX2RldGVjdGAqKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IGp1bXBlZCB0byB0aG9zZSB0d28gZnVuY3Rpb25zOiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIGluaXRpYWxpemF0aW9uIGFuZCBwb3RlbnRpYWxseSwgb25nb2luZyBoZWFsdGggbW9uaXRvcmluZyBvZiBhIGB5dDkyMXhgIGNoaXBzZXQsIHdoaWNoIGlzIHByb2JhYmx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGVtYmVkZGVkIHN5c3RlbSBJJ20gd29ya2luZyBvbi4gVGhlIHJlc2V0IGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgYnJpbmdpbmcgdGhlIGNoaXAgaW50byBhIGRlZmluZWQsIGtub3duIHN0YXRlLiBUaGUgbWV0aG9kIHVzZWQgd291bGQgbGlrZWx5IGRlcGVuZCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBmdWxsLXBvd2VyIHJlc2V0LCBhIHNvZnQgcmVzZXQsIG9yIG1heWJlIGV2ZW4gYSBzZWxlY3RpdmUgcmVzZXQgb2Ygc3BlY2lmaWMgc3ViLW1vZHVsZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyB0aGUgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIHdyaXR0ZW4sIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgZm9yIHNpZ25hbCBhc3NlcnRpb24vZGUtYXNzZXJ0aW9uIOKAkyBhcmUgd2hlcmUgdGhlIGRldmlsIGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBvciB0aGUgZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMuXG5cbmB5dDkyMXhfY2hpcF9kZXRlY3RgLi4uIHRoaXMgb25lJ3MgaW1tZWRpYXRlbHkgbW9yZSBpbnRlcmVzdGluZy4gV2hhdCBraW5kIG9mIGRldGVjdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBzaW1wbGUgSUQgcmVhZCwgYSBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgc2lnbmF0dXJlIGNoZWNrLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBoYXJkd2FyZSBwcm9iaW5nIHNlcXVlbmNlPyBUaGUgYXBwcm9hY2ggc2VsZWN0ZWQgd291bGQgcmVhbGx5IHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSdzIGVycm9yIGhhbmRsaW5nLiBJZGVhbGx5LCBpdCdzIG5vdCBqdXN0IGEgYmxpbmQgSUQgcmVhZDsgaXQgaW5jb3Jwb3JhdGVzIHNvbWUgcmVkdW5kYW5jeSwgbWF5YmUgYSBjaGVja3N1bSB2ZXJpZmljYXRpb24gb3IgYSBzYW5pdHkgY2hlY2sgb24gcmVwb3J0ZWQgY2FwYWJpbGl0aWVzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBoZXJlLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNoaXAgZmFpbHMgdG8gZGV0ZWN0IGF0IHBvd2VyLXVwPyBXaGF0J3MgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbT8gUmV0cnkgbG9naWM/IEVycm9yIHJlcG9ydGluZz8gSXMgdGhlcmUgYSB0aW1lb3V0LCBhbmQgaG93IGlzIHRoYXQgaGFuZGxlZD8gSSBuZWVkIHRvIGFuYWx5emUgYm90aCBmdW5jdGlvbnMgdG8gZ2FpbiBhIGNsZWFyIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gZGV0ZXJtaW5lIHRoZSBzeXN0ZW0ncyByZXNpbGllbmNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjM5LjI4MDQ4NTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjI3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIyNzpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDIyODpcXHR7XFxuNDIyOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDIzMDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XFxuNDIzMTpcXHRcXHR1OCBleHRtb2RlO1xcbjQyMzI6XFx0XFx0dTMyIGNoaXBpZDtcXG40MjMzOlxcdFxcdHUzMiBtYWpvcjtcXG40MjM0OlxcdFxcdHUzMiBtb2RlO1xcbjQyMzU6XFx0XFx0dTMyIHZhbDtcXG40MjM2OlxcdFxcdGludCByZXM7XFxuNDIzNzpcXHRcXG40MjM4OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXFx1MDAyNmNoaXBpZCk7XFxuNDIzOTpcXHRcXHRpZiAocmVzKVxcbjQyNDA6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MjQxOlxcdFxcbjQyNDI6XFx0XFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XFxuNDI0MzpcXHRcXG40MjQ0OlxcdFxcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNDU6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yKVxcbjQyNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDI0NzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW5hbWUpIHtcXG40MjQ4OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5leHBlY3RlZCBjaGlwaWQgMHgleFxcXFxuXFxcIiwgY2hpcGlkKTtcXG40MjQ5OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyNTA6XFx0XFx0fVxcbjQyNTE6XFx0XFxuNDI1MjpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfTU9ERSwgXFx1MDAyNm1vZGUpO1xcbjQyNTM6XFx0XFx0aWYgKHJlcylcXG40MjU0OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI1NTpcXHRcXHRyZXMgPSB5dDkyMXhfZWRhdGFfcmVhZChwcml2LCBZVDkyMVhfRURBVEFfRVhUTU9ERSwgXFx1MDAyNmV4dG1vZGUpO1xcbjQyNTY6XFx0XFx0aWYgKHJlcylcXG40MjU3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI1ODpcXHRcXG40MjU5OlxcdFxcdGZvciAoOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuNDI2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlbW9kZSA9PSBtb2RlIFxcdTAwMjZcXHUwMDI2XFxuNDI2MTpcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlZXh0bW9kZSA9PSBleHRtb2RlKVxcbjQyNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDI2MzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW5hbWUpIHtcXG40MjY0OlxcdFxcdFxcdGRldl9lcnIoZGV2LFxcbjQyNjU6XFx0XFx0XFx0XFx0XFxcIlVuc3VwcG9ydGVkIGNoaXBpZCAweCV4IHdpdGggY2hpcG1vZGUgMHgleCAweCV4XFxcXG5cXFwiLFxcbjQyNjY6XFx0XFx0XFx0XFx0Y2hpcGlkLCBtb2RlLCBleHRtb2RlKTtcXG40MjY3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyNjg6XFx0XFx0fVxcbjQyNjk6XFx0XFxuNDI3MDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX1NZU19DTEssIFxcdTAwMjZ2YWwpO1xcbjQyNzE6XFx0XFx0aWYgKHJlcylcXG40MjcyOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI3MzpcXHRcXHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xcbjQyNzQ6XFx0XFx0Y2FzZSAwOlxcbjQyNzU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVxcdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcXG40Mjc2OlxcdFxcdFxcdGJyZWFrO1xcbjQyNzc6XFx0XFx0Y2FzZSBZVDkyMVhfU1lTX0NMS18xNDNNOlxcbjQyNzg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSA3O1xcbjQyNzk6XFx0XFx0XFx0YnJlYWs7XFxuNDI4MDpcXHRcXHRkZWZhdWx0OlxcbjQyODE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSA4O1xcbjQyODI6XFx0XFx0fVxcbjQyODM6XFx0XFxuNDI4NDpcXHRcXHQvKiBQcmludCBjaGlwaWQgaGVyZSBzaW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBsb3dlciAxNiBiaXRzICovXFxuNDI4NTpcXHRcXHRkZXZfaW5mbyhkZXYsXFxuNDI4NjpcXHRcXHRcXHQgXFxcIk1vdG9yY29tbSAlcyBldGhlcm5ldCBzd2l0Y2gsIGNoaXBpZDogMHgleCwgY2hpcG1vZGU6IDB4JXggMHgleFxcXFxuXFxcIixcXG40Mjg3OlxcdFxcdFxcdCBpbmZvLVxcdTAwM2VuYW1lLCBjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xcbjQyODg6XFx0XFxuNDI4OTpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gaW5mbztcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0cmV0dXJuIDA7XFxuNDI5MjpcXHR9XFxuNDI5MzpcXHRcXG40Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjM5LjI4MTAxNDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODE0Nzc0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBZVDkyMVggQ2hpcCBEZXRlY3Rpb24gTG9naWMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHl0OTIxeF9jaGlwX2RldGVjdGAgaGFuZGxlcyB0aGUgYFlUOTIxWF9DSElQX0lEYC4gSXQgZXhwZWN0cyBhIHNwZWNpZmljIG1ham9yIHZlcnNpb24sIGFuZCBpZiBpdCBkb2Vzbid0IGdldCBpdCwgaXQgdGhyb3dzIGEgYC1FTk9ERVZgIGVycm9yLiBTaW5jZSB0aGlzIGlzIGFuIE1ESU8gZGV2aWNlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHN5emthbGxlciBhbmQgaXRzIGFiaWxpdHkgdG8gZW11bGF0ZSByZWFkcyBhbmQgd3JpdGVzIHZpYSBNRElPLCBlaXRoZXIgdGhyb3VnaCBhIG1vY2sgZGV2aWNlIG9yIGJ5IGluamVjdGluZyBmYXVsdHMuXG5cbkJ1dCBoZXJlJ3MgdGhlIHNuYWcuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJhbCogTURJTyBtb2NrIGRldmljZSB0aGF0IGNhbiBqdXN0IHNwaXQgb3V0IGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBtZGlvYnVzX3JlYWRgIHVubGVzcyBpdCdzIHNwZWNpZmljYWxseSBjb2RlZCBmb3IuIFRoZW4gSSB0aG91Z2h0LCBva2F5LCBpdCBoYXMgc3BlY2lmaWMgbW9ja3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBgdmttc2AgZm9yIERSTSwgYHZoY2lgIGZvciBVU0IsIGV0Yy4gQnV0IGRvZXMgaXQgaGF2ZSAqYW55dGhpbmcqIGZvciBNRElPPyBJIGZvdW5kIGBtZGlvLW1vY2tgIGFuZCBgbWRpby1iY20tdW5pbWFjYCwgd2hpY2ggYXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucywgYnV0IG5vdGhpbmcgZ2VuZXJpYy4gVGhpcyBpc24ndCBnb2luZyB0byBiZSBhIHNpbXBsZSBzb2x1dGlvbi5cblxuTWF5YmUgSSBjb3VsZCBsZXZlcmFnZSBgYnBmYCB0byBpbnRlcmNlcHQgdGhlIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdGhlcmUncyBhIGR1bW15IE1ESU8gYnVzIEknbSBtaXNzaW5nPyBJIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgYWdhaW4uIFdhaXQsIGRpZCBzeXprYWxsZXIgZXZlciBpbXBsZW1lbnQgYHN5el9tZGlvX3JlYWRgIG9yIGBzeXpfbWRpb193cml0ZWA/IE5vLCBJIGRvbid0IHNlZSB0aG9zZSB0aGVyZS5cblxuQWxyaWdodCwgd2hhdCBpZiB0aGUgZGV2aWNlIGlzIGNyZWF0ZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBidXQgdGhhdCB3b3VsZG4ndCBoZWxwIG1lIGVtdWxhdGUgdGhlIGhhcmR3YXJlJ3MgcmVzcG9uc2UsIGVzcGVjaWFsbHkgdGhlIGNydWNpYWwgYFlUOTIxWF9DSElQX0lEYCB2YWx1ZS4gVGhhdCdzIGEgZGVhZCBlbmQuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIFRoZSBjb2RlIHJldmVhbHMgdGhhdCBgeXQ5MjF4X3JlZ19yZWFkYCB1c2VzIGBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZGAuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGB5dDkyMXhfcmVnX29wc19tZGlvYCBhY3R1YWxseSAqaXMqLiBUaGF0IHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mzo0Ny4xNjI0OTQwNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDMyMTIyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X3JlZ19vcHNfbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yMzY9c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fd3JpdGUodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfcmVnX29wcyB5dDkyMXhfcmVnX29wc19tZGlvID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3My1cXHQucmVhZCA9IHl0OTIxeF9yZWdfbWRpb19yZWFkLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcxOD1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MzgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDczOTpcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc0MC1cXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6NDguODY1NzEyNDgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDQ3NjA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGJ1cyByZWFkLiBUaGUgZnVuY3Rpb24gYG1kaW9idXNfcmVhZGAgaXMgdGhlIGtleSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHJlc3BvbmRpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXQnbGwgcmV0dXJuIGVpdGhlciBgMHhmZmZmYCBvciBgLUVJT2AuIElmIGl0J3MgYDB4ZmZmZmAsIHRoZW4gYGNoaXBpZGAgaXMgZ29pbmcgdG8gYmUgYDB4ZmZmZmZmZmZgLiBDb25zZXF1ZW50bHksIGBtYWpvcmAgaXMgYWxzbyBnb2luZyB0byBiZSBgMHhmZmZmYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIGB5dDkyMXhfaW5mb3NgIGhhbmRsZSBhIGAweGZmZmZgIHZhbHVlPyBJIGhpZ2hseSBkb3VidCBpdCdzIGV4cGVjdGluZyB0aGF0LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaGFwcGVucyB3aGVuIGBtYWpvcmAgdGFrZXMgdGhhdCB2YWx1ZSBhbmQgaXQncyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBleHBlY3RlZCB2YWx1ZXMgd2l0aGluIGB5dDkyMXhfaW5mb3NgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiB0aGUgY29kZSBhbmQgc2VlIGhvdyBgeXQ5MjF4X2luZm9zYCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjUyLjgxMDQ3NDY1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDQyNDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfaW5mb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTk9c3RydWN0IHl0OTIxeF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTctXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNDQ6XFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0NS1cXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjU0Ljc2NDkwMjQxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMyODQxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCByZWxldmFudCB0ZWNobmljYWwgY29udGV4dHMuXG5cbioqQW5hbHl6aW5nIGB5dDkyMXhfaW5mb3NgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGB5dDkyMXhfaW5mb3NgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpcyB0aGF0IHRoaXMgbGlrZWx5IHJlcHJlc2VudHMgc29tZSBzb3J0IG9mIHN0cnVjdHVyZWQgZGF0YSBvciBjb25maWd1cmF0aW9uIGZpbGUgcmVsYXRlZCB0byB0aGUgYHl0OTIxeGAgcHJvamVjdCBvciBjb21wb25lbnQuIEl0IGNvdWxkIGNvbnRhaW4gYW55IG51bWJlciBvZiB0aGluZ3Mg4oCTIHNldHRpbmdzLCBtZXRhZGF0YSwgcGFyYW1ldGVyIGRlZmluaXRpb25zLCBwZXJoYXBzIGV2ZW4gcGVyZm9ybWFuY2UgbWV0cmljcywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgdGhhdCBgeXQ5MjF4YCBpcyB1c2VkIGZvci4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQga2luZCBvZiBwcm9qZWN0IGlzIHRoaXM/IFdoYXQncyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMgd2l0aGluIHRoaXMgZWNvc3lzdGVtPyBJcyBpdCBsaWtlbHkgWUFNTCwgSlNPTiwgYSBjdXN0b20gZm9ybWF0LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgJ2luZm9zJyBpbXBsaWVzIHNvbWV0aGluZyBpbmZvcm1hdGlvbmFsIOKAkyBkZXRhaWxzLCBpZiB5b3Ugd2lsbCwgYnV0IEkgbmVlZCBhIHdob2xlIGxvdCBtb3JlIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpdHMgcmVsZXZhbmNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZGF0YS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mzo1OS40OTc3NDYyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIDExNzpcXHRcXHR7XFxuIDExODpcXHRcXHRcXHRcXFwiWVQ5MjE1U0NcXFwiLCBZVDkyMTVfTUFKT1IsIDEsIDAsXFxuIDExOTpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig1KSxcXG4gMTIwOlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gMTIxOlxcdFxcdH0sXFxuIDEyMjpcXHRcXHR7XFxuIDEyMzpcXHRcXHRcXHRcXFwiWVQ5MjE1U1xcXCIsIFlUOTIxNV9NQUpPUiwgMiwgMCxcXG4gMTI0OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbiAxMjU6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQwIHwgWVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxcbiAxMjY6XFx0XFx0fSxcXG4gMTI3OlxcdFxcdHtcXG4gMTI4OlxcdFxcdFxcdFxcXCJZVDkyMTVSQlxcXCIsIFlUOTIxNV9NQUpPUiwgMywgMCxcXG4gMTI5OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbiAxMzA6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQwIHwgWVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxcbiAxMzE6XFx0XFx0fSxcXG4gMTMyOlxcdFxcdHtcXG4gMTMzOlxcdFxcdFxcdFxcXCJZVDkyMTROQlxcXCIsIFlUOTIxNV9NQUpPUiwgMywgMixcXG4gMTM0OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcXG4gMTM1OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gMTM2OlxcdFxcdH0sXFxuIDEzNzpcXHRcXHR7XFxuIDEzODpcXHRcXHRcXHRcXFwiWVQ5MjEzTkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDMsXFxuIDEzOTpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXFxuIDE0MDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXFxuIDE0MTpcXHRcXHR9LFxcbiAxNDI6XFx0XFx0e1xcbiAxNDM6XFx0XFx0XFx0XFxcIllUOTIxOE5cXFwiLCBZVDkyMThfTUFKT1IsIDAsIDAsXFxuIDE0NDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig4KSxcXG4gMTQ1OlxcdFxcdFxcdDAsXFxuIDE0NjpcXHRcXHR9LFxcbiAxNDc6XFx0XFx0e1xcbiAxNDg6XFx0XFx0XFx0XFxcIllUOTIxOE1CXFxcIiwgWVQ5MjE4X01BSk9SLCAxLCAwLFxcbiAxNDk6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oOCksXFxuIDE1MDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXFxuIDE1MTpcXHRcXHR9LFxcbiAxNTI6XFx0XFx0e31cXG4gMTUzOlxcdH07XFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIDE1NjpcXHRcXG4gMTU3OlxcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuIDE1ODpcXHQgKlxcbiAxNTk6XFx0ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbiAxNjA6XFx0ICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxcbiAxNjE6XFx0ICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXFxuIDE2MjpcXHQgKi9cXG4gMTYzOlxcdCNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcXHQoMyAqIEhaKVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6NTkuNDk4MDA4MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NTkxMjkxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFlUOTIxNS9ZVDkyMTggc2l0dWF0aW9uLiBGaXJzdCwgdGhlIGBtYWpvcmAgdmVyc2lvbiBuZWVkcyB0byBiZSBlaXRoZXIgYFlUOTIxNV9NQUpPUmAgb3IgYFlUOTIxOF9NQUpPUmAuIE5vdywgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIGB5dDkyMXhfY2hpcF9kZXRlY3RgIHdpbGwgaW5ldml0YWJseSBmYWlsLiBBbmQgaWYgdGhhdCBmYWlscywgYHl0OTIxeF9jaGlwX3Jlc2V0YCBmYWlscyB0b28uIFRoaXMgZmFpbHVyZSBjYXNjYWRlcyDigJMgYHl0OTIxeF9kc2Ffc2V0dXBgIGdvZXMgZG93biB3aXRoIGl0LCBsZWFkaW5nIHRvIGEgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIGZhaWx1cmUsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZHJlYWRlZCBgeXQ5MjF4X21kaW9fcHJvYmVgIGZhaWx1cmUuIEl0J3MgYSBjaGFpbiByZWFjdGlvbi5cblxuVGhlIHByb2JsZW0/IEluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgdXNlcywgb3IgZXZlbiBqdXN0IGluIFFFTVUsIHRoZSBkZXZpY2Ugd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUgYmVjYXVzZSBpdCdzIGV4cGVjdGluZyBhIHBoeXNpY2FsIGhhcmR3YXJlIHJlc3BvbnNlIHRoYXQgaXNuJ3QgdGhlcmUuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluIE1ESU8gZW11bGF0b3IgdGhhdCBjYW4gcmV0dXJuICpzcGVjaWZpYyogYFlUOTIxWF9DSElQX0lEYCB2YWx1ZXMuIFRoYXQncyBhIGtleSBwaWVjZSBtaXNzaW5nLiBJIHdhcyBob3BpbmcgSSBjb3VsZCBzb21laG93IGdldCB0byBgeXQ5MjF4X2xlZHNfc2V0dXBgLCBidXQgaXQncyBjYWxsZWQgd2l0aGluIGB5dDkyMXhfZHNhX3NldHVwYCwgKmFmdGVyKiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfc2V0dXBgLiBTbywgd2l0aCB0aGUgZmFpbHVyZSBmcm9tIHRoZSBpbml0aWFsIGhhcmR3YXJlIGRldGVjdGlvbiwgdGhlcmUncyBubyB3YXkgdG8gcmVhY2ggdGhlIExFRCBzZXR1cCBjb2RlLlxuXG5MZXQncyBkb3VibGUgY2hlY2suIENhbiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgYmUgY2FsbGVkIGFueXdoZXJlIGVsc2U/IE5vcGUuIE9ubHkgYHl0OTIxeF9tZGlvX3Byb2JlYCBjYWxscyBpdC4gT2theSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgTEVELXJlbGF0ZWQgY29kZT8gVGhlIGNvZGUgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCwgd2hpY2ggdXNlcyBgZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YCB0byByZWdpc3RlciB0aGUgTEVEcy4gQnV0IGl0J3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHl0OTIxeF9sZWRzX3NldHVwYC4gQW5kIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYC5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIHRoaXM6IFNpbmNlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZhaWxzIGVhcmx5LCB0aGUgd2hvbGUgYHl0OTIxeF9kc2Ffc2V0dXBgIGZ1bmN0aW9uIGZhaWxzIHRvbywgYW5kIHRoZSBMRUQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLlxuXG5JIHdhcyBob3BpbmcgdGhlcmUgd2FzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgdGhhdCBTeXprYWxsZXIgKmNvdWxkKiBsZXZlcmFnZSB0byBpbmplY3QgYXJiaXRyYXJ5IHJlc3BvbnNlcy4gVGhlcmUncyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9jay5jYD8gTm8gc3VjaCBsdWNrLiBUaGVyZSBhcmUgdmFyaW91cyBNRElPIGRyaXZlcnMgbGlrZSBgbWRpby1ncGlvLmNgLCBgbWRpby1tdXguY2AsIGFuZCBzbyBvbi5cblxuU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgdXNlIHNvbWV0aGluZyBsaWtlIGBtZGlvLWdwaW9gIHRvIGNvbnN0cnVjdCBhbiBNRElPIGJ1cy4gSG93ZXZlciwgaXQgKmNhbm5vdCogbW9jayB0aGUgcmVzcG9uc2VzIG9mIGEgc3BlY2lmaWMgUEhZL3N3aXRjaCBjaGlwIHVubGVzcyBpdCdzIGVtdWxhdGVkIGluIFFFTVUuIEFuZCBRRU1VLCBhcyBmYXIgYXMgSSBrbm93LCBkb2Vzbid0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSBpcyB1dHRlcmx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIGdvaW5nIHRvIGxvY2sgdGhhdCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjExLjI1NzE0MDI1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczODk0MDkxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MTMuOTk2MDkxMjcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjYzMjI0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgRFNBIERyaXZlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IE1ESU8gZW11bGF0aW9uIHRoYXQgY291bGQgaGVscC4gSSBrbm93IFFFTVUgZG9lcyBoYXZlIHNvbWUgTURJTyBlbXVsYXRpb24sIGJ1dCBpdCdzIHNwZWNpZmljIHRvIGNlcnRhaW4gTUFDcyBhbmQgUEhZcywgYW5kIGNyaXRpY2FsbHksIGRvZXNuJ3Qgc2VlbSB0byB0b3VjaCBEU0Egc3dpdGNoZXMgb24gdGhlIE1ESU8gYnVzLiBTbywgdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCDigJMgbm8gZGljZSB0aGVyZS4gQW5kIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQsIGF0IGxlYXN0IGFzIEkgdW5kZXJzdGFuZCBpdCwgaXNuJ3Qgc2V0IHVwIHRvIGVtdWxhdGUgdGhpcyBzd2l0Y2ggZWl0aGVyLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiB3YXMgd2hldGhlciBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2UgZUJQRiB0byBtb2NrIHRoZSBgbWRpb2J1c19yZWFkYCBjYWxscywgZWZmZWN0aXZlbHkgYnlwYXNzaW5nIHRoZSBNRElPIHNldHVwLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGVCUEYgZm9yIHRoYXQga2luZCBvZiBoYXJkd2FyZSByZWdpc3RlciBtb2NraW5nLiBJdCByZWxpZXMgb24gcHJlLWV4aXN0aW5nIGtlcm5lbCBpbnRlcmZhY2VzIG9yIFFFTVUncyBidWlsdC1pbiBlbXVsYXRpb24sIGFuZCBzaW5jZSB0aGVyZSdzIG5vIGBtZGlvc2ltYCBvciBzaW1pbGFyIGhlcmUsIHRoYXQgcGF0aCBpcyBibG9ja2VkLiBUaGF0IHNlYWxzIGl0OiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHdlbnQgYmFjayBhbmQgZXhhbWluZWQgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhlIHBhdGNoIGltcGFjdHMgYGxlZHMuY2AgYW5kIGBzbWkuY2Agd2l0aGluIHRoZSBEU0EgZHJpdmVyLiBgc21pLmNgIGhhcyByZWdpc3RlciByZWFkL3dyaXRlIHdyYXBwZXJzLCBhbmQgYGxlZHMuY2AgY29udGFpbnMgTEVELXJlbGF0ZWQgb3BlcmF0aW9ucy4gSG93ZXZlciwgYm90aCBvZiB0aGVzZSByZXF1aXJlIHRoZSBgeXQ5MjF4X3ByaXZgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUsIGNyaXRpY2FsbHksIGlzIGFsbG9jYXRlZCB3aXRoaW4gYHl0OTIxeF9tZGlvX3Byb2JlYC4gSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgdGhlIGBwcml2YCBzdHJ1Y3R1cmUgaXMgZnJlZWQsIGFuZCBubyBMRURzIGFyZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGZ1bmN0aW9ucyBsaWtlIGB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZ2AgYW5kIGB5dDkyMXhfY2xlZF9ibGlua19zZXRgLCBhcmUgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBJdCdzIHVucmVhY2hhYmxlIGNvZGUuXG5cbk5vdywgYSBmaW5hbCwgcXVpY2sgY2hlY2suIFdoYXQgaWYgYHl0OTIxeF9yZWdfcmVhZGAgcmV0dXJucyAwPyBDb3VsZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBzdWNjZWVkIHVuZGVyIHRob3NlIGNpcmN1bXN0YW5jZXM/IElmIGB5dDkyMXhfcmVnX3JlYWRgIGlzIDAsIHRoZW4gdGhlIGBjaGlwaWRgIHZhbHVlIHdpbGwgYmUgMC4gU28gYG1ham9yYCB3b3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgYEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgMClgIGV2YWx1YXRlcyB0by4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBZVDkyMVhfQ0hJUF9JRF9NQUpPUmAganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjIzLjAyMjQxNjI3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0Njc4Nzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJZVDkyMVhfQ0hJUF9JRF9NQUpPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNDEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI0MjpcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtMjktI2RlZmluZSBZVDkyMVhfQ0hJUF9JRFxcdFxcdFxcdDB4ODAwMDhcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDozMDojZGVmaW5lICBZVDkyMVhfQ0hJUF9JRF9NQUpPUlxcdFxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTMxLSNkZWZpbmUgWVQ5MjFYX0VYVF9DUFVfUE9SVFxcdFxcdDB4ODAwMGNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MjUuMTY5MjA4NTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjA2MDU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENoaXAgSWRlbnRpZmljYXRpb24gYW5kIE1ham9yIFZlcnNpb24gTnVtYmVycyoqXG5cbk9rYXksIHNvIGlmIHRoZSBgY2hpcGlkYCB2YWx1ZSBpcyAwLCB0aGUgYG1ham9yYCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYWxzbyBiZSAwLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgZG91YmxlLWNoZWNrIHRoZSBgeXQ5MjF4X2luZm9zYCBkYXRhIHN0cnVjdHVyZSBhZ2Fpbi4gSSBuZWVkIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgZGVmaW5pdGlvbnMgb2YgYFlUOTIxNV9NQUpPUmAgYW5kIGBZVDkyMThfTUFKT1JgIGJlY2F1c2UgdGhlc2UgYXJlIGtleS4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgY2hpcGlkYCwgdGhlIGBtYWpvcmAgdmVyc2lvbiwgYW5kIHRoZXNlIGNvbnN0YW50cyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgcHJvcGVyIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyODYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0NDoyOS4xODk4MTYwODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTUxODMyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWVQ5MjE1X01BSk9SXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExNj1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cXHR7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4OlxcdFxcdFxcXCJZVDkyMTVTQ1xcXCIsIFlUOTIxNV9NQUpPUiwgMSwgMCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTktXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjItXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyMzpcXHRcXHRcXFwiWVQ5MjE1U1xcXCIsIFlUOTIxNV9NQUpPUiwgMiwgMCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjQtXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjctXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyODpcXHRcXHRcXFwiWVQ5MjE1UkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDAsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTI5LVxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTMyLVxcdHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMzM6XFx0XFx0XFxcIllUOTIxNE5CXFxcIiwgWVQ5MjE1X01BSk9SLCAzLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEzNC1cXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMzctXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEzODpcXHRcXHRcXFwiWVQ5MjEzTkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDMsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM5LVxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3NC1cXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI3NTpcXHRcXHRwcml2LVxcdTAwM2VjeWNsZV9ucyA9IGluZm8tXFx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MDg9ZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6ODM4OiNkZWZpbmUgWVQ5MjE1X01BSk9SXFx0MHg5MDAyXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODM5LSNkZWZpbmUgWVQ5MjE4X01BSk9SXFx0MHg5MDAxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjMxLjIwNTAwMzMwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk0NjA2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFlUOTIxNV9NQUpPUmAgaXMgZGVmaW5lZCBhcyBgMHg5MDAyYCwgYW5kIGBZVDkyMThfTUFKT1JgIGlzIGRlZmluZWQgYXMgYDB4OTAwMWAuIE5vdywgaWYgdGhlIGBjaGlwaWRgIHZhcmlhYmxlIGhhcHBlbnMgdG8gYmUgemVybyBvciBgMHhmZmZmZmZmZmAsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYG1ham9yYCB2YWx1ZSB3aWxsIGJlIGVpdGhlciB6ZXJvIG9yIGAweGZmZmZgLiBOZWl0aGVyIG9mIHRob3NlIG1ham9yIHZhbHVlcyB3aWxsIG1hdGNoIGVpdGhlciBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzIChgMHg5MDAyYCBvciBgMHg5MDAxYCkuIFRoaXMgbWVhbnMgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCBpbiB0aGlzIHNjZW5hcmlvLlxuXG5Db25zZXF1ZW50bHksIHNpbmNlIHRoZSBjaGlwIGRldGVjdGlvbiBmYWlscywgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZXhlY3V0ZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50LiBJZiB0aGUgcHJvYmUgZnVuY3Rpb24gbmV2ZXIgcnVucywgdGhlbiB0aGUgc3Vic2VxdWVudCBMRUQgY29kZSwgd2hpY2ggSSdtIGFzc3VtaW5nIHJlbGllcyBvbiBhIHN1Y2Nlc3NmdWwgcHJvYmUsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEl04oCZcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgaW4gdGhpcyBzZXR1cC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhbnkgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IHN3aXRjaCBjaGlwIOKAkyBmb3Igc3VjY2Vzc2Z1bCBwcm9iaW5nLiBRRU1VLCBvciBhbnkgdmlydHVhbGl6YXRpb24gc2V0dXAgSSdtIGZhbWlsaWFyIHdpdGgsIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUuIFNvLCBhbnkgYXR0ZW1wdCB0byBmdXp6IHRoaXMgY29kZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBnb2luZyB0byBoaXQgYSBkZWFkIGVuZCwgbWFraW5nIGl0IGEgd2FzdGUgb2YgcmVzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM1OSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MzcuNzk5NjExNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb7w48[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 14:30:54 +0000 UTC FinishedAt: 2026-07-07 14:44:39 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIxOCBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBvbiB0aGUgTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCByZWdpc3RlciBhbmQgZXhwZWN0cyBzcGVjaWZpYyB2YWx1ZXMgbGlrZSAweDkwMDIgb3IgMHg5MDAxKS4gU2luY2UgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIFFFTVUgb3IgYSBnZW5lcmljIE1ESU8gbW9jayBkZXZpY2UgaW4gdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBuZXdseSBhZGRlZCBMRUQgY2xhc3NkZXYgb3BlcmF0aW9ucyBhbmQgU01JIHJlYWQvd3JpdGUgd3JhcHBlcnMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzAsNyAmIzQzOzE4MjMwLDcgQEAgTTpcdERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWxcbi1GOlx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXCYjMzQ7XG4gXG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCYjMzQ7XG5AQCAtMTU4LDEyICYjNDM7MTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4tXHRoZWxwXG4tXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcbi1cdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQmIzQzOz0gYjUzL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGxhbnRpcS9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pY3JvY2hpcC9cbiYjNDM7b2JqLXlcdFx0XHRcdCYjNDM7PSBtb3RvcmNvbW0vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG5ldGMvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4mIzQzO1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBjaGlwLlxuJiM0MztcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuJiM0MztcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4mIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vXG4mIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICYjNDM7MTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3l0OTIxeC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyAmIzQzOzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHR7fVxuIH07XG4gXG4tI2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggJiM0MzsxOTIsNiBAQCBzdGF0aWMgdTMyIGV0aGFkZHJfbG8yX3RvX3UzMihjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxuIFx0cmV0dXJuIChhZGRyWzRdIFx1MDAzY1x1MDAzYyA4KSB8IGFkZHJbNV07XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuLXtcbi1cdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKSk7XG4tXG4tXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbi17XG4tXHR1MzIgdmFsO1xuLVx0aW50IHJlcztcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbi1cdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbi1cdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuLVx0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0KnZhbHAgPSB2YWw7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbi17XG4tXHRpbnQgcmVzO1xuLVx0dTMyIHY7XG4tXHR1MzIgdTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdHUgPSB2O1xuLVx0dSBcdTAwMjY9IH5tYXNrO1xuLVx0dSB8PSB2YWw7XG4tXHRpZiAodSA9PSB2KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuLX1cbi1cbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHR1IHw9IHZhbHNbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgJiM0Mzs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODg2LDYgJiM0Mzs0Njg2LDEwIEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX01DVVx0XHQxMFxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDYxNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX0xJTktdXHRcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxuJiM0MztcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4mIzQzO1x0XHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoKHZhbCBcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XG4mIzQzO1x0ICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKSkge1xuJiM0MztcdFx0KmZsYWdzcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpmbGFnc3AgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xuJiM0MztcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbiYjNDM7XHRpZiAoZ3JvdXAgPT0gMikge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdH1cbiYjNDM7XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIG1hc2ssIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4mIzQzO1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XG4mIzQzO1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbiYjNDM7XHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XG4mIzQzO1x0Ym9vbCBmb3JjZV9oaWdoO1xuJiM0MztcdGJvb2wgZm9yY2VfbG93O1xuJiM0MztcdGludCBwb2xhcml0eTtcbiYjNDM7XHR1MzIgZ3JvdXA7XG4mIzQzO1x0Ym9vbCBvbjtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtObyBMRURzIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZncm91cCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cJiMzNDssIGdyb3VwLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcJiMzNDthY3RpdmUtaGlnaFwmIzM0Oyk7XG4mIzQzO1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1sb3dcJiMzNDspO1xuJiM0MztcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XG4mIzQzO1xuJiM0MztcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFsZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGxlZF9jZGV2ID0gXHUwMDI2bGVkLVx1MDAzZWNkZXY7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VmbGFncyA9IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4mIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwmIzM0O25ldGRldlwmIzM0OztcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwmIzM0Oy0ldTolMDJkOiUwMnVcJiMzNDssXG4mIzQzO1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4mIzQzO1x0XHQuZndub2RlID0gZndub2RlLFxuJiM0MztcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuJiM0MztcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvbGFyaXR5KSB7XG4mIzQzO1x0XHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHQqaW52X21hc2twIHw9IGJpdDtcbiYjNDM7XHRcdGlmIChwb2xhcml0eSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVkKVxuJiM0MztcdFx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVkKSB7XG4mIzQzO1x0XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHUzMiBpbnZfY3RybCA9IDA7XG4mIzQzO1x0dTMyIGludl9tYXNrID0gMDtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4mIzQzO1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHAtXHUwMDNlZG4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCYjMzQ7bGVkc1wmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWxlZHNfbnApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuJiM0MztcdFx0XHRyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4mIzQzO1x0XHRcdGlmIChyZXMpIHtcbiYjNDM7XHRcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XG4mIzQzO1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbiYjNDM7XHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpbnZfbWFzaylcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMjEgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCAmIzQzOzEsMTU3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbWkuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4mIzQzO1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuJiM0MztcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCp2YWxwID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHR1MzIgdjtcbiYjNDM7XHR1MzIgdTtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHUgPSB2O1xuJiM0MztcdHUgXHUwMDI2PSB+bWFzaztcbiYjNDM7XHR1IHw9IHZhbDtcbiYjNDM7XHRpZiAodSA9PSB2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHR1IHw9IHZhbHNbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiYjNDM7XHR1MzIgdnNbNF07XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgdSA9IHZzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4mIzQzO1x0XHRpZiAodSAhPSB2c1tpXSlcbiYjNDM7XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0dnNbaV0gPSB1O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGFuZ2VkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCAmIzQzOzEsODggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSFxuJiM0MzsjZGVmaW5lIF9ZVF9TTUlfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuJiM0MztcdFx0XHQgICB1MzIgdmFsKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lXG4mIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjNDM7ICpcbiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbiYjNDM7XHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuJiM0MztcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjAKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnJiMzNDsKIAomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7CiYjNDM7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWcmIzM0OwogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7CkBAIC0xNTgsMTIgJiM0MzsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1CiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KLQotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKLQlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKLQkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDUgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0MztvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwomIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAubwomIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vCiYjNDM7eXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwotI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVCQkxMAomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwogCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCAmbHQ7PSAocG9ydCkgJmFtcDsmYW1wOyAocG9ydCkgJmx0OyA5KQpAQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHsKIAlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7CiAJdTY0IHJ4X2ZyYW1lczsKIAl1NjQgdHhfZnJhbWVzOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwomIzQzOwl1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDYxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHsKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwKJiM0MzsJCQkJCSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsCiYjNDM7CVtUUklHR0VSX05FVERFVl9MSU5LXzEwXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0sCiYjNDM7CVtUUklHR0VSX05FVERFVl9MSU5LXzEwMDBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sCiYjNDM7CVtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF0JPSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfVFhdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfUlhdCQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKQomIzQzOwkJaWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKCh2YWwgJmFtcDsgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9CiYjNDM7CSAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHsKJiM0MzsJCSpmbGFnc3AgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsICZhbXA7dmFsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAobWFzayAmYW1wOyZhbXA7ICh2YWwgJmFtcDsgbWFzaykgPT0gbWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IEJJVChpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7CiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCWN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OwomIzQzOwljaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdOwomIzQzOwllbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkOwomIzQzOwlib29sIGZvcmNlX2hpZ2g7CiYjNDM7CWJvb2wgZm9yY2VfbG93OwomIzQzOwlpbnQgcG9sYXJpdHk7CiYjNDM7CXUzMiBncm91cDsKJiM0MzsJYm9vbCBvbjsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtObyBMRURzIGZvciBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2dyb3VwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWlmIChncm91cCAmZ3Q7PSBZVDkyMVhfTEVEX0dST1VQX05VTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXG4mIzM0OywgZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKHBwLSZndDtsZWRzW2dyb3VwXSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJcG9ydCwgZ3JvdXApOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJbGVkLSZndDtwb3J0ID0gcHA7CiYjNDM7CWxlZC0mZ3Q7Z3JvdXAgPSBncm91cDsKJiM0MzsKJiM0MzsJc3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBsZWQ7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJb24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OOwomIzQzOwkJcmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIExFRFNfREVGU1RBVEVfS0VFUDoKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCAmYW1wO29uKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlsZWRfY2RldiA9ICZhbXA7bGVkLSZndDtjZGV2OwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzcyA9IG9uOwomIzQzOwlsZWRfY2Rldi0mZ3Q7bWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwomIzQzOwlsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZzsKJiM0MzsJbGVkX2NkZXYtJmd0O2JsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDsKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9ICYjMzQ7bmV0ZGV2JiMzNDs7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgJiMzNDstJXU6JTAyZDolMDJ1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTsKJiM0MzsJaW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXsKJiM0MzsJCS5md25vZGUgPSBmd25vZGUsCiYjNDM7CQkuZGV2aWNlbmFtZSA9IG5hbWUsCiYjNDM7CQkuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLAomIzQzOwl9OwomIzQzOwlyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgJmFtcDtpbml0X2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb2xhcml0eSkgewomIzQzOwkJdTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7CiYjNDM7CiYjNDM7CQkqaW52X21hc2twIHw9IGJpdDsKJiM0MzsJCWlmIChwb2xhcml0eSAmZ3Q7IDApCiYjNDM7CQkJKmludl9jdHJscCB8PSBiaXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWRldm1fa2ZyZWUoZGV2LCBsZWQpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKGxlZCkKJiM0MzsJCQkJZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsICZhbXA7bGVkLSZndDtjZGV2KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwomIzQzOwkJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJCWlmIChsZWQpIHsKJiM0MzsJCQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQkJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1MzIgaW52X2N0cmwgPSAwOwomIzQzOwl1MzIgaW52X21hc2sgPSAwOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKJiM0MzsJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDsKJiM0MzsJCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwomIzQzOwomIzQzOwkJaWYgKCFkcC0mZ3Q7ZG4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtJmd0O2RuLCAmIzM0O2xlZHMmIzM0Oyk7CiYjNDM7CQlpZiAoIWxlZHNfbnApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsCiYjNDM7CQkJCQkgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkJICAgICAgICZhbXA7aW52X21hc2ssICZhbXA7aW52X2N0cmwpOwomIzQzOwkJCWlmIChyZXMpIHsKJiM0MzsJCQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJCWdvdG8gZXJyOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW52X21hc2spCiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsKJiM0MztlbmQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oCkBAIC0wLDAgJiM0MzsxLDEyMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX0xFRFNfSAomIzQzOyNkZWZpbmUgX1lUX0xFRFNfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMCQkJMHhkMDAwMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTgkJCUJJVCgyMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NCUdFTk1BU0soMjAsIDE5KQkvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NCQlHRU5NQVNLKDE2LCAxMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX00JCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMCQkJWVQ5MjFYX0xFRF9DVFJMX01PREUoMikKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpCQkoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX00JCQlHRU5NQVNLKDE3LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJUwlCSVQoMTcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lOREkJQklUKDE2KQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCkJCSgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NCQlHRU5NQVNLKDMxLCAzMCkJLyogY3ljbGUgPSA1MTIgJmd0OyZndDsgeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00JCUdFTk1BU0soMjksIDI4KQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpCQkJRklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVAJQklUKDI3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NCQlHRU5NQVNLKDI2LCAyNSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzIJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zCQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNAkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzYJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCkJCSgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApCQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg0ICogKGdycCkgJiM0MzsgMTgpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKQlHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KQkvKiBjeWNsZSA9IDUxMiAmbHQ7Jmx0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxNikpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycCkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX00JCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOSwkJQklUKDE1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTksJQklUKDE0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOSwlCSVQoMTMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwJQklUKDEyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGCUJJVCgxMSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOSwkJQklUKDEwKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LCQlCSVQoOSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWAkJQklUKDgpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgJCUJJVCg3KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNCQlCSVQoNikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNCQlCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0JCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOSwlCSVQoMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOSwlCSVQoMikKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOSwkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMCQkweGQwMTAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTksJCUdFTk1BU0soMjUsIDI0KQkvKiBkZWxheT8gKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1cJCUJJVCg0KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NCQlHRU5NQVNLKDEsIDApCS8qICNncnAgLSAxICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KQkoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydCkJR0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRURfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpKSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTCQkweGQwMWM0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlYJCTB4ZDAxYzgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KQlCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpCSgweGQwMWQwICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycCkJR0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNiAqIChncnApKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOCTY0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRgk1MTIKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYCTIwNDgKJiM0MzsKJiM0MzsvKiAyICogbGNtKDIsIDMsIDQsIDYpICovCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT00JCTI0CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSkJKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSkKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9sZWQgewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgY2hhciBncm91cDsKJiM0MzsKJiM0MzsJYm9vbCB1c2VfY3ljbGU6MTsKJiM0MzsJYm9vbCB1c2VfZHV0eToxOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTU3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKQEAgLTAsMCAmIzQzOzEsODggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSAomIzQzOyNkZWZpbmUgX1lUX1NNSV9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmRwYXJ0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssCiYjNDM7CQkJICAgdTMyIHZhbCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQomIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KJiM0MzsgKgomIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCiYjNDM7ewomIzQzOwkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwomIzQzOwkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUOTIxNSBMRUQgU3VwcG9ydCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBJdCYjMzk7cyBtb3ZpbmcgdGhlIGV4aXN0aW5nIGRyaXZlciBjb2RlLCBgeXQ5MjF4LmNgLCBhbmQgc3BsaXR0aW5nIGl0IGludG8gYGNoaXAuY2AsIGBsZWRzLmNgLCBhbmQgYHNtaS5jYCB3aXRoaW4gYSBgbW90b3Jjb21tYCBzdWJkaXJlY3RvcnkgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYS9gLiBBIG5ldyBjb25maWcgb3B0aW9uLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2AsIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBoYXJkd2FyZS1kZXBlbmRlbnQsIGVzcGVjaWFsbHkgRFNBIHN3aXRjaGVzLgoKSSBrbm93IFFFTVUgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGhhdmUgaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgdGhleSYjMzk7cmUgZW11bGF0ZWQuIFNvLCBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIGZvciB0aGUgWVQ5MjE1IGluIFFFTVU/IE9yIGlzIHRoaXMgcHVyZWx5IGEgaGFyZHdhcmUgdGhpbmc/IERTQSBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFyZSB1c3VhbGx5IGZvciBlbWJlZGRlZCBzd2l0Y2hlcywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0aGluZ3MgYXJlIGluc3RhbnRpYXRlZC4gQ2FuIHRoZXkgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBvciBtYXliZSB0aHJvdWdoIEkyQyBvciBNRElPIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudD8gV2FpdCwgc3l6a2FsbGVyICpjYW4qIGluc3RhbnRpYXRlIEkyQy9NRElPIGRldmljZXMsIGlmIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBvciBldmVuIHRocm91Z2ggZHVtbXkgZGV2aWNlcy4gSWYgaXQmIzM5O3MgYSBoYXJkd2FyZSBkcml2ZXIgdGhvdWdoLCByZWFjaGluZyBpdCBpcyBnb2luZyB0byBjb21lIGRvd24gdG8gbW9ja2luZyB0aGUgTURJTyBidXMuIEhhbmcgb24sIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIE1ESU8vSTJDIGZ1enppbmcgc3VwcG9ydC4gSSBzaG91bGQgY2hlY2sgaWYgYE5FVF9EU0FfWVQ5MjFYYCBpcyBzb21ldGhpbmcgd2UgZnV6ei4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBsZWRzLmNgLCBhZGRpbmcgZnVuY3Rpb25zIGxpa2UgYHl0OTIxeF9sZWRfc2V0dXBgLCBgeXQ5MjF4X2xlZF9mb3JjZV9zZXRgLCBgeXQ5MjF4X2xlZF9ibGlua19zZXRgLCBhbmQgYHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXRgLiBUaGVzZSBhcmUgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMuIENhbiB0aGVzZSBiZSByZWFjaGVkPyBZZXMsIGRlZmluaXRlbHkgdmlhIHN5c2ZzISBCdXQgdGhlIGNhdGNoIGlzLCB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHByb2JlZCBmaXJzdC4gUHJvYmluZyBhIERTQSBzd2l0Y2jigKYgdGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuIFdlJiMzOTtsbCBuZWVkIGFuIE1ESU8gYnVzIGFuZCBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHNldHVwLiBEb2VzIHN5emthbGxlciBzdXBwb3J0IERTQSBzd2l0Y2ggcHJvYmluZz8KClR5cGljYWxseSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gcmVhZCBJRCByZWdpc3RlcnMsIHdpbGwgZmFpbCB0byBwcm9iZSB1bmxlc3MgdGhlIGFjdHVhbCBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIGVtdWxhdGVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgYHl0OTIxeF9tZGlvX3JlYWRgIG9yIGFueXRoaW5nIHNpbWlsYXIgcmVhZHMgYSBoYXJkd2FyZSBJRC4gTGV0JiMzOTtzIGRvIGEga2VybmVsIHNlYXJjaCBmb3IgYHl0OTIxeGAgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Jlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByb2JlIHBhdGggdG8gc2VlIGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGV2ZW4gZ2V0IHRoaXMgdGhpbmcgb2ZmIHRoZSBncm91bmQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTURJTyBQcm9iZSBJc3N1ZSoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIHplcm8gaW4gb24gYSBwb3RlbnRpYWwgcHJvYmxlbSByZWxhdGVkIHRvIGFuIE1ESU8gaW50ZXJmYWNlIHByb2JlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBmdW5jdGlvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiByZWxhdGVkIHRvIHRoYXQgcGFydGljdWxhciBjaGlwc2V0LiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWUga2luZCBvZiBpbml0aWFsaXphdGlvbiBvciBkZXZpY2UgZGlzY292ZXJ5IGlzc3VlIHdpdGhpbiB0aGUgTURJTyBmcmFtZXdvcmsuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiB3aGVyZSB0aGluZ3MgZ28gc2lkZXdheXMg4oCTIHRpbWluZyBwcm9ibGVtcywgaW5jb3JyZWN0IHJlZ2lzdGVyIGFjY2Vzc2VzLCBvciBwb3RlbnRpYWxseSBhIGRyaXZlci1zcGVjaWZpYyBidWcgaW4gdGhlIHByb2JlIHJvdXRpbmUgaXRzZWxmLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgbG9ncywgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSByb290IGNhdXNlLCBhbmQgYmVnaW4gdGVzdGluZyBmb3IgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlLip5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWA6CgoqKkFuYWx5emluZyBgeXQ5MjF4X21kaW9fcHJvYmVgKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gKmRvKi4gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIE1ESU8gaW50ZXJmYWNlLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgYXNzb2NpYXRlZCB3aXRoIGEgWVQ5MjF4IGRldmljZS4gJiMzNDtQcm9iZSYjMzQ7IGlzIGEgY29tbW9uIHRlcm0sIHNvIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgZGV2aWNlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGRpc2NvdmVycyBhbmQgc2V0cyB1cCB0aGUgTURJTyBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBZVDkyMXggY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQgY29uZmlndXJlcyB0aGUgTURJTyBidXMsIGFuZCB3aGF0IHNwZWNpZmljIHJlc291cmNlcyBpdCYjMzk7cyBsaWtlbHkgdG8gYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIG92ZXJhbGwgc3RyYXRlZ3kgZm9yIG1hbmFnaW5nIHRoaXMgTURJTyBjb21wb25lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyByZWdpc3RlciByZWFkcywgd3JpdGVzLCBvciBkZWxheXMgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgYWRkcmVzc2VkPyBBbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IG90aGVyIGRldmljZXMgd2lsbCBpdCBpbnRlcmFjdCB3aXRoPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgYSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiwgd2hpY2ggd291bGQgc3VnZ2VzdCBhIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZSB0cmVlIG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjAwOlx0XHQuZ2V0X3N0cmluZ3NcdFx0PSB5dDkyMXhfZHNhX2dldF9zdHJpbmdzLFxuNDYwMTpcdFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMsXG40NjAyOlx0XHQuZ2V0X3NzZXRfY291bnRcdFx0PSB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50LFxuNDYwMzpcdFx0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMsXG40NjA0Olx0XHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuNDYwNTpcdFx0LmdldF9ybW9uX3N0YXRzXHRcdD0geXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyxcbjQ2MDY6XHRcdC5nZXRfc3RhdHM2NFx0XHQ9IHl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQsXG40NjA3Olx0XHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzLFxuNDYwODpcdFx0LyogZWVlICovXG40NjA5Olx0XHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuNDYxMDpcdFx0LnNldF9tYWNfZWVlXHRcdD0geXQ5MjF4X2RzYV9zZXRfbWFjX2VlZSxcbjQ2MTE6XHRcdC8qIG10dSAqL1xuNDYxMjpcdFx0LnBvcnRfY2hhbmdlX210dVx0PSB5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dSxcbjQ2MTM6XHRcdC5wb3J0X21heF9tdHVcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWF4X210dSxcbjQ2MTQ6XHRcdC8qIHJhdGUgKi9cbjQ2MTU6XHRcdC5wb3J0X3BvbGljZXJfZGVsXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbCxcbjQ2MTY6XHRcdC5wb3J0X3BvbGljZXJfYWRkXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZCxcbjQ2MTc6XHRcdC5wb3J0X3NldHVwX3RjXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxuNDYxODpcdFx0LyogYWNsICovXG40NjE5Olx0XHQuY2xzX2Zsb3dlcl9kZWxcdFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfZGVsLFxuNDYyMDpcdFx0LmNsc19mbG93ZXJfYWRkXHRcdD0geXQ5MjF4X2RzYV9jbHNfZmxvd2VyX2FkZCxcbjQ2MjE6XHRcdC8qIGhzciAqL1xuNDYyMjpcdFx0LnBvcnRfaHNyX2xlYXZlXHRcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZSxcbjQ2MjM6XHRcdC5wb3J0X2hzcl9qb2luXHRcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxuNDYyNDpcdFx0LyogbWlycm9yICovXG40NjI1Olx0XHQucG9ydF9taXJyb3JfZGVsXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfZGVsLFxuNDYyNjpcdFx0LnBvcnRfbWlycm9yX2FkZFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2FkZCxcbjQ2Mjc6XHRcdC8qIGxhZyAqL1xuNDYyODpcdFx0LnBvcnRfbGFnX2xlYXZlXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19sZWF2ZSxcbjQ2Mjk6XHRcdC5wb3J0X2xhZ19qb2luXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19qb2luLFxuNDYzMDpcdFx0LyogZmRiICovXG40NjMxOlx0XHQucG9ydF9mZGJfZHVtcFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZHVtcCxcbjQ2MzI6XHRcdC5wb3J0X2Zhc3RfYWdlXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2Zhc3RfYWdlLFxuNDYzMzpcdFx0LnNldF9hZ2VpbmdfdGltZVx0PSB5dDkyMXhfZHNhX3NldF9hZ2VpbmdfdGltZSxcbjQ2MzQ6XHRcdC5wb3J0X2ZkYl9kZWxcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2RlbCxcbjQ2MzU6XHRcdC5wb3J0X2ZkYl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2FkZCxcbjQ2MzY6XHRcdC5wb3J0X21kYl9kZWxcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2RlbCxcbjQ2Mzc6XHRcdC5wb3J0X21kYl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2FkZCxcbjQ2Mzg6XHRcdC8qIHZsYW4gKi9cbjQ2Mzk6XHRcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2ZpbHRlcmluZyxcbjQ2NDA6XHRcdC5wb3J0X3ZsYW5fZGVsXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZGVsLFxuNDY0MTpcdFx0LnBvcnRfdmxhbl9hZGRcdFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9hZGQsXG40NjQyOlx0XHQvKiBicmlkZ2UgKi9cbjQ2NDM6XHRcdC5wb3J0X3ByZV9icmlkZ2VfZmxhZ3NcdD0geXQ5MjF4X2RzYV9wb3J0X3ByZV9icmlkZ2VfZmxhZ3MsXG40NjQ0Olx0XHQucG9ydF9icmlkZ2VfZmxhZ3NcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9mbGFncyxcbjQ2NDU6XHRcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSB5dDkyMXhfZHNhX3BvcnRfYnJpZGdlX2xlYXZlLFxuNDY0NjpcdFx0LnBvcnRfYnJpZGdlX2pvaW5cdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9qb2luLFxuNDY0NzpcdFx0LyogbXN0ICovXG40NjQ4Olx0XHQucG9ydF9tc3Rfc3RhdGVfc2V0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tc3Rfc3RhdGVfc2V0LFxuNDY0OTpcdFx0LnZsYW5fbXN0aV9zZXRcdFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXG40NjUwOlx0XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IHl0OTIxeF9kc2FfcG9ydF9zdHBfc3RhdGVfc2V0LFxuNDY1MTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG40NjUyOlx0XHQvKiBkY2IgKi9cbjQ2NTM6XHRcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG40NjU0Olx0XHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLFxuNDY1NTpcdFx0LnBvcnRfZ2V0X2FwcHRydXN0XHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXG40NjU2Olx0XHQucG9ydF9zZXRfYXBwdHJ1c3RcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9hcHB0cnVzdCxcbjQ2NTc6XHQjZW5kaWZcbjQ2NTg6XHRcdC8qIHBvcnQgKi9cbjQ2NTk6XHRcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbCxcbjQ2NjA6XHRcdC5waHlsaW5rX2dldF9jYXBzXHQ9IHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcyxcbjQ2NjE6XHRcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxuNDY2MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG40NjYzOlx0XHQvKiBkc2NwICovXG40NjY0Olx0XHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZHNjcF9wcmlvLFxuNDY2NTpcdFx0LnBvcnRfZGVsX2RzY3BfcHJpb1x0PSB5dDkyMXhfZHNhX3BvcnRfZGVsX2RzY3BfcHJpbyxcbjQ2NjY6XHRcdC5wb3J0X2FkZF9kc2NwX3ByaW9cdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXG40NjY3Olx0I2VuZGlmXG40NjY4Olx0XHQvKiBjaGlwICovXG40NjY5Olx0XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG40NjcwOlx0fTtcbjQ2NzE6XHRcbjQ2NzI6XHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG40NjczOlx0e1xuNDY3NDpcdFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbjQ2NzU6XHRcbjQ2NzY6XHRcdGlmICghcHJpdilcbjQ2Nzc6XHRcdFx0cmV0dXJuO1xuNDY3ODpcdFxuNDY3OTpcdFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbjQ2ODA6XHR9XG40NjgxOlx0XG40NjgyOlx0c3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ2ODM6XHR7XG40Njg0Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuNDY4NTpcdFxuNDY4NjpcdFx0aWYgKCFwcml2KVxuNDY4NzpcdFx0XHRyZXR1cm47XG40Njg4Olx0XG40Njg5Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG40NjkwOlx0XHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG40NjkxOlx0I2VuZGlmXG40NjkyOlx0XG40NjkzOlx0XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbjQ2OTQ6XHRcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG40Njk1Olx0XG40Njk2Olx0XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuNDY5NzpcdFx0fVxuNDY5ODpcdFxuNDY5OTpcdFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYHl0OTIxeF9tZGlvX3Byb2JlYC4gSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBvZiBNRElPIGFuZCBkcml2ZXIgcHJvYmluZywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWNzIHJlbGF0ZWQgdG8gdGhlIFlUOTIxeCBjaGlwc2V0IGFuZCBhbnl0aGluZyB1bnVzdWFsIG9yIG5vdGV3b3J0aHkgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IHl0OTIxeF9tZGlvX3Byb2JlKioKCiogICAqKkVudHJ5IFBvaW50IGFuZCBQdXJwb3NlOioqIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGluZGVlZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZS4gSSBleHBlY3QgdG8gc2VlIGl0IGFzIHBhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyByZWdpc3RyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcmVkIHRoZSBwcm9iZTsgbGlrZWx5LCB0aGUgc3lzdGVtIGRldGVjdGVkIGEgZGV2aWNlIG1hdGNoaW5nIGEga25vd24gSUQsIGFuZCBub3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogSSYjMzk7bGwgYmUgbG9va2luZyBhdCB3aGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGluY2x1ZGVzIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUgTURJTyBjb21tdW5pY2F0aW9uIG9yIFBIWSBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IHVudXN1YWwgbWVtb3J5IG1hcHBpbmcgc3RyYXRlZ2llcyBiZWluZyB1c2VkPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJlc291cmNlIGNvbmZsaWN0cyB0byBsb29rIG91dCBmb3I/CiogICAqKk1ESU8gSW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHBhcnQuIEhvdyBpcyB0aGUgTURJTyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgb3IgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGUgWVQ5MjF4PyBJJiMzOTttIGV4cGVjdGluZyBzdGFuZGFyZCBNRElPIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBwb3RlbnRpYWxseSB3aXRoIGEgdmVuZG9yLXNwZWNpZmljIHR3aXN0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgTURJTyBjb250cm9sbGVyLgoqICAgKipQSFkgRGV0ZWN0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIElzIHRoZXJlIFBIWSBkZXRlY3Rpb24gaW52b2x2ZWQgaGVyZSwgb3IgaXMgaXQgYXNzdW1lZCBhIHNwZWNpZmljIFBIWSBpcyBjb25uZWN0ZWQ/IEhvdyBkb2VzIGl0IGhhbmRsZSB2YXJpb3VzIFBIWSB0eXBlcz8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBzZXRzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBQSFksIGluY2x1ZGluZyBhbnkgcG93ZXItdXAgb3IgcmVzZXQgc2VxdWVuY2VzLiBXaGF0IGFib3V0IHRoZSBNRElPIGJ1cyBzcGVlZCwgYXJlIHRoZXJlIGFueSBzcGVlZCBhZGp1c3RtZW50cz8KKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFJvYnVzdG5lc3M6KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IFdoYXQgZG9lcyBpdCBkbyBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZXNwb25kaW5nLCBpZiB0aGVyZSBhcmUgTURJTyBlcnJvcnMsIG9yIGlmIHRoZSBQSFkgY29uZmlndXJhdGlvbiBmYWlscz8gQXJlIHRoZXJlIHJldHJ5IG1lY2hhbmlzbXM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBsb29rIGZvciBgcHJpbnRrYCBjYWxscyBhbmQgb3RoZXIgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcmVwb3J0aW5nLgoqICAgKipEcml2ZXIgTW9kZWwgSW50ZWdyYXRpb246KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYmluZGluZ3MgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdGhlIGRldmljZSB0cmVlPyBJJiMzOTtsbCBjaGVjayBmb3IgdGhlIHVzZSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgZGV2aWNlIHByaXZhdGUgZGF0YSwgYW5kIG9mIGNvdXJzZSBhbnkgbmV0d29yayBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uLgoqICAgKipQb3dlciBNYW5hZ2VtZW50OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvd2VyLXVwIG9yIHBvd2VyLWRvd24gc2VxdWVuY2VzIG9yIGNhbGxiYWNrcyBkZWZpbmVkPwoqICAgKipDb25jdXJyZW5jeToqKiBBcmUgdGhlcmUgYW55IGNvbmN1cnJlbmN5IGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGg/IEFyZSB0aGVyZSBhbnkgbG9ja3MgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIG9yIGhhcmR3YXJlIHJlZ2lzdGVycz8KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhbmQgUEhZLiBUaGlzIGluY2x1ZGVzIGhvdyBpdCBtYW5hZ2VzIGhhcmR3YXJlIHJlc291cmNlcywgZGV0ZWN0cyBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBpcyBob3cgdGhpcyBkcml2ZXIgYnJpbmdzIHVwIGFuZCBjb25maWd1cmVzIHRoZSBZVDkyMXggTURJTyBpbnRlcmZhY2UuIEkgd2lsbCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZvciBhbnkgc3VidGxlIGFyZWFzLCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcwMDpcdFxuNDcwMTpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7XG40NzAyOlx0XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbjQ3MDM6XHRcbjQ3MDQ6XHRcdFx0aWYgKCFhY2xibGspXG40NzA1Olx0XHRcdFx0Y29udGludWU7XG40NzA2Olx0XHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG40NzA3Olx0XHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbjQ3MDg6XHRcbjQ3MDk6XHRcdFx0XHRpZiAoIWFjbHJ1bGUpXG40NzEwOlx0XHRcdFx0XHRjb250aW51ZTtcbjQ3MTE6XHRcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG40NzEyOlx0XHRcdH1cbjQ3MTM6XHRcdFx0a3ZmcmVlKGFjbGJsayk7XG40NzE0Olx0XHR9XG40NzE1Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDcxNjpcdH1cbjQ3MTc6XHRcbjQ3MTg6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MTk6XHR7XG40NzIwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3MjE6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzIyOlx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzIzOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzI0Olx0XG40NzI1Olx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzI2Olx0XHRpZiAoIXByaXYpXG40NzI3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDcyODpcdFxuNDcyOTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDczMDpcdFx0aWYgKCFtZGlvKVxuNDczMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3MzI6XHRcbjQ3MzM6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzM0Olx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzM1Olx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3MzY6XHRcbjQ3Mzc6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzM4Olx0XG40NzM5Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDc0MDpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3NDE6XHRcbjQ3NDI6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDc0MzpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NDQ6XHRcbjQ3NDU6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc0NjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NDc6XHRcdH1cbjQ3NDg6XHRcbjQ3NDk6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NTA6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NTE6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NTI6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzUzOlx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NTQ6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NTU6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc1NjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzU3Olx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc1ODpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NTk6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NjA6XHRcbjQ3NjE6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzYyOlx0XG40NzYzOlx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzY0Olx0fVxuNDc2NTpcdFxuNDc2NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc2NzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbjQ3Njg6XHRcdHt9XG40NzY5Olx0fTtcbjQ3NzA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuNDc3MTpcdFxuNDc3MjpcdHN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuNDc3MzpcdFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG40Nzc0Olx0XHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuNDc3NTpcdFx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG40Nzc2Olx0XHQubWRpb2Rydi5kcml2ZXIgPSB7XG40Nzc3Olx0XHRcdC5uYW1lID0gWVQ5MjFYX05BTUUsXG40Nzc4Olx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbjQ3Nzk6XHRcdH0sXG40NzgwOlx0fTtcbjQ3ODE6XHRcbjQ3ODI6XHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbjQ3ODM6XHRcbjQ3ODQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0RhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbjQ3ODU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaFwmIzM0Oyk7XG40Nzg2Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NDkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIHl0OTIxeF9tZGlvX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGB5dDkyMXhfbWRpb19wcm9iZWAuIEhtbSwgdGhlIGNvZGUgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0b3VjaGluZyBhbnkgaGFyZHdhcmUgSUQgcmVnaXN0ZXJzLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyBza2lwcGluZyBzdHJhaWdodCB0byByZWdpc3RlcmluZyB0aGUgRFNBIHN3aXRjaC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgaG9sZCBvbi4uLiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGNhbGwgdGhhdCBhY3R1YWxseSBzZXRzIHRoaW5ncyBpbiBtb3Rpb24uIFRoYXQsIGluIHR1cm4sIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhlIGBzZXR1cGAgY2FsbGJhY2ssIHdoaWNoIEkgc2VlIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gUmlnaHQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIHByb2JlIGxpa2VseSBqdXN0IGhhbmRsZXMgdGhlIGluaXRpYWwgcmVnaXN0cmF0aW9uLCBhbmQgdGhlIHJlYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBoYXBwZW5pbmcgKmFmdGVyKiB0aGF0LiBTbywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU0MDpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuNDU0MTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VvZl9ub2RlO1xuNDU0MjpcdFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbjQ1NDM6XHRcdGludCByZXM7XG40NTQ0Olx0XG40NTQ1Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU0NjpcdFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XG40NTQ3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ4Olx0XG40NTQ5Olx0XHRpZiAocmVzKVxuNDU1MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDU1MTpcdFxuNDU1MjpcdFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcbjQ1NTM6XHRcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcbjQ1NTQ6XHRcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxuNDU1NTpcdFx0ICovXG40NTU2Olx0XHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcJiMzNDttZGlvXCYjMzQ7KTtcbjQ1NTc6XHRcdGlmIChjaGlsZCkge1xuNDU1ODpcdFx0XHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XG40NTU5Olx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbjQ1NjA6XHRcdFx0aWYgKHJlcylcbjQ1NjE6XHRcdFx0XHRyZXR1cm4gcmVzO1xuNDU2MjpcdFx0fVxuNDU2MzpcdFxuNDU2NDpcdFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cbjQ1NjU6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW8tZXh0ZXJuYWxcJiMzNDspO1xuNDU2NjpcdFx0aWYgKGNoaWxkKSB7XG40NTY3Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1Njg6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2OTpcdFx0XHRpZiAocmVzKVxuNDU3MDpcdFx0XHRcdHJldHVybiByZXM7XG40NTcxOlx0XG40NTcyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnRlc3RlZCBleHRlcm5hbCBtZGlvIGJ1c1xcblwmIzM0Oyk7XG40NTczOlx0XHRcdHJldHVybiAtRU5PREVWO1xuNDU3NDpcdFx0fVxuNDU3NTpcdFxuNDU3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1Nzc6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xuNDU3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3OTpcdFxuNDU4MDpcdFx0aWYgKHJlcylcbjQ1ODE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1ODI6XHRcbjQ1ODM6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbjQ1ODQ6XHRcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuNDU4NTpcdFx0aWYgKHJlcylcbjQ1ODY6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG40NTg3Olx0I2VuZGlmXG40NTg4Olx0XG40NTg5Olx0XHRyZXR1cm4gMDtcbjQ1OTA6XHR9XG40NTkxOlx0XG40NTkyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcbjQ1OTM6XHRcdC5tYWNfbGlua19kb3duXHQ9IHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24sXG40NTk0Olx0XHQubWFjX2xpbmtfdXBcdD0geXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAsXG40NTk1Olx0XHQubWFjX2NvbmZpZ1x0PSB5dDkyMXhfcGh5bGlua19tYWNfY29uZmlnLFxuNDU5NjpcdH07XG40NTk3Olx0XG40NTk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG40NTk5Olx0XHQvKiBtaWIgKi9cbjQ2MDA6XHRcdC5nZXRfc3RyaW5nc1x0XHQ9IHl0OTIxeF9kc2FfZ2V0X3N0cmluZ3MsXG40NjAxOlx0XHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyxcbjQ2MDI6XHRcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQsXG40NjAzOlx0XHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyxcbjQ2MDQ6XHRcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMsXG40NjA1Olx0XHQuZ2V0X3Jtb25fc3RhdHNcdFx0PSB5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzLFxuNDYwNjpcdFx0LmdldF9zdGF0czY0XHRcdD0geXQ5MjF4X2RzYV9nZXRfc3RhdHM2NCxcbjQ2MDc6XHRcdC5nZXRfcGF1c2Vfc3RhdHNcdD0geXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMsXG40NjA4Olx0XHQvKiBlZWUgKi9cbjQ2MDk6XHRcdC5zdXBwb3J0X2VlZVx0XHQ9IGRzYV9zdXBwb3J0c19lZWUsXG40NjEwOlx0XHQuc2V0X21hY19lZWVcdFx0PSB5dDkyMXhfZHNhX3NldF9tYWNfZWVlLFxuNDYxMTpcdFx0LyogbXR1ICovXG40NjEyOlx0XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IHl0OTIxeF9kc2FfcG9ydF9jaGFuZ2VfbXR1LFxuNDYxMzpcdFx0LnBvcnRfbWF4X210dVx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1LFxuNDYxNDpcdFx0LyogcmF0ZSAqL1xuNDYxNTpcdFx0LnBvcnRfcG9saWNlcl9kZWxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfZGVsLFxuNDYxNjpcdFx0LnBvcnRfcG9saWNlcl9hZGRcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxuNDYxNzpcdFx0LnBvcnRfc2V0dXBfdGNcdFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXBfdGMsXG40NjE4Olx0XHQvKiBhY2wgKi9cbjQ2MTk6XHRcdC5jbHNfZmxvd2VyX2RlbFx0XHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9kZWwsXG40NjIwOlx0XHQuY2xzX2Zsb3dlcl9hZGRcdFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfYWRkLFxuNDYyMTpcdFx0LyogaHNyICovXG40NjIyOlx0XHQucG9ydF9oc3JfbGVhdmVcdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2xlYXZlLFxuNDYyMzpcdFx0LnBvcnRfaHNyX2pvaW5cdFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXG40NjI0Olx0XHQvKiBtaXJyb3IgKi9cbjQ2MjU6XHRcdC5wb3J0X21pcnJvcl9kZWxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9kZWwsXG40NjI2Olx0XHQucG9ydF9taXJyb3JfYWRkXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfYWRkLFxuNDYyNzpcdFx0LyogbGFnICovXG40NjI4Olx0XHQucG9ydF9sYWdfbGVhdmVcdFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2xlYXZlLFxuNDYyOTpcdFx0LnBvcnRfbGFnX2pvaW5cdFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2pvaW4sXG40NjMwOlx0XHQvKiBmZGIgKi9cbjQ2MzE6XHRcdC5wb3J0X2ZkYl9kdW1wXHRcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kdW1wLFxuNDYzMjpcdFx0LnBvcnRfZmFzdF9hZ2VcdFx0PSB5dDkyMXhfZHNhX3BvcnRfZmFzdF9hZ2UsXG40NjMzOlx0XHQuc2V0X2FnZWluZ190aW1lXHQ9IHl0OTIxeF9kc2Ffc2V0X2FnZWluZ190aW1lLFxuNDYzNDpcdFx0LnBvcnRfZmRiX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfZGVsLFxuNDYzNTpcdFx0LnBvcnRfZmRiX2FkZFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfYWRkLFxuNDYzNjpcdFx0LnBvcnRfbWRiX2RlbFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfZGVsLFxuNDYzNzpcdFx0LnBvcnRfbWRiX2FkZFx0XHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfYWRkLFxuNDYzODpcdFx0LyogdmxhbiAqL1xuNDYzOTpcdFx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk1OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBgeXQ5MjF4X2NoaXBfcmVzZXRgIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBiYXNlZCBvbiBpdHMgbmFtZSwgYHl0OTIxeF9jaGlwX3Jlc2V0YCAqY291bGQqIGJlIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGZvciBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBVbmRlcnN0YW5kaW5nIGl0cyBpbm5lciB3b3JraW5ncyBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9jaGlwX3Jlc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IGp1bXBlZCB0byB0aG9zZSB0d28gZnVuY3Rpb25zOiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ3V0IHRlbGxzIG1lIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsbHksIG9uZ29pbmcgaGVhbHRoIG1vbml0b3Jpbmcgb2YgYSBgeXQ5MjF4YCBjaGlwc2V0LCB3aGljaCBpcyBwcm9iYWJseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBlbWJlZGRlZCBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgcmVzZXQgZnVuY3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgYnJpbmdpbmcgdGhlIGNoaXAgaW50byBhIGRlZmluZWQsIGtub3duIHN0YXRlLiBUaGUgbWV0aG9kIHVzZWQgd291bGQgbGlrZWx5IGRlcGVuZCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBmdWxsLXBvd2VyIHJlc2V0LCBhIHNvZnQgcmVzZXQsIG9yIG1heWJlIGV2ZW4gYSBzZWxlY3RpdmUgcmVzZXQgb2Ygc3BlY2lmaWMgc3ViLW1vZHVsZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyB0aGUgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIHdyaXR0ZW4sIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgZm9yIHNpZ25hbCBhc3NlcnRpb24vZGUtYXNzZXJ0aW9uIOKAkyBhcmUgd2hlcmUgdGhlIGRldmlsIGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkYXRhc2hlZXQgb3IgdGhlIGRyaXZlciBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBudWFuY2VzLgoKYHl0OTIxeF9jaGlwX2RldGVjdGAuLi4gdGhpcyBvbmUmIzM5O3MgaW1tZWRpYXRlbHkgbW9yZSBpbnRlcmVzdGluZy4gV2hhdCBraW5kIG9mIGRldGVjdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBzaW1wbGUgSUQgcmVhZCwgYSBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgc2lnbmF0dXJlIGNoZWNrLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBoYXJkd2FyZSBwcm9iaW5nIHNlcXVlbmNlPyBUaGUgYXBwcm9hY2ggc2VsZWN0ZWQgd291bGQgcmVhbGx5IHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSYjMzk7cyBlcnJvciBoYW5kbGluZy4gSWRlYWxseSwgaXQmIzM5O3Mgbm90IGp1c3QgYSBibGluZCBJRCByZWFkOyBpdCBpbmNvcnBvcmF0ZXMgc29tZSByZWR1bmRhbmN5LCBtYXliZSBhIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBvciBhIHNhbml0eSBjaGVjayBvbiByZXBvcnRlZCBjYXBhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgaGVyZS4gV2hhdCBoYXBwZW5zIGlmIHRoZSBjaGlwIGZhaWxzIHRvIGRldGVjdCBhdCBwb3dlci11cD8gV2hhdCYjMzk7cyB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtPyBSZXRyeSBsb2dpYz8gRXJyb3IgcmVwb3J0aW5nPyBJcyB0aGVyZSBhIHRpbWVvdXQsIGFuZCBob3cgaXMgdGhhdCBoYW5kbGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBib3RoIGZ1bmN0aW9ucyB0byBnYWluIGEgY2xlYXIgcGljdHVyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSYjMzk7cyByZXNpbGllbmNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIyNzpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyMjg6XHR7XG40MjI5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40MjMwOlx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG40MjMxOlx0XHR1OCBleHRtb2RlO1xuNDIzMjpcdFx0dTMyIGNoaXBpZDtcbjQyMzM6XHRcdHUzMiBtYWpvcjtcbjQyMzQ6XHRcdHUzMiBtb2RlO1xuNDIzNTpcdFx0dTMyIHZhbDtcbjQyMzY6XHRcdGludCByZXM7XG40MjM3Olx0XG40MjM4Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG40MjM5Olx0XHRpZiAocmVzKVxuNDI0MDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI0MTpcdFxuNDI0MjpcdFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG40MjQzOlx0XG40MjQ0Olx0XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG40MjQ1Olx0XHRcdGlmIChpbmZvLVx1MDAzZW1ham9yID09IG1ham9yKVxuNDI0NjpcdFx0XHRcdGJyZWFrO1xuNDI0NzpcdFx0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbjQyNDg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cJiMzNDssIGNoaXBpZCk7XG40MjQ5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI1MDpcdFx0fVxuNDI1MTpcdFxuNDI1MjpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFx1MDAyNm1vZGUpO1xuNDI1MzpcdFx0aWYgKHJlcylcbjQyNTQ6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTU6XHRcdHJlcyA9IHl0OTIxeF9lZGF0YV9yZWFkKHByaXYsIFlUOTIxWF9FREFUQV9FWFRNT0RFLCBcdTAwMjZleHRtb2RlKTtcbjQyNTY6XHRcdGlmIChyZXMpXG40MjU3Olx0XHRcdHJldHVybiByZXM7XG40MjU4Olx0XG40MjU5Olx0XHRmb3IgKDsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNjA6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlbW9kZSA9PSBtb2RlIFx1MDAyNlx1MDAyNlxuNDI2MTpcdFx0XHQgICAgaW5mby1cdTAwM2VleHRtb2RlID09IGV4dG1vZGUpXG40MjYyOlx0XHRcdFx0YnJlYWs7XG40MjYzOlx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI2NDpcdFx0XHRkZXZfZXJyKGRldixcbjQyNjU6XHRcdFx0XHRcJiMzNDtVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcblwmIzM0OyxcbjQyNjY6XHRcdFx0XHRjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI2NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjQyNjg6XHRcdH1cbjQyNjk6XHRcbjQyNzA6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfU1lTX0NMSywgXHUwMDI2dmFsKTtcbjQyNzE6XHRcdGlmIChyZXMpXG40MjcyOlx0XHRcdHJldHVybiByZXM7XG40MjczOlx0XHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRwcml2LVx1MDAzZWN5Y2xlX25zID0gaW5mby1cdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcbjQyNzY6XHRcdFx0YnJlYWs7XG40Mjc3Olx0XHRjYXNlIFlUOTIxWF9TWVNfQ0xLXzE0M006XG40Mjc4Olx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSA3O1xuNDI3OTpcdFx0XHRicmVhaztcbjQyODA6XHRcdGRlZmF1bHQ6XG40MjgxOlx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSA4O1xuNDI4MjpcdFx0fVxuNDI4MzpcdFxuNDI4NDpcdFx0LyogUHJpbnQgY2hpcGlkIGhlcmUgc2luY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4gbG93ZXIgMTYgYml0cyAqL1xuNDI4NTpcdFx0ZGV2X2luZm8oZGV2LFxuNDI4NjpcdFx0XHQgXCYjMzQ7TW90b3Jjb21tICVzIGV0aGVybmV0IHN3aXRjaCwgY2hpcGlkOiAweCV4LCBjaGlwbW9kZTogMHgleCAweCV4XFxuXCYjMzQ7LFxuNDI4NzpcdFx0XHQgaW5mby1cdTAwM2VuYW1lLCBjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xuNDI4ODpcdFxuNDI4OTpcdFx0cHJpdi1cdTAwM2VpbmZvID0gaW5mbztcbjQyOTA6XHRcbjQyOTE6XHRcdHJldHVybiAwO1xuNDI5MjpcdH1cbjQyOTM6XHRcbjQyOTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyOTU6XHR7XG40Mjk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40Mjk3Olx0XHR1MTYgZXRoX3BfdGFnO1xuNDI5ODpcdFx0dTMyIHZhbDtcbjQyOTk6XHRcdGludCByZXM7XG40MzAwOlx0XG40MzAxOlx0XHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XG40MzAyOlx0XHRpZiAocmVzKVxuNDMwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwNDpcdFxuNDMwNTpcdFx0LyogUmVzZXQgKi9cbjQzMDY6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG40MzA3Olx0XHRpZiAocmVzKVxuNDMwODpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwOTpcdFxuNDMxMDpcdFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xuNDMxMTpcdFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xuNDMxMjpcdFxuNDMxMzpcdFx0dmFsID0gMDtcbjQzMTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfUlNULCB+MCwgXHUwMDI2dmFsKTtcbjQzMTU6XHRcdGlmIChyZXMpXG40MzE2Olx0XHRcdHJldHVybiByZXM7XG40MzE3Olx0XG40MzE4Olx0XHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXG40MzE5Olx0XHQgKiBiZWZvcmUuXG40MzIwOlx0XHQgKi9cbjQzMjE6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuNDMyMjpcdFx0aWYgKHJlcylcbjQzMjM6XHRcdFx0cmV0dXJuIHJlcztcbjQzMjQ6XHRcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbjQzMjU6XHRcdGlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7XG40MzI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcXG5cJiMzNDssIGV0aF9wX3RhZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBZVDkyMVggQ2hpcCBEZXRlY3Rpb24gTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBoYW5kbGVzIHRoZSBgWVQ5MjFYX0NISVBfSURgLiBJdCBleHBlY3RzIGEgc3BlY2lmaWMgbWFqb3IgdmVyc2lvbiwgYW5kIGlmIGl0IGRvZXNuJiMzOTt0IGdldCBpdCwgaXQgdGhyb3dzIGEgYC1FTk9ERVZgIGVycm9yLiBTaW5jZSB0aGlzIGlzIGFuIE1ESU8gZGV2aWNlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHN5emthbGxlciBhbmQgaXRzIGFiaWxpdHkgdG8gZW11bGF0ZSByZWFkcyBhbmQgd3JpdGVzIHZpYSBNRElPLCBlaXRoZXIgdGhyb3VnaCBhIG1vY2sgZGV2aWNlIG9yIGJ5IGluamVjdGluZyBmYXVsdHMuCgpCdXQgaGVyZSYjMzk7cyB0aGUgc25hZy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJhbCogTURJTyBtb2NrIGRldmljZSB0aGF0IGNhbiBqdXN0IHNwaXQgb3V0IGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBtZGlvYnVzX3JlYWRgIHVubGVzcyBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgY29kZWQgZm9yLiBUaGVuIEkgdGhvdWdodCwgb2theSwgaXQgaGFzIHNwZWNpZmljIG1vY2tzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZrbXNgIGZvciBEUk0sIGB2aGNpYCBmb3IgVVNCLCBldGMuIEJ1dCBkb2VzIGl0IGhhdmUgKmFueXRoaW5nKiBmb3IgTURJTz8gSSBmb3VuZCBgbWRpby1tb2NrYCBhbmQgYG1kaW8tYmNtLXVuaW1hY2AsIHdoaWNoIGFyZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBub3RoaW5nIGdlbmVyaWMuIFRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIHNvbHV0aW9uLgoKTWF5YmUgSSBjb3VsZCBsZXZlcmFnZSBgYnBmYCB0byBpbnRlcmNlcHQgdGhlIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBkdW1teSBNRElPIGJ1cyBJJiMzOTttIG1pc3Npbmc/IEkgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSBhZ2Fpbi4gV2FpdCwgZGlkIHN5emthbGxlciBldmVyIGltcGxlbWVudCBgc3l6X21kaW9fcmVhZGAgb3IgYHN5el9tZGlvX3dyaXRlYD8gTm8sIEkgZG9uJiMzOTt0IHNlZSB0aG9zZSB0aGVyZS4KCkFscmlnaHQsIHdoYXQgaWYgdGhlIGRldmljZSBpcyBjcmVhdGVkIHRocm91Z2ggYSBkZXZpY2UgdHJlZT8gU3l6a2FsbGVyICpjYW4qIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcywgYnV0IHRoYXQgd291bGRuJiMzOTt0IGhlbHAgbWUgZW11bGF0ZSB0aGUgaGFyZHdhcmUmIzM5O3MgcmVzcG9uc2UsIGVzcGVjaWFsbHkgdGhlIGNydWNpYWwgYFlUOTIxWF9DSElQX0lEYCB2YWx1ZS4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIFRoZSBjb2RlIHJldmVhbHMgdGhhdCBgeXQ5MjF4X3JlZ19yZWFkYCB1c2VzIGBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkYC4gU28gdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQgYHl0OTIxeF9yZWdfb3BzX21kaW9gIGFjdHVhbGx5ICppcyouIFRoYXQgd2lsbCBiZSBrZXkuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfcmVnX29wc19tZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTIzNj1zdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb193cml0ZSh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHl0OTIxeF9yZWdfb3BzX21kaW8gPSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzMtXHQucmVhZCA9IHl0OTIxeF9yZWdfbWRpb19yZWFkLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3MTg9c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDczOC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Mzk6XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc0MC1cdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjY4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1ESU8gYnVzIHJlYWQuIFRoZSBmdW5jdGlvbiBgbWRpb2J1c19yZWFkYCBpcyB0aGUga2V5IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHJlc3BvbmRpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXQmIzM5O2xsIHJldHVybiBlaXRoZXIgYDB4ZmZmZmAgb3IgYC1FSU9gLiBJZiBpdCYjMzk7cyBgMHhmZmZmYCwgdGhlbiBgY2hpcGlkYCBpcyBnb2luZyB0byBiZSBgMHhmZmZmZmZmZmAuIENvbnNlcXVlbnRseSwgYG1ham9yYCBpcyBhbHNvIGdvaW5nIHRvIGJlIGAweGZmZmZgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIGB5dDkyMXhfaW5mb3NgIGhhbmRsZSBhIGAweGZmZmZgIHZhbHVlPyBJIGhpZ2hseSBkb3VidCBpdCYjMzk7cyBleHBlY3RpbmcgdGhhdCwgc28gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGhhcHBlbnMgd2hlbiBgbWFqb3JgIHRha2VzIHRoYXQgdmFsdWUgYW5kIGl0JiMzOTtzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGV4cGVjdGVkIHZhbHVlcyB3aXRoaW4gYHl0OTIxeF9pbmZvc2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGFuZCBzZWUgaG93IGB5dDkyMXhfaW5mb3NgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9pbmZvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05OT1zdHJ1Y3QgeXQ5MjF4X2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNDMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjQ0Olx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVx1MDAzZW5hbWU7IGluZm8mIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0NS1cdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjM5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggcmVsZXZhbnQgdGVjaG5pY2FsIGNvbnRleHRzLgoKKipBbmFseXppbmcgYHl0OTIxeF9pbmZvc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYHl0OTIxeF9pbmZvc2AuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVwcmVzZW50cyBzb21lIHNvcnQgb2Ygc3RydWN0dXJlZCBkYXRhIG9yIGNvbmZpZ3VyYXRpb24gZmlsZSByZWxhdGVkIHRvIHRoZSBgeXQ5MjF4YCBwcm9qZWN0IG9yIGNvbXBvbmVudC4gSXQgY291bGQgY29udGFpbiBhbnkgbnVtYmVyIG9mIHRoaW5ncyDigJMgc2V0dGluZ3MsIG1ldGFkYXRhLCBwYXJhbWV0ZXIgZGVmaW5pdGlvbnMsIHBlcmhhcHMgZXZlbiBwZXJmb3JtYW5jZSBtZXRyaWNzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgb2Ygd2hhdCB0aGF0IGB5dDkyMXhgIGlzIHVzZWQgZm9yLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQga2luZCBvZiBwcm9qZWN0IGlzIHRoaXM/IFdoYXQmIzM5O3MgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIHRoZXNlIGZpbGVzIHdpdGhpbiB0aGlzIGVjb3N5c3RlbT8gSXMgaXQgbGlrZWx5IFlBTUwsIEpTT04sIGEgY3VzdG9tIGZvcm1hdCwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBuYW1lICYjMzk7aW5mb3MmIzM5OyBpbXBsaWVzIHNvbWV0aGluZyBpbmZvcm1hdGlvbmFsIOKAkyBkZXRhaWxzLCBpZiB5b3Ugd2lsbCwgYnV0IEkgbmVlZCBhIHdob2xlIGxvdCBtb3JlIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpdHMgcmVsZXZhbmNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZGF0YS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiAxMTc6XHRcdHtcbiAxMTg6XHRcdFx0XCYjMzQ7WVQ5MjE1U0NcJiMzNDssIFlUOTIxNV9NQUpPUiwgMSwgMCxcbiAxMTk6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4gMTIwOlx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMjE6XHRcdH0sXG4gMTIyOlx0XHR7XG4gMTIzOlx0XHRcdFwmIzM0O1lUOTIxNVNcJiMzNDssIFlUOTIxNV9NQUpPUiwgMiwgMCxcbiAxMjQ6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4gMTI1Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMjY6XHRcdH0sXG4gMTI3Olx0XHR7XG4gMTI4Olx0XHRcdFwmIzM0O1lUOTIxNVJCXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDMsIDAsXG4gMTI5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxuIDEzMDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gMTMxOlx0XHR9LFxuIDEzMjpcdFx0e1xuIDEzMzpcdFx0XHRcJiMzNDtZVDkyMTROQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAyLFxuIDEzNDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4gMTM1Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcbiAxMzY6XHRcdH0sXG4gMTM3Olx0XHR7XG4gMTM4Olx0XHRcdFwmIzM0O1lUOTIxM05CXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDMsIDMsXG4gMTM5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcbiAxNDA6XHRcdFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxuIDE0MTpcdFx0fSxcbiAxNDI6XHRcdHtcbiAxNDM6XHRcdFx0XCYjMzQ7WVQ5MjE4TlwmIzM0OywgWVQ5MjE4X01BSk9SLCAwLCAwLFxuIDE0NDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig4KSxcbiAxNDU6XHRcdFx0MCxcbiAxNDY6XHRcdH0sXG4gMTQ3Olx0XHR7XG4gMTQ4Olx0XHRcdFwmIzM0O1lUOTIxOE1CXCYjMzQ7LCBZVDkyMThfTUFKT1IsIDEsIDAsXG4gMTQ5Olx0XHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIDE1MDpcdFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gMTUxOlx0XHR9LFxuIDE1MjpcdFx0e31cbiAxNTM6XHR9O1xuIDE1NDpcdFxuIDE1NTpcdCNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiAxNTY6XHRcbiAxNTc6XHQvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuIDE1ODpcdCAqXG4gMTU5Olx0ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuIDE2MDpcdCAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiAxNjE6XHQgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbiAxNjI6XHQgKi9cbiAxNjM6XHQjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuIDE2NDpcdFxuIDE2NTpcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBZVDkyMTUvWVQ5MjE4IHNpdHVhdGlvbi4gRmlyc3QsIHRoZSBgbWFqb3JgIHZlcnNpb24gbmVlZHMgdG8gYmUgZWl0aGVyIGBZVDkyMTVfTUFKT1JgIG9yIGBZVDkyMThfTUFKT1JgLiBOb3csIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlLCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCB3aWxsIGluZXZpdGFibHkgZmFpbC4gQW5kIGlmIHRoYXQgZmFpbHMsIGB5dDkyMXhfY2hpcF9yZXNldGAgZmFpbHMgdG9vLiBUaGlzIGZhaWx1cmUgY2FzY2FkZXMg4oCTIGB5dDkyMXhfZHNhX3NldHVwYCBnb2VzIGRvd24gd2l0aCBpdCwgbGVhZGluZyB0byBhIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBmYWlsdXJlLCBhbmQgdWx0aW1hdGVseSwgdGhlIGRyZWFkZWQgYHl0OTIxeF9tZGlvX3Byb2JlYCBmYWlsdXJlLiBJdCYjMzk7cyBhIGNoYWluIHJlYWN0aW9uLgoKVGhlIHByb2JsZW0/IEluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgdXNlcywgb3IgZXZlbiBqdXN0IGluIFFFTVUsIHRoZSBkZXZpY2Ugd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUgYmVjYXVzZSBpdCYjMzk7cyBleHBlY3RpbmcgYSBwaHlzaWNhbCBoYXJkd2FyZSByZXNwb25zZSB0aGF0IGlzbiYjMzk7dCB0aGVyZS4KCkhvbGQgb24sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiBNRElPIGVtdWxhdG9yIHRoYXQgY2FuIHJldHVybiAqc3BlY2lmaWMqIGBZVDkyMVhfQ0hJUF9JRGAgdmFsdWVzLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG1pc3NpbmcuIEkgd2FzIGhvcGluZyBJIGNvdWxkIHNvbWVob3cgZ2V0IHRvIGB5dDkyMXhfbGVkc19zZXR1cGAsIGJ1dCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB5dDkyMXhfZHNhX3NldHVwYCwgKmFmdGVyKiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfc2V0dXBgLiBTbywgd2l0aCB0aGUgZmFpbHVyZSBmcm9tIHRoZSBpbml0aWFsIGhhcmR3YXJlIGRldGVjdGlvbiwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBMRUQgc2V0dXAgY29kZS4KCkxldCYjMzk7cyBkb3VibGUgY2hlY2suIENhbiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgYmUgY2FsbGVkIGFueXdoZXJlIGVsc2U/IE5vcGUuIE9ubHkgYHl0OTIxeF9tZGlvX3Byb2JlYCBjYWxscyBpdC4gT2theSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgTEVELXJlbGF0ZWQgY29kZT8gVGhlIGNvZGUgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCwgd2hpY2ggdXNlcyBgZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YCB0byByZWdpc3RlciB0aGUgTEVEcy4gQnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFuZCBgeXQ5MjF4X2xlZHNfc2V0dXBgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgeXQ5MjF4X2RzYV9zZXR1cGAuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogU2luY2UgYHl0OTIxeF9jaGlwX2RldGVjdGAgZmFpbHMgZWFybHksIHRoZSB3aG9sZSBgeXQ5MjF4X2RzYV9zZXR1cGAgZnVuY3Rpb24gZmFpbHMgdG9vLCBhbmQgdGhlIExFRCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoaXMuCgpJIHdhcyBob3BpbmcgdGhlcmUgd2FzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgdGhhdCBTeXprYWxsZXIgKmNvdWxkKiBsZXZlcmFnZSB0byBpbmplY3QgYXJiaXRyYXJ5IHJlc3BvbnNlcy4gVGhlcmUmIzM5O3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2suY2A/IE5vIHN1Y2ggbHVjay4gVGhlcmUgYXJlIHZhcmlvdXMgTURJTyBkcml2ZXJzIGxpa2UgYG1kaW8tZ3Bpby5jYCwgYG1kaW8tbXV4LmNgLCBhbmQgc28gb24uCgpTeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tZ3Bpb2AgdG8gY29uc3RydWN0IGFuIE1ESU8gYnVzLiBIb3dldmVyLCBpdCAqY2Fubm90KiBtb2NrIHRoZSByZXNwb25zZXMgb2YgYSBzcGVjaWZpYyBQSFkvc3dpdGNoIGNoaXAgdW5sZXNzIGl0JiMzOTtzIGVtdWxhdGVkIGluIFFFTVUuIEFuZCBRRU1VLCBhcyBmYXIgYXMgSSBrbm93LCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBNb3RvcmNvbW0gWVQ5MjE1LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgaXMgdXR0ZXJseSB1bnJlYWNoYWJsZSBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gbG9jayB0aGF0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gdGhlIERTQSBEcml2ZXI6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IE1ESU8gZW11bGF0aW9uIHRoYXQgY291bGQgaGVscC4gSSBrbm93IFFFTVUgZG9lcyBoYXZlIHNvbWUgTURJTyBlbXVsYXRpb24sIGJ1dCBpdCYjMzk7cyBzcGVjaWZpYyB0byBjZXJ0YWluIE1BQ3MgYW5kIFBIWXMsIGFuZCBjcml0aWNhbGx5LCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIERTQSBzd2l0Y2hlcyBvbiB0aGUgTURJTyBidXMuIFNvLCB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIOKAkyBubyBkaWNlIHRoZXJlLiBBbmQgdGhlIHN5emthbGxlciBlbnZpcm9ubWVudCwgYXQgbGVhc3QgYXMgSSB1bmRlcnN0YW5kIGl0LCBpc24mIzM5O3Qgc2V0IHVwIHRvIGVtdWxhdGUgdGhpcyBzd2l0Y2ggZWl0aGVyLgoKVGhlIG5leHQgcXVlc3Rpb24gd2FzIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIGxldmVyYWdlIGVCUEYgdG8gbW9jayB0aGUgYG1kaW9idXNfcmVhZGAgY2FsbHMsIGVmZmVjdGl2ZWx5IGJ5cGFzc2luZyB0aGUgTURJTyBzZXR1cC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgZUJQRiBmb3IgdGhhdCBraW5kIG9mIGhhcmR3YXJlIHJlZ2lzdGVyIG1vY2tpbmcuIEl0IHJlbGllcyBvbiBwcmUtZXhpc3Rpbmcga2VybmVsIGludGVyZmFjZXMgb3IgUUVNVSYjMzk7cyBidWlsdC1pbiBlbXVsYXRpb24sIGFuZCBzaW5jZSB0aGVyZSYjMzk7cyBubyBgbWRpb3NpbWAgb3Igc2ltaWxhciBoZXJlLCB0aGF0IHBhdGggaXMgYmxvY2tlZC4gVGhhdCBzZWFscyBpdDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgd2VudCBiYWNrIGFuZCBleGFtaW5lZCBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggaW1wYWN0cyBgbGVkcy5jYCBhbmQgYHNtaS5jYCB3aXRoaW4gdGhlIERTQSBkcml2ZXIuIGBzbWkuY2AgaGFzIHJlZ2lzdGVyIHJlYWQvd3JpdGUgd3JhcHBlcnMsIGFuZCBgbGVkcy5jYCBjb250YWlucyBMRUQtcmVsYXRlZCBvcGVyYXRpb25zLiBIb3dldmVyLCBib3RoIG9mIHRoZXNlIHJlcXVpcmUgdGhlIGB5dDkyMXhfcHJpdmAgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSwgY3JpdGljYWxseSwgaXMgYWxsb2NhdGVkIHdpdGhpbiBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJZiB0aGF0IGZ1bmN0aW9uIGZhaWxzLCB0aGUgYHByaXZgIHN0cnVjdHVyZSBpcyBmcmVlZCwgYW5kIG5vIExFRHMgYXJlIHJlZ2lzdGVyZWQuIFRoZXJlZm9yZSwgZnVuY3Rpb25zIGxpa2UgYHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nYCBhbmQgYHl0OTIxeF9jbGVkX2JsaW5rX3NldGAsIGFyZSBuZXZlciBnb2luZyB0byBiZSBjYWxsZWQuIEl0JiMzOTtzIHVucmVhY2hhYmxlIGNvZGUuCgpOb3csIGEgZmluYWwsIHF1aWNrIGNoZWNrLiBXaGF0IGlmIGB5dDkyMXhfcmVnX3JlYWRgIHJldHVybnMgMD8gQ291bGQgYHl0OTIxeF9jaGlwX2RldGVjdGAgc3VjY2VlZCB1bmRlciB0aG9zZSBjaXJjdW1zdGFuY2VzPyBJZiBgeXQ5MjF4X3JlZ19yZWFkYCBpcyAwLCB0aGVuIHRoZSBgY2hpcGlkYCB2YWx1ZSB3aWxsIGJlIDAuIFNvIGBtYWpvcmAgd291bGQgYmUgc2V0IHRvIHdoYXRldmVyIGBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIDApYCBldmFsdWF0ZXMgdG8uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgWVQ5MjFYX0NISVBfSURfTUFKT1JgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtZVDkyMVhfQ0hJUF9JRF9NQUpPUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI0MjpcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC0yOS0jZGVmaW5lIFlUOTIxWF9DSElQX0lEXHRcdFx0MHg4MDAwOFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6MzA6I2RlZmluZSAgWVQ5MjFYX0NISVBfSURfTUFKT1JcdFx0XHRHRU5NQVNLKDMxLCAxNilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTMxLSNkZWZpbmUgWVQ5MjFYX0VYVF9DUFVfUE9SVFx0XHQweDgwMDBjXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Mjg2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENoaXAgSWRlbnRpZmljYXRpb24gYW5kIE1ham9yIFZlcnNpb24gTnVtYmVycyoqCgpPa2F5LCBzbyBpZiB0aGUgYGNoaXBpZGAgdmFsdWUgaXMgMCwgdGhlIGBtYWpvcmAgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGFsc28gYmUgMC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcyBkYXRhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgYHl0OTIxeF9pbmZvc2AgZGF0YSBzdHJ1Y3R1cmUgYWdhaW4uIEkgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIGRlZmluaXRpb25zIG9mIGBZVDkyMTVfTUFKT1JgIGFuZCBgWVQ5MjE4X01BSk9SYCBiZWNhdXNlIHRoZXNlIGFyZSBrZXkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGNoaXBpZGAsIHRoZSBgbWFqb3JgIHZlcnNpb24sIGFuZCB0aGVzZSBjb25zdGFudHMgaXMgcHJvYmFibHkgY3JpdGljYWwgZm9yIHByb3BlciBkZXZpY2UgaWRlbnRpZmljYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1lUOTIxNV9NQUpPUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY9c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cdHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODpcdFx0XCYjMzQ7WVQ5MjE1U0NcJiMzNDssIFlUOTIxNV9NQUpPUiwgMSwgMCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOS1cdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTIyLVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTIzOlx0XHRcJiMzNDtZVDkyMTVTXCYjMzQ7LCBZVDkyMTVfTUFKT1IsIDIsIDAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjQtXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEyNy1cdHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyODpcdFx0XCYjMzQ7WVQ5MjE1UkJcJiMzNDssIFlUOTIxNV9NQUpPUiwgMywgMCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEyOS1cdFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTMyLVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTMzOlx0XHRcJiMzNDtZVDkyMTROQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAyLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM0LVx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM3LVx0e1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTM4Olx0XHRcJiMzNDtZVDkyMTNOQlwmIzM0OywgWVQ5MjE1X01BSk9SLCAzLCAzLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM5LVx0XHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3NC1cdGNhc2UgMDpcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNzU6XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3Ni1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg9ODA4PWVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTgzNy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oOjgzODojZGVmaW5lIFlUOTIxNV9NQUpPUlx0MHg5MDAyXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MzktI2RlZmluZSBZVDkyMThfTUFKT1JcdDB4OTAwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM1OQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFlUOTIxNV9NQUpPUmAgaXMgZGVmaW5lZCBhcyBgMHg5MDAyYCwgYW5kIGBZVDkyMThfTUFKT1JgIGlzIGRlZmluZWQgYXMgYDB4OTAwMWAuIE5vdywgaWYgdGhlIGBjaGlwaWRgIHZhcmlhYmxlIGhhcHBlbnMgdG8gYmUgemVybyBvciBgMHhmZmZmZmZmZmAsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYG1ham9yYCB2YWx1ZSB3aWxsIGJlIGVpdGhlciB6ZXJvIG9yIGAweGZmZmZgLiBOZWl0aGVyIG9mIHRob3NlIG1ham9yIHZhbHVlcyB3aWxsIG1hdGNoIGVpdGhlciBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzIChgMHg5MDAyYCBvciBgMHg5MDAxYCkuIFRoaXMgbWVhbnMgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCBpbiB0aGlzIHNjZW5hcmlvLgoKQ29uc2VxdWVudGx5LCBzaW5jZSB0aGUgY2hpcCBkZXRlY3Rpb24gZmFpbHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBuZXZlciBleGVjdXRlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIElmIHRoZSBwcm9iZSBmdW5jdGlvbiBuZXZlciBydW5zLCB0aGVuIHRoZSBzdWJzZXF1ZW50IExFRCBjb2RlLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIHJlbGllcyBvbiBhIHN1Y2Nlc3NmdWwgcHJvYmUsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEl04oCZcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgaW4gdGhpcyBzZXR1cC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGFueSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgcGh5c2ljYWwgaGFyZHdhcmUg4oCTIHNwZWNpZmljYWxseSB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggc3dpdGNoIGNoaXAg4oCTIGZvciBzdWNjZXNzZnVsIHByb2JpbmcuIFFFTVUsIG9yIGFueSB2aXJ0dWFsaXphdGlvbiBzZXR1cCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdCBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLiBTbywgYW55IGF0dGVtcHQgdG8gZnV6eiB0aGlzIGNvZGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgZ29pbmcgdG8gaGl0IGEgZGVhZCBlbmQsIG1ha2luZyBpdCBhIHdhc3RlIG9mIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni4xMDEzMTE1ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2OTgzNDI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIxOCBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBvbiB0aGUgTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCByZWdpc3RlciBhbmQgZXhwZWN0cyBzcGVjaWZpYyB2YWx1ZXMgbGlrZSAweDkwMDIgb3IgMHg5MDAxKS4gU2luY2UgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIFFFTVUgb3IgYSBnZW5lcmljIE1ESU8gbW9jayBkZXZpY2UgaW4gdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBuZXdseSBhZGRlZCBMRUQgY2xhc3NkZXYgb3BlcmF0aW9ucyBhbmQgU01JIHJlYWQvd3JpdGUgd3JhcHBlcnMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni4xMDEzMTgzNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTU2NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5MjM2MjcyNDY4NmIwZTdjOTZhMjFmNmM3ZTY5OWY5MGQ5OWRkNTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNDo0Mjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXFx0XFx0MTBcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbiBcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMmU2OGUyZjIxZDY3ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbkBAIC0wLDAgKzEsNjE1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VsZWRzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVxcdTAwM2Vwb3J0KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXFx1MDAzZWluZGV4XSlcXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbitcXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxcbit7XFxuK1xcdHN3aXRjaCAoZ3JvdXApIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Km9ucCA9ICh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBjdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpkdXR5cClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5O1xcbitcXG4rXFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcXG4rXFx0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGZvciAoOyBjeWNsZSBcXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZT0gMSwgY3ljbGUgXFx1MDAzZVxcdTAwM2U9IDEpXFxuK1xcdFxcdGlmIChjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdCpjeWNsZXAgPSBjeWNsZTtcXG4rXFxuK1xcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcXG4rXFx0XFx0XFx0XFx0ICAgICAob24gXFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXFxuK1xcdFxcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcXG4rXFx0XFx0XFx0ZHV0eSA9IGR1dHlzW2ldO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRpZiAob24gXFx1MDAzZSBvZmYpXFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xcbitcXHQqZHV0eXAgPSBkdXR5O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgY2hhciBkdXR5O1xcbitcXHRib29sIHVzZV9jeWNsZTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKCEqb25wIFxcdTAwMjZcXHUwMDI2ICEqb2ZmcCkge1xcbitcXHRcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXFxuK1xcdFxcdFxcdGlmIChpICE9IGdyb3VwIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpIHtcXG4rXFx0XFx0XFx0XFx0ZHV0eSA9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIGNoYW5nZV9jeWNsZTtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfZHV0eTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcXHUwMDI2Y3ljbGUsIFxcdTAwMjZkdXR5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGN5Y2xlIFxcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBjeWNsZSAhPSBwcC1cXHUwMDNlbGVkX2N5Y2xlO1xcbitcXHRcXHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxcbitcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xcbitcXHRcXHRcXHQgICAgIGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXFx1MDAzZWxlZHNbaV0pXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAoKGNoYW5nZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2N5Y2xlKSB8fFxcbitcXHRcXHRcXHRcXHQgICAgKGNoYW5nZV9kdXR5IFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0aWYgKHZhbCAhPSBjdHJsKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0c3dpdGNoIChkdXR5IFxcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChkdXR5IFxcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRpZiAodXNlX2N5Y2xlKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XFxuK1xcdH1cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcXG4rXFxuK1xcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XFxuK1xcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XFxuK1xcdFtUUklHR0VSX05FVERFVl9MSU5LXVxcdFxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxcbitcXHRcXHRcXHRcXHRcXHQgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTSxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRixcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXFxuK1xcdFtUUklHR0VSX05FVERFVl9UWF1cXHRcXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfUlhdXFx0XFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sXFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKVxcbitcXHRcXHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPVxcbitcXHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XFxuK1xcdFxcdCpmbGFnc3AgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0KmZsYWdzcCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgX19UUklHR0VSX05FVERFVl9NQVg7IGkrKykge1xcbitcXHRcXHR1MzIgbWFzayA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKG1hc2sgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDI2IG1hc2spID09IG1hc2spXFxuK1xcdFxcdFxcdCpmbGFnc3AgfD0gQklUKGkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gMDtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7XFxuK1xcdFxcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdFxcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcXG4rXFx0aWYgKGdyb3VwID09IDIpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdH1cXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbWFzaywgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXFxuK1xcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZGVsYXlfb24sXFxuK1xcdFxcdFxcdFxcdCAgIGRlbGF5X29mZik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXG4rXFx0ZHAgPSBkc2FfdG9fcG9ydChcXHUwMDI2cHJpdi1cXHUwMDNlZHMsIHBwLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghZHAgfHwgIWRwLVxcdTAwM2V1c2VyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZkcC1cXHUwMDNldXNlci1cXHUwMDNlZGV2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcbitcXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuK1xcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGlmIChncm91cCBcXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAocHAtXFx1MDAzZWxlZHNbZ3JvdXBdKVxcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFxuK1xcdGZvcmNlX2hpZ2ggPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXFxcImFjdGl2ZS1oaWdoXFxcIik7XFxuK1xcdGZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWxvd1xcXCIpO1xcbitcXHRpZiAoZm9yY2VfaGlnaCBcXHUwMDI2XFx1MDAyNiBmb3JjZV9sb3cpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgZ3JvdXApO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xcbitcXG4rXFx0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFsZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRsZWQtXFx1MDAzZXBvcnQgPSBwcDtcXG4rXFx0bGVkLVxcdTAwM2Vncm91cCA9IGdyb3VwO1xcbitcXG4rXFx0c3RhdGUgPSBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldChmd25vZGUpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XFxuK1xcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcXG4rXFx0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFxcdTAwMjZvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGxlZF9jZGV2ID0gXFx1MDAyNmxlZC1cXHUwMDNlY2RldjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3MgPSBvbjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXFxcIm5ldGRldlxcXCI7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcXFwiLSV1OiUwMmQ6JTAydVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xcbitcXHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xcbitcXHRcXHQuZndub2RlID0gZndub2RlLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAocG9sYXJpdHkpIHtcXG4rXFx0XFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XFxuK1xcbitcXHRcXHQqaW52X21hc2twIHw9IGJpdDtcXG4rXFx0XFx0aWYgKHBvbGFyaXR5IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Kmludl9jdHJscCB8PSBiaXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZClcXG4rXFx0XFx0XFx0XFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFxcdTAwMjZsZWQtXFx1MDAzZWNkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0KyspIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mjo0Ni41Mzc4MTc2MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTI2MTgzMDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTkyMzYyNzI0Njg2YjBlN2M5NmEyMWY2YzdlNjk5ZjkwZDk5ZGQ1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTQ6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCJcbiBcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIlxuK1xuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wiXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCArMSw1IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInl0OTIxeC5oXCJcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwiLCByZXMpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXHRcdDEwXG4rXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyZTY4ZTJmMjFkNjdlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2MTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS11cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8XG4rXHRcdFx0XHRcdCAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuK1x0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNLFxuK1x0W1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuK1x0W1RSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbitcdFtUUklHR0VSX05FVERFVl9UWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWCxcbitcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbit9O1xuK1xuK3N0YXRpYyBib29sXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuK1x0XHRcdFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4rXHRcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSsrKSB7XG4rXHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXG4rXHRcdGlmIChtYXNrIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAyNiBtYXNrKSA9PSBtYXNrKVxuK1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdHUzMiBhZGRyO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gMDtcbitcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7XG4rXHRcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0XHRjdHJsIHw9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1x0fVxuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4rXG4rXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XG4rXHRpZiAoZ3JvdXAgPT0gMikge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdH1cbitcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRpZiAoZ3JvdXAgIT0gMikge1xuK1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4rXHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxuK1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxuK1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1xuK1x0ZHAgPSBkc2FfdG9fcG9ydChcdTAwMjZwcml2LVx1MDAzZWRzLCBwcC1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBcdTAwMjZkcC1cdTAwM2V1c2VyLVx1MDAzZWRldjtcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXG4rXHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCB1MzIgKmludl9tYXNrcCwgdTMyICppbnZfY3RybHApXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbitcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XG4rXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbitcdGJvb2wgZm9yY2VfaGlnaDtcbitcdGJvb2wgZm9yY2VfbG93O1xuK1x0aW50IHBvbGFyaXR5O1xuK1x0dTMyIGdyb3VwO1xuK1x0Ym9vbCBvbjtcbitcdGludCByZXM7XG4rXG4rXHRpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiTm8gTEVEcyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcInJlZ1wiLCBcdTAwMjZncm91cCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKGdyb3VwIFx1MDAzZT0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxuXCIsIGdyb3VwLCBwb3J0KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAocHAtXHUwMDNlbGVkc1tncm91cF0pXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRwb3J0LCBncm91cCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuK1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4rXG4rXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBsZWQ7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0ZGVmYXVsdDpcbitcdFx0b24gPSBzdGF0ZSA9PSBMRURTX0RFRlNUQVRFX09OO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKHBvbGFyaXR5KSB7XG4rXHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuK1xuK1x0XHQqaW52X21hc2twIHw9IGJpdDtcbitcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdCppbnZfY3RybHAgfD0gYml0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdFx0aWYgKGxlZClcbitcdFx0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdH1cbitcdH1cbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcbitcdFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4rXG4rXHRcdFx0aWYgKGxlZCkge1xuK1x0XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgaW52X2N0cmwgPSAwO1xuK1x0dTMyIGludl9tYXNrID0gMDtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuK1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxlZHNfbnA7XG4rXHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4rXG4rXHRcdGlmICghZHAtXHUwMDNlZG4pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cdTAwM2VkbiwgXCJsZWRzXCIpO1xuK1x0XHRpZiAoIWxlZHNfbnApXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkge1xuK1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbitcdFx0XHRcdFx0ICAgICAgIG9mX2Z3bm9kZV9oYW5kbGUobGVkX25wKSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmludl9tYXNrLCBcdTAwMjZpbnZfY3RybCk7XG4rXHRcdFx0aWYgKHJlcykge1xuK1x0XHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZW5kO1xuK1xuK1x0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cbitcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4rXHQgKi9cbitcdGlmIChpbnZfbWFzaylcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuK1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbitcbitlbmQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbitcdHJldHVybiByZXM7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjczNzNhMTkwYzhmNGJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICsxLDEyMSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX0xFRFNfSFxuKyNkZWZpbmUgX1lUX0xFRFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rXG4rXHRib29sIHVzZV9jeWNsZToxO1xuK1x0Ym9vbCB1c2VfZHV0eToxO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXG4rdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbitcbisjZWxzZVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgKzEsMTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJzbWkuaFwiXG4rXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuK1x0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuK1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4rXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQqdmFscCA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuK3tcbitcdGludCByZXM7XG4rXHR1MzIgdjtcbitcdHUzMiB1O1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0dSA9IHY7XG4rXHR1IFx1MDAyNj0gfm1hc2s7XG4rXHR1IHw9IHZhbDtcbitcdGlmICh1ID09IHYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbitcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0Y29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdHUgfD0gdmFsc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0aWYgKHUgIT0gdnNbaV0pXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXG4rXHRcdHZzW2ldID0gdTtcbitcdH1cbitcbitcdGlmICghY2hhbmdlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuQEAgLTAsMCArMSw4OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX1NNSV9IXG4rI2RlZmluZSBfWVRfU01JX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuK1xuK3N0cnVjdCB5dDkyMXhfcHJpdjtcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbitpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLFxuK1x0XHRcdCAgIHUzMiB2YWwpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbit9XG4rXG4rLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuKyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbisgKlxuKyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4rICovXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4re1xuK1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4rXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbitcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4rXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuK31cbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQyOjQ2LjUzNzgxOTQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQ1ODY1NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFlUOTIxNSBMRUQgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gSXQncyBtb3ZpbmcgdGhlIGV4aXN0aW5nIGRyaXZlciBjb2RlLCBgeXQ5MjF4LmNgLCBhbmQgc3BsaXR0aW5nIGl0IGludG8gYGNoaXAuY2AsIGBsZWRzLmNgLCBhbmQgYHNtaS5jYCB3aXRoaW4gYSBgbW90b3Jjb21tYCBzdWJkaXJlY3RvcnkgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYS9gLiBBIG5ldyBjb25maWcgb3B0aW9uLCBgTkVUX0RTQV9ZVDkyMVhfTEVEU2AsIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBoYXJkd2FyZS1kZXBlbmRlbnQsIGVzcGVjaWFsbHkgRFNBIHN3aXRjaGVzLlxuXG5JIGtub3cgUUVNVSBkb2Vzbid0IHR5cGljYWxseSBoYXZlIGhhcmR3YXJlIGRyaXZlcnMgdW5sZXNzIHRoZXkncmUgZW11bGF0ZWQuIFNvLCBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIGZvciB0aGUgWVQ5MjE1IGluIFFFTVU/IE9yIGlzIHRoaXMgcHVyZWx5IGEgaGFyZHdhcmUgdGhpbmc/IERTQSBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFyZSB1c3VhbGx5IGZvciBlbWJlZGRlZCBzd2l0Y2hlcywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSB0aGluZ3MgYXJlIGluc3RhbnRpYXRlZC4gQ2FuIHRoZXkgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBvciBtYXliZSB0aHJvdWdoIEkyQyBvciBNRElPIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudD8gV2FpdCwgc3l6a2FsbGVyICpjYW4qIGluc3RhbnRpYXRlIEkyQy9NRElPIGRldmljZXMsIGlmIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBvciBldmVuIHRocm91Z2ggZHVtbXkgZGV2aWNlcy4gSWYgaXQncyBhIGhhcmR3YXJlIGRyaXZlciB0aG91Z2gsIHJlYWNoaW5nIGl0IGlzIGdvaW5nIHRvIGNvbWUgZG93biB0byBtb2NraW5nIHRoZSBNRElPIGJ1cy4gSGFuZyBvbiwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgTURJTy9JMkMgZnV6emluZyBzdXBwb3J0LiBJIHNob3VsZCBjaGVjayBpZiBgTkVUX0RTQV9ZVDkyMVhgIGlzIHNvbWV0aGluZyB3ZSBmdXp6LlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgbGVkcy5jYCwgYWRkaW5nIGZ1bmN0aW9ucyBsaWtlIGB5dDkyMXhfbGVkX3NldHVwYCwgYHl0OTIxeF9sZWRfZm9yY2Vfc2V0YCwgYHl0OTIxeF9sZWRfYmxpbmtfc2V0YCwgYW5kIGB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0YC4gVGhlc2UgYXJlIExFRCBjbGFzc2RldiBvcGVyYXRpb25zLiBDYW4gdGhlc2UgYmUgcmVhY2hlZD8gWWVzLCBkZWZpbml0ZWx5IHZpYSBzeXNmcyEgQnV0IHRoZSBjYXRjaCBpcywgdGhlIGRldmljZSBuZWVkcyB0byBiZSBwcm9iZWQgZmlyc3QuIFByb2JpbmcgYSBEU0Egc3dpdGNo4oCmIHRoYXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LiBXZSdsbCBuZWVkIGFuIE1ESU8gYnVzIGFuZCBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHNldHVwLiBEb2VzIHN5emthbGxlciBzdXBwb3J0IERTQSBzd2l0Y2ggcHJvYmluZz9cblxuVHlwaWNhbGx5LCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbmVlZCB0byByZWFkIElEIHJlZ2lzdGVycywgd2lsbCBmYWlsIHRvIHByb2JlIHVubGVzcyB0aGUgYWN0dWFsIGhhcmR3YXJlIGlzIHByZXNlbnQgb3IgZW11bGF0ZWQuIEkgbmVlZCB0byBjaGVjayBpZiBgeXQ5MjF4X21kaW9fcmVhZGAgb3IgYW55dGhpbmcgc2ltaWxhciByZWFkcyBhIGhhcmR3YXJlIElELiBMZXQncyBkbyBhIGtlcm5lbCBzZWFyY2ggZm9yIGB5dDkyMXhgIHRvIHNlZSBleGFjdGx5IGhvdyBpdCBwcm9iZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGV2ZW4gZ2V0IHRoaXMgdGhpbmcgb2ZmIHRoZSBncm91bmQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQyOjU3LjY4MzY4NzI4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5MjI5MDk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjAwLjQ3MjkyMjc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMzU4ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNRElPIFByb2JlIElzc3VlKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIHByb2JsZW0gcmVsYXRlZCB0byBhbiBNRElPIGludGVyZmFjZSBwcm9iZS4gSSdtIHRoaW5raW5nIHRoZSBmdW5jdGlvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiByZWxhdGVkIHRvIHRoYXQgcGFydGljdWxhciBjaGlwc2V0LiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBkaXNjb3ZlcnkgaXNzdWUgd2l0aGluIHRoZSBNRElPIGZyYW1ld29yay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIG9mdGVuIHdoZXJlIHRoaW5ncyBnbyBzaWRld2F5cyDigJMgdGltaW5nIHByb2JsZW1zLCBpbmNvcnJlY3QgcmVnaXN0ZXIgYWNjZXNzZXMsIG9yIHBvdGVudGlhbGx5IGEgZHJpdmVyLXNwZWNpZmljIGJ1ZyBpbiB0aGUgcHJvYmUgcm91dGluZSBpdHNlbGYuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIGFuZCBsb2dzLCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIHJvb3QgY2F1c2UsIGFuZCBiZWdpbiB0ZXN0aW5nIGZvciBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MDYuOTk2NTEzMTgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Njg2Mzk5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmUuKnl0OTIxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoxMC42NjUxNTg2NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMyMzA0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHl0OTIxeF9tZGlvX3Byb2JlYDpcblxuKipBbmFseXppbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYHl0OTIxeF9tZGlvX3Byb2JlYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byAqZG8qLiBXaGF0J3MgaXRzIHB1cnBvc2U/IEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBpbnRlcmZhY2UsIGFuZCBzcGVjaWZpY2FsbHksIG9uZSBhc3NvY2lhdGVkIHdpdGggYSBZVDkyMXggZGV2aWNlLiBcIlByb2JlXCIgaXMgYSBjb21tb24gdGVybSwgc28gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiB0aGUgZGV2aWNlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlzY292ZXJzIGFuZCBzZXRzIHVwIHRoZSBNRElPIGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIFlUOTIxeCBjaGlwc2V0LiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaG93IGl0IGNvbmZpZ3VyZXMgdGhlIE1ESU8gYnVzLCBhbmQgd2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgaXQncyBsaWtlbHkgdG8gYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkcml2ZXIncyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBtYW5hZ2luZyB0aGlzIE1ESU8gY29tcG9uZW50LiBBcmUgdGhlcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMsIHdyaXRlcywgb3IgZGVsYXlzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGFkZHJlc3NlZD8gQW5kIHdoYXQncyB0aGUgYnJvYWRlciBjb250ZXh0PyBXaGF0IG90aGVyIGRldmljZXMgd2lsbCBpdCBpbnRlcmFjdCB3aXRoPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBhIHBsYXRmb3JtIGRldmljZSBvciByZXNvdXJjZSBhbGxvY2F0aW9uLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlIHRyZWUgb3Igc2ltaWxhciBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4OTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoxNS41OTc0NjQ4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MDA6XFx0XFx0LmdldF9zdHJpbmdzXFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zdHJpbmdzLFxcbjQ2MDE6XFx0XFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzLFxcbjQ2MDI6XFx0XFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50LFxcbjQ2MDM6XFx0XFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzLFxcbjQ2MDQ6XFx0XFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuNDYwNTpcXHRcXHQuZ2V0X3Jtb25fc3RhdHNcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMsXFxuNDYwNjpcXHRcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IHl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQsXFxuNDYwNzpcXHRcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSB5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyxcXG40NjA4OlxcdFxcdC8qIGVlZSAqL1xcbjQ2MDk6XFx0XFx0LnN1cHBvcnRfZWVlXFx0XFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxcbjQ2MTA6XFx0XFx0LnNldF9tYWNfZWVlXFx0XFx0PSB5dDkyMXhfZHNhX3NldF9tYWNfZWVlLFxcbjQ2MTE6XFx0XFx0LyogbXR1ICovXFxuNDYxMjpcXHRcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSB5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dSxcXG40NjEzOlxcdFxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1LFxcbjQ2MTQ6XFx0XFx0LyogcmF0ZSAqL1xcbjQ2MTU6XFx0XFx0LnBvcnRfcG9saWNlcl9kZWxcXHQ9IHl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2RlbCxcXG40NjE2OlxcdFxcdC5wb3J0X3BvbGljZXJfYWRkXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9hZGQsXFxuNDYxNzpcXHRcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwX3RjLFxcbjQ2MTg6XFx0XFx0LyogYWNsICovXFxuNDYxOTpcXHRcXHQuY2xzX2Zsb3dlcl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9kZWwsXFxuNDYyMDpcXHRcXHQuY2xzX2Zsb3dlcl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfY2xzX2Zsb3dlcl9hZGQsXFxuNDYyMTpcXHRcXHQvKiBoc3IgKi9cXG40NjIyOlxcdFxcdC5wb3J0X2hzcl9sZWF2ZVxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9sZWF2ZSxcXG40NjIzOlxcdFxcdC5wb3J0X2hzcl9qb2luXFx0XFx0PSBkc2FfcG9ydF9zaW1wbGVfaHNyX2pvaW4sXFxuNDYyNDpcXHRcXHQvKiBtaXJyb3IgKi9cXG40NjI1OlxcdFxcdC5wb3J0X21pcnJvcl9kZWxcXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfZGVsLFxcbjQ2MjY6XFx0XFx0LnBvcnRfbWlycm9yX2FkZFxcdD0geXQ5MjF4X2RzYV9wb3J0X21pcnJvcl9hZGQsXFxuNDYyNzpcXHRcXHQvKiBsYWcgKi9cXG40NjI4OlxcdFxcdC5wb3J0X2xhZ19sZWF2ZVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19sZWF2ZSxcXG40NjI5OlxcdFxcdC5wb3J0X2xhZ19qb2luXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbGFnX2pvaW4sXFxuNDYzMDpcXHRcXHQvKiBmZGIgKi9cXG40NjMxOlxcdFxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2R1bXAsXFxuNDYzMjpcXHRcXHQucG9ydF9mYXN0X2FnZVxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2Zhc3RfYWdlLFxcbjQ2MzM6XFx0XFx0LnNldF9hZ2VpbmdfdGltZVxcdD0geXQ5MjF4X2RzYV9zZXRfYWdlaW5nX3RpbWUsXFxuNDYzNDpcXHRcXHQucG9ydF9mZGJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2RlbCxcXG40NjM1OlxcdFxcdC5wb3J0X2ZkYl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mZGJfYWRkLFxcbjQ2MzY6XFx0XFx0LnBvcnRfbWRiX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9kZWwsXFxuNDYzNzpcXHRcXHQucG9ydF9tZGJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWRiX2FkZCxcXG40NjM4OlxcdFxcdC8qIHZsYW4gKi9cXG40NjM5OlxcdFxcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXFx0PSB5dDkyMXhfZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcsXFxuNDY0MDpcXHRcXHQucG9ydF92bGFuX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZGVsLFxcbjQ2NDE6XFx0XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF92bGFuX2FkZCxcXG40NjQyOlxcdFxcdC8qIGJyaWRnZSAqL1xcbjQ2NDM6XFx0XFx0LnBvcnRfcHJlX2JyaWRnZV9mbGFnc1xcdD0geXQ5MjF4X2RzYV9wb3J0X3ByZV9icmlkZ2VfZmxhZ3MsXFxuNDY0NDpcXHRcXHQucG9ydF9icmlkZ2VfZmxhZ3NcXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfZmxhZ3MsXFxuNDY0NTpcXHRcXHQucG9ydF9icmlkZ2VfbGVhdmVcXHQ9IHl0OTIxeF9kc2FfcG9ydF9icmlkZ2VfbGVhdmUsXFxuNDY0NjpcXHRcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0geXQ5MjF4X2RzYV9wb3J0X2JyaWRnZV9qb2luLFxcbjQ2NDc6XFx0XFx0LyogbXN0ICovXFxuNDY0ODpcXHRcXHQucG9ydF9tc3Rfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbXN0X3N0YXRlX3NldCxcXG40NjQ5OlxcdFxcdC52bGFuX21zdGlfc2V0XFx0XFx0PSB5dDkyMXhfZHNhX3ZsYW5fbXN0aV9zZXQsXFxuNDY1MDpcXHRcXHQucG9ydF9zdHBfc3RhdGVfc2V0XFx0PSB5dDkyMXhfZHNhX3BvcnRfc3RwX3N0YXRlX3NldCxcXG40NjUxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY1MjpcXHRcXHQvKiBkY2IgKi9cXG40NjUzOlxcdFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbjQ2NTQ6XFx0XFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuNDY1NTpcXHRcXHQucG9ydF9nZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9nZXRfYXBwdHJ1c3QsXFxuNDY1NjpcXHRcXHQucG9ydF9zZXRfYXBwdHJ1c3RcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXRfYXBwdHJ1c3QsXFxuNDY1NzpcXHQjZW5kaWZcXG40NjU4OlxcdFxcdC8qIHBvcnQgKi9cXG40NjU5OlxcdFxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXFxuNDY2MDpcXHRcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbjQ2NjE6XFx0XFx0LnBvcnRfc2V0dXBcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cCxcXG40NjYyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXFxuNDY2MzpcXHRcXHQvKiBkc2NwICovXFxuNDY2NDpcXHRcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSB5dDkyMXhfZHNhX3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG40NjY1OlxcdFxcdC5wb3J0X2RlbF9kc2NwX3ByaW9cXHQ9IHl0OTIxeF9kc2FfcG9ydF9kZWxfZHNjcF9wcmlvLFxcbjQ2NjY6XFx0XFx0LnBvcnRfYWRkX2RzY3BfcHJpb1xcdD0geXQ5MjF4X2RzYV9wb3J0X2FkZF9kc2NwX3ByaW8sXFxuNDY2NzpcXHQjZW5kaWZcXG40NjY4OlxcdFxcdC8qIGNoaXAgKi9cXG40NjY5OlxcdFxcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjF4X2RzYV9zZXR1cCxcXG40NjcwOlxcdH07XFxuNDY3MTpcXHRcXG40NjcyOlxcdHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG40NjczOlxcdHtcXG40Njc0OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuNDY3NTpcXHRcXG40Njc2OlxcdFxcdGlmICghcHJpdilcXG40Njc3OlxcdFxcdFxcdHJldHVybjtcXG40Njc4OlxcdFxcbjQ2Nzk6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ2ODM6XFx0e1xcbjQ2ODQ6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG40Njg1OlxcdFxcbjQ2ODY6XFx0XFx0aWYgKCFwcml2KVxcbjQ2ODc6XFx0XFx0XFx0cmV0dXJuO1xcbjQ2ODg6XFx0XFxuNDY4OTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NjkwOlxcdFxcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcXG40NjkxOlxcdCNlbmRpZlxcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbjQ2OTQ6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40Njk1OlxcdFxcbjQ2OTY6XFx0XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHAtXFx1MDAzZW1pYl9yZWFkKTtcXG40Njk3OlxcdFxcdH1cXG40Njk4OlxcdFxcbjQ2OTk6XFx0XFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFxcdTAwMjZwcml2LVxcdTAwM2Vkcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjE1LjU5NzY5MzM4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTI0NjM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgSSB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHByaW5jaXBsZXMgb2YgTURJTyBhbmQgZHJpdmVyIHByb2JpbmcsIHNvIEknbGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWNzIHJlbGF0ZWQgdG8gdGhlIFlUOTIxeCBjaGlwc2V0IGFuZCBhbnl0aGluZyB1bnVzdWFsIG9yIG5vdGV3b3J0aHkgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiB5dDkyMXhfbWRpb19wcm9iZSoqXG5cbiogICAqKkVudHJ5IFBvaW50IGFuZCBQdXJwb3NlOioqIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGluZGVlZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZS4gSSBleHBlY3QgdG8gc2VlIGl0IGFzIHBhcnQgb2YgdGhlIGRyaXZlcidzIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIHByb2JlOyBsaWtlbHksIHRoZSBzeXN0ZW0gZGV0ZWN0ZWQgYSBkZXZpY2UgbWF0Y2hpbmcgYSBrbm93biBJRCwgYW5kIG5vdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogSSdsbCBiZSBsb29raW5nIGF0IHdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaW5jbHVkZXMgYW55IGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZSBNRElPIGNvbW11bmljYXRpb24gb3IgUEhZIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyBzdHJhdGVnaWVzIGJlaW5nIHVzZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIHRvIGxvb2sgb3V0IGZvcj9cbiogICAqKk1ESU8gSW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHBhcnQuIEhvdyBpcyB0aGUgTURJTyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgb3IgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGUgWVQ5MjF4PyBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIE1ESU8gaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBvdGVudGlhbGx5IHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgdHdpc3QuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIE1ESU8gY29udHJvbGxlci5cbiogICAqKlBIWSBEZXRlY3Rpb24gYW5kIENvbmZpZ3VyYXRpb246KiogSXMgdGhlcmUgUEhZIGRldGVjdGlvbiBpbnZvbHZlZCBoZXJlLCBvciBpcyBpdCBhc3N1bWVkIGEgc3BlY2lmaWMgUEhZIGlzIGNvbm5lY3RlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHZhcmlvdXMgUEhZIHR5cGVzPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgc2V0cyB1cCBhbmQgY29uZmlndXJlcyB0aGUgUEhZLCBpbmNsdWRpbmcgYW55IHBvd2VyLXVwIG9yIHJlc2V0IHNlcXVlbmNlcy4gV2hhdCBhYm91dCB0aGUgTURJTyBidXMgc3BlZWQsIGFyZSB0aGVyZSBhbnkgc3BlZWQgYWRqdXN0bWVudHM/XG4qICAgKipFcnJvciBIYW5kbGluZyBhbmQgUm9idXN0bmVzczoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gV2hhdCBkb2VzIGl0IGRvIGlmIHRoZSBkZXZpY2UgaXNuJ3QgcmVzcG9uZGluZywgaWYgdGhlcmUgYXJlIE1ESU8gZXJyb3JzLCBvciBpZiB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gZmFpbHM/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSdsbCBsb29rIGZvciBgcHJpbnRrYCBjYWxscyBhbmQgb3RoZXIgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcmVwb3J0aW5nLlxuKiAgICoqRHJpdmVyIE1vZGVsIEludGVncmF0aW9uOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGJpbmRpbmdzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGxpa2UgbmV0d29yayBpbnRlcmZhY2VzIG9yIHRoZSBkZXZpY2UgdHJlZT8gSSdsbCBjaGVjayBmb3IgdGhlIHVzZSBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgZGV2aWNlIHByaXZhdGUgZGF0YSwgYW5kIG9mIGNvdXJzZSBhbnkgbmV0d29yayBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uLlxuKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBIb3cgZG9lcyBpdCBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudD8gQXJlIHRoZXJlIGFueSBwb3dlci11cCBvciBwb3dlci1kb3duIHNlcXVlbmNlcyBvciBjYWxsYmFja3MgZGVmaW5lZD9cbiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGFueSBsb2NrcyBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGJyaW5ncyB1cCB0aGUgTURJTyBpbnRlcmZhY2UgYW5kIFBIWS4gVGhpcyBpbmNsdWRlcyBob3cgaXQgbWFuYWdlcyBoYXJkd2FyZSByZXNvdXJjZXMsIGRldGVjdHMgYW5kIGNvbmZpZ3VyZXMgdGhlIFBIWSwgYW5kIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgaXMgaG93IHRoaXMgZHJpdmVyIGJyaW5ncyB1cCBhbmQgY29uZmlndXJlcyB0aGUgWVQ5MjF4IE1ESU8gaW50ZXJmYWNlLiBJIHdpbGwgY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSBmb3IgYW55IHN1YnRsZSBhcmVhcywgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjIxLjI1MDE1OTc1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MDA6XFx0XFxuNDcwMTpcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlYWNsX2Jsa3MpOyBpKyspIHtcXG40NzAyOlxcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cXHUwMDNlYWNsX2Jsa3NbaV07XFxuNDcwMzpcXHRcXG40NzA0OlxcdFxcdFxcdGlmICghYWNsYmxrKVxcbjQ3MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDcwNjpcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVxcdTAwM2VydWxlcyk7IGorKykge1xcbjQ3MDc6XFx0XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cXHUwMDNlcnVsZXNbal07XFxuNDcwODpcXHRcXG40NzA5OlxcdFxcdFxcdFxcdGlmICghYWNscnVsZSlcXG40NzEwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ3MTE6XFx0XFx0XFx0XFx0a3ZmcmVlKGFjbHJ1bGUpO1xcbjQ3MTI6XFx0XFx0XFx0fVxcbjQ3MTM6XFx0XFx0XFx0a3ZmcmVlKGFjbGJsayk7XFxuNDcxNDpcXHRcXHR9XFxuNDcxNTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDcxNjpcXHR9XFxuNDcxNzpcXHRcXG40NzE4OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjQ3MTk6XFx0e1xcbjQ3MjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG40NzIxOlxcdFxcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XFxuNDcyMjpcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghcHJpdilcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuNDczMDpcXHRcXHRpZiAoIW1kaW8pXFxuNDczMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bWRpby1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbjQ3MzQ6XFx0XFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuNDczNTpcXHRcXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuNDczNjpcXHRcXG40NzM3OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NzM4OlxcdFxcbjQ3Mzk6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX29wcyA9IFxcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xcbjQ3NDA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbjQ3NDM6XFx0XFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG40NzQ2OlxcdFxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuNDc0NzpcXHRcXHR9XFxuNDc0ODpcXHRcXG40NzQ5OlxcdFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZWRldiA9IGRldjtcXG40NzUxOlxcdFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG40NzUzOlxcdFxcdGRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG40NzU0OlxcdFxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xcbjQ3NTU6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbjQ3NTY6XFx0XFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xcbjQ3NTc6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xcbjQ3NTg6XFx0XFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuNDc1OTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xcbjQ3NjA6XFx0XFxuNDc2MTpcXHRcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbjQ3NjI6XFx0XFxuNDc2MzpcXHRcXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuNDc2NDpcXHR9XFxuNDc2NTpcXHRcXG40NzY2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbjQ3Njc6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbjQ3Njg6XFx0XFx0e31cXG40NzY5OlxcdH07XFxuNDc3MDpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG40NzczOlxcdFxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbjQ3NzQ6XFx0XFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG40Nzc1OlxcdFxcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxcbjQ3NzY6XFx0XFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xcbjQ3Nzc6XFx0XFx0XFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcXG40Nzc4OlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcXG40Nzc5OlxcdFxcdH0sXFxuNDc4MDpcXHR9O1xcbjQ3ODE6XFx0XFxuNDc4MjpcXHRtZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcXG40NzgzOlxcdFxcbjQ3ODQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiRGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbjQ3ODU6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggU3dpdGNoXFxcIik7XFxuNDc4NjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjIxLjI1MDQwMTE5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY3MzYxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIHl0OTIxeF9tZGlvX3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgeXQ5MjF4X21kaW9fcHJvYmVgLiBIbW0sIHRoZSBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBiZSB0b3VjaGluZyBhbnkgaGFyZHdhcmUgSUQgcmVnaXN0ZXJzLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHByb2JlIGZ1bmN0aW9uLiBJdCdzIHNraXBwaW5nIHN0cmFpZ2h0IHRvIHJlZ2lzdGVyaW5nIHRoZSBEU0Egc3dpdGNoLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgaG9sZCBvbi4uLiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgaXMgdGhlIGNhbGwgdGhhdCBhY3R1YWxseSBzZXRzIHRoaW5ncyBpbiBtb3Rpb24uIFRoYXQsIGluIHR1cm4sIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhlIGBzZXR1cGAgY2FsbGJhY2ssIHdoaWNoIEkgc2VlIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gUmlnaHQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIHByb2JlIGxpa2VseSBqdXN0IGhhbmRsZXMgdGhlIGluaXRpYWwgcmVnaXN0cmF0aW9uLCBhbmQgdGhlIHJlYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBoYXBwZW5pbmcgKmFmdGVyKiB0aGF0LiBTbywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGB5dDkyMXhfZHNhX3NldHVwYC4gVGhhdCdzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MjcuNjE3NzY0NjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU0MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDU0MTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjQ1NDI6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG40NTQzOlxcdFxcdGludCByZXM7XFxuNDU0NDpcXHRcXG40NTQ1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTQ2OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xcbjQ1NDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0ODpcXHRcXG40NTQ5OlxcdFxcdGlmIChyZXMpXFxuNDU1MDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NTE6XFx0XFxuNDU1MjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxcbjQ1NTM6XFx0XFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxcbjQ1NTQ6XFx0XFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXFxuNDU1NTpcXHRcXHQgKi9cXG40NTU2OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuNDU1NzpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTU4OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTU5OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTYwOlxcdFxcdFxcdGlmIChyZXMpXFxuNDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NjI6XFx0XFx0fVxcbjQ1NjM6XFx0XFxuNDU2NDpcXHRcXHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xcbjQ1NjU6XFx0XFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW8tZXh0ZXJuYWxcXFwiKTtcXG40NTY2OlxcdFxcdGlmIChjaGlsZCkge1xcbjQ1Njc6XFx0XFx0XFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xcbjQ1Njg6XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbjQ1Njk6XFx0XFx0XFx0aWYgKHJlcylcXG40NTcwOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuNDU3MTpcXHRcXG40NTcyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW50ZXN0ZWQgZXh0ZXJuYWwgbWRpbyBidXNcXFxcblxcXCIpO1xcbjQ1NzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuNDU3NDpcXHRcXHR9XFxuNDU3NTpcXHRcXG40NTc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG40NTc3OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwKHByaXYpO1xcbjQ1Nzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGlmIChyZXMpXFxuNDU4MTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1ODI6XFx0XFxuNDU4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG40NTg0OlxcdFxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbjQ1ODU6XFx0XFx0aWYgKHJlcylcXG40NTg2OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG40NTg3OlxcdCNlbmRpZlxcbjQ1ODg6XFx0XFxuNDU4OTpcXHRcXHRyZXR1cm4gMDtcXG40NTkwOlxcdH1cXG40NTkxOlxcdFxcbjQ1OTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjF4X3BoeWxpbmtfbWFjX29wcyA9IHtcXG40NTkzOlxcdFxcdC5tYWNfbGlua19kb3duXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfbGlua19kb3duLFxcbjQ1OTQ6XFx0XFx0Lm1hY19saW5rX3VwXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cCxcXG40NTk1OlxcdFxcdC5tYWNfY29uZmlnXFx0PSB5dDkyMXhfcGh5bGlua19tYWNfY29uZmlnLFxcbjQ1OTY6XFx0fTtcXG40NTk3OlxcdFxcbjQ1OTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XFxuNDU5OTpcXHRcXHQvKiBtaWIgKi9cXG40NjAwOlxcdFxcdC5nZXRfc3RyaW5nc1xcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyxcXG40NjAxOlxcdFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyxcXG40NjAyOlxcdFxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0geXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudCxcXG40NjAzOlxcdFxcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyxcXG40NjA0OlxcdFxcdC5nZXRfZXRoX2N0cmxfc3RhdHNcXHQ9IHl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbjQ2MDU6XFx0XFx0LmdldF9ybW9uX3N0YXRzXFx0XFx0PSB5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzLFxcbjQ2MDY6XFx0XFx0LmdldF9zdGF0czY0XFx0XFx0PSB5dDkyMXhfZHNhX2dldF9zdGF0czY0LFxcbjQ2MDc6XFx0XFx0LmdldF9wYXVzZV9zdGF0c1xcdD0geXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMsXFxuNDYwODpcXHRcXHQvKiBlZWUgKi9cXG40NjA5OlxcdFxcdC5zdXBwb3J0X2VlZVxcdFxcdD0gZHNhX3N1cHBvcnRzX2VlZSxcXG40NjEwOlxcdFxcdC5zZXRfbWFjX2VlZVxcdFxcdD0geXQ5MjF4X2RzYV9zZXRfbWFjX2VlZSxcXG40NjExOlxcdFxcdC8qIG10dSAqL1xcbjQ2MTI6XFx0XFx0LnBvcnRfY2hhbmdlX210dVxcdD0geXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUsXFxuNDYxMzpcXHRcXHQucG9ydF9tYXhfbXR1XFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfbWF4X210dSxcXG40NjE0OlxcdFxcdC8qIHJhdGUgKi9cXG40NjE1OlxcdFxcdC5wb3J0X3BvbGljZXJfZGVsXFx0PSB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwsXFxuNDYxNjpcXHRcXHQucG9ydF9wb2xpY2VyX2FkZFxcdD0geXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkLFxcbjQ2MTc6XFx0XFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9zZXR1cF90YyxcXG40NjE4OlxcdFxcdC8qIGFjbCAqL1xcbjQ2MTk6XFx0XFx0LmNsc19mbG93ZXJfZGVsXFx0XFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfZGVsLFxcbjQ2MjA6XFx0XFx0LmNsc19mbG93ZXJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX2Nsc19mbG93ZXJfYWRkLFxcbjQ2MjE6XFx0XFx0LyogaHNyICovXFxuNDYyMjpcXHRcXHQucG9ydF9oc3JfbGVhdmVcXHRcXHQ9IGRzYV9wb3J0X3NpbXBsZV9oc3JfbGVhdmUsXFxuNDYyMzpcXHRcXHQucG9ydF9oc3Jfam9pblxcdFxcdD0gZHNhX3BvcnRfc2ltcGxlX2hzcl9qb2luLFxcbjQ2MjQ6XFx0XFx0LyogbWlycm9yICovXFxuNDYyNTpcXHRcXHQucG9ydF9taXJyb3JfZGVsXFx0PSB5dDkyMXhfZHNhX3BvcnRfbWlycm9yX2RlbCxcXG40NjI2OlxcdFxcdC5wb3J0X21pcnJvcl9hZGRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9taXJyb3JfYWRkLFxcbjQ2Mjc6XFx0XFx0LyogbGFnICovXFxuNDYyODpcXHRcXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9sYWdfbGVhdmUsXFxuNDYyOTpcXHRcXHQucG9ydF9sYWdfam9pblxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2xhZ19qb2luLFxcbjQ2MzA6XFx0XFx0LyogZmRiICovXFxuNDYzMTpcXHRcXHQucG9ydF9mZGJfZHVtcFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kdW1wLFxcbjQ2MzI6XFx0XFx0LnBvcnRfZmFzdF9hZ2VcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9mYXN0X2FnZSxcXG40NjMzOlxcdFxcdC5zZXRfYWdlaW5nX3RpbWVcXHQ9IHl0OTIxeF9kc2Ffc2V0X2FnZWluZ190aW1lLFxcbjQ2MzQ6XFx0XFx0LnBvcnRfZmRiX2RlbFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X2ZkYl9kZWwsXFxuNDYzNTpcXHRcXHQucG9ydF9mZGJfYWRkXFx0XFx0PSB5dDkyMXhfZHNhX3BvcnRfZmRiX2FkZCxcXG40NjM2OlxcdFxcdC5wb3J0X21kYl9kZWxcXHRcXHQ9IHl0OTIxeF9kc2FfcG9ydF9tZGJfZGVsLFxcbjQ2Mzc6XFx0XFx0LnBvcnRfbWRiX2FkZFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X21kYl9hZGQsXFxuNDYzODpcXHRcXHQvKiB2bGFuICovXFxuNDYzOTpcXHRcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0geXQ5MjF4X2RzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzoyNy42MTgwNjU3MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MDE3MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIGB5dDkyMXhfY2hpcF9yZXNldGAgRnVuY3Rpb25hbGl0eSoqXG5cbkhtbSwgYmFzZWQgb24gaXRzIG5hbWUsIGB5dDkyMXhfY2hpcF9yZXNldGAgKmNvdWxkKiBiZSBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhhdCdzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgZm9yIGB5dDkyMXhfY2hpcF9yZXNldGAgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQncyBkb2luZy4gVW5kZXJzdGFuZGluZyBpdHMgaW5uZXIgd29ya2luZ3MgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6MzEuNDY4MjQxMDI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEzNTIxNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9jaGlwX3Jlc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0NS1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTQ3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0MzozNC4wODE3Njc3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5ODcxNTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHl0OTIxeF9jaGlwX3Jlc2V0YCBhbmQgYHl0OTIxeF9jaGlwX2RldGVjdGAqKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IGp1bXBlZCB0byB0aG9zZSB0d28gZnVuY3Rpb25zOiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIGluaXRpYWxpemF0aW9uIGFuZCBwb3RlbnRpYWxseSwgb25nb2luZyBoZWFsdGggbW9uaXRvcmluZyBvZiBhIGB5dDkyMXhgIGNoaXBzZXQsIHdoaWNoIGlzIHByb2JhYmx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGVtYmVkZGVkIHN5c3RlbSBJJ20gd29ya2luZyBvbi4gVGhlIHJlc2V0IGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgYnJpbmdpbmcgdGhlIGNoaXAgaW50byBhIGRlZmluZWQsIGtub3duIHN0YXRlLiBUaGUgbWV0aG9kIHVzZWQgd291bGQgbGlrZWx5IGRlcGVuZCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBmdWxsLXBvd2VyIHJlc2V0LCBhIHNvZnQgcmVzZXQsIG9yIG1heWJlIGV2ZW4gYSBzZWxlY3RpdmUgcmVzZXQgb2Ygc3BlY2lmaWMgc3ViLW1vZHVsZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyB0aGUgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIHdyaXR0ZW4sIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMgZm9yIHNpZ25hbCBhc3NlcnRpb24vZGUtYXNzZXJ0aW9uIOKAkyBhcmUgd2hlcmUgdGhlIGRldmlsIGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBvciB0aGUgZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMuXG5cbmB5dDkyMXhfY2hpcF9kZXRlY3RgLi4uIHRoaXMgb25lJ3MgaW1tZWRpYXRlbHkgbW9yZSBpbnRlcmVzdGluZy4gV2hhdCBraW5kIG9mIGRldGVjdGlvbiBhcmUgd2UgdGFsa2luZyBhYm91dD8gSXMgaXQgYSBzaW1wbGUgSUQgcmVhZCwgYSBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgc2lnbmF0dXJlIGNoZWNrLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBoYXJkd2FyZSBwcm9iaW5nIHNlcXVlbmNlPyBUaGUgYXBwcm9hY2ggc2VsZWN0ZWQgd291bGQgcmVhbGx5IHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSdzIGVycm9yIGhhbmRsaW5nLiBJZGVhbGx5LCBpdCdzIG5vdCBqdXN0IGEgYmxpbmQgSUQgcmVhZDsgaXQgaW5jb3Jwb3JhdGVzIHNvbWUgcmVkdW5kYW5jeSwgbWF5YmUgYSBjaGVja3N1bSB2ZXJpZmljYXRpb24gb3IgYSBzYW5pdHkgY2hlY2sgb24gcmVwb3J0ZWQgY2FwYWJpbGl0aWVzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBoZXJlLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNoaXAgZmFpbHMgdG8gZGV0ZWN0IGF0IHBvd2VyLXVwPyBXaGF0J3MgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbT8gUmV0cnkgbG9naWM/IEVycm9yIHJlcG9ydGluZz8gSXMgdGhlcmUgYSB0aW1lb3V0LCBhbmQgaG93IGlzIHRoYXQgaGFuZGxlZD8gSSBuZWVkIHRvIGFuYWx5emUgYm90aCBmdW5jdGlvbnMgdG8gZ2FpbiBhIGNsZWFyIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gZGV0ZXJtaW5lIHRoZSBzeXN0ZW0ncyByZXNpbGllbmNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjM5LjI4MDQ4NTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjI3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIyNzpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDIyODpcXHR7XFxuNDIyOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuNDIzMDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XFxuNDIzMTpcXHRcXHR1OCBleHRtb2RlO1xcbjQyMzI6XFx0XFx0dTMyIGNoaXBpZDtcXG40MjMzOlxcdFxcdHUzMiBtYWpvcjtcXG40MjM0OlxcdFxcdHUzMiBtb2RlO1xcbjQyMzU6XFx0XFx0dTMyIHZhbDtcXG40MjM2OlxcdFxcdGludCByZXM7XFxuNDIzNzpcXHRcXG40MjM4OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXFx1MDAyNmNoaXBpZCk7XFxuNDIzOTpcXHRcXHRpZiAocmVzKVxcbjQyNDA6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MjQxOlxcdFxcbjQyNDI6XFx0XFx0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XFxuNDI0MzpcXHRcXG40MjQ0OlxcdFxcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNDU6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yKVxcbjQyNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDI0NzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW5hbWUpIHtcXG40MjQ4OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5leHBlY3RlZCBjaGlwaWQgMHgleFxcXFxuXFxcIiwgY2hpcGlkKTtcXG40MjQ5OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyNTA6XFx0XFx0fVxcbjQyNTE6XFx0XFxuNDI1MjpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfTU9ERSwgXFx1MDAyNm1vZGUpO1xcbjQyNTM6XFx0XFx0aWYgKHJlcylcXG40MjU0OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI1NTpcXHRcXHRyZXMgPSB5dDkyMXhfZWRhdGFfcmVhZChwcml2LCBZVDkyMVhfRURBVEFfRVhUTU9ERSwgXFx1MDAyNmV4dG1vZGUpO1xcbjQyNTY6XFx0XFx0aWYgKHJlcylcXG40MjU3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI1ODpcXHRcXG40MjU5OlxcdFxcdGZvciAoOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuNDI2MDpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlbW9kZSA9PSBtb2RlIFxcdTAwMjZcXHUwMDI2XFxuNDI2MTpcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlZXh0bW9kZSA9PSBleHRtb2RlKVxcbjQyNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDI2MzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW5hbWUpIHtcXG40MjY0OlxcdFxcdFxcdGRldl9lcnIoZGV2LFxcbjQyNjU6XFx0XFx0XFx0XFx0XFxcIlVuc3VwcG9ydGVkIGNoaXBpZCAweCV4IHdpdGggY2hpcG1vZGUgMHgleCAweCV4XFxcXG5cXFwiLFxcbjQyNjY6XFx0XFx0XFx0XFx0Y2hpcGlkLCBtb2RlLCBleHRtb2RlKTtcXG40MjY3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyNjg6XFx0XFx0fVxcbjQyNjk6XFx0XFxuNDI3MDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX1NZU19DTEssIFxcdTAwMjZ2YWwpO1xcbjQyNzE6XFx0XFx0aWYgKHJlcylcXG40MjcyOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI3MzpcXHRcXHRzd2l0Y2ggKEZJRUxEX0dFVChZVDkyMVhfU1lTX0NMS19TRUxfTSwgdmFsKSkge1xcbjQyNzQ6XFx0XFx0Y2FzZSAwOlxcbjQyNzU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVxcdTAwM2VtYWpvciA9PSBZVDkyMTVfTUFKT1IgPyA4IDogNjtcXG40Mjc2OlxcdFxcdFxcdGJyZWFrO1xcbjQyNzc6XFx0XFx0Y2FzZSBZVDkyMVhfU1lTX0NMS18xNDNNOlxcbjQyNzg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSA3O1xcbjQyNzk6XFx0XFx0XFx0YnJlYWs7XFxuNDI4MDpcXHRcXHRkZWZhdWx0OlxcbjQyODE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY3ljbGVfbnMgPSA4O1xcbjQyODI6XFx0XFx0fVxcbjQyODM6XFx0XFxuNDI4NDpcXHRcXHQvKiBQcmludCBjaGlwaWQgaGVyZSBzaW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBsb3dlciAxNiBiaXRzICovXFxuNDI4NTpcXHRcXHRkZXZfaW5mbyhkZXYsXFxuNDI4NjpcXHRcXHRcXHQgXFxcIk1vdG9yY29tbSAlcyBldGhlcm5ldCBzd2l0Y2gsIGNoaXBpZDogMHgleCwgY2hpcG1vZGU6IDB4JXggMHgleFxcXFxuXFxcIixcXG40Mjg3OlxcdFxcdFxcdCBpbmZvLVxcdTAwM2VuYW1lLCBjaGlwaWQsIG1vZGUsIGV4dG1vZGUpO1xcbjQyODg6XFx0XFxuNDI4OTpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gaW5mbztcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0cmV0dXJuIDA7XFxuNDI5MjpcXHR9XFxuNDI5MzpcXHRcXG40Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjM5LjI4MTAxNDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODE0Nzc0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBZVDkyMVggQ2hpcCBEZXRlY3Rpb24gTG9naWMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHl0OTIxeF9jaGlwX2RldGVjdGAgaGFuZGxlcyB0aGUgYFlUOTIxWF9DSElQX0lEYC4gSXQgZXhwZWN0cyBhIHNwZWNpZmljIG1ham9yIHZlcnNpb24sIGFuZCBpZiBpdCBkb2Vzbid0IGdldCBpdCwgaXQgdGhyb3dzIGEgYC1FTk9ERVZgIGVycm9yLiBTaW5jZSB0aGlzIGlzIGFuIE1ESU8gZGV2aWNlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHN5emthbGxlciBhbmQgaXRzIGFiaWxpdHkgdG8gZW11bGF0ZSByZWFkcyBhbmQgd3JpdGVzIHZpYSBNRElPLCBlaXRoZXIgdGhyb3VnaCBhIG1vY2sgZGV2aWNlIG9yIGJ5IGluamVjdGluZyBmYXVsdHMuXG5cbkJ1dCBoZXJlJ3MgdGhlIHNuYWcuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJhbCogTURJTyBtb2NrIGRldmljZSB0aGF0IGNhbiBqdXN0IHNwaXQgb3V0IGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBtZGlvYnVzX3JlYWRgIHVubGVzcyBpdCdzIHNwZWNpZmljYWxseSBjb2RlZCBmb3IuIFRoZW4gSSB0aG91Z2h0LCBva2F5LCBpdCBoYXMgc3BlY2lmaWMgbW9ja3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBgdmttc2AgZm9yIERSTSwgYHZoY2lgIGZvciBVU0IsIGV0Yy4gQnV0IGRvZXMgaXQgaGF2ZSAqYW55dGhpbmcqIGZvciBNRElPPyBJIGZvdW5kIGBtZGlvLW1vY2tgIGFuZCBgbWRpby1iY20tdW5pbWFjYCwgd2hpY2ggYXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucywgYnV0IG5vdGhpbmcgZ2VuZXJpYy4gVGhpcyBpc24ndCBnb2luZyB0byBiZSBhIHNpbXBsZSBzb2x1dGlvbi5cblxuTWF5YmUgSSBjb3VsZCBsZXZlcmFnZSBgYnBmYCB0byBpbnRlcmNlcHQgdGhlIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgdGhlcmUncyBhIGR1bW15IE1ESU8gYnVzIEknbSBtaXNzaW5nPyBJIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgYWdhaW4uIFdhaXQsIGRpZCBzeXprYWxsZXIgZXZlciBpbXBsZW1lbnQgYHN5el9tZGlvX3JlYWRgIG9yIGBzeXpfbWRpb193cml0ZWA/IE5vLCBJIGRvbid0IHNlZSB0aG9zZSB0aGVyZS5cblxuQWxyaWdodCwgd2hhdCBpZiB0aGUgZGV2aWNlIGlzIGNyZWF0ZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBidXQgdGhhdCB3b3VsZG4ndCBoZWxwIG1lIGVtdWxhdGUgdGhlIGhhcmR3YXJlJ3MgcmVzcG9uc2UsIGVzcGVjaWFsbHkgdGhlIGNydWNpYWwgYFlUOTIxWF9DSElQX0lEYCB2YWx1ZS4gVGhhdCdzIGEgZGVhZCBlbmQuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIFRoZSBjb2RlIHJldmVhbHMgdGhhdCBgeXQ5MjF4X3JlZ19yZWFkYCB1c2VzIGBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZGAuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGB5dDkyMXhfcmVnX29wc19tZGlvYCBhY3R1YWxseSAqaXMqLiBUaGF0IHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mzo0Ny4xNjI0OTQwNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDMyMTIyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X3JlZ19vcHNfbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yMzY9c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fd3JpdGUodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzI6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfcmVnX29wcyB5dDkyMXhfcmVnX29wc19tZGlvID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3My1cXHQucmVhZCA9IHl0OTIxeF9yZWdfbWRpb19yZWFkLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcxOD1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MzgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDczOTpcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc0MC1cXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6NDguODY1NzEyNDgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDQ3NjA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWFkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGJ1cyByZWFkLiBUaGUgZnVuY3Rpb24gYG1kaW9idXNfcmVhZGAgaXMgdGhlIGtleSBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHJlc3BvbmRpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXQnbGwgcmV0dXJuIGVpdGhlciBgMHhmZmZmYCBvciBgLUVJT2AuIElmIGl0J3MgYDB4ZmZmZmAsIHRoZW4gYGNoaXBpZGAgaXMgZ29pbmcgdG8gYmUgYDB4ZmZmZmZmZmZgLiBDb25zZXF1ZW50bHksIGBtYWpvcmAgaXMgYWxzbyBnb2luZyB0byBiZSBgMHhmZmZmYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIGB5dDkyMXhfaW5mb3NgIGhhbmRsZSBhIGAweGZmZmZgIHZhbHVlPyBJIGhpZ2hseSBkb3VidCBpdCdzIGV4cGVjdGluZyB0aGF0LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaGFwcGVucyB3aGVuIGBtYWpvcmAgdGFrZXMgdGhhdCB2YWx1ZSBhbmQgaXQncyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBleHBlY3RlZCB2YWx1ZXMgd2l0aGluIGB5dDkyMXhfaW5mb3NgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiB0aGUgY29kZSBhbmQgc2VlIGhvdyBgeXQ5MjF4X2luZm9zYCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjUyLjgxMDQ3NDY1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDQyNDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfaW5mb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9OTk9c3RydWN0IHl0OTIxeF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTctXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIyNz1zdGF0aWMgaW50IHl0OTIxeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNDQ6XFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI0NS1cXHRcXHRpZiAoaW5mby1cXHUwMDNlbWFqb3IgPT0gbWFqb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQzOjU0Ljc2NDkwMjQxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMyODQxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCByZWxldmFudCB0ZWNobmljYWwgY29udGV4dHMuXG5cbioqQW5hbHl6aW5nIGB5dDkyMXhfaW5mb3NgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGB5dDkyMXhfaW5mb3NgLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpcyB0aGF0IHRoaXMgbGlrZWx5IHJlcHJlc2VudHMgc29tZSBzb3J0IG9mIHN0cnVjdHVyZWQgZGF0YSBvciBjb25maWd1cmF0aW9uIGZpbGUgcmVsYXRlZCB0byB0aGUgYHl0OTIxeGAgcHJvamVjdCBvciBjb21wb25lbnQuIEl0IGNvdWxkIGNvbnRhaW4gYW55IG51bWJlciBvZiB0aGluZ3Mg4oCTIHNldHRpbmdzLCBtZXRhZGF0YSwgcGFyYW1ldGVyIGRlZmluaXRpb25zLCBwZXJoYXBzIGV2ZW4gcGVyZm9ybWFuY2UgbWV0cmljcywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgdGhhdCBgeXQ5MjF4YCBpcyB1c2VkIGZvci4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6IFdoYXQga2luZCBvZiBwcm9qZWN0IGlzIHRoaXM/IFdoYXQncyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMgd2l0aGluIHRoaXMgZWNvc3lzdGVtPyBJcyBpdCBsaWtlbHkgWUFNTCwgSlNPTiwgYSBjdXN0b20gZm9ybWF0LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIG5hbWUgJ2luZm9zJyBpbXBsaWVzIHNvbWV0aGluZyBpbmZvcm1hdGlvbmFsIOKAkyBkZXRhaWxzLCBpZiB5b3Ugd2lsbCwgYnV0IEkgbmVlZCBhIHdob2xlIGxvdCBtb3JlIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpdHMgcmVsZXZhbmNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgc29tZSBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZGF0YS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0Mzo1OS40OTc3NDYyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIDExNzpcXHRcXHR7XFxuIDExODpcXHRcXHRcXHRcXFwiWVQ5MjE1U0NcXFwiLCBZVDkyMTVfTUFKT1IsIDEsIDAsXFxuIDExOTpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig1KSxcXG4gMTIwOlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gMTIxOlxcdFxcdH0sXFxuIDEyMjpcXHRcXHR7XFxuIDEyMzpcXHRcXHRcXHRcXFwiWVQ5MjE1U1xcXCIsIFlUOTIxNV9NQUpPUiwgMiwgMCxcXG4gMTI0OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbiAxMjU6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQwIHwgWVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxcbiAxMjY6XFx0XFx0fSxcXG4gMTI3OlxcdFxcdHtcXG4gMTI4OlxcdFxcdFxcdFxcXCJZVDkyMTVSQlxcXCIsIFlUOTIxNV9NQUpPUiwgMywgMCxcXG4gMTI5OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbiAxMzA6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19FWFQwIHwgWVQ5MjFYX1BPUlRfTUFTS19FWFQxLFxcbiAxMzE6XFx0XFx0fSxcXG4gMTMyOlxcdFxcdHtcXG4gMTMzOlxcdFxcdFxcdFxcXCJZVDkyMTROQlxcXCIsIFlUOTIxNV9NQUpPUiwgMywgMixcXG4gMTM0OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcXG4gMTM1OlxcdFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gMTM2OlxcdFxcdH0sXFxuIDEzNzpcXHRcXHR7XFxuIDEzODpcXHRcXHRcXHRcXFwiWVQ5MjEzTkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDMsXFxuIDEzOTpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXFxuIDE0MDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXFxuIDE0MTpcXHRcXHR9LFxcbiAxNDI6XFx0XFx0e1xcbiAxNDM6XFx0XFx0XFx0XFxcIllUOTIxOE5cXFwiLCBZVDkyMThfTUFKT1IsIDAsIDAsXFxuIDE0NDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVDBfbig4KSxcXG4gMTQ1OlxcdFxcdFxcdDAsXFxuIDE0NjpcXHRcXHR9LFxcbiAxNDc6XFx0XFx0e1xcbiAxNDg6XFx0XFx0XFx0XFxcIllUOTIxOE1CXFxcIiwgWVQ5MjE4X01BSk9SLCAxLCAwLFxcbiAxNDk6XFx0XFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oOCksXFxuIDE1MDpcXHRcXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXFxuIDE1MTpcXHRcXHR9LFxcbiAxNTI6XFx0XFx0e31cXG4gMTUzOlxcdH07XFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIDE1NjpcXHRcXG4gMTU3OlxcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuIDE1ODpcXHQgKlxcbiAxNTk6XFx0ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxcbiAxNjA6XFx0ICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxcbiAxNjE6XFx0ICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXFxuIDE2MjpcXHQgKi9cXG4gMTYzOlxcdCNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcXHQoMyAqIEhaKVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDM6NTkuNDk4MDA4MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NTkxMjkxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFlUOTIxNS9ZVDkyMTggc2l0dWF0aW9uLiBGaXJzdCwgdGhlIGBtYWpvcmAgdmVyc2lvbiBuZWVkcyB0byBiZSBlaXRoZXIgYFlUOTIxNV9NQUpPUmAgb3IgYFlUOTIxOF9NQUpPUmAuIE5vdywgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIGB5dDkyMXhfY2hpcF9kZXRlY3RgIHdpbGwgaW5ldml0YWJseSBmYWlsLiBBbmQgaWYgdGhhdCBmYWlscywgYHl0OTIxeF9jaGlwX3Jlc2V0YCBmYWlscyB0b28uIFRoaXMgZmFpbHVyZSBjYXNjYWRlcyDigJMgYHl0OTIxeF9kc2Ffc2V0dXBgIGdvZXMgZG93biB3aXRoIGl0LCBsZWFkaW5nIHRvIGEgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIGZhaWx1cmUsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZHJlYWRlZCBgeXQ5MjF4X21kaW9fcHJvYmVgIGZhaWx1cmUuIEl0J3MgYSBjaGFpbiByZWFjdGlvbi5cblxuVGhlIHByb2JsZW0/IEluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgdXNlcywgb3IgZXZlbiBqdXN0IGluIFFFTVUsIHRoZSBkZXZpY2Ugd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUgYmVjYXVzZSBpdCdzIGV4cGVjdGluZyBhIHBoeXNpY2FsIGhhcmR3YXJlIHJlc3BvbnNlIHRoYXQgaXNuJ3QgdGhlcmUuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluIE1ESU8gZW11bGF0b3IgdGhhdCBjYW4gcmV0dXJuICpzcGVjaWZpYyogYFlUOTIxWF9DSElQX0lEYCB2YWx1ZXMuIFRoYXQncyBhIGtleSBwaWVjZSBtaXNzaW5nLiBJIHdhcyBob3BpbmcgSSBjb3VsZCBzb21laG93IGdldCB0byBgeXQ5MjF4X2xlZHNfc2V0dXBgLCBidXQgaXQncyBjYWxsZWQgd2l0aGluIGB5dDkyMXhfZHNhX3NldHVwYCwgKmFmdGVyKiBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfc2V0dXBgLiBTbywgd2l0aCB0aGUgZmFpbHVyZSBmcm9tIHRoZSBpbml0aWFsIGhhcmR3YXJlIGRldGVjdGlvbiwgdGhlcmUncyBubyB3YXkgdG8gcmVhY2ggdGhlIExFRCBzZXR1cCBjb2RlLlxuXG5MZXQncyBkb3VibGUgY2hlY2suIENhbiBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgYmUgY2FsbGVkIGFueXdoZXJlIGVsc2U/IE5vcGUuIE9ubHkgYHl0OTIxeF9tZGlvX3Byb2JlYCBjYWxscyBpdC4gT2theSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgTEVELXJlbGF0ZWQgY29kZT8gVGhlIGNvZGUgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCwgd2hpY2ggdXNlcyBgZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YCB0byByZWdpc3RlciB0aGUgTEVEcy4gQnV0IGl0J3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHl0OTIxeF9sZWRzX3NldHVwYC4gQW5kIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYC5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIHRoaXM6IFNpbmNlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZhaWxzIGVhcmx5LCB0aGUgd2hvbGUgYHl0OTIxeF9kc2Ffc2V0dXBgIGZ1bmN0aW9uIGZhaWxzIHRvbywgYW5kIHRoZSBMRUQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLlxuXG5JIHdhcyBob3BpbmcgdGhlcmUgd2FzIHNvbWUga2luZCBvZiBtb2NrIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgdGhhdCBTeXprYWxsZXIgKmNvdWxkKiBsZXZlcmFnZSB0byBpbmplY3QgYXJiaXRyYXJ5IHJlc3BvbnNlcy4gVGhlcmUncyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9jay5jYD8gTm8gc3VjaCBsdWNrLiBUaGVyZSBhcmUgdmFyaW91cyBNRElPIGRyaXZlcnMgbGlrZSBgbWRpby1ncGlvLmNgLCBgbWRpby1tdXguY2AsIGFuZCBzbyBvbi5cblxuU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgdXNlIHNvbWV0aGluZyBsaWtlIGBtZGlvLWdwaW9gIHRvIGNvbnN0cnVjdCBhbiBNRElPIGJ1cy4gSG93ZXZlciwgaXQgKmNhbm5vdCogbW9jayB0aGUgcmVzcG9uc2VzIG9mIGEgc3BlY2lmaWMgUEhZL3N3aXRjaCBjaGlwIHVubGVzcyBpdCdzIGVtdWxhdGVkIGluIFFFTVUuIEFuZCBRRU1VLCBhcyBmYXIgYXMgSSBrbm93LCBkb2Vzbid0IGVtdWxhdGUgdGhlIE1vdG9yY29tbSBZVDkyMTUuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSBpcyB1dHRlcmx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIGdvaW5nIHRvIGxvY2sgdGhhdCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjExLjI1NzE0MDI1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczODk0MDkxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MTMuOTk2MDkxMjcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjYzMjI0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiB0aGUgRFNBIERyaXZlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IE1ESU8gZW11bGF0aW9uIHRoYXQgY291bGQgaGVscC4gSSBrbm93IFFFTVUgZG9lcyBoYXZlIHNvbWUgTURJTyBlbXVsYXRpb24sIGJ1dCBpdCdzIHNwZWNpZmljIHRvIGNlcnRhaW4gTUFDcyBhbmQgUEhZcywgYW5kIGNyaXRpY2FsbHksIGRvZXNuJ3Qgc2VlbSB0byB0b3VjaCBEU0Egc3dpdGNoZXMgb24gdGhlIE1ESU8gYnVzLiBTbywgdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbCDigJMgbm8gZGljZSB0aGVyZS4gQW5kIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQsIGF0IGxlYXN0IGFzIEkgdW5kZXJzdGFuZCBpdCwgaXNuJ3Qgc2V0IHVwIHRvIGVtdWxhdGUgdGhpcyBzd2l0Y2ggZWl0aGVyLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiB3YXMgd2hldGhlciBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2UgZUJQRiB0byBtb2NrIHRoZSBgbWRpb2J1c19yZWFkYCBjYWxscywgZWZmZWN0aXZlbHkgYnlwYXNzaW5nIHRoZSBNRElPIHNldHVwLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGVCUEYgZm9yIHRoYXQga2luZCBvZiBoYXJkd2FyZSByZWdpc3RlciBtb2NraW5nLiBJdCByZWxpZXMgb24gcHJlLWV4aXN0aW5nIGtlcm5lbCBpbnRlcmZhY2VzIG9yIFFFTVUncyBidWlsdC1pbiBlbXVsYXRpb24sIGFuZCBzaW5jZSB0aGVyZSdzIG5vIGBtZGlvc2ltYCBvciBzaW1pbGFyIGhlcmUsIHRoYXQgcGF0aCBpcyBibG9ja2VkLiBUaGF0IHNlYWxzIGl0OiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHdlbnQgYmFjayBhbmQgZXhhbWluZWQgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhlIHBhdGNoIGltcGFjdHMgYGxlZHMuY2AgYW5kIGBzbWkuY2Agd2l0aGluIHRoZSBEU0EgZHJpdmVyLiBgc21pLmNgIGhhcyByZWdpc3RlciByZWFkL3dyaXRlIHdyYXBwZXJzLCBhbmQgYGxlZHMuY2AgY29udGFpbnMgTEVELXJlbGF0ZWQgb3BlcmF0aW9ucy4gSG93ZXZlciwgYm90aCBvZiB0aGVzZSByZXF1aXJlIHRoZSBgeXQ5MjF4X3ByaXZgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUsIGNyaXRpY2FsbHksIGlzIGFsbG9jYXRlZCB3aXRoaW4gYHl0OTIxeF9tZGlvX3Byb2JlYC4gSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgdGhlIGBwcml2YCBzdHJ1Y3R1cmUgaXMgZnJlZWQsIGFuZCBubyBMRURzIGFyZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGZ1bmN0aW9ucyBsaWtlIGB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZ2AgYW5kIGB5dDkyMXhfY2xlZF9ibGlua19zZXRgLCBhcmUgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBJdCdzIHVucmVhY2hhYmxlIGNvZGUuXG5cbk5vdywgYSBmaW5hbCwgcXVpY2sgY2hlY2suIFdoYXQgaWYgYHl0OTIxeF9yZWdfcmVhZGAgcmV0dXJucyAwPyBDb3VsZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBzdWNjZWVkIHVuZGVyIHRob3NlIGNpcmN1bXN0YW5jZXM/IElmIGB5dDkyMXhfcmVnX3JlYWRgIGlzIDAsIHRoZW4gdGhlIGBjaGlwaWRgIHZhbHVlIHdpbGwgYmUgMC4gU28gYG1ham9yYCB3b3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgYEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgMClgIGV2YWx1YXRlcyB0by4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBZVDkyMVhfQ0hJUF9JRF9NQUpPUmAganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjIzLjAyMjQxNjI3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0Njc4Nzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJZVDkyMVhfQ0hJUF9JRF9NQUpPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNDEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI0MjpcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtMjktI2RlZmluZSBZVDkyMVhfQ0hJUF9JRFxcdFxcdFxcdDB4ODAwMDhcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDozMDojZGVmaW5lICBZVDkyMVhfQ0hJUF9JRF9NQUpPUlxcdFxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTMxLSNkZWZpbmUgWVQ5MjFYX0VYVF9DUFVfUE9SVFxcdFxcdDB4ODAwMGNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MjUuMTY5MjA4NTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjA2MDU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENoaXAgSWRlbnRpZmljYXRpb24gYW5kIE1ham9yIFZlcnNpb24gTnVtYmVycyoqXG5cbk9rYXksIHNvIGlmIHRoZSBgY2hpcGlkYCB2YWx1ZSBpcyAwLCB0aGUgYG1ham9yYCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYWxzbyBiZSAwLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgZG91YmxlLWNoZWNrIHRoZSBgeXQ5MjF4X2luZm9zYCBkYXRhIHN0cnVjdHVyZSBhZ2Fpbi4gSSBuZWVkIHRvIHBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgZGVmaW5pdGlvbnMgb2YgYFlUOTIxNV9NQUpPUmAgYW5kIGBZVDkyMThfTUFKT1JgIGJlY2F1c2UgdGhlc2UgYXJlIGtleS4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgY2hpcGlkYCwgdGhlIGBtYWpvcmAgdmVyc2lvbiwgYW5kIHRoZXNlIGNvbnN0YW50cyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgcHJvcGVyIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyODYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNDo0NDoyOS4xODk4MTYwODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTUxODMyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWVQ5MjE1X01BSk9SXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExNj1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cXHR7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4OlxcdFxcdFxcXCJZVDkyMTVTQ1xcXCIsIFlUOTIxNV9NQUpPUiwgMSwgMCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTktXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjItXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyMzpcXHRcXHRcXFwiWVQ5MjE1U1xcXCIsIFlUOTIxNV9NQUpPUiwgMiwgMCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjQtXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oNSksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMjctXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEyODpcXHRcXHRcXFwiWVQ5MjE1UkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDAsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTI5LVxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTMyLVxcdHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMzM6XFx0XFx0XFxcIllUOTIxNE5CXFxcIiwgWVQ5MjE1X01BSk9SLCAzLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEzNC1cXHRcXHRZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMSkgfCBZVDkyMVhfUE9SVF9NQVNLX0lOVG4oMyksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMzctXFx0e1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEzODpcXHRcXHRcXFwiWVQ5MjEzTkJcXFwiLCBZVDkyMTVfTUFKT1IsIDMsIDMsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTM5LVxcdFxcdFlUOTIxWF9QT1JUX01BU0tfSU5UbigxKSB8IFlUOTIxWF9QT1JUX01BU0tfSU5UbigzKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI3NC1cXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI3NTpcXHRcXHRwcml2LVxcdTAwM2VjeWNsZV9ucyA9IGluZm8tXFx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MDg9ZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MzctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6ODM4OiNkZWZpbmUgWVQ5MjE1X01BSk9SXFx0MHg5MDAyXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODM5LSNkZWZpbmUgWVQ5MjE4X01BSk9SXFx0MHg5MDAxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE0OjQ0OjMxLjIwNTAwMzMwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk0NjA2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFlUOTIxNV9NQUpPUmAgaXMgZGVmaW5lZCBhcyBgMHg5MDAyYCwgYW5kIGBZVDkyMThfTUFKT1JgIGlzIGRlZmluZWQgYXMgYDB4OTAwMWAuIE5vdywgaWYgdGhlIGBjaGlwaWRgIHZhcmlhYmxlIGhhcHBlbnMgdG8gYmUgemVybyBvciBgMHhmZmZmZmZmZmAsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYG1ham9yYCB2YWx1ZSB3aWxsIGJlIGVpdGhlciB6ZXJvIG9yIGAweGZmZmZgLiBOZWl0aGVyIG9mIHRob3NlIG1ham9yIHZhbHVlcyB3aWxsIG1hdGNoIGVpdGhlciBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzIChgMHg5MDAyYCBvciBgMHg5MDAxYCkuIFRoaXMgbWVhbnMgdGhlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCBpbiB0aGlzIHNjZW5hcmlvLlxuXG5Db25zZXF1ZW50bHksIHNpbmNlIHRoZSBjaGlwIGRldGVjdGlvbiBmYWlscywgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZXhlY3V0ZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50LiBJZiB0aGUgcHJvYmUgZnVuY3Rpb24gbmV2ZXIgcnVucywgdGhlbiB0aGUgc3Vic2VxdWVudCBMRUQgY29kZSwgd2hpY2ggSSdtIGFzc3VtaW5nIHJlbGllcyBvbiBhIHN1Y2Nlc3NmdWwgcHJvYmUsIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIEl04oCZcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgaW4gdGhpcyBzZXR1cC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhbnkgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IHN3aXRjaCBjaGlwIOKAkyBmb3Igc3VjY2Vzc2Z1bCBwcm9iaW5nLiBRRU1VLCBvciBhbnkgdmlydHVhbGl6YXRpb24gc2V0dXAgSSdtIGZhbWlsaWFyIHdpdGgsIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUuIFNvLCBhbnkgYXR0ZW1wdCB0byBmdXp6IHRoaXMgY29kZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBnb2luZyB0byBoaXQgYSBkZWFkIGVuZCwgbWFraW5nIGl0IGEgd2FzdGUgb2YgcmVzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM1OSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTQ6NDQ6MzcuNzk5NjExNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNS9ZVDkyMTggZXRoZXJuZXQgc3dpdGNoIGNoaXBzLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgcmVnaXN0ZXIgYW5kIGV4cGVjdHMgc3BlY2lmaWMgdmFsdWVzIGxpa2UgMHg5MDAyIG9yIDB4OTAwMSkuIFNpbmNlIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiBRRU1VIG9yIGEgZ2VuZXJpYyBNRElPIG1vY2sgZGV2aWNlIGluIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbmV3bHkgYWRkZWQgTEVEIGNsYXNzZGV2IG9wZXJhdGlvbnMgYW5kIFNNSSByZWFkL3dyaXRlIHdyYXBwZXJzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjE4IGV0aGVybmV0IHN3aXRjaCBjaGlwcy4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBiZSBwcmVzZW50IG9uIHRoZSBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHJlZ2lzdGVyIGFuZCBleHBlY3RzIHNwZWNpZmljIHZhbHVlcyBsaWtlIDB4OTAwMiBvciAweDkwMDEpLiBTaW5jZSB0aGVyZSBpcyBubyBlbXVsYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gUUVNVSBvciBhIGdlbmVyaWMgTURJTyBtb2NrIGRldmljZSBpbiB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG5ld2x5IGFkZGVkIExFRCBjbGFzc2RldiBvcGVyYXRpb25zIGFuZCBTTUkgcmVhZC93cml0ZSB3cmFwcGVycyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb7w48[1] Phase: Running StartedAt: 2026-07-07 14:44:48 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7w48[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 14:44:48 +0000 UTC FinishedAt: 2026-07-07 14:44:54 +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,}