Name: series-workflow4n4vd Phase: Failed StartedAt: 2026-09-09 04:36:46 +0000 UTC FinishedAt: 2026-09-09 04:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n4vd[0] Phase: Succeeded StartedAt: 2026-09-09 04:36:46 +0000 UTC FinishedAt: 2026-09-09 04:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n4vd[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 04:36:46 +0000 UTC FinishedAt: 2026-09-09 04:59:03 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDo1ODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBmOTJiMmQwYmY5MjZlLi4yODU0NGYwMGU4Y2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtNjc4LDEwICYjNDM7Njc4LDM4IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNjYW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzOy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcbiYjNDM7ICogYnkgdGhlIHdvcmssIHNvIHJlbW92ZSgpIGFuZCB0aGUgcHJvYmUgdW53aW5kIG1heSBmcmVlIGdjIG9uY2UgaXRcbiYjNDM7ICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6XG4mIzQzOyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuJiM0Mzt7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0ZXN0X2JpdF9hY3F1aXJlKCkgb24gdGhlIHdhaXQgc2lkZS4gKi9cbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHQvKiB3YWtlX3VwX3ZhcigpIHJlcXVpcmVzIGEgZnVsbCBiYXJyaWVyIGJldHdlZW4gdGhlIHVwZGF0ZSBvZiB0aGVcbiYjNDM7XHQgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0d2FrZV91cF92YXIoXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXRpcmUgYSBjeWNsZSB3aG9zZSBleGl0IHJlbW92ZXMgdGhlIGRldmljZTogY2xvc2UgYWRtaXNzaW9uXG4mIzQzOyAqIGZpcnN0IHNvIG5vIG5ldyBjeWNsZSBjYW4gYmUgYWRtaXR0ZWQgaW4gdGhlIHJldGlyZSB3aW5kb3cuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiYjNDM7e1xuJiM0MztcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzLCAqcGFyZW50O1xuIFxuJiM0MztcdGlmIChnYylcbiYjNDM7XHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbiYjNDM7XG4gXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gXG4gXHRidXMgPSBwZGV2LVx1MDAzZWJ1cztcbkBAIC03MDYsOSAmIzQzOzczNCw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4tXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCByZXQ7XG4gXG5AQCAtNzM4LDYgJiM0Mzs3NjUsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0ID09IC1FVElNRURPVVQgfHwgcmV0ID09IC1FUFJPVE8pIHtcbiBcdFx0LyogUGVyZm9ybSBQQ0kgcmVzY2FuIG9uIGRldmljZSBpZiB3ZSBmYWlsZWQgb24gSFdDICovXG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogcmVzdW1lIGZhaWxlZCwgcmVzY2FubmluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XG4gXHRcdG1hbmFfc2Vydl9yZXNjYW4ocGRldik7XG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC03NDgsMjIgJiM0Mzs3NzYsMjUgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSByZXNldCBjeWNsZSBjb21wbGV0ZWRcXG5cJiMzNDspO1xuIFxuIG91dDpcbi1cdGNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIEdETUFfRVFFX0hXQ19GUEdBX1JFQ09ORklHOlxuLVx0XHRtYW5hX3NlcnZfZnBnYShwZGV2KTtcbiYjNDM7XHRcdG1hbmFfc2Vydl9mcGdhKHBkZXYsIGdjKTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOlxuLVx0XHRtYW5hX3NlcnZfcmVzZXQocGRldik7XG4mIzQzO1x0XHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXFxuXCYjMzQ7LCB0eXBlKTtcbiYjNDM7XHRcdGlmIChnYylcbiYjNDM7XHRcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtNzc5LDEyICYjNDM7ODEwLDI2IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNndvcmstXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNndvcmstXHUwMDNlZGV2X2xpc3QpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XG4gXHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2d29yay1cdTAwM2VkZXZfbGlzdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWFuYV9kZXZfcmVjb3ZlcnksIGxpc3QpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNlbGlzdCk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2d29yay1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdG1hbmFfZG9fc2VydmljZShkZXYtXHUwMDNldHlwZSwgZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdFx0LyogU2VyaWFsaXplIHRoZSBkcnZkYXRhIGxvb2t1cCBhbmQgYWRtaXNzaW9uIGFnYWluc3RcbiYjNDM7XHRcdCAqIHByb2JlL3JlbW92ZS4gIERvIG5vdCBjYWxsIHNsZWVwaW5nIGZ1bmN0aW9ucyB3aGlsZVxuJiM0MztcdFx0ICogaG9sZGluZyB0aGUgZGV2aWNlIGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRnYyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0XHRpZiAoZ2MpXG4mIzQzO1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXHUwMDNldHlwZSk7XG4mIzQzO1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFnYylcbiYjNDM7XHRcdFx0bWFuYV9kb19zZXJ2aWNlKGRldi1cdTAwM2V0eXBlLCBkZXYtXHUwMDNlcGRldiwgTlVMTCk7XG4mIzQzO1xuIFx0XHRwY2lfZGV2X3B1dChkZXYtXHUwMDNlcGRldik7XG4gXHRcdGtmcmVlKGRldik7XG4gXG5AQCAtNzk2LDQ4ICYjNDM7ODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cbi1cdG1uc193ayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmssIHNlcnZfd29yayk7XG4tXHRwZGV2ID0gbW5zX3drLVx1MDAzZXBkZXY7XG4mIzQzO1x0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGdkbWFfY29udGV4dCwgc2Vydl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2MtXHUwMDNlZGV2KTtcbiBcbi1cdGlmIChwZGV2KVxuLVx0XHRtYW5hX2RvX3NlcnZpY2UobW5zX3drLVx1MDAzZXR5cGUsIHBkZXYpO1xuJiM0MztcdG1hbmFfZG9fc2VydmljZShnYy1cdTAwM2VzZXJ2X3R5cGUsIHBkZXYsIGdjKTtcbiBcbiYjNDM7XHQvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaFxuJiM0MztcdCAqIGZyZWVzIGdjIGJlZm9yZSByZXR1cm5pbmcuICBPbmx5IHRvdWNoIHRoZSBwZGV2IGFuZCB0aGUgbW9kdWxlXG4mIzQzO1x0ICogcmVmZXJlbmNlIGZyb20gaGVyZSBvbjsgYm90aCBhcmUgaGVsZCB1bnRpbCB0aGlzIHBvaW50IGRyb3BzIHRoZW0uXG4mIzQzO1x0ICovXG4gXHRwY2lfZGV2X3B1dChwZGV2KTtcbi1cdGtmcmVlKG1uc193ayk7XG4gXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiB9XG4gXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcbi1cbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O0FscmVhZHkgaW4gc2VydmljZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzZXRfYml0KEdDX1JFTU9WSU5HKSAmIzQzOyBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluXG4mIzQzO1x0ICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLFxuJiM0MztcdCAqIHNvIGVpdGhlciB0aGlzIHJlYWQgc2VlcyBHQ19SRU1PVklORyBhbmQgdGhlIGN5Y2xlIGFib3J0cywgb3JcbiYjNDM7XHQgKiByZW1vdmUoKSBvYnNlcnZlcyBHQ19JTl9TRVJWSUNFIGFuZCB3YWl0cyBmb3IgdGhlIGN5Y2xlIHRvIHJldGlyZVxuJiM0MztcdCAqIGJlZm9yZSBpdCBmcmVlcyBnYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LCBcJiMzNDtEZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O01vZHVsZSBpcyB1bmxvYWRpbmdcXG5cJiMzNDspO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdG1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghbW5zX3drKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbiBcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCYjMzQ7U3RhcnQgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXG5cJiMzNDssIHR5cGUpO1xuLVx0bW5zX3drLVx1MDAzZXBkZXYgPSB0b19wY2lfZGV2KGdjLVx1MDAzZWRldik7XG4tXHRtbnNfd2stXHUwMDNldHlwZSA9IHR5cGU7XG4tXHRwY2lfZGV2X2dldChtbnNfd2stXHUwMDNlcGRldik7XG4tXHRJTklUX1dPUksoXHUwMDI2bW5zX3drLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuLVx0c2NoZWR1bGVfd29yayhcdTAwMjZtbnNfd2stXHUwMDNlc2Vydl93b3JrKTtcbiYjNDM7XG4mIzQzO1x0Z2MtXHUwMDNlc2Vydl90eXBlID0gdHlwZTtcbiYjNDM7XHRwY2lfZGV2X2dldCh0b19wY2lfZGV2KGdjLVx1MDAzZWRldikpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZnYy1cdTAwM2VzZXJ2X3dvcmspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTk1NywxNCAmIzQzOzEwMDMsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRjYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOlxuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O1JlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXG5cJiMzNDssIHR5cGUpO1xuIFxuLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGlmICghdGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIERldmljZSBpcyBpbiBwcm9iZSBhbmQgd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldFxuLVx0XHRcdCAqIGV2ZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBkZXRlY3QgdGhhdCB0aGUgZmxhZ1xuLVx0XHRcdCAqIGhhcyBjaGFuZ2VkIGFuZCBwZXJmb3JtIHNlcnZpY2UgcHJvY2VkdXJlLlxuJiM0MztcdFx0XHQgKiBQcm9iZSBub3QgY29tcGxldGVkOiBsYXRjaCB0aGUgZXZlbnQgYW5kIGxldCB0aGVcbiYjNDM7XHRcdFx0ICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi5cbiYjNDM7XHRcdFx0ICogTmV2ZXIgYWRtaXQgc2VydmljZSB3b3JrIGJlZm9yZSBwcm9iZSBzdWNjZXNzO1xuJiM0MztcdFx0XHQgKiB0aGUgc3VjY2VzcyByZS1jaGVjayBiZWxvdyBwcmVzZXJ2ZXMgYW4gZXZlbnRcbiYjNDM7XHRcdFx0ICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uXG4gXHRcdFx0ICovXG4tXHRcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1NlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtTZXJ2aWNlIGlzIHRvIGJlIHByb2Nlc3NlZCBpbiBwcm9iZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCB0eXBlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7XG5AQCAtMjU0Niw2ICYjNDM7MjU5OCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGdjLVx1MDAzZWJhcjBfdmEgPSBiYXIwX3ZhO1xuIFx0Z2MtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmdjLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuIFx0eGFfaW5pdChcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZXR1cChwZGV2KTtcbkBAIC0yNTU4LDIyICYjNDM7MjYxMSwzNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRlcnIgPSBtYW5hX3JkbWFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYV9pYik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGNsZWFudXBfbWFuYTtcbiYjNDM7XHRcdGdvdG8gc2VydmljZV9xdWllc2NlO1xuIFxuIFx0LypcbiBcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcbi1cdCAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS5cbiYjNDM7XHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxuJiM0MztcdCAqIHN1Y2Nlc3MgYml0IGJlZm9yZSB0aGUgbGF0Y2ggY2hlY2sgcGFpcnMgd2l0aCB0aGUgaGFuZGxlciYjMzk7c1xuJiM0MztcdCAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXNcbiYjNDM7XHQgKiBhZG1pdHRlZCByYXRoZXIgdGhhbiBsb3N0LlxuIFx0ICovXG4tXHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdHNldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRlcnIgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuJiM0MztcdFx0Z290byBzZXJ2aWNlX3F1aWVzY2U7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1jbGVhbnVwX21hbmFfcmRtYTpcbiYjNDM7c2VydmljZV9xdWllc2NlOlxuJiM0MztcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcbiYjNDM7XHQgKiBoYXMgcnVuOiBjbG9zZSBhZG1pc3Npb24gYW5kIHJldGlyZSBhbiBpbi1mbGlnaHQgY3ljbGVcbiYjNDM7XHQgKiBiZWZvcmUgYW55IHRlYXJkb3duLCBsaWtlIG1hbmFfZ2RfcmVtb3ZlKCkgZG9lcy4gIEVhcmxpZXJcbiYjNDM7XHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuJiM0MztcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZnYy1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpO1xuIFx0bWFuYV9yZG1hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbi1jbGVhbnVwX21hbmE6XG4gXHRtYW5hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG4gY2xlYW51cF9nZDpcbiBcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XG5AQCAtMjU4MSw2ICYjNDM7MjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4gXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbiBmcmVlX2djOlxuJiM0MztcdC8qIEJhY2tzdG9wOiBkcmFpbiBiZWZvcmUgZXZlcnkgdmZyZWUoKS4gKi9cbiYjNDM7XHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4mIzQzO1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0ICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4gXHR2ZnJlZShnYyk7XG4gcmVsZWFzZV9yZWdpb246XG5AQCAtMjYyNCw2ICYjNDM7MjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiYjNDM7XHQvKiBDbG9zZSBhZG1pc3Npb24gYW5kIHJldGlyZSBhbiBpbi1mbGlnaHQgY3ljbGUgYmVmb3JlIGFueVxuJiM0MztcdCAqIHRlYXJkb3duOiB0aGUgc2VydmljZSB3b3JrIGlzIHRoZSBvbmx5IHVzZXIgb2YgZ2MgdGhhdFxuJiM0MztcdCAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2VcbiYjNDM7XHQgKiBleGl0cyByZXRpcmUgYmVmb3JlIHRha2luZyB0aGUgUENJIHJlc2Nhbi9yZW1vdmUgbG9jaywgc29cbiYjNDM7XHQgKiB0aGlzIHdhaXQgY2Fubm90IGRlYWRsb2NrIGFnYWluc3QgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4mIzQzO1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0ICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSk7XG4mIzQzO1xuIFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4gXG4gXHRtYW5hX3JkbWFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuQEAgLTI2MzUsNiAmIzQzOzI3MjUsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGdjLVx1MDAzZWJhcjBfdmEpO1xuIFxuJiM0MztcdC8qIFByZXZlbnQgbGF0ZSByZWNvdmVyeSB3b3JrIGZyb20gdXNpbmcgZnJlZWQgZ2MuICovXG4mIzQzO1x0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0dmZyZWUoZ2MpO1xuIFxuIFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTkyNCw4ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBBbHJlYWR5IGluIHNlcnZpY2UsIGhlbmNlIHR4IHF1ZXVlIHJlc2V0IGlzIG5vdCByZXF1aXJlZC4qL1xuLVx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIE5vdGU6IElmIHRoZXJlIGFyZSBwZW5kaW5nIHF1ZXVlIHJlc2V0IHdvcmsgZm9yIHRoaXMgcG9ydChhcGMpLFxuQEAgLTQwNTYsOSAmIzQzOzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRkZXZfd2FybihnYy1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O0dmIHN0YXRzIHdrIGhhbmRsZXI6IGdmIHN0YXRzIHF1ZXJ5IHRpbWVkIG91dC5cXG5cJiMzNDspO1xuIFx0XHQvKiBBcyBIV0MgdGltZWQgb3V0LCBpbmRpY2F0aW5nIGEgZmF1bHR5IEhXIHN0YXRlIGFuZCBuZWVkcyBhXG4tXHRcdCAqIHJlc2V0LlxuJiM0MztcdFx0ICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXNcbiYjNDM7XHRcdCAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGVcbiYjNDM7XHRcdCAqIEhXQyBjaGFubmVsIGl0c2VsZiBhbmQgY2Fubm90IGRyYWluIGEgY3ljbGUuXG4gXHRcdCAqL1xuLVx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2YWMtXHUwMDNlZ2Zfc3RhdHNfd29yaywgTUFOQV9HRl9TVEFUU19QRVJJT0QpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDMwODk1MGY5YjU0YjAuLmZkNGI5NjdjODFmNzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbkBAIC0yMjgsMTIgJiM0MzsyMjgsNiBAQCBlbnVtIGdkbWFfcGFnZV90eXBlIHtcbiBcbiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDBcbiBcbi1zdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZfd29yaztcbi1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuLVx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4tfTtcbi1cbiBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG5AQCAtNDIwLDYgJiM0Mzs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7XG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xuIFx0R0NfUFJPQkVfU1VDQ0VFREVEXHQ9IDAsXG4gXHRHQ19JTl9TRVJWSUNFXHRcdD0gMSxcbiYjNDM7XHRHQ19SRU1PVklOR1x0XHQ9IDIsXG4mIzQzO1x0R0NfU0VSVklDRV9EVVJJTkdfUFJPQkVcdD0gMyxcbiB9O1xuIFxuIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuQEAgLTQ3OSw2ICYjNDM7NDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFxuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XG4gXG4mIzQzO1x0LyogVGhlIGluLWZsaWdodCBNQU5BIHNlcnZpY2UgY3ljbGUsIHF1ZXVlZCBvbiB0aGUgc3lzdGVtIHdvcmtxdWV1ZTpcbiYjNDM7XHQgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0c2Vydl93b3JrO1xuJiM0MztcdGVudW0gZ2RtYV9lcWVfdHlwZVx0c2Vydl90eXBlO1xuJiM0MztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXG4gXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQyMTk2YWMxNzU1ZjU3YWUyODY4MjA0ODVhYWUwYmJmZWM0MTQ1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTg6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC02NzgsMTAgJiM0Mzs2NzgsMzggQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2NhbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKIH0KIAotc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7LyogUmV0aXJlIG9uZSBzZXJ2aWNlIGN5Y2xlOiBHQ19JTl9TRVJWSUNFIGlzIHRoZSBsYXN0IHN0YXRlIHB1Ymxpc2hlZAomIzQzOyAqIGJ5IHRoZSB3b3JrLCBzbyByZW1vdmUoKSBhbmQgdGhlIHByb2JlIHVud2luZCBtYXkgZnJlZSBnYyBvbmNlIGl0CiYjNDM7ICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6CiYjNDM7ICogcmVtb3ZhbCBjYW4gYmUgd2FpdGluZyBvbiB0aGUgYml0IHdoaWxlIGhvbGRpbmcgdGhhdCBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQomIzQzO3sKJiM0MzsJLyogUGFpcnMgd2l0aCB0ZXN0X2JpdF9hY3F1aXJlKCkgb24gdGhlIHdhaXQgc2lkZS4gKi8KJiM0MzsJY2xlYXJfYml0X3VubG9jayhHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncyk7CiYjNDM7CS8qIHdha2VfdXBfdmFyKCkgcmVxdWlyZXMgYSBmdWxsIGJhcnJpZXIgYmV0d2VlbiB0aGUgdXBkYXRlIG9mIHRoZQomIzQzOwkgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLgomIzQzOwkgKi8KJiM0MzsJc21wX21iX19hZnRlcl9hdG9taWMoKTsKJiM0MzsJd2FrZV91cF92YXIoJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXRpcmUgYSBjeWNsZSB3aG9zZSBleGl0IHJlbW92ZXMgdGhlIGRldmljZTogY2xvc2UgYWRtaXNzaW9uCiYjNDM7ICogZmlyc3Qgc28gbm8gbmV3IGN5Y2xlIGNhbiBiZSBhZG1pdHRlZCBpbiB0aGUgcmV0aXJlIHdpbmRvdy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKJiM0Mzt7CiYjNDM7CXNldF9iaXQoR0NfUkVNT1ZJTkcsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKJiM0MzsJbWFuYV9zZXJ2aWNlX2RvbmUoZ2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cywgKnBhcmVudDsKIAomIzQzOwlpZiAoZ2MpCiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7CiYjNDM7CiAJcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOwogCiAJYnVzID0gcGRldi0mZ3Q7YnVzOwpAQCAtNzA2LDkgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKIH0KIAotc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7Ci0Jc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjOwogCWludCByZXQ7CiAKQEAgLTczOCw2ICYjNDM7NzY1LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWlmIChyZXQgPT0gLUVUSU1FRE9VVCB8fCByZXQgPT0gLUVQUk9UTykgewogCQkvKiBQZXJmb3JtIFBDSSByZXNjYW4gb24gZGV2aWNlIGlmIHdlIGZhaWxlZCBvbiBIV0MgKi8KIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcbiYjMzQ7KTsKJiM0MzsJCW1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTsKIAkJbWFuYV9zZXJ2X3Jlc2NhbihwZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTc0OCwyMiAmIzQzOzc3NiwyNSBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O01BTkEgcmVzZXQgY3ljbGUgY29tcGxldGVkXG4mIzM0Oyk7CiAKIG91dDoKLQljbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hbmFfZG9fc2VydmljZShlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9kb19zZXJ2aWNlKGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBHRE1BX0VRRV9IV0NfRlBHQV9SRUNPTkZJRzoKLQkJbWFuYV9zZXJ2X2ZwZ2EocGRldik7CiYjNDM7CQltYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDoKLQkJbWFuYV9zZXJ2X3Jlc2V0KHBkZXYpOwomIzQzOwkJbWFuYV9zZXJ2X3Jlc2V0KHBkZXYsIGdjKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O01BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXG4mIzM0OywgdHlwZSk7CiYjNDM7CQlpZiAoZ2MpCiYjNDM7CQkJbWFuYV9zZXJ2aWNlX2RvbmUoZ2MpOwogCQlicmVhazsKIAl9CiB9CkBAIC03NzksMTIgJiM0Mzs4MTAsMjYgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7d29yay0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7d29yay0mZ3Q7ZGV2X2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKJiM0MzsKIAkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3dvcmstJmd0O2Rldl9saXN0LAogCQkJCSAgICAgICBzdHJ1Y3QgbWFuYV9kZXZfcmVjb3ZlcnksIGxpc3QpOwogCQlsaXN0X2RlbCgmYW1wO2Rldi0mZ3Q7bGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt3b3JrLSZndDtsb2NrLCBmbGFncyk7CiAKLQkJbWFuYV9kb19zZXJ2aWNlKGRldi0mZ3Q7dHlwZSwgZGV2LSZndDtwZGV2KTsKJiM0MzsJCS8qIFNlcmlhbGl6ZSB0aGUgZHJ2ZGF0YSBsb29rdXAgYW5kIGFkbWlzc2lvbiBhZ2FpbnN0CiYjNDM7CQkgKiBwcm9iZS9yZW1vdmUuICBEbyBub3QgY2FsbCBzbGVlcGluZyBmdW5jdGlvbnMgd2hpbGUKJiM0MzsJCSAqIGhvbGRpbmcgdGhlIGRldmljZSBsb2NrLgomIzQzOwkJICovCiYjNDM7CQlkZXZpY2VfbG9jaygmYW1wO2Rldi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCWdjID0gcGNpX2dldF9kcnZkYXRhKGRldi0mZ3Q7cGRldik7CiYjNDM7CQlpZiAoZ2MpCiYjNDM7CQkJbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIGRldi0mZ3Q7dHlwZSk7CiYjNDM7CQlkZXZpY2VfdW5sb2NrKCZhbXA7ZGV2LSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwkJaWYgKCFnYykKJiM0MzsJCQltYW5hX2RvX3NlcnZpY2UoZGV2LSZndDt0eXBlLCBkZXYtJmd0O3BkZXYsIE5VTEwpOwomIzQzOwogCQlwY2lfZGV2X3B1dChkZXYtJmd0O3BkZXYpOwogCQlrZnJlZShkZXYpOwogCkBAIC03OTYsNDggJiM0Mzs4NDEsNDkgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7Ci0Jc3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0KLQltbnNfd2sgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1hbmFfc2Vydl93b3JrLCBzZXJ2X3dvcmspOwotCXBkZXYgPSBtbnNfd2stJmd0O3BkZXY7CiYjNDM7CXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBnZG1hX2NvbnRleHQsIHNlcnZfd29yayk7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihnYy0mZ3Q7ZGV2KTsKIAotCWlmIChwZGV2KQotCQltYW5hX2RvX3NlcnZpY2UobW5zX3drLSZndDt0eXBlLCBwZGV2KTsKJiM0MzsJbWFuYV9kb19zZXJ2aWNlKGdjLSZndDtzZXJ2X3R5cGUsIHBkZXYsIGdjKTsKIAomIzQzOwkvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaAomIzQzOwkgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZQomIzQzOwkgKiByZWZlcmVuY2UgZnJvbSBoZXJlIG9uOyBib3RoIGFyZSBoZWxkIHVudGlsIHRoaXMgcG9pbnQgZHJvcHMgdGhlbS4KJiM0MzsJICovCiAJcGNpX2Rldl9wdXQocGRldik7Ci0Ja2ZyZWUobW5zX3drKTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAogaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193azsKLQogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSkgewogCQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O0FscmVhZHkgaW4gc2VydmljZVxuJiMzNDspOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAomIzQzOwkvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICYjNDM7IHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4KJiM0MzsJICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLAomIzQzOwkgKiBzbyBlaXRoZXIgdGhpcyByZWFkIHNlZXMgR0NfUkVNT1ZJTkcgYW5kIHRoZSBjeWNsZSBhYm9ydHMsIG9yCiYjNDM7CSAqIHJlbW92ZSgpIG9ic2VydmVzIEdDX0lOX1NFUlZJQ0UgYW5kIHdhaXRzIGZvciB0aGUgY3ljbGUgdG8gcmV0aXJlCiYjNDM7CSAqIGJlZm9yZSBpdCBmcmVlcyBnYy4KJiM0MzsJICovCiYjNDM7CWlmICh0ZXN0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O0RldmljZSBpcyBiZWluZyByZW1vdmVkXG4mIzM0Oyk7CiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKIAkJZGV2X2luZm8oZ2MtJmd0O2RldiwgJiMzNDtNb2R1bGUgaXMgdW5sb2FkaW5nXG4mIzM0Oyk7Ci0JCWNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncyk7CiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCW1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTsKLQlpZiAoIW1uc193aykgewotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJY2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJZGV2X2luZm8oZ2MtJmd0O2RldiwgJiMzNDtTdGFydCBNQU5BIHNlcnZpY2UgdHlwZTolZFxuJiMzNDssIHR5cGUpOwotCW1uc193ay0mZ3Q7cGRldiA9IHRvX3BjaV9kZXYoZ2MtJmd0O2Rldik7Ci0JbW5zX3drLSZndDt0eXBlID0gdHlwZTsKLQlwY2lfZGV2X2dldChtbnNfd2stJmd0O3BkZXYpOwotCUlOSVRfV09SSygmYW1wO21uc193ay0mZ3Q7c2Vydl93b3JrLCBtYW5hX3NlcnZfZnVuYyk7Ci0Jc2NoZWR1bGVfd29yaygmYW1wO21uc193ay0mZ3Q7c2Vydl93b3JrKTsKJiM0MzsKJiM0MzsJZ2MtJmd0O3NlcnZfdHlwZSA9IHR5cGU7CiYjNDM7CXBjaV9kZXZfZ2V0KHRvX3BjaV9kZXYoZ2MtJmd0O2RldikpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV93cSwgJmFtcDtnYy0mZ3Q7c2Vydl93b3JrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTU3LDE0ICYjNDM7MTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSkKIAljYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOgogCQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O1JlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcbiYjMzQ7LCB0eXBlKTsKIAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCAmYW1wO2djLSZndDtmbGFncykpIHsKJiM0MzsJCWlmICghdGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCAmYW1wO2djLSZndDtmbGFncykpIHsKIAkJCS8qCi0JCQkgKiBEZXZpY2UgaXMgaW4gcHJvYmUgYW5kIHdlIHJlY2VpdmVkIGEgaGFyZHdhcmUgcmVzZXQKLQkJCSAqIGV2ZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBkZXRlY3QgdGhhdCB0aGUgZmxhZwotCQkJICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuCiYjNDM7CQkJICogUHJvYmUgbm90IGNvbXBsZXRlZDogbGF0Y2ggdGhlIGV2ZW50IGFuZCBsZXQgdGhlCiYjNDM7CQkJICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi4KJiM0MzsJCQkgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7CiYjNDM7CQkJICogdGhlIHN1Y2Nlc3MgcmUtY2hlY2sgYmVsb3cgcHJlc2VydmVzIGFuIGV2ZW50CiYjNDM7CQkJICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uCiAJCQkgKi8KLQkJCWRldl9pbmZvKGdjLSZndDtkZXYsCi0JCQkJICYjMzQ7U2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcbiYjMzQ7KTsKJiM0MzsJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsCiYjNDM7CQkJCQkgICAgICAmYW1wO2djLSZndDtmbGFncykpCiYjNDM7CQkJCWRldl9pbmZvKGdjLSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtTZXJ2aWNlIGlzIHRvIGJlIHByb2Nlc3NlZCBpbiBwcm9iZVxuJiMzNDspOwomIzQzOwkJCWVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7CiAJCQlicmVhazsKIAkJfQogCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7CkBAIC0yNTQ2LDYgJiM0MzsyNTk4LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCiAJZ2MtJmd0O2JhcjBfdmEgPSBiYXIwX3ZhOwogCWdjLSZndDtkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7Z2MtJmd0O3NlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpOwogCXhhX2luaXQoJmFtcDtnYy0mZ3Q7aXJxX2NvbnRleHRzKTsKIAogCWVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7CkBAIC0yNTU4LDIyICYjNDM7MjYxMSwzNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAllcnIgPSBtYW5hX3JkbWFfcHJvYmUoJmFtcDtnYy0mZ3Q7bWFuYV9pYik7CiAJaWYgKGVycikKLQkJZ290byBjbGVhbnVwX21hbmE7CiYjNDM7CQlnb3RvIHNlcnZpY2VfcXVpZXNjZTsKIAogCS8qCiAJICogSWYgYSBoYXJkd2FyZSByZXNldCBldmVudCBoYXMgb2NjdXJyZWQgb3ZlciBIV0MgZHVyaW5nIHByb2JlLAotCSAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS4KJiM0MzsJICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLiAgU3RvcmluZyB0aGUKJiM0MzsJICogc3VjY2VzcyBiaXQgYmVmb3JlIHRoZSBsYXRjaCBjaGVjayBwYWlycyB3aXRoIHRoZSBoYW5kbGVyJiMzOTtzCiYjNDM7CSAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXMKJiM0MzsJICogYWRtaXR0ZWQgcmF0aGVyIHRoYW4gbG9zdC4KIAkgKi8KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsICZhbXA7Z2MtJmd0O2ZsYWdzKSkgewomIzQzOwlzZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19TRVJWSUNFX0RVUklOR19QUk9CRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKSB7CiAJCWVyciA9IC1FUFJPVE87Ci0JCWdvdG8gY2xlYW51cF9tYW5hX3JkbWE7CiYjNDM7CQlnb3RvIHNlcnZpY2VfcXVpZXNjZTsKIAl9CiAKIAlyZXR1cm4gMDsKIAotY2xlYW51cF9tYW5hX3JkbWE6CiYjNDM7c2VydmljZV9xdWllc2NlOgomIzQzOwkvKiBUaGUgc3RhdHMgd29yayBjYW4gYWRtaXQgYSBzZXJ2aWNlIGN5Y2xlIG9uY2UgbWFuYV9wcm9iZSgpCiYjNDM7CSAqIGhhcyBydW46IGNsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZQomIzQzOwkgKiBiZWZvcmUgYW55IHRlYXJkb3duLCBsaWtlIG1hbmFfZ2RfcmVtb3ZlKCkgZG9lcy4gIEVhcmxpZXIKJiM0MzsJICogZmFpbHVyZSBwb2ludHMgY2Fubm90IGhhdmUgYWRtaXR0ZWQgc2VydmljZSB3b3JrLgomIzQzOwkgKi8KJiM0MzsJc2V0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW4KJiM0MzsJICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS4KJiM0MzsJICovCiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7Z2MtJmd0O2ZsYWdzLAomIzQzOwkJICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSk7CiAJbWFuYV9yZG1hX3JlbW92ZSgmYW1wO2djLSZndDttYW5hX2liKTsKLWNsZWFudXBfbWFuYToKIAltYW5hX3JlbW92ZSgmYW1wO2djLSZndDttYW5hLCBmYWxzZSk7CiBjbGVhbnVwX2dkOgogCW1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7CkBAIC0yNTgxLDYgJiM0MzsyNjQ5LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl4YV9kZXN0cm95KCZhbXA7Z2MtJmd0O2lycV9jb250ZXh0cyk7CiAJcGNpX2lvdW5tYXAocGRldiwgYmFyMF92YSk7CiBmcmVlX2djOgomIzQzOwkvKiBCYWNrc3RvcDogZHJhaW4gYmVmb3JlIGV2ZXJ5IHZmcmVlKCkuICovCiYjNDM7CXNldF9iaXQoR0NfUkVNT1ZJTkcsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluCiYjNDM7CSAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwl3YWl0X3Zhcl9ldmVudCgmYW1wO2djLSZndDtmbGFncywKJiM0MzsJCSAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncykpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl2ZnJlZShnYyk7CiByZWxlYXNlX3JlZ2lvbjoKQEAgLTI2MjQsNiAmIzQzOzI3MDAsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKJiM0MzsJLyogQ2xvc2UgYWRtaXNzaW9uIGFuZCByZXRpcmUgYW4gaW4tZmxpZ2h0IGN5Y2xlIGJlZm9yZSBhbnkKJiM0MzsJICogdGVhcmRvd246IHRoZSBzZXJ2aWNlIHdvcmsgaXMgdGhlIG9ubHkgdXNlciBvZiBnYyB0aGF0CiYjNDM7CSAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2UKJiM0MzsJICogZXhpdHMgcmV0aXJlIGJlZm9yZSB0YWtpbmcgdGhlIFBDSSByZXNjYW4vcmVtb3ZlIGxvY2ssIHNvCiYjNDM7CSAqIHRoaXMgd2FpdCBjYW5ub3QgZGVhZGxvY2sgYWdhaW5zdCB0aGVtLgomIzQzOwkgKi8KJiM0MzsJc2V0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW4KJiM0MzsJICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS4KJiM0MzsJICovCiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7Z2MtJmd0O2ZsYWdzLAomIzQzOwkJICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSk7CiYjNDM7CiAJcGNpX2Rpc2FibGVfc3Jpb3YocGRldik7CiAKIAltYW5hX3JkbWFfcmVtb3ZlKCZhbXA7Z2MtJmd0O21hbmFfaWIpOwpAQCAtMjYzNSw2ICYjNDM7MjcyNSw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJcGNpX2lvdW5tYXAocGRldiwgZ2MtJmd0O2JhcjBfdmEpOwogCiYjNDM7CS8qIFByZXZlbnQgbGF0ZSByZWNvdmVyeSB3b3JrIGZyb20gdXNpbmcgZnJlZWQgZ2MuICovCiYjNDM7CXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl2ZnJlZShnYyk7CiAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKQEAgLTkyNCw4ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKQogCQlyZXR1cm47CiAJfQogCi0JLyogQWxyZWFkeSBpbiBzZXJ2aWNlLCBoZW5jZSB0eCBxdWV1ZSByZXNldCBpcyBub3QgcmVxdWlyZWQuKi8KLQlpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKiBOb3RlOiBJZiB0aGVyZSBhcmUgcGVuZGluZyBxdWV1ZSByZXNldCB3b3JrIGZvciB0aGlzIHBvcnQoYXBjKSwKQEAgLTQwNTYsOSAmIzQzOzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlkZXZfd2FybihnYy0mZ3Q7ZGV2LAogCQkJICYjMzQ7R2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxuJiMzNDspOwogCQkvKiBBcyBIV0MgdGltZWQgb3V0LCBpbmRpY2F0aW5nIGEgZmF1bHR5IEhXIHN0YXRlIGFuZCBuZWVkcyBhCi0JCSAqIHJlc2V0LgomIzQzOwkJICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXMKJiM0MzsJCSAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGUKJiM0MzsJCSAqIEhXQyBjaGFubmVsIGl0c2VsZiBhbmQgY2Fubm90IGRyYWluIGEgY3ljbGUuCiAJCSAqLwotCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpOwomIzQzOwkJaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCW1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7CiAJCXJldHVybjsKIAl9CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7YWMtJmd0O2dmX3N0YXRzX3dvcmssIE1BTkFfR0ZfU1RBVFNfUEVSSU9EKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTIyOCwxMiAmIzQzOzIyOCw2IEBAIGVudW0gZ2RtYV9wYWdlX3R5cGUgewogCiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDAKIAotc3RydWN0IG1hbmFfc2Vydl93b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Vydl93b3JrOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCWVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlOwotfTsKLQogc3RydWN0IGdkbWFfbWVtX2luZm8gewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIApAQCAtNDIwLDYgJiM0Mzs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7CiBlbnVtIGdkbWFfY29udGV4dF9mbGFncyB7CiAJR0NfUFJPQkVfU1VDQ0VFREVECT0gMCwKIAlHQ19JTl9TRVJWSUNFCQk9IDEsCiYjNDM7CUdDX1JFTU9WSU5HCQk9IDIsCiYjNDM7CUdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFCT0gMywKIH07CiAKIHN0cnVjdCBnZG1hX2NvbnRleHQgewpAQCAtNDc5LDYgJiM0Mzs0NzUsMTIgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2VydmljZV93cTsKIAomIzQzOwkvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOgomIzQzOwkgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXNlcnZfd29yazsKJiM0MzsJZW51bSBnZG1hX2VxZV90eXBlCXNlcnZfdHlwZTsKJiM0MzsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCS8qIFByb3RlY3QgYWNjZXNzIHRvIEdJQyBjb250ZXh0ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFOQSBEcml2ZXIgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLCBhbmQgYGluY2x1ZGUvbmV0L21hbmEvZ2RtYS5oYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIE1pY3Jvc29mdCBNQU5BIGV0aGVybmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgTUFOQSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgU3l6a2FsbGVyIHR5cGljYWxseSB0YXJnZXRzLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCYjMzk7cyByZWZlciBiYWNrIHRvIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0LiBJdCBsaXN0cyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IOKAkyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzLCBzdHVmZiB0aGF0IHJlcXVpcmVzIHNwZWNpYWxpemVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGluZ3MgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBJcyBNQU5BIG9uIHRoYXQgbGlzdD8KCkFoLCByaWdodCwgTUFOQSBpcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQmIzM5O3MgYSBQQ0kgZGV2aWNlIHNwZWNpZmljYWxseSBmb3IgQXp1cmUgVk1zIGFuZCBIeXBlci1WLiBTbyB0aGF0JiMzOTtzIHRoZSBrZXk6IGl0ICppcyogYW4gQXp1cmUtc3BlY2lmaWMgdGhpbmcuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgY2FuIGJlIGFjY2Vzc2VkIGluIGEgc3RhbmRhcmQsIGZ1enphYmxlIGVudmlyb25tZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnYCBvciB3aXRoaW4gdGhlIGBtYW5hYCBkaXJlY3Rvcnkg4oCTIHRvIHNlZSBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgaWYgYW55IGRlcGVuZGVuY2llcyBwb2ludCB0byBoYXJkd2FyZSB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlbXVsYXRlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGVudmlyb25tZW50IHRoZSBNQU5BIGRyaXZlciBleHBlY3RzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IHRvIHJlcXVpcmUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQmIzM5O3MgYSBub24tc3RhcnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlDUk9TT0ZUX01BTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MTg6Y29uZmlnIE1JQ1JPU09GVF9NQU5BXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNaWNyb3NvZnQgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIE1pY3Jvc29mdCBFdGhlcm5ldCBkcml2ZXIuIFRvIGdldCB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHRoZSBkZXBlbmRlbmNpZXMgdGhleSByZWx5IG9uIChrZXJuZWwgZmVhdHVyZXMsIG90aGVyIGRyaXZlcnMsIGV0Yy4pLCBhbmQgcHJvYmFibHkgc29tZSBkb2N1bWVudGF0aW9uIHNuaXBwZXRzIHRvby4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBncm91bmQgdHJ1dGggb24gd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlIHRvIHR1cm4gYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGBLY29uZmlnYCBpcyBjcml0aWNhbCB0byBwcm9wZXJseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBkcml2ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBNaWNyb3NvZnQgQXp1cmUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IE5ldHdvcmsgRGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxMjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgdGhlXG4gIDEzOlx0XHQgIHF1ZXN0aW9uIGFib3V0IE1pY3Jvc29mdCBuZXR3b3JrIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcbiAgMTQ6XHRcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb24uXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTUlDUk9TT0ZUX01BTkFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKEFSTTY0IFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXG4gIDIyOlx0XHRkZXBlbmRzIG9uIFBDSV9IWVBFUlZcbiAgMjM6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gIDI0Olx0XHRzZWxlY3QgRElNTElCXG4gIDI1Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDI2Olx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKS5cbiAgMjk6XHRcdCAgU28gZmFyLCB0aGUgZHJpdmVyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFg4Nl82NC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMzI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYW5hLlxuICAzMzpcdFxuICAzNDpcdGVuZGlmICNORVRfVkVORE9SX01JQ1JPU09GVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTUlDUk9TT0ZUX01BTkEgRHJpdmVyIERlcGVuZGVuY3kqKgoKT2theSwgc28gYE1JQ1JPU09GVF9NQU5BYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQ0lfSFlQRVJWYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW52ZXN0aWdhdGUgYm90aC4gYFBDSV9IWVBFUlZgIGlzIHRoZSBIeXBlci1WIFBDSSBmcm9udGVuZCBkcml2ZXIsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBjcnVjaWFsIGZvciBQQ0kgcGFzcy10aHJvdWdoIG9yIHRoZSBzeW50aGV0aWMgUENJIGJ1cyB3aXRoaW4gdGhlIEh5cGVyLVYgZW52aXJvbm1lbnQuIEFuZCB0aGVuLCBgTUFOQWDigJR0aGF0JiMzOTtzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBTcGVjaWZpY2FsbHksIHRoZSBwaHlzaWNhbCBBU0lDIG9yIGhhcmR3YXJlIFNtYXJ0TklDIGZvdW5kIHdpdGhpbiBBenVyZSYjMzk7cyBIeXBlci1WIHNldHVwcy4KCk5vdywgbXkga2V5IHF1ZXN0aW9uIGJlY29tZXM6IGlzIE1BTkEgZW11bGF0ZWQgaW4gYSB0eXBpY2FsIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50PyAgUXVpY2tseSwgSSByZWFsaXplIGl0JiMzOTtzIG5vdC4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBvZmZlciB0aGF0IGVtdWxhdGlvbi4gQW5kIEdDRSwgd2hpbGUgdmlydHVhbGl6ZWQsIGRvZXNuJiMzOTt0IHVzZSB0aGUgSHlwZXItViBhcmNoaXRlY3R1cmUgb3IsIGNvbnNlcXVlbnRseSwgdGhlIE1BTkEgaGFyZHdhcmUuIE15IGVzdGFibGlzaGVkIGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB0ZWxscyBtZSB0aGF0IHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGFyZSBiYXNlZCBvbiB0aGluZ3MgbGlrZSB2aXJ0aW8tbmV0LCBlMTAwMCwgVVNCIGdhZGdldHMsIHR1bi90YXAsIGFuZCBsb29wYmFjaywgb3Igc2ltaWxhciBlbXVsYXRpb24gYXBwcm9hY2hlcy4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgc28gSSBsb29rIGZvciBhIHJlZmVyZW5jZS4gQWhhISBJIHJlbWVtYmVyIGEgc2VjdGlvbiBjb3ZlcmluZyDigJxTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmXigJ0uIEl0IGxpc3RzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBxZWQsIGFuZCBpb25pYykuIFRoZXNlIHJlcXVpcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZS4gVGhpcyBjb25maXJtcyB0aGF0IEkgdW5kZXJzdGFuZCB0aGlzIGFyZWEuCgpTbywgbm93IEkmIzM5O20gdGhpbmtpbmcsIGRvZXMgTUFOQSBoYXZlIGFueSBraW5kIG9mIG1vY2ssIHZpcnR1YWwsIG9yIHNvZnR3YXJlIGVtdWxhdGlvbj8gT3IgaXMgaXQgcHVyZWx5IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBoYXJkd2FyZSBkcml2ZXIgZGVzaWduZWQgZm9yIHVzZSBpbiBBenVyZSBWTXM/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBldmVuIGJlICpyZWFjaGVkKiBieSB0aGUgc3RhbmRhcmQgdG9vbHMgSSBoYXZlLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWFsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGFuc3dlcnMsIHNvIG15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGdyZXAgZm9yIHJlZmVyZW5jZXMgdG8gdGhlIE1BTkEgZGV2aWNlIElEIG9yIFBDSSBkcml2ZXIgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI4MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjgxODpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE5LVx0Lm5hbWVcdFx0PSBcJiMzNDttYW5hXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTc3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYW4gaXNzdWUuLi4gbGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgaXQuIE15IGZpcnN0IG1vdmUgaGVyZSBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gYGdkbWFfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYG1hbmFfaWRfdGFibGVgLiBJIGhhdmUgYSBmZWVsaW5nIGl0IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHByb2JsZW0gd2UmIzM5O3JlIHNlZWluZy4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhhdCB0YWJsZSBpcyBzdHJ1Y3R1cmVkLCB3aGF0IGl0cyBwdXJwb3NlIGlzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBETUEgZnJhbWV3b3JrLiBUaGlzIHdpbGwgcmVxdWlyZSBhIHN5c3RlbWF0aWMgcmV2aWV3IG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGFyb3VuZCB0aGUgYG1hbmFfaWRfdGFibGVgIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBleHBlY3RlZCBmdW5jdGlvbmFsaXR5LiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGxvZ2ljYWwgZXJyb3JzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFxuMjgxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG4yODEyOlx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxuMjgxMzpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGMl9ERVZJQ0VfSUQpIH0sXG4yODE0Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfVkZfREVWSUNFX0lEKSB9LFxuMjgxNTpcdFx0eyB9XG4yODE2Olx0fTtcbjI4MTc6XHRcbjI4MTg6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4yODE5Olx0XHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4yODIwOlx0XHQuaWRfdGFibGVcdD0gbWFuYV9pZF90YWJsZSxcbjI4MjE6XHRcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG4yODIyOlx0XHQucmVtb3ZlXHRcdD0gbWFuYV9nZF9yZW1vdmUsXG4yODIzOlx0XHQuc3VzcGVuZFx0PSBtYW5hX2dkX3N1c3BlbmQsXG4yODI0Olx0XHQucmVzdW1lXHRcdD0gbWFuYV9nZF9yZXN1bWUsXG4yODI1Olx0XHQuc2h1dGRvd25cdD0gbWFuYV9nZF9zaHV0ZG93bixcbjI4MjY6XHRcdC5zcmlvdl9jb25maWd1cmUgPSBtYW5hX3NyaW92X2NvbmZpZ3VyZSxcbjI4Mjc6XHR9O1xuMjgyODpcdFxuMjgyOTpcdHN0YXRpYyBpbnQgX19pbml0IG1hbmFfZHJpdmVyX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODUKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1BTkEgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBlbnRpcmVseSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgcmVsYXRlZCB0byB2YXJpb3VzIHNlcnZpY2UgZnVuY3Rpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIGJlaW5nIHRvdWNoZWQgKGBtYW5hX3NlcnZpY2VfZG9uZWAsIGBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZ2AsIGV0Yy4pIGNvbmZpcm0gdGhpcy4KCktub3dpbmcgdGhpcywgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYSBrZXkgbGltaXRhdGlvbi4gVGhpcyBkcml2ZXIgaXMgdGllZCB0byB0aGUgcGh5c2ljYWwgTUFOQSBoYXJkd2FyZSBvciBhIEh5cGVyLVYgc3ludGhldGljIFBDSSBkZXZpY2UuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aCBzeXprYWxsZXIgKmNhbm5vdCogZWZmZWN0aXZlbHkgdGVzdCB0aGlzIGNvZGUgYmVjYXVzZSB0aGV5IGRvbiYjMzk7dCBlbXVsYXRlIHRoZSB1bmRlcmx5aW5nIFBDSWUgaGFyZHdhcmUgKE1BTkEgUEYvVkYpLiBUaGF0JiMzOTtzIGEgZGVhbGJyZWFrZXIuCgpMb29raW5nIGJhY2sgYXQgdGhlIGluc3RydWN0aW9ucywgU2VjdGlvbiAyIGNsZWFybHkgZGVmaW5lcyB0aGlzIGFzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCYjMzQ7IHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGlzIHNjZW5hcmlvLiBUaGluZ3MgbGlrZSBTbWFydE5JQ3MgYW5kIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5IHdoZW4gdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZC4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBNeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgcmVtYWluIGVtcHR5IGJlY2F1c2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGZvY3VzIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjbGVhcjogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQU5BIGRyaXZlciwgd2hpY2ggcmVsaWVzIG9uIHVuYXZhaWxhYmxlLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50cy4KCkFscmlnaHQsIG9uZSBsYXN0IGNoZWNr4oCmIGBXb3J0aEZ1enppbmdgOiBmYWxzZS4gYEZvY3VzU3ltYm9sc2A6IGVtcHR5LiBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5LiBgUmVhc29uaW5nYDogY2xlYXJseSBkb2N1bWVudGVkLiBBbGwgY2hlY2tzIGFyZSBjb21wbGV0ZSwgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbnMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzIuOTg4NTY5MzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTMwMjQ0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgZHJpdmVyIGZvciBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwvaHlwZXJ2aXNvciBQQ0llIGhhcmR3YXJlIGRldmljZXMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgdmlydHVhbCBtYWNoaW5lcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzIuOTg4NTc2NzY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM4MDM2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbkBAIC02NzgsMTAgKzY3OCwzOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzY2FuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuKy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcXG4rICogYnkgdGhlIHdvcmssIHNvIHJlbW92ZSgpIGFuZCB0aGUgcHJvYmUgdW53aW5kIG1heSBmcmVlIGdjIG9uY2UgaXRcXG4rICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6XFxuKyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbit7XFxuK1xcdC8qIFBhaXJzIHdpdGggdGVzdF9iaXRfYWNxdWlyZSgpIG9uIHRoZSB3YWl0IHNpZGUuICovXFxuK1xcdGNsZWFyX2JpdF91bmxvY2soR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuK1xcdC8qIHdha2VfdXBfdmFyKCkgcmVxdWlyZXMgYSBmdWxsIGJhcnJpZXIgYmV0d2VlbiB0aGUgdXBkYXRlIG9mIHRoZVxcbitcXHQgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLlxcbitcXHQgKi9cXG4rXFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4rXFx0d2FrZV91cF92YXIoXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuKy8qIFJldGlyZSBhIGN5Y2xlIHdob3NlIGV4aXQgcmVtb3ZlcyB0aGUgZGV2aWNlOiBjbG9zZSBhZG1pc3Npb25cXG4rICogZmlyc3Qgc28gbm8gbmV3IGN5Y2xlIGNhbiBiZSBhZG1pdHRlZCBpbiB0aGUgcmV0aXJlIHdpbmRvdy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbit7XFxuK1xcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzLCAqcGFyZW50O1xcbiBcXG4rXFx0aWYgKGdjKVxcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XFxuK1xcbiBcXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuIFxcbiBcXHRidXMgPSBwZGV2LVxcdTAwM2VidXM7XFxuQEAgLTcwNiw5ICs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4ge1xcbi1cXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtNzM4LDYgKzc2NSw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0aWYgKHJldCA9PSAtRVRJTUVET1VUIHx8IHJldCA9PSAtRVBST1RPKSB7XFxuIFxcdFxcdC8qIFBlcmZvcm0gUENJIHJlc2NhbiBvbiBkZXZpY2UgaWYgd2UgZmFpbGVkIG9uIEhXQyAqL1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcXFxcblxcXCIpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XFxuIFxcdFxcdG1hbmFfc2Vydl9yZXNjYW4ocGRldik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC03NDgsMjIgKzc3NiwyNSBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQU5BIHJlc2V0IGN5Y2xlIGNvbXBsZXRlZFxcXFxuXFxcIik7XFxuIFxcbiBvdXQ6XFxuLVxcdGNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbitzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgR0RNQV9FUUVfSFdDX0ZQR0FfUkVDT05GSUc6XFxuLVxcdFxcdG1hbmFfc2Vydl9mcGdhKHBkZXYpO1xcbitcXHRcXHRtYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcXG4tXFx0XFx0bWFuYV9zZXJ2X3Jlc2V0KHBkZXYpO1xcbitcXHRcXHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0aWYgKGdjKVxcbitcXHRcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG5AQCAtNzc5LDEyICs4MTAsMjYgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d29yay1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZ3b3JrLVxcdTAwM2VkZXZfbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XFxuK1xcbiBcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ3b3JrLVxcdTAwM2VkZXZfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtYW5hX2Rldl9yZWNvdmVyeSwgbGlzdCk7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZkZXYtXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ3b3JrLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHRtYW5hX2RvX3NlcnZpY2UoZGV2LVxcdTAwM2V0eXBlLCBkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHQvKiBTZXJpYWxpemUgdGhlIGRydmRhdGEgbG9va3VwIGFuZCBhZG1pc3Npb24gYWdhaW5zdFxcbitcXHRcXHQgKiBwcm9iZS9yZW1vdmUuICBEbyBub3QgY2FsbCBzbGVlcGluZyBmdW5jdGlvbnMgd2hpbGVcXG4rXFx0XFx0ICogaG9sZGluZyB0aGUgZGV2aWNlIGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZpY2VfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRnYyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHRpZiAoZ2MpXFxuK1xcdFxcdFxcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcbitcXHRcXHRpZiAoIWdjKVxcbitcXHRcXHRcXHRtYW5hX2RvX3NlcnZpY2UoZGV2LVxcdTAwM2V0eXBlLCBkZXYtXFx1MDAzZXBkZXYsIE5VTEwpO1xcbitcXG4gXFx0XFx0cGNpX2Rldl9wdXQoZGV2LVxcdTAwM2VwZGV2KTtcXG4gXFx0XFx0a2ZyZWUoZGV2KTtcXG4gXFxuQEAgLTc5Niw0OCArODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcXG4tXFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuLVxcbi1cXHRtbnNfd2sgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1hbmFfc2Vydl93b3JrLCBzZXJ2X3dvcmspO1xcbi1cXHRwZGV2ID0gbW5zX3drLVxcdTAwM2VwZGV2O1xcbitcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0LCBzZXJ2X3dvcmspO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2MtXFx1MDAzZWRldik7XFxuIFxcbi1cXHRpZiAocGRldilcXG4tXFx0XFx0bWFuYV9kb19zZXJ2aWNlKG1uc193ay1cXHUwMDNldHlwZSwgcGRldik7XFxuK1xcdG1hbmFfZG9fc2VydmljZShnYy1cXHUwMDNlc2Vydl90eXBlLCBwZGV2LCBnYyk7XFxuIFxcbitcXHQvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaFxcbitcXHQgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2UgZnJvbSBoZXJlIG9uOyBib3RoIGFyZSBoZWxkIHVudGlsIHRoaXMgcG9pbnQgZHJvcHMgdGhlbS5cXG4rXFx0ICovXFxuIFxcdHBjaV9kZXZfcHV0KHBkZXYpO1xcbi1cXHRrZnJlZShtbnNfd2spO1xcbiBcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcXG4tXFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsIFxcXCJBbHJlYWR5IGluIHNlcnZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICsgc21wX21iX19hZnRlcl9hdG9taWMoKSBpblxcbitcXHQgKiBtYW5hX2dkX3JlbW92ZSgpOiB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIGFib3ZlIGlzIGZ1bGx5IG9yZGVyZWQsXFxuK1xcdCAqIHNvIGVpdGhlciB0aGlzIHJlYWQgc2VlcyBHQ19SRU1PVklORyBhbmQgdGhlIGN5Y2xlIGFib3J0cywgb3JcXG4rXFx0ICogcmVtb3ZlKCkgb2JzZXJ2ZXMgR0NfSU5fU0VSVklDRSBhbmQgd2FpdHMgZm9yIHRoZSBjeWNsZSB0byByZXRpcmVcXG4rXFx0ICogYmVmb3JlIGl0IGZyZWVzIGdjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiRGV2aWNlIGlzIGJlaW5nIHJlbW92ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuIFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsIFxcXCJNb2R1bGUgaXMgdW5sb2FkaW5nXFxcXG5cXFwiKTtcXG4tXFx0XFx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHRtbnNfd2sgPSBremFsbG9jKHNpemVvZigqbW5zX3drKSwgR0ZQX0FUT01JQyk7XFxuLVxcdGlmICghbW5zX3drKSB7XFxuLVxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuLVxcbiBcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiU3RhcnQgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXFxcblxcXCIsIHR5cGUpO1xcbi1cXHRtbnNfd2stXFx1MDAzZXBkZXYgPSB0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpO1xcbi1cXHRtbnNfd2stXFx1MDAzZXR5cGUgPSB0eXBlO1xcbi1cXHRwY2lfZGV2X2dldChtbnNfd2stXFx1MDAzZXBkZXYpO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm1uc193ay1cXHUwMDNlc2Vydl93b3JrLCBtYW5hX3NlcnZfZnVuYyk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm1uc193ay1cXHUwMDNlc2Vydl93b3JrKTtcXG4rXFxuK1xcdGdjLVxcdTAwM2VzZXJ2X3R5cGUgPSB0eXBlO1xcbitcXHRwY2lfZGV2X2dldCh0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFxcdTAwMjZnYy1cXHUwMDNlc2Vydl93b3JrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTk1NywxNCArMTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcXG4gXFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcXG4gXFx0XFx0ZGV2X2luZm8oZ2MtXFx1MDAzZWRldiwgXFxcIlJlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXFxcblxcXCIsIHR5cGUpO1xcbiBcXG4tXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0aWYgKCF0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIERldmljZSBpcyBpbiBwcm9iZSBhbmQgd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldFxcbi1cXHRcXHRcXHQgKiBldmVudCwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgZGV0ZWN0IHRoYXQgdGhlIGZsYWdcXG4tXFx0XFx0XFx0ICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuXFxuK1xcdFxcdFxcdCAqIFByb2JlIG5vdCBjb21wbGV0ZWQ6IGxhdGNoIHRoZSBldmVudCBhbmQgbGV0IHRoZVxcbitcXHRcXHRcXHQgKiBwcm9iZSByb2xsIGJhY2ssIHRoZSByZWNvdmVyeSBwYXRoIHdpbGwgcmVzY2FuLlxcbitcXHRcXHRcXHQgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7XFxuK1xcdFxcdFxcdCAqIHRoZSBzdWNjZXNzIHJlLWNoZWNrIGJlbG93IHByZXNlcnZlcyBhbiBldmVudFxcbitcXHRcXHRcXHQgKiByYWNpbmcgcHJvYmUgY29tcGxldGlvbi5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCBcXFwiU2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlNlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAodGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIHR5cGUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7XFxuQEAgLTI1NDYsNiArMjU5OCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdGdjLVxcdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcXG4gXFx0Z2MtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2Z2MtXFx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xcbiBcXHR4YV9pbml0KFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzKTtcXG4gXFxuIFxcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XFxuQEAgLTI1NTgsMjIgKzI2MTEsMzcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0ZXJyID0gbWFuYV9yZG1hX3Byb2JlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYV9pYik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gY2xlYW51cF9tYW5hO1xcbitcXHRcXHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcXG4tXFx0ICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLlxcbitcXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxcbitcXHQgKiBzdWNjZXNzIGJpdCBiZWZvcmUgdGhlIGxhdGNoIGNoZWNrIHBhaXJzIHdpdGggdGhlIGhhbmRsZXInc1xcbitcXHQgKiBsYXRjaC10aGVuLXJlY2hlY2ssIHNvIGFuIGV2ZW50IHJhY2luZyBwcm9iZSBjb21wbGV0aW9uIGlzXFxuK1xcdCAqIGFkbWl0dGVkIHJhdGhlciB0aGFuIGxvc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdHNldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdGVyciA9IC1FUFJPVE87XFxuLVxcdFxcdGdvdG8gY2xlYW51cF9tYW5hX3JkbWE7XFxuK1xcdFxcdGdvdG8gc2VydmljZV9xdWllc2NlO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWNsZWFudXBfbWFuYV9yZG1hOlxcbitzZXJ2aWNlX3F1aWVzY2U6XFxuK1xcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcXG4rXFx0ICogaGFzIHJ1bjogY2xvc2UgYWRtaXNzaW9uIGFuZCByZXRpcmUgYW4gaW4tZmxpZ2h0IGN5Y2xlXFxuK1xcdCAqIGJlZm9yZSBhbnkgdGVhcmRvd24sIGxpa2UgbWFuYV9nZF9yZW1vdmUoKSBkb2VzLiAgRWFybGllclxcbitcXHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXFxuK1xcdCAqL1xcbitcXHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXFxuK1xcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzLFxcbitcXHRcXHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpO1xcbiBcXHRtYW5hX3JkbWFfcmVtb3ZlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYV9pYik7XFxuLWNsZWFudXBfbWFuYTpcXG4gXFx0bWFuYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuIGNsZWFudXBfZ2Q6XFxuIFxcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XFxuQEAgLTI1ODEsNiArMjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmdjLVxcdTAwM2VpcnFfY29udGV4dHMpO1xcbiBcXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcXG4gZnJlZV9nYzpcXG4rXFx0LyogQmFja3N0b3A6IGRyYWluIGJlZm9yZSBldmVyeSB2ZnJlZSgpLiAqL1xcbitcXHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXFxuK1xcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzLFxcbitcXHRcXHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdHZmcmVlKGdjKTtcXG4gcmVsZWFzZV9yZWdpb246XFxuQEAgLTI2MjQsNiArMjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFxuK1xcdC8qIENsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZSBiZWZvcmUgYW55XFxuK1xcdCAqIHRlYXJkb3duOiB0aGUgc2VydmljZSB3b3JrIGlzIHRoZSBvbmx5IHVzZXIgb2YgZ2MgdGhhdFxcbitcXHQgKiByZW1vdmUoKSBkb2VzIG5vdCBvdGhlcndpc2Ugc3luY2hyb25pc2Ugd2l0aC4gIFRoZSBzZXJ2aWNlXFxuK1xcdCAqIGV4aXRzIHJldGlyZSBiZWZvcmUgdGFraW5nIHRoZSBQQ0kgcmVzY2FuL3JlbW92ZSBsb2NrLCBzb1xcbitcXHQgKiB0aGlzIHdhaXQgY2Fubm90IGRlYWRsb2NrIGFnYWluc3QgdGhlbS5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHQvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW5cXG4rXFx0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MsXFxuK1xcdFxcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSk7XFxuK1xcbiBcXHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4gXFxuIFxcdG1hbmFfcmRtYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG5AQCAtMjYzNSw2ICsyNzI1LDggQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRwY2lfaW91bm1hcChwZGV2LCBnYy1cXHUwMDNlYmFyMF92YSk7XFxuIFxcbitcXHQvKiBQcmV2ZW50IGxhdGUgcmVjb3Zlcnkgd29yayBmcm9tIHVzaW5nIGZyZWVkIGdjLiAqL1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdHZmcmVlKGdjKTtcXG4gXFxuIFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuQEAgLTkyNCw4ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQWxyZWFkeSBpbiBzZXJ2aWNlLCBoZW5jZSB0eCBxdWV1ZSByZXNldCBpcyBub3QgcmVxdWlyZWQuKi9cXG4tXFx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogTm90ZTogSWYgdGhlcmUgYXJlIHBlbmRpbmcgcXVldWUgcmVzZXQgd29yayBmb3IgdGhpcyBwb3J0KGFwYyksXFxuQEAgLTQwNTYsOSArNDA1NiwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGRldl93YXJuKGdjLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdCBcXFwiR2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxcXFxuXFxcIik7XFxuIFxcdFxcdC8qIEFzIEhXQyB0aW1lZCBvdXQsIGluZGljYXRpbmcgYSBmYXVsdHkgSFcgc3RhdGUgYW5kIG5lZWRzIGFcXG4tXFx0XFx0ICogcmVzZXQuXFxuK1xcdFxcdCAqIHJlc2V0LiAgTmV2ZXIgYWRtaXQgc2VydmljZSB3b3JrIGJlZm9yZSB0aGUgcHJvYmUgaGFzXFxuK1xcdFxcdCAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGVcXG4rXFx0XFx0ICogSFdDIGNoYW5uZWwgaXRzZWxmIGFuZCBjYW5ub3QgZHJhaW4gYSBjeWNsZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZhYy1cXHUwMDNlZ2Zfc3RhdHNfd29yaywgTUFOQV9HRl9TVEFUU19QRVJJT0QpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuQEAgLTIyOCwxMiArMjI4LDYgQEAgZW51bSBnZG1hX3BhZ2VfdHlwZSB7XFxuIFxcbiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDBcXG4gXFxuLXN0cnVjdCBtYW5hX3NlcnZfd29yayB7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2X3dvcms7XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbi1cXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcXG4tfTtcXG4tXFxuIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG5AQCAtNDIwLDYgKzQxNCw4IEBAIHN0cnVjdCBnZG1hX2lycV9jb250ZXh0IHtcXG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xcbiBcXHRHQ19QUk9CRV9TVUNDRUVERURcXHQ9IDAsXFxuIFxcdEdDX0lOX1NFUlZJQ0VcXHRcXHQ9IDEsXFxuK1xcdEdDX1JFTU9WSU5HXFx0XFx0PSAyLFxcbitcXHRHQ19TRVJWSUNFX0RVUklOR19QUk9CRVxcdD0gMyxcXG4gfTtcXG4gXFxuIHN0cnVjdCBnZG1hX2NvbnRleHQge1xcbkBAIC00NzksNiArNDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xcbiBcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XFxuIFxcbitcXHQvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOlxcbitcXHQgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0c2Vydl93b3JrO1xcbitcXHRlbnVtIGdkbWFfZXFlX3R5cGVcXHRzZXJ2X3R5cGU7XFxuK1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuIFxcbiBcXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozMy42NTI5NjQ0OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4MTQ4NjA1MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgZHJpdmVyIGZvciBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwvaHlwZXJ2aXNvciBQQ0llIGhhcmR3YXJlIGRldmljZXMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgdmlydHVhbCBtYWNoaW5lcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDo1ODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC02NzgsMTAgKzY3OCwzOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzY2FuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuKy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcbisgKiBieSB0aGUgd29yaywgc28gcmVtb3ZlKCkgYW5kIHRoZSBwcm9iZSB1bndpbmQgbWF5IGZyZWUgZ2Mgb25jZSBpdFxuKyAqIGlzIGNsZWFyLiAgTXVzdCBydW4gYmVmb3JlIHRoZSBleGl0IHBhdGhzIHRha2UgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOlxuKyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIHRlc3RfYml0X2FjcXVpcmUoKSBvbiB0aGUgd2FpdCBzaWRlLiAqL1xuK1x0Y2xlYXJfYml0X3VubG9jayhHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4rXHQvKiB3YWtlX3VwX3ZhcigpIHJlcXVpcmVzIGEgZnVsbCBiYXJyaWVyIGJldHdlZW4gdGhlIHVwZGF0ZSBvZiB0aGVcbitcdCAqIHdhaXRlZC1vbiB2YXJpYWJsZSBhbmQgdGhlIHdha2UuXG4rXHQgKi9cbitcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHR3YWtlX3VwX3ZhcihcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuKy8qIFJldGlyZSBhIGN5Y2xlIHdob3NlIGV4aXQgcmVtb3ZlcyB0aGUgZGV2aWNlOiBjbG9zZSBhZG1pc3Npb25cbisgKiBmaXJzdCBzbyBubyBuZXcgY3ljbGUgY2FuIGJlIGFkbWl0dGVkIGluIHRoZSByZXRpcmUgd2luZG93LlxuKyAqL1xuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuK3tcbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdG1hbmFfc2VydmljZV9kb25lKGdjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHN0cnVjdCBwY2lfYnVzICpidXMsICpwYXJlbnQ7XG4gXG4rXHRpZiAoZ2MpXG4rXHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbitcbiBcdHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbiBcbiBcdGJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuQEAgLTcwNiw5ICs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4tXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCByZXQ7XG4gXG5AQCAtNzM4LDYgKzc2NSw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGlmIChyZXQgPT0gLUVUSU1FRE9VVCB8fCByZXQgPT0gLUVQUk9UTykge1xuIFx0XHQvKiBQZXJmb3JtIFBDSSByZXNjYW4gb24gZGV2aWNlIGlmIHdlIGZhaWxlZCBvbiBIV0MgKi9cbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcXG5cIik7XG4rXHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbiBcdFx0bWFuYV9zZXJ2X3Jlc2NhbihwZGV2KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTc0OCwyMiArNzc2LDI1IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSByZXNldCBjeWNsZSBjb21wbGV0ZWRcXG5cIik7XG4gXG4gb3V0OlxuLVx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdG1hbmFfc2VydmljZV9kb25lKGdjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9kb19zZXJ2aWNlKGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlLCBzdHJ1Y3QgcGNpX2RldiAqcGRldilcbitzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgR0RNQV9FUUVfSFdDX0ZQR0FfUkVDT05GSUc6XG4tXHRcdG1hbmFfc2Vydl9mcGdhKHBkZXYpO1xuK1x0XHRtYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcbi1cdFx0bWFuYV9zZXJ2X3Jlc2V0KHBkZXYpO1xuK1x0XHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSBzZXJ2aWNlOiB1bmtub3duIHR5cGUgJWRcXG5cIiwgdHlwZSk7XG4rXHRcdGlmIChnYylcbitcdFx0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIH1cbkBAIC03NzksMTIgKzgxMCwyNiBAQCBzdGF0aWMgdm9pZCBtYW5hX3JlY292ZXJ5X2RlbGF5ZWRfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3b3JrLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ3b3JrLVx1MDAzZWRldl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbitcbiBcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3b3JrLVx1MDAzZWRldl9saXN0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBtYW5hX2Rldl9yZWNvdmVyeSwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2VsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ3b3JrLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0bWFuYV9kb19zZXJ2aWNlKGRldi1cdTAwM2V0eXBlLCBkZXYtXHUwMDNlcGRldik7XG4rXHRcdC8qIFNlcmlhbGl6ZSB0aGUgZHJ2ZGF0YSBsb29rdXAgYW5kIGFkbWlzc2lvbiBhZ2FpbnN0XG4rXHRcdCAqIHByb2JlL3JlbW92ZS4gIERvIG5vdCBjYWxsIHNsZWVwaW5nIGZ1bmN0aW9ucyB3aGlsZVxuK1x0XHQgKiBob2xkaW5nIHRoZSBkZXZpY2UgbG9jay5cbitcdFx0ICovXG4rXHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRcdGdjID0gcGNpX2dldF9kcnZkYXRhKGRldi1cdTAwM2VwZGV2KTtcbitcdFx0aWYgKGdjKVxuK1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXHUwMDNldHlwZSk7XG4rXHRcdGRldmljZV91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbitcbitcdFx0aWYgKCFnYylcbitcdFx0XHRtYW5hX2RvX3NlcnZpY2UoZGV2LVx1MDAzZXR5cGUsIGRldi1cdTAwM2VwZGV2LCBOVUxMKTtcbitcbiBcdFx0cGNpX2Rldl9wdXQoZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRrZnJlZShkZXYpO1xuIFxuQEAgLTc5Niw0OCArODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cbi1cdG1uc193ayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmssIHNlcnZfd29yayk7XG4tXHRwZGV2ID0gbW5zX3drLVx1MDAzZXBkZXY7XG4rXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0LCBzZXJ2X3dvcmspO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGdjLVx1MDAzZWRldik7XG4gXG4tXHRpZiAocGRldilcbi1cdFx0bWFuYV9kb19zZXJ2aWNlKG1uc193ay1cdTAwM2V0eXBlLCBwZGV2KTtcbitcdG1hbmFfZG9fc2VydmljZShnYy1cdTAwM2VzZXJ2X3R5cGUsIHBkZXYsIGdjKTtcbiBcbitcdC8qIFRoZSByZXNjYW4gZXhpdHMgb2YgbWFuYV9kb19zZXJ2aWNlKCkgcmVtb3ZlIHRoZSBkZXZpY2UsIHdoaWNoXG4rXHQgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZVxuK1x0ICogcmVmZXJlbmNlIGZyb20gaGVyZSBvbjsgYm90aCBhcmUgaGVsZCB1bnRpbCB0aGlzIHBvaW50IGRyb3BzIHRoZW0uXG4rXHQgKi9cbiBcdHBjaV9kZXZfcHV0KHBkZXYpO1xuLVx0a2ZyZWUobW5zX3drKTtcbiBcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3NlcnZfd29yayAqbW5zX3drO1xuLVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJBbHJlYWR5IGluIHNlcnZpY2VcXG5cIik7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICsgc21wX21iX19hZnRlcl9hdG9taWMoKSBpblxuK1x0ICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLFxuK1x0ICogc28gZWl0aGVyIHRoaXMgcmVhZCBzZWVzIEdDX1JFTU9WSU5HIGFuZCB0aGUgY3ljbGUgYWJvcnRzLCBvclxuK1x0ICogcmVtb3ZlKCkgb2JzZXJ2ZXMgR0NfSU5fU0VSVklDRSBhbmQgd2FpdHMgZm9yIHRoZSBjeWNsZSB0byByZXRpcmVcbitcdCAqIGJlZm9yZSBpdCBmcmVlcyBnYy5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbitcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LCBcIkRldmljZSBpcyBiZWluZyByZW1vdmVkXFxuXCIpO1xuK1x0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwiTW9kdWxlIGlzIHVubG9hZGluZ1xcblwiKTtcbi1cdFx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdG1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghbW5zX3drKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbiBcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJTdGFydCBNQU5BIHNlcnZpY2UgdHlwZTolZFxcblwiLCB0eXBlKTtcbi1cdG1uc193ay1cdTAwM2VwZGV2ID0gdG9fcGNpX2RldihnYy1cdTAwM2VkZXYpO1xuLVx0bW5zX3drLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0cGNpX2Rldl9nZXQobW5zX3drLVx1MDAzZXBkZXYpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm1uc193ay1cdTAwM2VzZXJ2X3dvcmssIG1hbmFfc2Vydl9mdW5jKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2bW5zX3drLVx1MDAzZXNlcnZfd29yayk7XG4rXG4rXHRnYy1cdTAwM2VzZXJ2X3R5cGUgPSB0eXBlO1xuK1x0cGNpX2Rldl9nZXQodG9fcGNpX2RldihnYy1cdTAwM2VkZXYpKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZnYy1cdTAwM2VzZXJ2X3dvcmspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTk1NywxNCArMTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdGNhc2UgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1Q6XG4gXHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJSZWN2IE1BTkEgc2VydmljZSB0eXBlOiVkXFxuXCIsIHR5cGUpO1xuIFxuLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbitcdFx0aWYgKCF0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogRGV2aWNlIGlzIGluIHByb2JlIGFuZCB3ZSByZWNlaXZlZCBhIGhhcmR3YXJlIHJlc2V0XG4tXHRcdFx0ICogZXZlbnQsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGRldGVjdCB0aGF0IHRoZSBmbGFnXG4tXHRcdFx0ICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuXG4rXHRcdFx0ICogUHJvYmUgbm90IGNvbXBsZXRlZDogbGF0Y2ggdGhlIGV2ZW50IGFuZCBsZXQgdGhlXG4rXHRcdFx0ICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi5cbitcdFx0XHQgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7XG4rXHRcdFx0ICogdGhlIHN1Y2Nlc3MgcmUtY2hlY2sgYmVsb3cgcHJlc2VydmVzIGFuIGV2ZW50XG4rXHRcdFx0ICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uXG4gXHRcdFx0ICovXG4tXHRcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwiU2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcXG5cIik7XG4rXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZnYy1cdTAwM2VmbGFncykpXG4rXHRcdFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlNlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxuXCIpO1xuK1x0XHRcdGVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIHR5cGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCB0eXBlKTtcbkBAIC0yNTQ2LDYgKzI1OTgsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRnYy1cdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcbiBcdGdjLVx1MDAzZWRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmdjLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuIFx0eGFfaW5pdChcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZXR1cChwZGV2KTtcbkBAIC0yNTU4LDIyICsyNjExLDM3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGVyciA9IG1hbmFfcmRtYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gY2xlYW51cF9tYW5hO1xuK1x0XHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcbiBcbiBcdC8qXG4gXHQgKiBJZiBhIGhhcmR3YXJlIHJlc2V0IGV2ZW50IGhhcyBvY2N1cnJlZCBvdmVyIEhXQyBkdXJpbmcgcHJvYmUsXG4tXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuXG4rXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxuK1x0ICogc3VjY2VzcyBiaXQgYmVmb3JlIHRoZSBsYXRjaCBjaGVjayBwYWlycyB3aXRoIHRoZSBoYW5kbGVyJ3NcbitcdCAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXNcbitcdCAqIGFkbWl0dGVkIHJhdGhlciB0aGFuIGxvc3QuXG4gXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKSB7XG4rXHRzZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRlcnIgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuK1x0XHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuLWNsZWFudXBfbWFuYV9yZG1hOlxuK3NlcnZpY2VfcXVpZXNjZTpcbitcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcbitcdCAqIGhhcyBydW46IGNsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZVxuK1x0ICogYmVmb3JlIGFueSB0ZWFyZG93biwgbGlrZSBtYW5hX2dkX3JlbW92ZSgpIGRvZXMuICBFYXJsaWVyXG4rXHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXG4rXHQgKi9cbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuK1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbitcdCAqL1xuK1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuK1x0XHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKTtcbiBcdG1hbmFfcmRtYV9yZW1vdmUoXHUwMDI2Z2MtXHUwMDNlbWFuYV9pYik7XG4tY2xlYW51cF9tYW5hOlxuIFx0bWFuYV9yZW1vdmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgZmFsc2UpO1xuIGNsZWFudXBfZ2Q6XG4gXHRtYW5hX2dkX2NsZWFudXBfZGV2aWNlKHBkZXYpO1xuQEAgLTI1ODEsNiArMjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4gXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbiBmcmVlX2djOlxuK1x0LyogQmFja3N0b3A6IGRyYWluIGJlZm9yZSBldmVyeSB2ZnJlZSgpLiAqL1xuK1x0c2V0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuK1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4rXHQgKiBtYW5hX3NjaGVkdWxlX3NlcnZfd29yaygpLlxuK1x0ICovXG4rXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuK1x0d2FpdF92YXJfZXZlbnQoXHUwMDI2Z2MtXHUwMDNlZmxhZ3MsXG4rXHRcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0dmZyZWUoZ2MpO1xuIHJlbGVhc2VfcmVnaW9uOlxuQEAgLTI2MjQsNiArMjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbitcdC8qIENsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZSBiZWZvcmUgYW55XG4rXHQgKiB0ZWFyZG93bjogdGhlIHNlcnZpY2Ugd29yayBpcyB0aGUgb25seSB1c2VyIG9mIGdjIHRoYXRcbitcdCAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2VcbitcdCAqIGV4aXRzIHJldGlyZSBiZWZvcmUgdGFraW5nIHRoZSBQQ0kgcmVzY2FuL3JlbW92ZSBsb2NrLCBzb1xuK1x0ICogdGhpcyB3YWl0IGNhbm5vdCBkZWFkbG9jayBhZ2FpbnN0IHRoZW0uXG4rXHQgKi9cbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuK1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbitcdCAqL1xuK1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuK1x0XHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKTtcbitcbiBcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFxuIFx0bWFuYV9yZG1hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbkBAIC0yNjM1LDYgKzI3MjUsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGdjLVx1MDAzZWJhcjBfdmEpO1xuIFxuK1x0LyogUHJldmVudCBsYXRlIHJlY292ZXJ5IHdvcmsgZnJvbSB1c2luZyBmcmVlZCBnYy4gKi9cbitcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiBcdHZmcmVlKGdjKTtcbiBcbiBcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCA3YTFhYzg1M2UzYWJjLi42N2M3ZTdlNjczYWU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC05MjQsOCArOTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBBbHJlYWR5IGluIHNlcnZpY2UsIGhlbmNlIHR4IHF1ZXVlIHJlc2V0IGlzIG5vdCByZXF1aXJlZC4qL1xuLVx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSlcbitcdGlmICh0ZXN0X2JpdChHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykgfHxcbitcdCAgICB0ZXN0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBOb3RlOiBJZiB0aGVyZSBhcmUgcGVuZGluZyBxdWV1ZSByZXNldCB3b3JrIGZvciB0aGlzIHBvcnQoYXBjKSxcbkBAIC00MDU2LDkgKzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRkZXZfd2FybihnYy1cdTAwM2VkZXYsXG4gXHRcdFx0IFwiR2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxcblwiKTtcbiBcdFx0LyogQXMgSFdDIHRpbWVkIG91dCwgaW5kaWNhdGluZyBhIGZhdWx0eSBIVyBzdGF0ZSBhbmQgbmVlZHMgYVxuLVx0XHQgKiByZXNldC5cbitcdFx0ICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXNcbitcdFx0ICogY29tcGxldGVkOiBhIHByb2JlIHRoYXQgaXMgZmFpbGluZyB1bndpbmRzIG5ldGRldnMgYW5kIHRoZVxuK1x0XHQgKiBIV0MgY2hhbm5lbCBpdHNlbGYgYW5kIGNhbm5vdCBkcmFpbiBhIGN5Y2xlLlxuIFx0XHQgKi9cbi1cdFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUKTtcbitcdFx0aWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZhYy1cdTAwM2VnZl9zdGF0c193b3JrLCBNQU5BX0dGX1NUQVRTX1BFUklPRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTIyOCwxMiArMjI4LDYgQEAgZW51bSBnZG1hX3BhZ2VfdHlwZSB7XG4gXG4gI2RlZmluZSBHRE1BX0lOVkFMSURfRE1BX1JFR0lPTiAwXG4gXG4tc3RydWN0IG1hbmFfc2Vydl93b3JrIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2X3dvcms7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cdGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlO1xuLX07XG4tXG4gc3RydWN0IGdkbWFfbWVtX2luZm8ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFxuQEAgLTQyMCw2ICs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7XG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xuIFx0R0NfUFJPQkVfU1VDQ0VFREVEXHQ9IDAsXG4gXHRHQ19JTl9TRVJWSUNFXHRcdD0gMSxcbitcdEdDX1JFTU9WSU5HXHRcdD0gMixcbitcdEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFXHQ9IDMsXG4gfTtcbiBcbiBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbkBAIC00NzksNiArNDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFxuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XG4gXG4rXHQvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOlxuK1x0ICogYSByZXNldCBjeWNsZSBkZXN0cm95cyBhbmQgcmUtY3JlYXRlcyBAc2VydmljZV93cS5cbitcdCAqL1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRzZXJ2X3dvcms7XG4rXHRlbnVtIGdkbWFfZXFlX3R5cGVcdHNlcnZfdHlwZTtcbitcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXG4gXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzMuNjUyOTY2MDM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5Mjc4NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNQU5BIERyaXZlciBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLCBhbmQgYGluY2x1ZGUvbmV0L21hbmEvZ2RtYS5oYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIE1pY3Jvc29mdCBNQU5BIGV0aGVybmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgTUFOQSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgU3l6a2FsbGVyIHR5cGljYWxseSB0YXJnZXRzLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0J3MgcmVmZXIgYmFjayB0byBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgbGlzdHMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiDigJMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycywgc3R1ZmYgdGhhdCByZXF1aXJlcyBzcGVjaWFsaXplZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gSXMgTUFOQSBvbiB0aGF0IGxpc3Q/XG5cbkFoLCByaWdodCwgTUFOQSBpcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQncyBhIFBDSSBkZXZpY2Ugc3BlY2lmaWNhbGx5IGZvciBBenVyZSBWTXMgYW5kIEh5cGVyLVYuIFNvIHRoYXQncyB0aGUga2V5OiBpdCAqaXMqIGFuIEF6dXJlLXNwZWNpZmljIHRoaW5nLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGNhbiBiZSBhY2Nlc3NlZCBpbiBhIHN0YW5kYXJkLCBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ2Agb3Igd2l0aGluIHRoZSBgbWFuYWAgZGlyZWN0b3J5IOKAkyB0byBzZWUgaG93IGl0J3MgZW5hYmxlZCBhbmQgaWYgYW55IGRlcGVuZGVuY2llcyBwb2ludCB0byBoYXJkd2FyZSB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlbXVsYXRlLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQgdGhlIE1BTkEgZHJpdmVyIGV4cGVjdHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgdG8gcmVxdWlyZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIHdheSwgdGhlbiBpdCdzIGEgbm9uLXN0YXJ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozNy4wNDU3NTYyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUNST1NPRlRfTUFOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoxODpjb25maWcgTUlDUk9TT0ZUX01BTkFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzcuMTU1NjM2NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NTY2NTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1pY3Jvc29mdCBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBNaWNyb3NvZnQgRXRoZXJuZXQgZHJpdmVyLiBUbyBnZXQgdGhhdCwgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCB0aGUgZGVwZW5kZW5jaWVzIHRoZXkgcmVseSBvbiAoa2VybmVsIGZlYXR1cmVzLCBvdGhlciBkcml2ZXJzLCBldGMuKSwgYW5kIHByb2JhYmx5IHNvbWUgZG9jdW1lbnRhdGlvbiBzbmlwcGV0cyB0b28uIFRoaXMgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9uIHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSB0byB0dXJuIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBgS2NvbmZpZ2AgaXMgY3JpdGljYWwgdG8gcHJvcGVybHkgY29uZmlndXJpbmcgYW5kIHBvdGVudGlhbGx5IHRyb3VibGVzaG9vdGluZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoaXMgZHJpdmVyLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozOS40MTEzMDU0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWljcm9zb2Z0IEF6dXJlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXFxuICAgNjpcXHRcXHRib29sIFxcXCJNaWNyb3NvZnQgTmV0d29yayBEZXZpY2VzXFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEyOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIHRoZVxcbiAgMTM6XFx0XFx0ICBxdWVzdGlvbiBhYm91dCBNaWNyb3NvZnQgbmV0d29yayBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXFxuICAxNDpcXHRcXHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGRldmljZSBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgTUlDUk9TT0ZUX01BTkFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgIUNQVV9CSUdfRU5ESUFOKVxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfSFlQRVJWXFxuICAyMzpcXHRcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiAgMjQ6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjU6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjY6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkuXFxuICAyOTpcXHRcXHQgIFNvIGZhciwgdGhlIGRyaXZlciBpcyBvbmx5IHN1cHBvcnRlZCBvbiBYODZfNjQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gIDMyOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYW5hLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9NSUNST1NPRlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzkuNDExMzk0NTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzODg3NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNSUNST1NPRlRfTUFOQSBEcml2ZXIgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGBNSUNST1NPRlRfTUFOQWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJX0hZUEVSVmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGludmVzdGlnYXRlIGJvdGguIGBQQ0lfSFlQRVJWYCBpcyB0aGUgSHlwZXItViBQQ0kgZnJvbnRlbmQgZHJpdmVyLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBmb3IgUENJIHBhc3MtdGhyb3VnaCBvciB0aGUgc3ludGhldGljIFBDSSBidXMgd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LiBBbmQgdGhlbiwgYE1BTkFg4oCUdGhhdCdzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBTcGVjaWZpY2FsbHksIHRoZSBwaHlzaWNhbCBBU0lDIG9yIGhhcmR3YXJlIFNtYXJ0TklDIGZvdW5kIHdpdGhpbiBBenVyZSdzIEh5cGVyLVYgc2V0dXBzLlxuXG5Ob3csIG15IGtleSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBNQU5BIGVtdWxhdGVkIGluIGEgdHlwaWNhbCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBlbnZpcm9ubWVudD8gIFF1aWNrbHksIEkgcmVhbGl6ZSBpdCdzIG5vdC4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IG9mZmVyIHRoYXQgZW11bGF0aW9uLiBBbmQgR0NFLCB3aGlsZSB2aXJ0dWFsaXplZCwgZG9lc24ndCB1c2UgdGhlIEh5cGVyLVYgYXJjaGl0ZWN0dXJlIG9yLCBjb25zZXF1ZW50bHksIHRoZSBNQU5BIGhhcmR3YXJlLiBNeSBlc3RhYmxpc2hlZCBleHBlcmllbmNlIHdpdGggdmlydHVhbGl6YXRpb24gdGVsbHMgbWUgdGhhdCBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcyBhcmUgYmFzZWQgb24gdGhpbmdzIGxpa2UgdmlydGlvLW5ldCwgZTEwMDAsIFVTQiBnYWRnZXRzLCB0dW4vdGFwLCBhbmQgbG9vcGJhY2ssIG9yIHNpbWlsYXIgZW11bGF0aW9uIGFwcHJvYWNoZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgc28gSSBsb29rIGZvciBhIHJlZmVyZW5jZS4gQWhhISBJIHJlbWVtYmVyIGEgc2VjdGlvbiBjb3ZlcmluZyDigJxTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmXigJ0uIEl0IGxpc3RzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBxZWQsIGFuZCBpb25pYykuIFRoZXNlIHJlcXVpcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlLiBUaGlzIGNvbmZpcm1zIHRoYXQgSSB1bmRlcnN0YW5kIHRoaXMgYXJlYS5cblxuU28sIG5vdyBJJ20gdGhpbmtpbmcsIGRvZXMgTUFOQSBoYXZlIGFueSBraW5kIG9mIG1vY2ssIHZpcnR1YWwsIG9yIHNvZnR3YXJlIGVtdWxhdGlvbj8gT3IgaXMgaXQgcHVyZWx5IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBoYXJkd2FyZSBkcml2ZXIgZGVzaWduZWQgZm9yIHVzZSBpbiBBenVyZSBWTXM/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBldmVuIGJlICpyZWFjaGVkKiBieSB0aGUgc3RhbmRhcmQgdG9vbHMgSSBoYXZlLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWFsIGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSBmb3IgYW5zd2Vycywgc28gbXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZ3JlcCBmb3IgcmVmZXJlbmNlcyB0byB0aGUgTUFOQSBkZXZpY2UgSUQgb3IgUENJIGRyaXZlciB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDMuMjUwMjczMDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ4NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI4MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI4MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjgxODpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgxOS1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODo0My4zNTM3NjE5MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc2NTI2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgZ2RtYV9tYWluLmNgIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYW4gaXNzdWUuLi4gbGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBpdC4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBgZ2RtYV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgbWFuYV9pZF90YWJsZWAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgaG9sZHMgdGhlIGtleSB0byB0aGUgcHJvYmxlbSB3ZSdyZSBzZWVpbmcuIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoYXQgdGFibGUgaXMgc3RydWN0dXJlZCwgd2hhdCBpdHMgcHVycG9zZSBpcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRE1BIGZyYW1ld29yay4gVGhpcyB3aWxsIHJlcXVpcmUgYSBzeXN0ZW1hdGljIHJldmlldyBvZiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBhcm91bmQgdGhlIGBtYW5hX2lkX3RhYmxlYCB0byBwaWVjZSB0b2dldGhlciB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY29tcGFyZSBpdCB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgYW55IHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9ucyBvciBsb2dpY2FsIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTc3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDUuMTMwMjkxMzI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODEwOlxcdFxcbjI4MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4yODEyOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXFxuMjgxMzpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcXG4yODE0OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXFxuMjgxNTpcXHRcXHR7IH1cXG4yODE2OlxcdH07XFxuMjgxNzpcXHRcXG4yODE4OlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4yODE5OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwibWFuYVxcXCIsXFxuMjgyMDpcXHRcXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuMjgyMTpcXHRcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuMjgyMjpcXHRcXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG4yODIzOlxcdFxcdC5zdXNwZW5kXFx0PSBtYW5hX2dkX3N1c3BlbmQsXFxuMjgyNDpcXHRcXHQucmVzdW1lXFx0XFx0PSBtYW5hX2dkX3Jlc3VtZSxcXG4yODI1OlxcdFxcdC5zaHV0ZG93blxcdD0gbWFuYV9nZF9zaHV0ZG93bixcXG4yODI2OlxcdFxcdC5zcmlvdl9jb25maWd1cmUgPSBtYW5hX3NyaW92X2NvbmZpZ3VyZSxcXG4yODI3OlxcdH07XFxuMjgyODpcXHRcXG4yODI5OlxcdHN0YXRpYyBpbnQgX19pbml0IG1hbmFfZHJpdmVyX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDUuMTMwNTUzNzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NzA5NzM3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUFOQSBEcml2ZXIgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBlbnRpcmVseSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgcmVsYXRlZCB0byB2YXJpb3VzIHNlcnZpY2UgZnVuY3Rpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIGJlaW5nIHRvdWNoZWQgKGBtYW5hX3NlcnZpY2VfZG9uZWAsIGBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZ2AsIGV0Yy4pIGNvbmZpcm0gdGhpcy5cblxuS25vd2luZyB0aGlzLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhIGtleSBsaW1pdGF0aW9uLiBUaGlzIGRyaXZlciBpcyB0aWVkIHRvIHRoZSBwaHlzaWNhbCBNQU5BIGhhcmR3YXJlIG9yIGEgSHlwZXItViBzeW50aGV0aWMgUENJIGRldmljZS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHN5emthbGxlciAqY2Fubm90KiBlZmZlY3RpdmVseSB0ZXN0IHRoaXMgY29kZSBiZWNhdXNlIHRoZXkgZG9uJ3QgZW11bGF0ZSB0aGUgdW5kZXJseWluZyBQQ0llIGhhcmR3YXJlIChNQU5BIFBGL1ZGKS4gVGhhdCdzIGEgZGVhbGJyZWFrZXIuXG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBTZWN0aW9uIDIgY2xlYXJseSBkZWZpbmVzIHRoaXMgYXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsXCIgd2hpY2ggYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoaXMgc2NlbmFyaW8uIFRoaW5ncyBsaWtlIFNtYXJ0TklDcyBhbmQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgd2hlbiB0aGUgaGFyZHdhcmUgaXNuJ3QgZW11bGF0ZWQuXG5cblNvLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE15IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdHMgd2lsbCByZW1haW4gZW1wdHkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmb2N1cyBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUFOQSBkcml2ZXIsIHdoaWNoIHJlbGllcyBvbiB1bmF2YWlsYWJsZSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHRoZSB0YXJnZXQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkFscmlnaHQsIG9uZSBsYXN0IGNoZWNr4oCmIGBXb3J0aEZ1enppbmdgOiBmYWxzZS4gYEZvY3VzU3ltYm9sc2A6IGVtcHR5LiBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5LiBgUmVhc29uaW5nYDogY2xlYXJseSBkb2N1bWVudGVkLiBBbGwgY2hlY2tzIGFyZSBjb21wbGV0ZSwgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbnMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3ODUsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NTEuODAxNTMxNjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODo1MS44MDE1NzM1MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4n4vd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 04:36:46 +0000 UTC FinishedAt: 2026-09-09 04:58:53 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDo1ODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBmOTJiMmQwYmY5MjZlLi4yODU0NGYwMGU4Y2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtNjc4LDEwICYjNDM7Njc4LDM4IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNjYW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzOy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcbiYjNDM7ICogYnkgdGhlIHdvcmssIHNvIHJlbW92ZSgpIGFuZCB0aGUgcHJvYmUgdW53aW5kIG1heSBmcmVlIGdjIG9uY2UgaXRcbiYjNDM7ICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6XG4mIzQzOyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuJiM0Mzt7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0ZXN0X2JpdF9hY3F1aXJlKCkgb24gdGhlIHdhaXQgc2lkZS4gKi9cbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHQvKiB3YWtlX3VwX3ZhcigpIHJlcXVpcmVzIGEgZnVsbCBiYXJyaWVyIGJldHdlZW4gdGhlIHVwZGF0ZSBvZiB0aGVcbiYjNDM7XHQgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0d2FrZV91cF92YXIoXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXRpcmUgYSBjeWNsZSB3aG9zZSBleGl0IHJlbW92ZXMgdGhlIGRldmljZTogY2xvc2UgYWRtaXNzaW9uXG4mIzQzOyAqIGZpcnN0IHNvIG5vIG5ldyBjeWNsZSBjYW4gYmUgYWRtaXR0ZWQgaW4gdGhlIHJldGlyZSB3aW5kb3cuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiYjNDM7e1xuJiM0MztcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzLCAqcGFyZW50O1xuIFxuJiM0MztcdGlmIChnYylcbiYjNDM7XHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbiYjNDM7XG4gXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gXG4gXHRidXMgPSBwZGV2LVx1MDAzZWJ1cztcbkBAIC03MDYsOSAmIzQzOzczNCw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4tXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCByZXQ7XG4gXG5AQCAtNzM4LDYgJiM0Mzs3NjUsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0ID09IC1FVElNRURPVVQgfHwgcmV0ID09IC1FUFJPVE8pIHtcbiBcdFx0LyogUGVyZm9ybSBQQ0kgcmVzY2FuIG9uIGRldmljZSBpZiB3ZSBmYWlsZWQgb24gSFdDICovXG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogcmVzdW1lIGZhaWxlZCwgcmVzY2FubmluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XG4gXHRcdG1hbmFfc2Vydl9yZXNjYW4ocGRldik7XG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC03NDgsMjIgJiM0Mzs3NzYsMjUgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSByZXNldCBjeWNsZSBjb21wbGV0ZWRcXG5cJiMzNDspO1xuIFxuIG91dDpcbi1cdGNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4gXHRjYXNlIEdETUFfRVFFX0hXQ19GUEdBX1JFQ09ORklHOlxuLVx0XHRtYW5hX3NlcnZfZnBnYShwZGV2KTtcbiYjNDM7XHRcdG1hbmFfc2Vydl9mcGdhKHBkZXYsIGdjKTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOlxuLVx0XHRtYW5hX3NlcnZfcmVzZXQocGRldik7XG4mIzQzO1x0XHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O01BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXFxuXCYjMzQ7LCB0eXBlKTtcbiYjNDM7XHRcdGlmIChnYylcbiYjNDM7XHRcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtNzc5LDEyICYjNDM7ODEwLDI2IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNndvcmstXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNndvcmstXHUwMDNlZGV2X2xpc3QpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XG4gXHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2d29yay1cdTAwM2VkZXZfbGlzdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWFuYV9kZXZfcmVjb3ZlcnksIGxpc3QpO1xuIFx0XHRsaXN0X2RlbChcdTAwMjZkZXYtXHUwMDNlbGlzdCk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2d29yay1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdG1hbmFfZG9fc2VydmljZShkZXYtXHUwMDNldHlwZSwgZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdFx0LyogU2VyaWFsaXplIHRoZSBkcnZkYXRhIGxvb2t1cCBhbmQgYWRtaXNzaW9uIGFnYWluc3RcbiYjNDM7XHRcdCAqIHByb2JlL3JlbW92ZS4gIERvIG5vdCBjYWxsIHNsZWVwaW5nIGZ1bmN0aW9ucyB3aGlsZVxuJiM0MztcdFx0ICogaG9sZGluZyB0aGUgZGV2aWNlIGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRnYyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0XHRpZiAoZ2MpXG4mIzQzO1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXHUwMDNldHlwZSk7XG4mIzQzO1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFnYylcbiYjNDM7XHRcdFx0bWFuYV9kb19zZXJ2aWNlKGRldi1cdTAwM2V0eXBlLCBkZXYtXHUwMDNlcGRldiwgTlVMTCk7XG4mIzQzO1xuIFx0XHRwY2lfZGV2X3B1dChkZXYtXHUwMDNlcGRldik7XG4gXHRcdGtmcmVlKGRldik7XG4gXG5AQCAtNzk2LDQ4ICYjNDM7ODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cbi1cdG1uc193ayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmssIHNlcnZfd29yayk7XG4tXHRwZGV2ID0gbW5zX3drLVx1MDAzZXBkZXY7XG4mIzQzO1x0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGdkbWFfY29udGV4dCwgc2Vydl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2MtXHUwMDNlZGV2KTtcbiBcbi1cdGlmIChwZGV2KVxuLVx0XHRtYW5hX2RvX3NlcnZpY2UobW5zX3drLVx1MDAzZXR5cGUsIHBkZXYpO1xuJiM0MztcdG1hbmFfZG9fc2VydmljZShnYy1cdTAwM2VzZXJ2X3R5cGUsIHBkZXYsIGdjKTtcbiBcbiYjNDM7XHQvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaFxuJiM0MztcdCAqIGZyZWVzIGdjIGJlZm9yZSByZXR1cm5pbmcuICBPbmx5IHRvdWNoIHRoZSBwZGV2IGFuZCB0aGUgbW9kdWxlXG4mIzQzO1x0ICogcmVmZXJlbmNlIGZyb20gaGVyZSBvbjsgYm90aCBhcmUgaGVsZCB1bnRpbCB0aGlzIHBvaW50IGRyb3BzIHRoZW0uXG4mIzQzO1x0ICovXG4gXHRwY2lfZGV2X3B1dChwZGV2KTtcbi1cdGtmcmVlKG1uc193ayk7XG4gXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiB9XG4gXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcbi1cbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O0FscmVhZHkgaW4gc2VydmljZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzZXRfYml0KEdDX1JFTU9WSU5HKSAmIzQzOyBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluXG4mIzQzO1x0ICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLFxuJiM0MztcdCAqIHNvIGVpdGhlciB0aGlzIHJlYWQgc2VlcyBHQ19SRU1PVklORyBhbmQgdGhlIGN5Y2xlIGFib3J0cywgb3JcbiYjNDM7XHQgKiByZW1vdmUoKSBvYnNlcnZlcyBHQ19JTl9TRVJWSUNFIGFuZCB3YWl0cyBmb3IgdGhlIGN5Y2xlIHRvIHJldGlyZVxuJiM0MztcdCAqIGJlZm9yZSBpdCBmcmVlcyBnYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LCBcJiMzNDtEZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O01vZHVsZSBpcyB1bmxvYWRpbmdcXG5cJiMzNDspO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdG1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghbW5zX3drKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbiBcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCYjMzQ7U3RhcnQgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXG5cJiMzNDssIHR5cGUpO1xuLVx0bW5zX3drLVx1MDAzZXBkZXYgPSB0b19wY2lfZGV2KGdjLVx1MDAzZWRldik7XG4tXHRtbnNfd2stXHUwMDNldHlwZSA9IHR5cGU7XG4tXHRwY2lfZGV2X2dldChtbnNfd2stXHUwMDNlcGRldik7XG4tXHRJTklUX1dPUksoXHUwMDI2bW5zX3drLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuLVx0c2NoZWR1bGVfd29yayhcdTAwMjZtbnNfd2stXHUwMDNlc2Vydl93b3JrKTtcbiYjNDM7XG4mIzQzO1x0Z2MtXHUwMDNlc2Vydl90eXBlID0gdHlwZTtcbiYjNDM7XHRwY2lfZGV2X2dldCh0b19wY2lfZGV2KGdjLVx1MDAzZWRldikpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZnYy1cdTAwM2VzZXJ2X3dvcmspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTk1NywxNCAmIzQzOzEwMDMsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRjYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOlxuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwmIzM0O1JlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXG5cJiMzNDssIHR5cGUpO1xuIFxuLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGlmICghdGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIERldmljZSBpcyBpbiBwcm9iZSBhbmQgd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldFxuLVx0XHRcdCAqIGV2ZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBkZXRlY3QgdGhhdCB0aGUgZmxhZ1xuLVx0XHRcdCAqIGhhcyBjaGFuZ2VkIGFuZCBwZXJmb3JtIHNlcnZpY2UgcHJvY2VkdXJlLlxuJiM0MztcdFx0XHQgKiBQcm9iZSBub3QgY29tcGxldGVkOiBsYXRjaCB0aGUgZXZlbnQgYW5kIGxldCB0aGVcbiYjNDM7XHRcdFx0ICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi5cbiYjNDM7XHRcdFx0ICogTmV2ZXIgYWRtaXQgc2VydmljZSB3b3JrIGJlZm9yZSBwcm9iZSBzdWNjZXNzO1xuJiM0MztcdFx0XHQgKiB0aGUgc3VjY2VzcyByZS1jaGVjayBiZWxvdyBwcmVzZXJ2ZXMgYW4gZXZlbnRcbiYjNDM7XHRcdFx0ICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uXG4gXHRcdFx0ICovXG4tXHRcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1NlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtTZXJ2aWNlIGlzIHRvIGJlIHByb2Nlc3NlZCBpbiBwcm9iZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCB0eXBlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7XG5AQCAtMjU0Niw2ICYjNDM7MjU5OCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGdjLVx1MDAzZWJhcjBfdmEgPSBiYXIwX3ZhO1xuIFx0Z2MtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmdjLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuIFx0eGFfaW5pdChcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZXR1cChwZGV2KTtcbkBAIC0yNTU4LDIyICYjNDM7MjYxMSwzNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRlcnIgPSBtYW5hX3JkbWFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYV9pYik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGNsZWFudXBfbWFuYTtcbiYjNDM7XHRcdGdvdG8gc2VydmljZV9xdWllc2NlO1xuIFxuIFx0LypcbiBcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcbi1cdCAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS5cbiYjNDM7XHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxuJiM0MztcdCAqIHN1Y2Nlc3MgYml0IGJlZm9yZSB0aGUgbGF0Y2ggY2hlY2sgcGFpcnMgd2l0aCB0aGUgaGFuZGxlciYjMzk7c1xuJiM0MztcdCAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXNcbiYjNDM7XHQgKiBhZG1pdHRlZCByYXRoZXIgdGhhbiBsb3N0LlxuIFx0ICovXG4tXHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdHNldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRlcnIgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuJiM0MztcdFx0Z290byBzZXJ2aWNlX3F1aWVzY2U7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1jbGVhbnVwX21hbmFfcmRtYTpcbiYjNDM7c2VydmljZV9xdWllc2NlOlxuJiM0MztcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcbiYjNDM7XHQgKiBoYXMgcnVuOiBjbG9zZSBhZG1pc3Npb24gYW5kIHJldGlyZSBhbiBpbi1mbGlnaHQgY3ljbGVcbiYjNDM7XHQgKiBiZWZvcmUgYW55IHRlYXJkb3duLCBsaWtlIG1hbmFfZ2RfcmVtb3ZlKCkgZG9lcy4gIEVhcmxpZXJcbiYjNDM7XHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuJiM0MztcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZnYy1cdTAwM2VmbGFncyxcbiYjNDM7XHRcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpO1xuIFx0bWFuYV9yZG1hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbi1jbGVhbnVwX21hbmE6XG4gXHRtYW5hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG4gY2xlYW51cF9nZDpcbiBcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XG5AQCAtMjU4MSw2ICYjNDM7MjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4gXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbiBmcmVlX2djOlxuJiM0MztcdC8qIEJhY2tzdG9wOiBkcmFpbiBiZWZvcmUgZXZlcnkgdmZyZWUoKS4gKi9cbiYjNDM7XHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4mIzQzO1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0ICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4gXHR2ZnJlZShnYyk7XG4gcmVsZWFzZV9yZWdpb246XG5AQCAtMjYyNCw2ICYjNDM7MjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiYjNDM7XHQvKiBDbG9zZSBhZG1pc3Npb24gYW5kIHJldGlyZSBhbiBpbi1mbGlnaHQgY3ljbGUgYmVmb3JlIGFueVxuJiM0MztcdCAqIHRlYXJkb3duOiB0aGUgc2VydmljZSB3b3JrIGlzIHRoZSBvbmx5IHVzZXIgb2YgZ2MgdGhhdFxuJiM0MztcdCAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2VcbiYjNDM7XHQgKiBleGl0cyByZXRpcmUgYmVmb3JlIHRha2luZyB0aGUgUENJIHJlc2Nhbi9yZW1vdmUgbG9jaywgc29cbiYjNDM7XHQgKiB0aGlzIHdhaXQgY2Fubm90IGRlYWRsb2NrIGFnYWluc3QgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4mIzQzO1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0ICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSk7XG4mIzQzO1xuIFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4gXG4gXHRtYW5hX3JkbWFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuQEAgLTI2MzUsNiAmIzQzOzI3MjUsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGdjLVx1MDAzZWJhcjBfdmEpO1xuIFxuJiM0MztcdC8qIFByZXZlbnQgbGF0ZSByZWNvdmVyeSB3b3JrIGZyb20gdXNpbmcgZnJlZWQgZ2MuICovXG4mIzQzO1x0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0dmZyZWUoZ2MpO1xuIFxuIFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTkyNCw4ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBBbHJlYWR5IGluIHNlcnZpY2UsIGhlbmNlIHR4IHF1ZXVlIHJlc2V0IGlzIG5vdCByZXF1aXJlZC4qL1xuLVx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIE5vdGU6IElmIHRoZXJlIGFyZSBwZW5kaW5nIHF1ZXVlIHJlc2V0IHdvcmsgZm9yIHRoaXMgcG9ydChhcGMpLFxuQEAgLTQwNTYsOSAmIzQzOzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRkZXZfd2FybihnYy1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O0dmIHN0YXRzIHdrIGhhbmRsZXI6IGdmIHN0YXRzIHF1ZXJ5IHRpbWVkIG91dC5cXG5cJiMzNDspO1xuIFx0XHQvKiBBcyBIV0MgdGltZWQgb3V0LCBpbmRpY2F0aW5nIGEgZmF1bHR5IEhXIHN0YXRlIGFuZCBuZWVkcyBhXG4tXHRcdCAqIHJlc2V0LlxuJiM0MztcdFx0ICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXNcbiYjNDM7XHRcdCAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGVcbiYjNDM7XHRcdCAqIEhXQyBjaGFubmVsIGl0c2VsZiBhbmQgY2Fubm90IGRyYWluIGEgY3ljbGUuXG4gXHRcdCAqL1xuLVx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2YWMtXHUwMDNlZ2Zfc3RhdHNfd29yaywgTUFOQV9HRl9TVEFUU19QRVJJT0QpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDMwODk1MGY5YjU0YjAuLmZkNGI5NjdjODFmNzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbkBAIC0yMjgsMTIgJiM0MzsyMjgsNiBAQCBlbnVtIGdkbWFfcGFnZV90eXBlIHtcbiBcbiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDBcbiBcbi1zdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZfd29yaztcbi1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuLVx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4tfTtcbi1cbiBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG5AQCAtNDIwLDYgJiM0Mzs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7XG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xuIFx0R0NfUFJPQkVfU1VDQ0VFREVEXHQ9IDAsXG4gXHRHQ19JTl9TRVJWSUNFXHRcdD0gMSxcbiYjNDM7XHRHQ19SRU1PVklOR1x0XHQ9IDIsXG4mIzQzO1x0R0NfU0VSVklDRV9EVVJJTkdfUFJPQkVcdD0gMyxcbiB9O1xuIFxuIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuQEAgLTQ3OSw2ICYjNDM7NDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFxuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XG4gXG4mIzQzO1x0LyogVGhlIGluLWZsaWdodCBNQU5BIHNlcnZpY2UgY3ljbGUsIHF1ZXVlZCBvbiB0aGUgc3lzdGVtIHdvcmtxdWV1ZTpcbiYjNDM7XHQgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0c2Vydl93b3JrO1xuJiM0MztcdGVudW0gZ2RtYV9lcWVfdHlwZVx0c2Vydl90eXBlO1xuJiM0MztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXG4gXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQyMTk2YWMxNzU1ZjU3YWUyODY4MjA0ODVhYWUwYmJmZWM0MTQ1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTg6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC02NzgsMTAgJiM0Mzs2NzgsMzggQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2NhbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKIH0KIAotc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7LyogUmV0aXJlIG9uZSBzZXJ2aWNlIGN5Y2xlOiBHQ19JTl9TRVJWSUNFIGlzIHRoZSBsYXN0IHN0YXRlIHB1Ymxpc2hlZAomIzQzOyAqIGJ5IHRoZSB3b3JrLCBzbyByZW1vdmUoKSBhbmQgdGhlIHByb2JlIHVud2luZCBtYXkgZnJlZSBnYyBvbmNlIGl0CiYjNDM7ICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6CiYjNDM7ICogcmVtb3ZhbCBjYW4gYmUgd2FpdGluZyBvbiB0aGUgYml0IHdoaWxlIGhvbGRpbmcgdGhhdCBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQomIzQzO3sKJiM0MzsJLyogUGFpcnMgd2l0aCB0ZXN0X2JpdF9hY3F1aXJlKCkgb24gdGhlIHdhaXQgc2lkZS4gKi8KJiM0MzsJY2xlYXJfYml0X3VubG9jayhHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncyk7CiYjNDM7CS8qIHdha2VfdXBfdmFyKCkgcmVxdWlyZXMgYSBmdWxsIGJhcnJpZXIgYmV0d2VlbiB0aGUgdXBkYXRlIG9mIHRoZQomIzQzOwkgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLgomIzQzOwkgKi8KJiM0MzsJc21wX21iX19hZnRlcl9hdG9taWMoKTsKJiM0MzsJd2FrZV91cF92YXIoJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXRpcmUgYSBjeWNsZSB3aG9zZSBleGl0IHJlbW92ZXMgdGhlIGRldmljZTogY2xvc2UgYWRtaXNzaW9uCiYjNDM7ICogZmlyc3Qgc28gbm8gbmV3IGN5Y2xlIGNhbiBiZSBhZG1pdHRlZCBpbiB0aGUgcmV0aXJlIHdpbmRvdy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKJiM0Mzt7CiYjNDM7CXNldF9iaXQoR0NfUkVNT1ZJTkcsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKJiM0MzsJbWFuYV9zZXJ2aWNlX2RvbmUoZ2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cywgKnBhcmVudDsKIAomIzQzOwlpZiAoZ2MpCiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7CiYjNDM7CiAJcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOwogCiAJYnVzID0gcGRldi0mZ3Q7YnVzOwpAQCAtNzA2LDkgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKIH0KIAotc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7Ci0Jc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjOwogCWludCByZXQ7CiAKQEAgLTczOCw2ICYjNDM7NzY1LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWlmIChyZXQgPT0gLUVUSU1FRE9VVCB8fCByZXQgPT0gLUVQUk9UTykgewogCQkvKiBQZXJmb3JtIFBDSSByZXNjYW4gb24gZGV2aWNlIGlmIHdlIGZhaWxlZCBvbiBIV0MgKi8KIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcbiYjMzQ7KTsKJiM0MzsJCW1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTsKIAkJbWFuYV9zZXJ2X3Jlc2NhbihwZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTc0OCwyMiAmIzQzOzc3NiwyNSBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O01BTkEgcmVzZXQgY3ljbGUgY29tcGxldGVkXG4mIzM0Oyk7CiAKIG91dDoKLQljbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hbmFfZG9fc2VydmljZShlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9kb19zZXJ2aWNlKGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBHRE1BX0VRRV9IV0NfRlBHQV9SRUNPTkZJRzoKLQkJbWFuYV9zZXJ2X2ZwZ2EocGRldik7CiYjNDM7CQltYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDoKLQkJbWFuYV9zZXJ2X3Jlc2V0KHBkZXYpOwomIzQzOwkJbWFuYV9zZXJ2X3Jlc2V0KHBkZXYsIGdjKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O01BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXG4mIzM0OywgdHlwZSk7CiYjNDM7CQlpZiAoZ2MpCiYjNDM7CQkJbWFuYV9zZXJ2aWNlX2RvbmUoZ2MpOwogCQlicmVhazsKIAl9CiB9CkBAIC03NzksMTIgJiM0Mzs4MTAsMjYgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7d29yay0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7d29yay0mZ3Q7ZGV2X2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKJiM0MzsKIAkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3dvcmstJmd0O2Rldl9saXN0LAogCQkJCSAgICAgICBzdHJ1Y3QgbWFuYV9kZXZfcmVjb3ZlcnksIGxpc3QpOwogCQlsaXN0X2RlbCgmYW1wO2Rldi0mZ3Q7bGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt3b3JrLSZndDtsb2NrLCBmbGFncyk7CiAKLQkJbWFuYV9kb19zZXJ2aWNlKGRldi0mZ3Q7dHlwZSwgZGV2LSZndDtwZGV2KTsKJiM0MzsJCS8qIFNlcmlhbGl6ZSB0aGUgZHJ2ZGF0YSBsb29rdXAgYW5kIGFkbWlzc2lvbiBhZ2FpbnN0CiYjNDM7CQkgKiBwcm9iZS9yZW1vdmUuICBEbyBub3QgY2FsbCBzbGVlcGluZyBmdW5jdGlvbnMgd2hpbGUKJiM0MzsJCSAqIGhvbGRpbmcgdGhlIGRldmljZSBsb2NrLgomIzQzOwkJICovCiYjNDM7CQlkZXZpY2VfbG9jaygmYW1wO2Rldi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCWdjID0gcGNpX2dldF9kcnZkYXRhKGRldi0mZ3Q7cGRldik7CiYjNDM7CQlpZiAoZ2MpCiYjNDM7CQkJbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIGRldi0mZ3Q7dHlwZSk7CiYjNDM7CQlkZXZpY2VfdW5sb2NrKCZhbXA7ZGV2LSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwkJaWYgKCFnYykKJiM0MzsJCQltYW5hX2RvX3NlcnZpY2UoZGV2LSZndDt0eXBlLCBkZXYtJmd0O3BkZXYsIE5VTEwpOwomIzQzOwogCQlwY2lfZGV2X3B1dChkZXYtJmd0O3BkZXYpOwogCQlrZnJlZShkZXYpOwogCkBAIC03OTYsNDggJiM0Mzs4NDEsNDkgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7Ci0Jc3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0KLQltbnNfd2sgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1hbmFfc2Vydl93b3JrLCBzZXJ2X3dvcmspOwotCXBkZXYgPSBtbnNfd2stJmd0O3BkZXY7CiYjNDM7CXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBnZG1hX2NvbnRleHQsIHNlcnZfd29yayk7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihnYy0mZ3Q7ZGV2KTsKIAotCWlmIChwZGV2KQotCQltYW5hX2RvX3NlcnZpY2UobW5zX3drLSZndDt0eXBlLCBwZGV2KTsKJiM0MzsJbWFuYV9kb19zZXJ2aWNlKGdjLSZndDtzZXJ2X3R5cGUsIHBkZXYsIGdjKTsKIAomIzQzOwkvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaAomIzQzOwkgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZQomIzQzOwkgKiByZWZlcmVuY2UgZnJvbSBoZXJlIG9uOyBib3RoIGFyZSBoZWxkIHVudGlsIHRoaXMgcG9pbnQgZHJvcHMgdGhlbS4KJiM0MzsJICovCiAJcGNpX2Rldl9wdXQocGRldik7Ci0Ja2ZyZWUobW5zX3drKTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAogaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193azsKLQogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSkgewogCQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O0FscmVhZHkgaW4gc2VydmljZVxuJiMzNDspOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAomIzQzOwkvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICYjNDM7IHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4KJiM0MzsJICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLAomIzQzOwkgKiBzbyBlaXRoZXIgdGhpcyByZWFkIHNlZXMgR0NfUkVNT1ZJTkcgYW5kIHRoZSBjeWNsZSBhYm9ydHMsIG9yCiYjNDM7CSAqIHJlbW92ZSgpIG9ic2VydmVzIEdDX0lOX1NFUlZJQ0UgYW5kIHdhaXRzIGZvciB0aGUgY3ljbGUgdG8gcmV0aXJlCiYjNDM7CSAqIGJlZm9yZSBpdCBmcmVlcyBnYy4KJiM0MzsJICovCiYjNDM7CWlmICh0ZXN0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O0RldmljZSBpcyBiZWluZyByZW1vdmVkXG4mIzM0Oyk7CiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKIAkJZGV2X2luZm8oZ2MtJmd0O2RldiwgJiMzNDtNb2R1bGUgaXMgdW5sb2FkaW5nXG4mIzM0Oyk7Ci0JCWNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncyk7CiYjNDM7CQltYW5hX3NlcnZpY2VfZG9uZShnYyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCW1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTsKLQlpZiAoIW1uc193aykgewotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJY2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJZGV2X2luZm8oZ2MtJmd0O2RldiwgJiMzNDtTdGFydCBNQU5BIHNlcnZpY2UgdHlwZTolZFxuJiMzNDssIHR5cGUpOwotCW1uc193ay0mZ3Q7cGRldiA9IHRvX3BjaV9kZXYoZ2MtJmd0O2Rldik7Ci0JbW5zX3drLSZndDt0eXBlID0gdHlwZTsKLQlwY2lfZGV2X2dldChtbnNfd2stJmd0O3BkZXYpOwotCUlOSVRfV09SSygmYW1wO21uc193ay0mZ3Q7c2Vydl93b3JrLCBtYW5hX3NlcnZfZnVuYyk7Ci0Jc2NoZWR1bGVfd29yaygmYW1wO21uc193ay0mZ3Q7c2Vydl93b3JrKTsKJiM0MzsKJiM0MzsJZ2MtJmd0O3NlcnZfdHlwZSA9IHR5cGU7CiYjNDM7CXBjaV9kZXZfZ2V0KHRvX3BjaV9kZXYoZ2MtJmd0O2RldikpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV93cSwgJmFtcDtnYy0mZ3Q7c2Vydl93b3JrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTU3LDE0ICYjNDM7MTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSkKIAljYXNlIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUOgogCQlkZXZfaW5mbyhnYy0mZ3Q7ZGV2LCAmIzM0O1JlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcbiYjMzQ7LCB0eXBlKTsKIAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCAmYW1wO2djLSZndDtmbGFncykpIHsKJiM0MzsJCWlmICghdGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCAmYW1wO2djLSZndDtmbGFncykpIHsKIAkJCS8qCi0JCQkgKiBEZXZpY2UgaXMgaW4gcHJvYmUgYW5kIHdlIHJlY2VpdmVkIGEgaGFyZHdhcmUgcmVzZXQKLQkJCSAqIGV2ZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBkZXRlY3QgdGhhdCB0aGUgZmxhZwotCQkJICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuCiYjNDM7CQkJICogUHJvYmUgbm90IGNvbXBsZXRlZDogbGF0Y2ggdGhlIGV2ZW50IGFuZCBsZXQgdGhlCiYjNDM7CQkJICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi4KJiM0MzsJCQkgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7CiYjNDM7CQkJICogdGhlIHN1Y2Nlc3MgcmUtY2hlY2sgYmVsb3cgcHJlc2VydmVzIGFuIGV2ZW50CiYjNDM7CQkJICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uCiAJCQkgKi8KLQkJCWRldl9pbmZvKGdjLSZndDtkZXYsCi0JCQkJICYjMzQ7U2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcbiYjMzQ7KTsKJiM0MzsJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsCiYjNDM7CQkJCQkgICAgICAmYW1wO2djLSZndDtmbGFncykpCiYjNDM7CQkJCWRldl9pbmZvKGdjLSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtTZXJ2aWNlIGlzIHRvIGJlIHByb2Nlc3NlZCBpbiBwcm9iZVxuJiMzNDspOwomIzQzOwkJCWVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7CiAJCQlicmVhazsKIAkJfQogCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7CkBAIC0yNTQ2LDYgJiM0MzsyNTk4LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCiAJZ2MtJmd0O2JhcjBfdmEgPSBiYXIwX3ZhOwogCWdjLSZndDtkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7Z2MtJmd0O3NlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpOwogCXhhX2luaXQoJmFtcDtnYy0mZ3Q7aXJxX2NvbnRleHRzKTsKIAogCWVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7CkBAIC0yNTU4LDIyICYjNDM7MjYxMSwzNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAllcnIgPSBtYW5hX3JkbWFfcHJvYmUoJmFtcDtnYy0mZ3Q7bWFuYV9pYik7CiAJaWYgKGVycikKLQkJZ290byBjbGVhbnVwX21hbmE7CiYjNDM7CQlnb3RvIHNlcnZpY2VfcXVpZXNjZTsKIAogCS8qCiAJICogSWYgYSBoYXJkd2FyZSByZXNldCBldmVudCBoYXMgb2NjdXJyZWQgb3ZlciBIV0MgZHVyaW5nIHByb2JlLAotCSAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS4KJiM0MzsJICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLiAgU3RvcmluZyB0aGUKJiM0MzsJICogc3VjY2VzcyBiaXQgYmVmb3JlIHRoZSBsYXRjaCBjaGVjayBwYWlycyB3aXRoIHRoZSBoYW5kbGVyJiMzOTtzCiYjNDM7CSAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXMKJiM0MzsJICogYWRtaXR0ZWQgcmF0aGVyIHRoYW4gbG9zdC4KIAkgKi8KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsICZhbXA7Z2MtJmd0O2ZsYWdzKSkgewomIzQzOwlzZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19TRVJWSUNFX0RVUklOR19QUk9CRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKSB7CiAJCWVyciA9IC1FUFJPVE87Ci0JCWdvdG8gY2xlYW51cF9tYW5hX3JkbWE7CiYjNDM7CQlnb3RvIHNlcnZpY2VfcXVpZXNjZTsKIAl9CiAKIAlyZXR1cm4gMDsKIAotY2xlYW51cF9tYW5hX3JkbWE6CiYjNDM7c2VydmljZV9xdWllc2NlOgomIzQzOwkvKiBUaGUgc3RhdHMgd29yayBjYW4gYWRtaXQgYSBzZXJ2aWNlIGN5Y2xlIG9uY2UgbWFuYV9wcm9iZSgpCiYjNDM7CSAqIGhhcyBydW46IGNsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZQomIzQzOwkgKiBiZWZvcmUgYW55IHRlYXJkb3duLCBsaWtlIG1hbmFfZ2RfcmVtb3ZlKCkgZG9lcy4gIEVhcmxpZXIKJiM0MzsJICogZmFpbHVyZSBwb2ludHMgY2Fubm90IGhhdmUgYWRtaXR0ZWQgc2VydmljZSB3b3JrLgomIzQzOwkgKi8KJiM0MzsJc2V0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW4KJiM0MzsJICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS4KJiM0MzsJICovCiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7Z2MtJmd0O2ZsYWdzLAomIzQzOwkJICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSk7CiAJbWFuYV9yZG1hX3JlbW92ZSgmYW1wO2djLSZndDttYW5hX2liKTsKLWNsZWFudXBfbWFuYToKIAltYW5hX3JlbW92ZSgmYW1wO2djLSZndDttYW5hLCBmYWxzZSk7CiBjbGVhbnVwX2dkOgogCW1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7CkBAIC0yNTgxLDYgJiM0MzsyNjQ5LDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl4YV9kZXN0cm95KCZhbXA7Z2MtJmd0O2lycV9jb250ZXh0cyk7CiAJcGNpX2lvdW5tYXAocGRldiwgYmFyMF92YSk7CiBmcmVlX2djOgomIzQzOwkvKiBCYWNrc3RvcDogZHJhaW4gYmVmb3JlIGV2ZXJ5IHZmcmVlKCkuICovCiYjNDM7CXNldF9iaXQoR0NfUkVNT1ZJTkcsICZhbXA7Z2MtJmd0O2ZsYWdzKTsKJiM0MzsJLyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluCiYjNDM7CSAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwl3YWl0X3Zhcl9ldmVudCgmYW1wO2djLSZndDtmbGFncywKJiM0MzsJCSAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCAmYW1wO2djLSZndDtmbGFncykpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl2ZnJlZShnYyk7CiByZWxlYXNlX3JlZ2lvbjoKQEAgLTI2MjQsNiAmIzQzOzI3MDAsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKJiM0MzsJLyogQ2xvc2UgYWRtaXNzaW9uIGFuZCByZXRpcmUgYW4gaW4tZmxpZ2h0IGN5Y2xlIGJlZm9yZSBhbnkKJiM0MzsJICogdGVhcmRvd246IHRoZSBzZXJ2aWNlIHdvcmsgaXMgdGhlIG9ubHkgdXNlciBvZiBnYyB0aGF0CiYjNDM7CSAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2UKJiM0MzsJICogZXhpdHMgcmV0aXJlIGJlZm9yZSB0YWtpbmcgdGhlIFBDSSByZXNjYW4vcmVtb3ZlIGxvY2ssIHNvCiYjNDM7CSAqIHRoaXMgd2FpdCBjYW5ub3QgZGVhZGxvY2sgYWdhaW5zdCB0aGVtLgomIzQzOwkgKi8KJiM0MzsJc2V0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpOwomIzQzOwkvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW4KJiM0MzsJICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS4KJiM0MzsJICovCiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7Z2MtJmd0O2ZsYWdzLAomIzQzOwkJICAgICAgICF0ZXN0X2JpdF9hY3F1aXJlKEdDX0lOX1NFUlZJQ0UsICZhbXA7Z2MtJmd0O2ZsYWdzKSk7CiYjNDM7CiAJcGNpX2Rpc2FibGVfc3Jpb3YocGRldik7CiAKIAltYW5hX3JkbWFfcmVtb3ZlKCZhbXA7Z2MtJmd0O21hbmFfaWIpOwpAQCAtMjYzNSw2ICYjNDM7MjcyNSw4IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJcGNpX2lvdW5tYXAocGRldiwgZ2MtJmd0O2JhcjBfdmEpOwogCiYjNDM7CS8qIFByZXZlbnQgbGF0ZSByZWNvdmVyeSB3b3JrIGZyb20gdXNpbmcgZnJlZWQgZ2MuICovCiYjNDM7CXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl2ZnJlZShnYyk7CiAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKQEAgLTkyNCw4ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKQogCQlyZXR1cm47CiAJfQogCi0JLyogQWxyZWFkeSBpbiBzZXJ2aWNlLCBoZW5jZSB0eCBxdWV1ZSByZXNldCBpcyBub3QgcmVxdWlyZWQuKi8KLQlpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChHQ19SRU1PVklORywgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKiBOb3RlOiBJZiB0aGVyZSBhcmUgcGVuZGluZyBxdWV1ZSByZXNldCB3b3JrIGZvciB0aGlzIHBvcnQoYXBjKSwKQEAgLTQwNTYsOSAmIzQzOzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlkZXZfd2FybihnYy0mZ3Q7ZGV2LAogCQkJICYjMzQ7R2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxuJiMzNDspOwogCQkvKiBBcyBIV0MgdGltZWQgb3V0LCBpbmRpY2F0aW5nIGEgZmF1bHR5IEhXIHN0YXRlIGFuZCBuZWVkcyBhCi0JCSAqIHJlc2V0LgomIzQzOwkJICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXMKJiM0MzsJCSAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGUKJiM0MzsJCSAqIEhXQyBjaGFubmVsIGl0c2VsZiBhbmQgY2Fubm90IGRyYWluIGEgY3ljbGUuCiAJCSAqLwotCQltYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpOwomIzQzOwkJaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgJmFtcDtnYy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCW1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7CiAJCXJldHVybjsKIAl9CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7YWMtJmd0O2dmX3N0YXRzX3dvcmssIE1BTkFfR0ZfU1RBVFNfUEVSSU9EKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTIyOCwxMiAmIzQzOzIyOCw2IEBAIGVudW0gZ2RtYV9wYWdlX3R5cGUgewogCiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDAKIAotc3RydWN0IG1hbmFfc2Vydl93b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Vydl93b3JrOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCWVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlOwotfTsKLQogc3RydWN0IGdkbWFfbWVtX2luZm8gewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIApAQCAtNDIwLDYgJiM0Mzs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7CiBlbnVtIGdkbWFfY29udGV4dF9mbGFncyB7CiAJR0NfUFJPQkVfU1VDQ0VFREVECT0gMCwKIAlHQ19JTl9TRVJWSUNFCQk9IDEsCiYjNDM7CUdDX1JFTU9WSU5HCQk9IDIsCiYjNDM7CUdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFCT0gMywKIH07CiAKIHN0cnVjdCBnZG1hX2NvbnRleHQgewpAQCAtNDc5LDYgJiM0Mzs0NzUsMTIgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2VydmljZV93cTsKIAomIzQzOwkvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOgomIzQzOwkgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXNlcnZfd29yazsKJiM0MzsJZW51bSBnZG1hX2VxZV90eXBlCXNlcnZfdHlwZTsKJiM0MzsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCS8qIFByb3RlY3QgYWNjZXNzIHRvIEdJQyBjb250ZXh0ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUFOQSBEcml2ZXIgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLCBhbmQgYGluY2x1ZGUvbmV0L21hbmEvZ2RtYS5oYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIE1pY3Jvc29mdCBNQU5BIGV0aGVybmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgTUFOQSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgU3l6a2FsbGVyIHR5cGljYWxseSB0YXJnZXRzLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCYjMzk7cyByZWZlciBiYWNrIHRvIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0LiBJdCBsaXN0cyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IOKAkyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzLCBzdHVmZiB0aGF0IHJlcXVpcmVzIHNwZWNpYWxpemVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGluZ3MgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBJcyBNQU5BIG9uIHRoYXQgbGlzdD8KCkFoLCByaWdodCwgTUFOQSBpcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQmIzM5O3MgYSBQQ0kgZGV2aWNlIHNwZWNpZmljYWxseSBmb3IgQXp1cmUgVk1zIGFuZCBIeXBlci1WLiBTbyB0aGF0JiMzOTtzIHRoZSBrZXk6IGl0ICppcyogYW4gQXp1cmUtc3BlY2lmaWMgdGhpbmcuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgY2FuIGJlIGFjY2Vzc2VkIGluIGEgc3RhbmRhcmQsIGZ1enphYmxlIGVudmlyb25tZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnYCBvciB3aXRoaW4gdGhlIGBtYW5hYCBkaXJlY3Rvcnkg4oCTIHRvIHNlZSBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgaWYgYW55IGRlcGVuZGVuY2llcyBwb2ludCB0byBoYXJkd2FyZSB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlbXVsYXRlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGVudmlyb25tZW50IHRoZSBNQU5BIGRyaXZlciBleHBlY3RzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IHRvIHJlcXVpcmUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQmIzM5O3MgYSBub24tc3RhcnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlDUk9TT0ZUX01BTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MTg6Y29uZmlnIE1JQ1JPU09GVF9NQU5BXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNaWNyb3NvZnQgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIE1pY3Jvc29mdCBFdGhlcm5ldCBkcml2ZXIuIFRvIGdldCB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHRoZSBkZXBlbmRlbmNpZXMgdGhleSByZWx5IG9uIChrZXJuZWwgZmVhdHVyZXMsIG90aGVyIGRyaXZlcnMsIGV0Yy4pLCBhbmQgcHJvYmFibHkgc29tZSBkb2N1bWVudGF0aW9uIHNuaXBwZXRzIHRvby4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBncm91bmQgdHJ1dGggb24gd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlIHRvIHR1cm4gYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGBLY29uZmlnYCBpcyBjcml0aWNhbCB0byBwcm9wZXJseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBkcml2ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBNaWNyb3NvZnQgQXp1cmUgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IE5ldHdvcmsgRGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxMjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgdGhlXG4gIDEzOlx0XHQgIHF1ZXN0aW9uIGFib3V0IE1pY3Jvc29mdCBuZXR3b3JrIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcbiAgMTQ6XHRcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb24uXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTUlDUk9TT0ZUX01BTkFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKEFSTTY0IFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXG4gIDIyOlx0XHRkZXBlbmRzIG9uIFBDSV9IWVBFUlZcbiAgMjM6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gIDI0Olx0XHRzZWxlY3QgRElNTElCXG4gIDI1Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDI2Olx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKS5cbiAgMjk6XHRcdCAgU28gZmFyLCB0aGUgZHJpdmVyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFg4Nl82NC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMzI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYW5hLlxuICAzMzpcdFxuICAzNDpcdGVuZGlmICNORVRfVkVORE9SX01JQ1JPU09GVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTUlDUk9TT0ZUX01BTkEgRHJpdmVyIERlcGVuZGVuY3kqKgoKT2theSwgc28gYE1JQ1JPU09GVF9NQU5BYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQ0lfSFlQRVJWYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW52ZXN0aWdhdGUgYm90aC4gYFBDSV9IWVBFUlZgIGlzIHRoZSBIeXBlci1WIFBDSSBmcm9udGVuZCBkcml2ZXIsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBjcnVjaWFsIGZvciBQQ0kgcGFzcy10aHJvdWdoIG9yIHRoZSBzeW50aGV0aWMgUENJIGJ1cyB3aXRoaW4gdGhlIEh5cGVyLVYgZW52aXJvbm1lbnQuIEFuZCB0aGVuLCBgTUFOQWDigJR0aGF0JiMzOTtzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBTcGVjaWZpY2FsbHksIHRoZSBwaHlzaWNhbCBBU0lDIG9yIGhhcmR3YXJlIFNtYXJ0TklDIGZvdW5kIHdpdGhpbiBBenVyZSYjMzk7cyBIeXBlci1WIHNldHVwcy4KCk5vdywgbXkga2V5IHF1ZXN0aW9uIGJlY29tZXM6IGlzIE1BTkEgZW11bGF0ZWQgaW4gYSB0eXBpY2FsIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50PyAgUXVpY2tseSwgSSByZWFsaXplIGl0JiMzOTtzIG5vdC4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBvZmZlciB0aGF0IGVtdWxhdGlvbi4gQW5kIEdDRSwgd2hpbGUgdmlydHVhbGl6ZWQsIGRvZXNuJiMzOTt0IHVzZSB0aGUgSHlwZXItViBhcmNoaXRlY3R1cmUgb3IsIGNvbnNlcXVlbnRseSwgdGhlIE1BTkEgaGFyZHdhcmUuIE15IGVzdGFibGlzaGVkIGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB0ZWxscyBtZSB0aGF0IHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGFyZSBiYXNlZCBvbiB0aGluZ3MgbGlrZSB2aXJ0aW8tbmV0LCBlMTAwMCwgVVNCIGdhZGdldHMsIHR1bi90YXAsIGFuZCBsb29wYmFjaywgb3Igc2ltaWxhciBlbXVsYXRpb24gYXBwcm9hY2hlcy4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgc28gSSBsb29rIGZvciBhIHJlZmVyZW5jZS4gQWhhISBJIHJlbWVtYmVyIGEgc2VjdGlvbiBjb3ZlcmluZyDigJxTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmXigJ0uIEl0IGxpc3RzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBxZWQsIGFuZCBpb25pYykuIFRoZXNlIHJlcXVpcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZS4gVGhpcyBjb25maXJtcyB0aGF0IEkgdW5kZXJzdGFuZCB0aGlzIGFyZWEuCgpTbywgbm93IEkmIzM5O20gdGhpbmtpbmcsIGRvZXMgTUFOQSBoYXZlIGFueSBraW5kIG9mIG1vY2ssIHZpcnR1YWwsIG9yIHNvZnR3YXJlIGVtdWxhdGlvbj8gT3IgaXMgaXQgcHVyZWx5IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBoYXJkd2FyZSBkcml2ZXIgZGVzaWduZWQgZm9yIHVzZSBpbiBBenVyZSBWTXM/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBldmVuIGJlICpyZWFjaGVkKiBieSB0aGUgc3RhbmRhcmQgdG9vbHMgSSBoYXZlLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWFsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGFuc3dlcnMsIHNvIG15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGdyZXAgZm9yIHJlZmVyZW5jZXMgdG8gdGhlIE1BTkEgZGV2aWNlIElEIG9yIFBDSSBkcml2ZXIgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI4MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjgxODpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yODE5LVx0Lm5hbWVcdFx0PSBcJiMzNDttYW5hXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTc3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGdkbWFfbWFpbi5jYCBNeXN0ZXJ5KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYW4gaXNzdWUuLi4gbGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgaXQuIE15IGZpcnN0IG1vdmUgaGVyZSBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gYGdkbWFfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYG1hbmFfaWRfdGFibGVgLiBJIGhhdmUgYSBmZWVsaW5nIGl0IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHByb2JsZW0gd2UmIzM5O3JlIHNlZWluZy4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhhdCB0YWJsZSBpcyBzdHJ1Y3R1cmVkLCB3aGF0IGl0cyBwdXJwb3NlIGlzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBETUEgZnJhbWV3b3JrLiBUaGlzIHdpbGwgcmVxdWlyZSBhIHN5c3RlbWF0aWMgcmV2aWV3IG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGFyb3VuZCB0aGUgYG1hbmFfaWRfdGFibGVgIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBleHBlY3RlZCBmdW5jdGlvbmFsaXR5LiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGxvZ2ljYWwgZXJyb3JzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgxMDpcdFxuMjgxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYW5hX2lkX3RhYmxlW10gPSB7XG4yODEyOlx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEZfREVWSUNFX0lEKSB9LFxuMjgxMzpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUlDUk9TT0ZULCBNQU5BX1BGMl9ERVZJQ0VfSUQpIH0sXG4yODE0Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfVkZfREVWSUNFX0lEKSB9LFxuMjgxNTpcdFx0eyB9XG4yODE2Olx0fTtcbjI4MTc6XHRcbjI4MTg6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4yODE5Olx0XHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4yODIwOlx0XHQuaWRfdGFibGVcdD0gbWFuYV9pZF90YWJsZSxcbjI4MjE6XHRcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG4yODIyOlx0XHQucmVtb3ZlXHRcdD0gbWFuYV9nZF9yZW1vdmUsXG4yODIzOlx0XHQuc3VzcGVuZFx0PSBtYW5hX2dkX3N1c3BlbmQsXG4yODI0Olx0XHQucmVzdW1lXHRcdD0gbWFuYV9nZF9yZXN1bWUsXG4yODI1Olx0XHQuc2h1dGRvd25cdD0gbWFuYV9nZF9zaHV0ZG93bixcbjI4MjY6XHRcdC5zcmlvdl9jb25maWd1cmUgPSBtYW5hX3NyaW92X2NvbmZpZ3VyZSxcbjI4Mjc6XHR9O1xuMjgyODpcdFxuMjgyOTpcdHN0YXRpYyBpbnQgX19pbml0IG1hbmFfZHJpdmVyX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODUKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1BTkEgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBlbnRpcmVseSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgcmVsYXRlZCB0byB2YXJpb3VzIHNlcnZpY2UgZnVuY3Rpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIGJlaW5nIHRvdWNoZWQgKGBtYW5hX3NlcnZpY2VfZG9uZWAsIGBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZ2AsIGV0Yy4pIGNvbmZpcm0gdGhpcy4KCktub3dpbmcgdGhpcywgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYSBrZXkgbGltaXRhdGlvbi4gVGhpcyBkcml2ZXIgaXMgdGllZCB0byB0aGUgcGh5c2ljYWwgTUFOQSBoYXJkd2FyZSBvciBhIEh5cGVyLVYgc3ludGhldGljIFBDSSBkZXZpY2UuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aCBzeXprYWxsZXIgKmNhbm5vdCogZWZmZWN0aXZlbHkgdGVzdCB0aGlzIGNvZGUgYmVjYXVzZSB0aGV5IGRvbiYjMzk7dCBlbXVsYXRlIHRoZSB1bmRlcmx5aW5nIFBDSWUgaGFyZHdhcmUgKE1BTkEgUEYvVkYpLiBUaGF0JiMzOTtzIGEgZGVhbGJyZWFrZXIuCgpMb29raW5nIGJhY2sgYXQgdGhlIGluc3RydWN0aW9ucywgU2VjdGlvbiAyIGNsZWFybHkgZGVmaW5lcyB0aGlzIGFzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCYjMzQ7IHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGlzIHNjZW5hcmlvLiBUaGluZ3MgbGlrZSBTbWFydE5JQ3MgYW5kIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5IHdoZW4gdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZC4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBNeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgcmVtYWluIGVtcHR5IGJlY2F1c2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGZvY3VzIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjbGVhcjogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQU5BIGRyaXZlciwgd2hpY2ggcmVsaWVzIG9uIHVuYXZhaWxhYmxlLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdGhlIHRhcmdldCBmdXp6aW5nIGVudmlyb25tZW50cy4KCkFscmlnaHQsIG9uZSBsYXN0IGNoZWNr4oCmIGBXb3J0aEZ1enppbmdgOiBmYWxzZS4gYEZvY3VzU3ltYm9sc2A6IGVtcHR5LiBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5LiBgUmVhc29uaW5nYDogY2xlYXJseSBkb2N1bWVudGVkLiBBbGwgY2hlY2tzIGFyZSBjb21wbGV0ZSwgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbnMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzIuOTg4NTY5MzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTMwMjQ0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgZHJpdmVyIGZvciBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwvaHlwZXJ2aXNvciBQQ0llIGhhcmR3YXJlIGRldmljZXMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgdmlydHVhbCBtYWNoaW5lcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzIuOTg4NTc2NzY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM4MDM2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6NTg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbkBAIC02NzgsMTAgKzY3OCwzOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzY2FuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuKy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcXG4rICogYnkgdGhlIHdvcmssIHNvIHJlbW92ZSgpIGFuZCB0aGUgcHJvYmUgdW53aW5kIG1heSBmcmVlIGdjIG9uY2UgaXRcXG4rICogaXMgY2xlYXIuICBNdXN0IHJ1biBiZWZvcmUgdGhlIGV4aXQgcGF0aHMgdGFrZSBwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk6XFxuKyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbit7XFxuK1xcdC8qIFBhaXJzIHdpdGggdGVzdF9iaXRfYWNxdWlyZSgpIG9uIHRoZSB3YWl0IHNpZGUuICovXFxuK1xcdGNsZWFyX2JpdF91bmxvY2soR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuK1xcdC8qIHdha2VfdXBfdmFyKCkgcmVxdWlyZXMgYSBmdWxsIGJhcnJpZXIgYmV0d2VlbiB0aGUgdXBkYXRlIG9mIHRoZVxcbitcXHQgKiB3YWl0ZWQtb24gdmFyaWFibGUgYW5kIHRoZSB3YWtlLlxcbitcXHQgKi9cXG4rXFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4rXFx0d2FrZV91cF92YXIoXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuKy8qIFJldGlyZSBhIGN5Y2xlIHdob3NlIGV4aXQgcmVtb3ZlcyB0aGUgZGV2aWNlOiBjbG9zZSBhZG1pc3Npb25cXG4rICogZmlyc3Qgc28gbm8gbmV3IGN5Y2xlIGNhbiBiZSBhZG1pdHRlZCBpbiB0aGUgcmV0aXJlIHdpbmRvdy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbit7XFxuK1xcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzLCAqcGFyZW50O1xcbiBcXG4rXFx0aWYgKGdjKVxcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XFxuK1xcbiBcXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuIFxcbiBcXHRidXMgPSBwZGV2LVxcdTAwM2VidXM7XFxuQEAgLTcwNiw5ICs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4ge1xcbi1cXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtNzM4LDYgKzc2NSw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0aWYgKHJldCA9PSAtRVRJTUVET1VUIHx8IHJldCA9PSAtRVBST1RPKSB7XFxuIFxcdFxcdC8qIFBlcmZvcm0gUENJIHJlc2NhbiBvbiBkZXZpY2UgaWYgd2UgZmFpbGVkIG9uIEhXQyAqL1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcXFxcblxcXCIpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZyhnYyk7XFxuIFxcdFxcdG1hbmFfc2Vydl9yZXNjYW4ocGRldik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC03NDgsMjIgKzc3NiwyNSBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQU5BIHJlc2V0IGN5Y2xlIGNvbXBsZXRlZFxcXFxuXFxcIik7XFxuIFxcbiBvdXQ6XFxuLVxcdGNsZWFyX2JpdChHQ19JTl9TRVJWSUNFLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbitzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgR0RNQV9FUUVfSFdDX0ZQR0FfUkVDT05GSUc6XFxuLVxcdFxcdG1hbmFfc2Vydl9mcGdhKHBkZXYpO1xcbitcXHRcXHRtYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcXG4tXFx0XFx0bWFuYV9zZXJ2X3Jlc2V0KHBkZXYpO1xcbitcXHRcXHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgc2VydmljZTogdW5rbm93biB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0aWYgKGdjKVxcbitcXHRcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG5AQCAtNzc5LDEyICs4MTAsMjYgQEAgc3RhdGljIHZvaWQgbWFuYV9yZWNvdmVyeV9kZWxheWVkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d29yay1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZ3b3JrLVxcdTAwM2VkZXZfbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XFxuK1xcbiBcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ3b3JrLVxcdTAwM2VkZXZfbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtYW5hX2Rldl9yZWNvdmVyeSwgbGlzdCk7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZkZXYtXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ3b3JrLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHRtYW5hX2RvX3NlcnZpY2UoZGV2LVxcdTAwM2V0eXBlLCBkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHQvKiBTZXJpYWxpemUgdGhlIGRydmRhdGEgbG9va3VwIGFuZCBhZG1pc3Npb24gYWdhaW5zdFxcbitcXHRcXHQgKiBwcm9iZS9yZW1vdmUuICBEbyBub3QgY2FsbCBzbGVlcGluZyBmdW5jdGlvbnMgd2hpbGVcXG4rXFx0XFx0ICogaG9sZGluZyB0aGUgZGV2aWNlIGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZpY2VfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRnYyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHRpZiAoZ2MpXFxuK1xcdFxcdFxcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcbitcXHRcXHRpZiAoIWdjKVxcbitcXHRcXHRcXHRtYW5hX2RvX3NlcnZpY2UoZGV2LVxcdTAwM2V0eXBlLCBkZXYtXFx1MDAzZXBkZXYsIE5VTEwpO1xcbitcXG4gXFx0XFx0cGNpX2Rldl9wdXQoZGV2LVxcdTAwM2VwZGV2KTtcXG4gXFx0XFx0a2ZyZWUoZGV2KTtcXG4gXFxuQEAgLTc5Niw0OCArODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcXG4tXFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuLVxcbi1cXHRtbnNfd2sgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1hbmFfc2Vydl93b3JrLCBzZXJ2X3dvcmspO1xcbi1cXHRwZGV2ID0gbW5zX3drLVxcdTAwM2VwZGV2O1xcbitcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0LCBzZXJ2X3dvcmspO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2MtXFx1MDAzZWRldik7XFxuIFxcbi1cXHRpZiAocGRldilcXG4tXFx0XFx0bWFuYV9kb19zZXJ2aWNlKG1uc193ay1cXHUwMDNldHlwZSwgcGRldik7XFxuK1xcdG1hbmFfZG9fc2VydmljZShnYy1cXHUwMDNlc2Vydl90eXBlLCBwZGV2LCBnYyk7XFxuIFxcbitcXHQvKiBUaGUgcmVzY2FuIGV4aXRzIG9mIG1hbmFfZG9fc2VydmljZSgpIHJlbW92ZSB0aGUgZGV2aWNlLCB3aGljaFxcbitcXHQgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2UgZnJvbSBoZXJlIG9uOyBib3RoIGFyZSBoZWxkIHVudGlsIHRoaXMgcG9pbnQgZHJvcHMgdGhlbS5cXG4rXFx0ICovXFxuIFxcdHBjaV9kZXZfcHV0KHBkZXYpO1xcbi1cXHRrZnJlZShtbnNfd2spO1xcbiBcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmsgKm1uc193aztcXG4tXFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsIFxcXCJBbHJlYWR5IGluIHNlcnZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICsgc21wX21iX19hZnRlcl9hdG9taWMoKSBpblxcbitcXHQgKiBtYW5hX2dkX3JlbW92ZSgpOiB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIGFib3ZlIGlzIGZ1bGx5IG9yZGVyZWQsXFxuK1xcdCAqIHNvIGVpdGhlciB0aGlzIHJlYWQgc2VlcyBHQ19SRU1PVklORyBhbmQgdGhlIGN5Y2xlIGFib3J0cywgb3JcXG4rXFx0ICogcmVtb3ZlKCkgb2JzZXJ2ZXMgR0NfSU5fU0VSVklDRSBhbmQgd2FpdHMgZm9yIHRoZSBjeWNsZSB0byByZXRpcmVcXG4rXFx0ICogYmVmb3JlIGl0IGZyZWVzIGdjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiRGV2aWNlIGlzIGJlaW5nIHJlbW92ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuIFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsIFxcXCJNb2R1bGUgaXMgdW5sb2FkaW5nXFxcXG5cXFwiKTtcXG4tXFx0XFx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHRtbnNfd2sgPSBremFsbG9jKHNpemVvZigqbW5zX3drKSwgR0ZQX0FUT01JQyk7XFxuLVxcdGlmICghbW5zX3drKSB7XFxuLVxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuLVxcbiBcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiU3RhcnQgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXFxcblxcXCIsIHR5cGUpO1xcbi1cXHRtbnNfd2stXFx1MDAzZXBkZXYgPSB0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpO1xcbi1cXHRtbnNfd2stXFx1MDAzZXR5cGUgPSB0eXBlO1xcbi1cXHRwY2lfZGV2X2dldChtbnNfd2stXFx1MDAzZXBkZXYpO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm1uc193ay1cXHUwMDNlc2Vydl93b3JrLCBtYW5hX3NlcnZfZnVuYyk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm1uc193ay1cXHUwMDNlc2Vydl93b3JrKTtcXG4rXFxuK1xcdGdjLVxcdTAwM2VzZXJ2X3R5cGUgPSB0eXBlO1xcbitcXHRwY2lfZGV2X2dldCh0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFxcdTAwMjZnYy1cXHUwMDNlc2Vydl93b3JrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTk1NywxNCArMTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcXG4gXFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcXG4gXFx0XFx0ZGV2X2luZm8oZ2MtXFx1MDAzZWRldiwgXFxcIlJlY3YgTUFOQSBzZXJ2aWNlIHR5cGU6JWRcXFxcblxcXCIsIHR5cGUpO1xcbiBcXG4tXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0aWYgKCF0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIERldmljZSBpcyBpbiBwcm9iZSBhbmQgd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldFxcbi1cXHRcXHRcXHQgKiBldmVudCwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgZGV0ZWN0IHRoYXQgdGhlIGZsYWdcXG4tXFx0XFx0XFx0ICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuXFxuK1xcdFxcdFxcdCAqIFByb2JlIG5vdCBjb21wbGV0ZWQ6IGxhdGNoIHRoZSBldmVudCBhbmQgbGV0IHRoZVxcbitcXHRcXHRcXHQgKiBwcm9iZSByb2xsIGJhY2ssIHRoZSByZWNvdmVyeSBwYXRoIHdpbGwgcmVzY2FuLlxcbitcXHRcXHRcXHQgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7XFxuK1xcdFxcdFxcdCAqIHRoZSBzdWNjZXNzIHJlLWNoZWNrIGJlbG93IHByZXNlcnZlcyBhbiBldmVudFxcbitcXHRcXHRcXHQgKiByYWNpbmcgcHJvYmUgY29tcGxldGlvbi5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGRldl9pbmZvKGdjLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCBcXFwiU2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlNlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAodGVzdF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIHR5cGUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgdHlwZSk7XFxuQEAgLTI1NDYsNiArMjU5OCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdGdjLVxcdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcXG4gXFx0Z2MtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2Z2MtXFx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xcbiBcXHR4YV9pbml0KFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzKTtcXG4gXFxuIFxcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XFxuQEAgLTI1NTgsMjIgKzI2MTEsMzcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0ZXJyID0gbWFuYV9yZG1hX3Byb2JlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYV9pYik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gY2xlYW51cF9tYW5hO1xcbitcXHRcXHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcXG4tXFx0ICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLlxcbitcXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxcbitcXHQgKiBzdWNjZXNzIGJpdCBiZWZvcmUgdGhlIGxhdGNoIGNoZWNrIHBhaXJzIHdpdGggdGhlIGhhbmRsZXInc1xcbitcXHQgKiBsYXRjaC10aGVuLXJlY2hlY2ssIHNvIGFuIGV2ZW50IHJhY2luZyBwcm9iZSBjb21wbGV0aW9uIGlzXFxuK1xcdCAqIGFkbWl0dGVkIHJhdGhlciB0aGFuIGxvc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdHNldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdGVyciA9IC1FUFJPVE87XFxuLVxcdFxcdGdvdG8gY2xlYW51cF9tYW5hX3JkbWE7XFxuK1xcdFxcdGdvdG8gc2VydmljZV9xdWllc2NlO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWNsZWFudXBfbWFuYV9yZG1hOlxcbitzZXJ2aWNlX3F1aWVzY2U6XFxuK1xcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcXG4rXFx0ICogaGFzIHJ1bjogY2xvc2UgYWRtaXNzaW9uIGFuZCByZXRpcmUgYW4gaW4tZmxpZ2h0IGN5Y2xlXFxuK1xcdCAqIGJlZm9yZSBhbnkgdGVhcmRvd24sIGxpa2UgbWFuYV9nZF9yZW1vdmUoKSBkb2VzLiAgRWFybGllclxcbitcXHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXFxuK1xcdCAqL1xcbitcXHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXFxuK1xcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzLFxcbitcXHRcXHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpO1xcbiBcXHRtYW5hX3JkbWFfcmVtb3ZlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYV9pYik7XFxuLWNsZWFudXBfbWFuYTpcXG4gXFx0bWFuYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuIGNsZWFudXBfZ2Q6XFxuIFxcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XFxuQEAgLTI1ODEsNiArMjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmdjLVxcdTAwM2VpcnFfY29udGV4dHMpO1xcbiBcXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcXG4gZnJlZV9nYzpcXG4rXFx0LyogQmFja3N0b3A6IGRyYWluIGJlZm9yZSBldmVyeSB2ZnJlZSgpLiAqL1xcbitcXHRzZXRfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKTtcXG4rXFx0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXFxuK1xcdCAqIG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzLFxcbitcXHRcXHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykpO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdHZmcmVlKGdjKTtcXG4gcmVsZWFzZV9yZWdpb246XFxuQEAgLTI2MjQsNiArMjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFxuK1xcdC8qIENsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZSBiZWZvcmUgYW55XFxuK1xcdCAqIHRlYXJkb3duOiB0aGUgc2VydmljZSB3b3JrIGlzIHRoZSBvbmx5IHVzZXIgb2YgZ2MgdGhhdFxcbitcXHQgKiByZW1vdmUoKSBkb2VzIG5vdCBvdGhlcndpc2Ugc3luY2hyb25pc2Ugd2l0aC4gIFRoZSBzZXJ2aWNlXFxuK1xcdCAqIGV4aXRzIHJldGlyZSBiZWZvcmUgdGFraW5nIHRoZSBQQ0kgcmVzY2FuL3JlbW92ZSBsb2NrLCBzb1xcbitcXHQgKiB0aGlzIHdhaXQgY2Fubm90IGRlYWRsb2NrIGFnYWluc3QgdGhlbS5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpO1xcbitcXHQvKiBQYWlycyB3aXRoIHRoZSBvcmRlcmVkIHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSkgaW5cXG4rXFx0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MsXFxuK1xcdFxcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSk7XFxuK1xcbiBcXHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4gXFxuIFxcdG1hbmFfcmRtYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG5AQCAtMjYzNSw2ICsyNzI1LDggQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRwY2lfaW91bm1hcChwZGV2LCBnYy1cXHUwMDNlYmFyMF92YSk7XFxuIFxcbitcXHQvKiBQcmV2ZW50IGxhdGUgcmVjb3Zlcnkgd29yayBmcm9tIHVzaW5nIGZyZWVkIGdjLiAqL1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdHZmcmVlKGdjKTtcXG4gXFxuIFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbmluZGV4IDdhMWFjODUzZTNhYmMuLjY3YzdlN2U2NzNhZTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuQEAgLTkyNCw4ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQWxyZWFkeSBpbiBzZXJ2aWNlLCBoZW5jZSB0eCBxdWV1ZSByZXNldCBpcyBub3QgcmVxdWlyZWQuKi9cXG4tXFx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRpZiAodGVzdF9iaXQoR0NfSU5fU0VSVklDRSwgXFx1MDAyNmdjLVxcdTAwM2VmbGFncykgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogTm90ZTogSWYgdGhlcmUgYXJlIHBlbmRpbmcgcXVldWUgcmVzZXQgd29yayBmb3IgdGhpcyBwb3J0KGFwYyksXFxuQEAgLTQwNTYsOSArNDA1NiwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGRldl93YXJuKGdjLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdCBcXFwiR2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxcXFxuXFxcIik7XFxuIFxcdFxcdC8qIEFzIEhXQyB0aW1lZCBvdXQsIGluZGljYXRpbmcgYSBmYXVsdHkgSFcgc3RhdGUgYW5kIG5lZWRzIGFcXG4tXFx0XFx0ICogcmVzZXQuXFxuK1xcdFxcdCAqIHJlc2V0LiAgTmV2ZXIgYWRtaXQgc2VydmljZSB3b3JrIGJlZm9yZSB0aGUgcHJvYmUgaGFzXFxuK1xcdFxcdCAqIGNvbXBsZXRlZDogYSBwcm9iZSB0aGF0IGlzIGZhaWxpbmcgdW53aW5kcyBuZXRkZXZzIGFuZCB0aGVcXG4rXFx0XFx0ICogSFdDIGNoYW5uZWwgaXRzZWxmIGFuZCBjYW5ub3QgZHJhaW4gYSBjeWNsZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFxcdTAwMjZnYy1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhnYywgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1QpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZhYy1cXHUwMDNlZ2Zfc3RhdHNfd29yaywgTUFOQV9HRl9TVEFUU19QRVJJT0QpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuQEAgLTIyOCwxMiArMjI4LDYgQEAgZW51bSBnZG1hX3BhZ2VfdHlwZSB7XFxuIFxcbiAjZGVmaW5lIEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OIDBcXG4gXFxuLXN0cnVjdCBtYW5hX3NlcnZfd29yayB7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2X3dvcms7XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbi1cXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcXG4tfTtcXG4tXFxuIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG5AQCAtNDIwLDYgKzQxNCw4IEBAIHN0cnVjdCBnZG1hX2lycV9jb250ZXh0IHtcXG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xcbiBcXHRHQ19QUk9CRV9TVUNDRUVERURcXHQ9IDAsXFxuIFxcdEdDX0lOX1NFUlZJQ0VcXHRcXHQ9IDEsXFxuK1xcdEdDX1JFTU9WSU5HXFx0XFx0PSAyLFxcbitcXHRHQ19TRVJWSUNFX0RVUklOR19QUk9CRVxcdD0gMyxcXG4gfTtcXG4gXFxuIHN0cnVjdCBnZG1hX2NvbnRleHQge1xcbkBAIC00NzksNiArNDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xcbiBcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XFxuIFxcbitcXHQvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOlxcbitcXHQgKiBhIHJlc2V0IGN5Y2xlIGRlc3Ryb3lzIGFuZCByZS1jcmVhdGVzIEBzZXJ2aWNlX3dxLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0c2Vydl93b3JrO1xcbitcXHRlbnVtIGdkbWFfZXFlX3R5cGVcXHRzZXJ2X3R5cGU7XFxuK1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuIFxcbiBcXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozMy42NTI5NjQ0OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4MTQ4NjA1MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgZHJpdmVyIGZvciBNaWNyb3NvZnQgQXp1cmUgLyBIeXBlci1WIGVudmlyb25tZW50cy4gSXQgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwvaHlwZXJ2aXNvciBQQ0llIGhhcmR3YXJlIGRldmljZXMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgdmlydHVhbCBtYWNoaW5lcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDIxOTZhYzE3NTVmNTdhZTI4NjgyMDQ4NWFhZTBiYmZlYzQxNDVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDo1ODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbmluZGV4IGY5MmIyZDBiZjkyNmUuLjI4NTQ0ZjAwZThjZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC02NzgsMTAgKzY3OCwzOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzY2FuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hbmFfc2Vydl9mcGdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuKy8qIFJldGlyZSBvbmUgc2VydmljZSBjeWNsZTogR0NfSU5fU0VSVklDRSBpcyB0aGUgbGFzdCBzdGF0ZSBwdWJsaXNoZWRcbisgKiBieSB0aGUgd29yaywgc28gcmVtb3ZlKCkgYW5kIHRoZSBwcm9iZSB1bndpbmQgbWF5IGZyZWUgZ2Mgb25jZSBpdFxuKyAqIGlzIGNsZWFyLiAgTXVzdCBydW4gYmVmb3JlIHRoZSBleGl0IHBhdGhzIHRha2UgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOlxuKyAqIHJlbW92YWwgY2FuIGJlIHdhaXRpbmcgb24gdGhlIGJpdCB3aGlsZSBob2xkaW5nIHRoYXQgbG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCBtYW5hX3NlcnZpY2VfZG9uZShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIHRlc3RfYml0X2FjcXVpcmUoKSBvbiB0aGUgd2FpdCBzaWRlLiAqL1xuK1x0Y2xlYXJfYml0X3VubG9jayhHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4rXHQvKiB3YWtlX3VwX3ZhcigpIHJlcXVpcmVzIGEgZnVsbCBiYXJyaWVyIGJldHdlZW4gdGhlIHVwZGF0ZSBvZiB0aGVcbitcdCAqIHdhaXRlZC1vbiB2YXJpYWJsZSBhbmQgdGhlIHdha2UuXG4rXHQgKi9cbitcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHR3YWtlX3VwX3ZhcihcdTAwMjZnYy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuKy8qIFJldGlyZSBhIGN5Y2xlIHdob3NlIGV4aXQgcmVtb3ZlcyB0aGUgZGV2aWNlOiBjbG9zZSBhZG1pc3Npb25cbisgKiBmaXJzdCBzbyBubyBuZXcgY3ljbGUgY2FuIGJlIGFkbWl0dGVkIGluIHRoZSByZXRpcmUgd2luZG93LlxuKyAqL1xuK3N0YXRpYyB2b2lkIG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuK3tcbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdG1hbmFfc2VydmljZV9kb25lKGdjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X2ZwZ2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHN0cnVjdCBwY2lfYnVzICpidXMsICpwYXJlbnQ7XG4gXG4rXHRpZiAoZ2MpXG4rXHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbitcbiBcdHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbiBcbiBcdGJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuQEAgLTcwNiw5ICs3MzQsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnBnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4rc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4tXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCByZXQ7XG4gXG5AQCAtNzM4LDYgKzc2NSw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGlmIChyZXQgPT0gLUVUSU1FRE9VVCB8fCByZXQgPT0gLUVQUk9UTykge1xuIFx0XHQvKiBQZXJmb3JtIFBDSSByZXNjYW4gb24gZGV2aWNlIGlmIHdlIGZhaWxlZCBvbiBIV0MgKi9cbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJNQU5BIHNlcnZpY2U6IHJlc3VtZSBmYWlsZWQsIHJlc2Nhbm5pbmdcXG5cIik7XG4rXHRcdG1hbmFfc2VydmljZV9kb25lX3JlbW92aW5nKGdjKTtcbiBcdFx0bWFuYV9zZXJ2X3Jlc2NhbihwZGV2KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTc0OCwyMiArNzc2LDI1IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSByZXNldCBjeWNsZSBjb21wbGV0ZWRcXG5cIik7XG4gXG4gb3V0OlxuLVx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdG1hbmFfc2VydmljZV9kb25lKGdjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9kb19zZXJ2aWNlKGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlLCBzdHJ1Y3QgcGNpX2RldiAqcGRldilcbitzdGF0aWMgdm9pZCBtYW5hX2RvX3NlcnZpY2UoZW51bSBnZG1hX2VxZV90eXBlIHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgR0RNQV9FUUVfSFdDX0ZQR0FfUkVDT05GSUc6XG4tXHRcdG1hbmFfc2Vydl9mcGdhKHBkZXYpO1xuK1x0XHRtYW5hX3NlcnZfZnBnYShwZGV2LCBnYyk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVDpcbi1cdFx0bWFuYV9zZXJ2X3Jlc2V0KHBkZXYpO1xuK1x0XHRtYW5hX3NlcnZfcmVzZXQocGRldiwgZ2MpO1xuIFx0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSBzZXJ2aWNlOiB1bmtub3duIHR5cGUgJWRcXG5cIiwgdHlwZSk7XG4rXHRcdGlmIChnYylcbitcdFx0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIH1cbkBAIC03NzksMTIgKzgxMCwyNiBAQCBzdGF0aWMgdm9pZCBtYW5hX3JlY292ZXJ5X2RlbGF5ZWRfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3b3JrLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ3b3JrLVx1MDAzZWRldl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbitcbiBcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ3b3JrLVx1MDAzZWRldl9saXN0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBtYW5hX2Rldl9yZWNvdmVyeSwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNmRldi1cdTAwM2VsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ3b3JrLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0bWFuYV9kb19zZXJ2aWNlKGRldi1cdTAwM2V0eXBlLCBkZXYtXHUwMDNlcGRldik7XG4rXHRcdC8qIFNlcmlhbGl6ZSB0aGUgZHJ2ZGF0YSBsb29rdXAgYW5kIGFkbWlzc2lvbiBhZ2FpbnN0XG4rXHRcdCAqIHByb2JlL3JlbW92ZS4gIERvIG5vdCBjYWxsIHNsZWVwaW5nIGZ1bmN0aW9ucyB3aGlsZVxuK1x0XHQgKiBob2xkaW5nIHRoZSBkZXZpY2UgbG9jay5cbitcdFx0ICovXG4rXHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRcdGdjID0gcGNpX2dldF9kcnZkYXRhKGRldi1cdTAwM2VwZGV2KTtcbitcdFx0aWYgKGdjKVxuK1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBkZXYtXHUwMDNldHlwZSk7XG4rXHRcdGRldmljZV91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbitcbitcdFx0aWYgKCFnYylcbitcdFx0XHRtYW5hX2RvX3NlcnZpY2UoZGV2LVx1MDAzZXR5cGUsIGRldi1cdTAwM2VwZGV2LCBOVUxMKTtcbitcbiBcdFx0cGNpX2Rldl9wdXQoZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRrZnJlZShkZXYpO1xuIFxuQEAgLTc5Niw0OCArODQxLDQ5IEBAIHN0YXRpYyB2b2lkIG1hbmFfcmVjb3ZlcnlfZGVsYXllZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4ge1xuLVx0c3RydWN0IG1hbmFfc2Vydl93b3JrICptbnNfd2s7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cbi1cdG1uc193ayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbWFuYV9zZXJ2X3dvcmssIHNlcnZfd29yayk7XG4tXHRwZGV2ID0gbW5zX3drLVx1MDAzZXBkZXY7XG4rXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZ2RtYV9jb250ZXh0LCBzZXJ2X3dvcmspO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGdjLVx1MDAzZWRldik7XG4gXG4tXHRpZiAocGRldilcbi1cdFx0bWFuYV9kb19zZXJ2aWNlKG1uc193ay1cdTAwM2V0eXBlLCBwZGV2KTtcbitcdG1hbmFfZG9fc2VydmljZShnYy1cdTAwM2VzZXJ2X3R5cGUsIHBkZXYsIGdjKTtcbiBcbitcdC8qIFRoZSByZXNjYW4gZXhpdHMgb2YgbWFuYV9kb19zZXJ2aWNlKCkgcmVtb3ZlIHRoZSBkZXZpY2UsIHdoaWNoXG4rXHQgKiBmcmVlcyBnYyBiZWZvcmUgcmV0dXJuaW5nLiAgT25seSB0b3VjaCB0aGUgcGRldiBhbmQgdGhlIG1vZHVsZVxuK1x0ICogcmVmZXJlbmNlIGZyb20gaGVyZSBvbjsgYm90aCBhcmUgaGVsZCB1bnRpbCB0aGlzIHBvaW50IGRyb3BzIHRoZW0uXG4rXHQgKi9cbiBcdHBjaV9kZXZfcHV0KHBkZXYpO1xuLVx0a2ZyZWUobW5zX3drKTtcbiBcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3NlcnZfd29yayAqbW5zX3drO1xuLVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJBbHJlYWR5IGluIHNlcnZpY2VcXG5cIik7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNldF9iaXQoR0NfUkVNT1ZJTkcpICsgc21wX21iX19hZnRlcl9hdG9taWMoKSBpblxuK1x0ICogbWFuYV9nZF9yZW1vdmUoKTogdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBhYm92ZSBpcyBmdWxseSBvcmRlcmVkLFxuK1x0ICogc28gZWl0aGVyIHRoaXMgcmVhZCBzZWVzIEdDX1JFTU9WSU5HIGFuZCB0aGUgY3ljbGUgYWJvcnRzLCBvclxuK1x0ICogcmVtb3ZlKCkgb2JzZXJ2ZXMgR0NfSU5fU0VSVklDRSBhbmQgd2FpdHMgZm9yIHRoZSBjeWNsZSB0byByZXRpcmVcbitcdCAqIGJlZm9yZSBpdCBmcmVlcyBnYy5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KEdDX1JFTU9WSU5HLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbitcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LCBcIkRldmljZSBpcyBiZWluZyByZW1vdmVkXFxuXCIpO1xuK1x0XHRtYW5hX3NlcnZpY2VfZG9uZShnYyk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuIFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsIFwiTW9kdWxlIGlzIHVubG9hZGluZ1xcblwiKTtcbi1cdFx0Y2xlYXJfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdFx0bWFuYV9zZXJ2aWNlX2RvbmUoZ2MpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdG1uc193ayA9IGt6YWxsb2Moc2l6ZW9mKCptbnNfd2spLCBHRlBfQVRPTUlDKTtcbi1cdGlmICghbW5zX3drKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRjbGVhcl9iaXQoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbiBcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJTdGFydCBNQU5BIHNlcnZpY2UgdHlwZTolZFxcblwiLCB0eXBlKTtcbi1cdG1uc193ay1cdTAwM2VwZGV2ID0gdG9fcGNpX2RldihnYy1cdTAwM2VkZXYpO1xuLVx0bW5zX3drLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0cGNpX2Rldl9nZXQobW5zX3drLVx1MDAzZXBkZXYpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm1uc193ay1cdTAwM2VzZXJ2X3dvcmssIG1hbmFfc2Vydl9mdW5jKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2bW5zX3drLVx1MDAzZXNlcnZfd29yayk7XG4rXG4rXHRnYy1cdTAwM2VzZXJ2X3R5cGUgPSB0eXBlO1xuK1x0cGNpX2Rldl9nZXQodG9fcGNpX2RldihnYy1cdTAwM2VkZXYpKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZnYy1cdTAwM2VzZXJ2X3dvcmspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTk1NywxNCArMTAwMywyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdGNhc2UgR0RNQV9FUUVfSFdDX1JFU0VUX1JFUVVFU1Q6XG4gXHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJSZWN2IE1BTkEgc2VydmljZSB0eXBlOiVkXFxuXCIsIHR5cGUpO1xuIFxuLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcdTAwMjZnYy1cdTAwM2VmbGFncykpIHtcbitcdFx0aWYgKCF0ZXN0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogRGV2aWNlIGlzIGluIHByb2JlIGFuZCB3ZSByZWNlaXZlZCBhIGhhcmR3YXJlIHJlc2V0XG4tXHRcdFx0ICogZXZlbnQsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGRldGVjdCB0aGF0IHRoZSBmbGFnXG4tXHRcdFx0ICogaGFzIGNoYW5nZWQgYW5kIHBlcmZvcm0gc2VydmljZSBwcm9jZWR1cmUuXG4rXHRcdFx0ICogUHJvYmUgbm90IGNvbXBsZXRlZDogbGF0Y2ggdGhlIGV2ZW50IGFuZCBsZXQgdGhlXG4rXHRcdFx0ICogcHJvYmUgcm9sbCBiYWNrLCB0aGUgcmVjb3ZlcnkgcGF0aCB3aWxsIHJlc2Nhbi5cbitcdFx0XHQgKiBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHByb2JlIHN1Y2Nlc3M7XG4rXHRcdFx0ICogdGhlIHN1Y2Nlc3MgcmUtY2hlY2sgYmVsb3cgcHJlc2VydmVzIGFuIGV2ZW50XG4rXHRcdFx0ICogcmFjaW5nIHByb2JlIGNvbXBsZXRpb24uXG4gXHRcdFx0ICovXG4tXHRcdFx0ZGV2X2luZm8oZ2MtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwiU2VydmljZSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gcHJvYmVcXG5cIik7XG4rXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZnYy1cdTAwM2VmbGFncykpXG4rXHRcdFx0XHRkZXZfaW5mbyhnYy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlNlcnZpY2UgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIHByb2JlXFxuXCIpO1xuK1x0XHRcdGVsc2UgaWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIHR5cGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCB0eXBlKTtcbkBAIC0yNTQ2LDYgKzI1OTgsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRnYy1cdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcbiBcdGdjLVx1MDAzZWRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmdjLVx1MDAzZXNlcnZfd29yaywgbWFuYV9zZXJ2X2Z1bmMpO1xuIFx0eGFfaW5pdChcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZXR1cChwZGV2KTtcbkBAIC0yNTU4LDIyICsyNjExLDM3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGVyciA9IG1hbmFfcmRtYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gY2xlYW51cF9tYW5hO1xuK1x0XHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcbiBcbiBcdC8qXG4gXHQgKiBJZiBhIGhhcmR3YXJlIHJlc2V0IGV2ZW50IGhhcyBvY2N1cnJlZCBvdmVyIEhXQyBkdXJpbmcgcHJvYmUsXG4tXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuXG4rXHQgKiByb2xsYmFjayBhbmQgcGVyZm9ybSBoYXJkd2FyZSByZXNldCBwcm9jZWR1cmUuICBTdG9yaW5nIHRoZVxuK1x0ICogc3VjY2VzcyBiaXQgYmVmb3JlIHRoZSBsYXRjaCBjaGVjayBwYWlycyB3aXRoIHRoZSBoYW5kbGVyJ3NcbitcdCAqIGxhdGNoLXRoZW4tcmVjaGVjaywgc28gYW4gZXZlbnQgcmFjaW5nIHByb2JlIGNvbXBsZXRpb24gaXNcbitcdCAqIGFkbWl0dGVkIHJhdGhlciB0aGFuIGxvc3QuXG4gXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9zZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKSB7XG4rXHRzZXRfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfU0VSVklDRV9EVVJJTkdfUFJPQkUsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRlcnIgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuK1x0XHRnb3RvIHNlcnZpY2VfcXVpZXNjZTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuLWNsZWFudXBfbWFuYV9yZG1hOlxuK3NlcnZpY2VfcXVpZXNjZTpcbitcdC8qIFRoZSBzdGF0cyB3b3JrIGNhbiBhZG1pdCBhIHNlcnZpY2UgY3ljbGUgb25jZSBtYW5hX3Byb2JlKClcbitcdCAqIGhhcyBydW46IGNsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZVxuK1x0ICogYmVmb3JlIGFueSB0ZWFyZG93biwgbGlrZSBtYW5hX2dkX3JlbW92ZSgpIGRvZXMuICBFYXJsaWVyXG4rXHQgKiBmYWlsdXJlIHBvaW50cyBjYW5ub3QgaGF2ZSBhZG1pdHRlZCBzZXJ2aWNlIHdvcmsuXG4rXHQgKi9cbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuK1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbitcdCAqL1xuK1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuK1x0XHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKTtcbiBcdG1hbmFfcmRtYV9yZW1vdmUoXHUwMDI2Z2MtXHUwMDNlbWFuYV9pYik7XG4tY2xlYW51cF9tYW5hOlxuIFx0bWFuYV9yZW1vdmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgZmFsc2UpO1xuIGNsZWFudXBfZ2Q6XG4gXHRtYW5hX2dkX2NsZWFudXBfZGV2aWNlKHBkZXYpO1xuQEAgLTI1ODEsNiArMjY0OSwxNCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4gXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbiBmcmVlX2djOlxuK1x0LyogQmFja3N0b3A6IGRyYWluIGJlZm9yZSBldmVyeSB2ZnJlZSgpLiAqL1xuK1x0c2V0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpO1xuK1x0LyogUGFpcnMgd2l0aCB0aGUgb3JkZXJlZCB0ZXN0X2FuZF9zZXRfYml0KEdDX0lOX1NFUlZJQ0UpIGluXG4rXHQgKiBtYW5hX3NjaGVkdWxlX3NlcnZfd29yaygpLlxuK1x0ICovXG4rXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuK1x0d2FpdF92YXJfZXZlbnQoXHUwMDI2Z2MtXHUwMDNlZmxhZ3MsXG4rXHRcdCAgICAgICAhdGVzdF9iaXRfYWNxdWlyZShHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykpO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0dmZyZWUoZ2MpO1xuIHJlbGVhc2VfcmVnaW9uOlxuQEAgLTI2MjQsNiArMjcwMCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbitcdC8qIENsb3NlIGFkbWlzc2lvbiBhbmQgcmV0aXJlIGFuIGluLWZsaWdodCBjeWNsZSBiZWZvcmUgYW55XG4rXHQgKiB0ZWFyZG93bjogdGhlIHNlcnZpY2Ugd29yayBpcyB0aGUgb25seSB1c2VyIG9mIGdjIHRoYXRcbitcdCAqIHJlbW92ZSgpIGRvZXMgbm90IG90aGVyd2lzZSBzeW5jaHJvbmlzZSB3aXRoLiAgVGhlIHNlcnZpY2VcbitcdCAqIGV4aXRzIHJldGlyZSBiZWZvcmUgdGFraW5nIHRoZSBQQ0kgcmVzY2FuL3JlbW92ZSBsb2NrLCBzb1xuK1x0ICogdGhpcyB3YWl0IGNhbm5vdCBkZWFkbG9jayBhZ2FpbnN0IHRoZW0uXG4rXHQgKi9cbitcdHNldF9iaXQoR0NfUkVNT1ZJTkcsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKTtcbitcdC8qIFBhaXJzIHdpdGggdGhlIG9yZGVyZWQgdGVzdF9hbmRfc2V0X2JpdChHQ19JTl9TRVJWSUNFKSBpblxuK1x0ICogbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoKS5cbitcdCAqL1xuK1x0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmdjLVx1MDAzZWZsYWdzLFxuK1x0XHQgICAgICAgIXRlc3RfYml0X2FjcXVpcmUoR0NfSU5fU0VSVklDRSwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKTtcbitcbiBcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuIFxuIFx0bWFuYV9yZG1hX3JlbW92ZShcdTAwMjZnYy1cdTAwM2VtYW5hX2liKTtcbkBAIC0yNjM1LDYgKzI3MjUsOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGdjLVx1MDAzZWJhcjBfdmEpO1xuIFxuK1x0LyogUHJldmVudCBsYXRlIHJlY292ZXJ5IHdvcmsgZnJvbSB1c2luZyBmcmVlZCBnYy4gKi9cbitcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbiBcdHZmcmVlKGdjKTtcbiBcbiBcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCA3YTFhYzg1M2UzYWJjLi42N2M3ZTdlNjczYWU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC05MjQsOCArOTI0LDggQEAgc3RhdGljIHZvaWQgbWFuYV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKiBBbHJlYWR5IGluIHNlcnZpY2UsIGhlbmNlIHR4IHF1ZXVlIHJlc2V0IGlzIG5vdCByZXF1aXJlZC4qL1xuLVx0aWYgKHRlc3RfYml0KEdDX0lOX1NFUlZJQ0UsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSlcbitcdGlmICh0ZXN0X2JpdChHQ19JTl9TRVJWSUNFLCBcdTAwMjZnYy1cdTAwM2VmbGFncykgfHxcbitcdCAgICB0ZXN0X2JpdChHQ19SRU1PVklORywgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBOb3RlOiBJZiB0aGVyZSBhcmUgcGVuZGluZyBxdWV1ZSByZXNldCB3b3JrIGZvciB0aGlzIHBvcnQoYXBjKSxcbkBAIC00MDU2LDkgKzQwNTYsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9nZl9zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRkZXZfd2FybihnYy1cdTAwM2VkZXYsXG4gXHRcdFx0IFwiR2Ygc3RhdHMgd2sgaGFuZGxlcjogZ2Ygc3RhdHMgcXVlcnkgdGltZWQgb3V0LlxcblwiKTtcbiBcdFx0LyogQXMgSFdDIHRpbWVkIG91dCwgaW5kaWNhdGluZyBhIGZhdWx0eSBIVyBzdGF0ZSBhbmQgbmVlZHMgYVxuLVx0XHQgKiByZXNldC5cbitcdFx0ICogcmVzZXQuICBOZXZlciBhZG1pdCBzZXJ2aWNlIHdvcmsgYmVmb3JlIHRoZSBwcm9iZSBoYXNcbitcdFx0ICogY29tcGxldGVkOiBhIHByb2JlIHRoYXQgaXMgZmFpbGluZyB1bndpbmRzIG5ldGRldnMgYW5kIHRoZVxuK1x0XHQgKiBIV0MgY2hhbm5lbCBpdHNlbGYgYW5kIGNhbm5vdCBkcmFpbiBhIGN5Y2xlLlxuIFx0XHQgKi9cbi1cdFx0bWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoZ2MsIEdETUFfRVFFX0hXQ19SRVNFVF9SRVFVRVNUKTtcbitcdFx0aWYgKHRlc3RfYml0KEdDX1BST0JFX1NVQ0NFRURFRCwgXHUwMDI2Z2MtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKGdjLCBHRE1BX0VRRV9IV0NfUkVTRVRfUkVRVUVTVCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZhYy1cdTAwM2VnZl9zdGF0c193b3JrLCBNQU5BX0dGX1NUQVRTX1BFUklPRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggMzA4OTUwZjliNTRiMC4uZmQ0Yjk2N2M4MWY3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTIyOCwxMiArMjI4LDYgQEAgZW51bSBnZG1hX3BhZ2VfdHlwZSB7XG4gXG4gI2RlZmluZSBHRE1BX0lOVkFMSURfRE1BX1JFR0lPTiAwXG4gXG4tc3RydWN0IG1hbmFfc2Vydl93b3JrIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2X3dvcms7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbi1cdGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlO1xuLX07XG4tXG4gc3RydWN0IGdkbWFfbWVtX2luZm8ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFxuQEAgLTQyMCw2ICs0MTQsOCBAQCBzdHJ1Y3QgZ2RtYV9pcnFfY29udGV4dCB7XG4gZW51bSBnZG1hX2NvbnRleHRfZmxhZ3Mge1xuIFx0R0NfUFJPQkVfU1VDQ0VFREVEXHQ9IDAsXG4gXHRHQ19JTl9TRVJWSUNFXHRcdD0gMSxcbitcdEdDX1JFTU9WSU5HXHRcdD0gMixcbitcdEdDX1NFUlZJQ0VfRFVSSU5HX1BST0JFXHQ9IDMsXG4gfTtcbiBcbiBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbkBAIC00NzksNiArNDc1LDEyIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFxuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlcnZpY2Vfd3E7XG4gXG4rXHQvKiBUaGUgaW4tZmxpZ2h0IE1BTkEgc2VydmljZSBjeWNsZSwgcXVldWVkIG9uIHRoZSBzeXN0ZW0gd29ya3F1ZXVlOlxuK1x0ICogYSByZXNldCBjeWNsZSBkZXN0cm95cyBhbmQgcmUtY3JlYXRlcyBAc2VydmljZV93cS5cbitcdCAqL1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRzZXJ2X3dvcms7XG4rXHRlbnVtIGdkbWFfZXFlX3R5cGVcdHNlcnZfdHlwZTtcbitcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXG4gXHQvKiBQcm90ZWN0IGFjY2VzcyB0byBHSUMgY29udGV4dCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzMuNjUyOTY2MDM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5Mjc4NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNQU5BIERyaXZlciBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLCBhbmQgYGluY2x1ZGUvbmV0L21hbmEvZ2RtYS5oYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIE1pY3Jvc29mdCBNQU5BIGV0aGVybmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgTUFOQSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgd2hpY2ggYXJlIHdoYXQgU3l6a2FsbGVyIHR5cGljYWxseSB0YXJnZXRzLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0J3MgcmVmZXIgYmFjayB0byBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgbGlzdHMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiDigJMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycywgc3R1ZmYgdGhhdCByZXF1aXJlcyBzcGVjaWFsaXplZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gSXMgTUFOQSBvbiB0aGF0IGxpc3Q/XG5cbkFoLCByaWdodCwgTUFOQSBpcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQncyBhIFBDSSBkZXZpY2Ugc3BlY2lmaWNhbGx5IGZvciBBenVyZSBWTXMgYW5kIEh5cGVyLVYuIFNvIHRoYXQncyB0aGUga2V5OiBpdCAqaXMqIGFuIEF6dXJlLXNwZWNpZmljIHRoaW5nLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGNhbiBiZSBhY2Nlc3NlZCBpbiBhIHN0YW5kYXJkLCBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ2Agb3Igd2l0aGluIHRoZSBgbWFuYWAgZGlyZWN0b3J5IOKAkyB0byBzZWUgaG93IGl0J3MgZW5hYmxlZCBhbmQgaWYgYW55IGRlcGVuZGVuY2llcyBwb2ludCB0byBoYXJkd2FyZSB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlbXVsYXRlLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZW52aXJvbm1lbnQgdGhlIE1BTkEgZHJpdmVyIGV4cGVjdHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgdG8gcmVxdWlyZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIHdheSwgdGhlbiBpdCdzIGEgbm9uLXN0YXJ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozNy4wNDU3NTYyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUNST1NPRlRfTUFOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTY9aWYgTkVUX1ZFTkRPUl9NSUNST1NPRlRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoxODpjb25maWcgTUlDUk9TT0ZUX01BTkFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzcuMTU1NjM2NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NTY2NTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1pY3Jvc29mdCBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBNaWNyb3NvZnQgRXRoZXJuZXQgZHJpdmVyLiBUbyBnZXQgdGhhdCwgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCB0aGUgZGVwZW5kZW5jaWVzIHRoZXkgcmVseSBvbiAoa2VybmVsIGZlYXR1cmVzLCBvdGhlciBkcml2ZXJzLCBldGMuKSwgYW5kIHByb2JhYmx5IHNvbWUgZG9jdW1lbnRhdGlvbiBzbmlwcGV0cyB0b28uIFRoaXMgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9uIHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSB0byB0dXJuIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBgS2NvbmZpZ2AgaXMgY3JpdGljYWwgdG8gcHJvcGVybHkgY29uZmlndXJpbmcgYW5kIHBvdGVudGlhbGx5IHRyb3VibGVzaG9vdGluZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoaXMgZHJpdmVyLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODozOS40MTEzMDU0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWljcm9zb2Z0IEF6dXJlIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXFxuICAgNjpcXHRcXHRib29sIFxcXCJNaWNyb3NvZnQgTmV0d29yayBEZXZpY2VzXFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGRldmljZSBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEyOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIHRoZVxcbiAgMTM6XFx0XFx0ICBxdWVzdGlvbiBhYm91dCBNaWNyb3NvZnQgbmV0d29yayBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXFxuICAxNDpcXHRcXHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGRldmljZSBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgTUlDUk9TT0ZUX01BTkFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgIUNQVV9CSUdfRU5ESUFOKVxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfSFlQRVJWXFxuICAyMzpcXHRcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiAgMjQ6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjU6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjY6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkuXFxuICAyOTpcXHRcXHQgIFNvIGZhciwgdGhlIGRyaXZlciBpcyBvbmx5IHN1cHBvcnRlZCBvbiBYODZfNjQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gIDMyOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYW5hLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9NSUNST1NPRlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6MzkuNDExMzk0NTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzODg3NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNSUNST1NPRlRfTUFOQSBEcml2ZXIgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGBNSUNST1NPRlRfTUFOQWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJX0hZUEVSVmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGludmVzdGlnYXRlIGJvdGguIGBQQ0lfSFlQRVJWYCBpcyB0aGUgSHlwZXItViBQQ0kgZnJvbnRlbmQgZHJpdmVyLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBmb3IgUENJIHBhc3MtdGhyb3VnaCBvciB0aGUgc3ludGhldGljIFBDSSBidXMgd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LiBBbmQgdGhlbiwgYE1BTkFg4oCUdGhhdCdzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBTcGVjaWZpY2FsbHksIHRoZSBwaHlzaWNhbCBBU0lDIG9yIGhhcmR3YXJlIFNtYXJ0TklDIGZvdW5kIHdpdGhpbiBBenVyZSdzIEh5cGVyLVYgc2V0dXBzLlxuXG5Ob3csIG15IGtleSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBNQU5BIGVtdWxhdGVkIGluIGEgdHlwaWNhbCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBlbnZpcm9ubWVudD8gIFF1aWNrbHksIEkgcmVhbGl6ZSBpdCdzIG5vdC4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IG9mZmVyIHRoYXQgZW11bGF0aW9uLiBBbmQgR0NFLCB3aGlsZSB2aXJ0dWFsaXplZCwgZG9lc24ndCB1c2UgdGhlIEh5cGVyLVYgYXJjaGl0ZWN0dXJlIG9yLCBjb25zZXF1ZW50bHksIHRoZSBNQU5BIGhhcmR3YXJlLiBNeSBlc3RhYmxpc2hlZCBleHBlcmllbmNlIHdpdGggdmlydHVhbGl6YXRpb24gdGVsbHMgbWUgdGhhdCBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcyBhcmUgYmFzZWQgb24gdGhpbmdzIGxpa2UgdmlydGlvLW5ldCwgZTEwMDAsIFVTQiBnYWRnZXRzLCB0dW4vdGFwLCBhbmQgbG9vcGJhY2ssIG9yIHNpbWlsYXIgZW11bGF0aW9uIGFwcHJvYWNoZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgc28gSSBsb29rIGZvciBhIHJlZmVyZW5jZS4gQWhhISBJIHJlbWVtYmVyIGEgc2VjdGlvbiBjb3ZlcmluZyDigJxTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmXigJ0uIEl0IGxpc3RzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBxZWQsIGFuZCBpb25pYykuIFRoZXNlIHJlcXVpcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMsIHdoaWNoIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlLiBUaGlzIGNvbmZpcm1zIHRoYXQgSSB1bmRlcnN0YW5kIHRoaXMgYXJlYS5cblxuU28sIG5vdyBJJ20gdGhpbmtpbmcsIGRvZXMgTUFOQSBoYXZlIGFueSBraW5kIG9mIG1vY2ssIHZpcnR1YWwsIG9yIHNvZnR3YXJlIGVtdWxhdGlvbj8gT3IgaXMgaXQgcHVyZWx5IGEgdmVuZG9yLXNwZWNpZmljIFBDSSBoYXJkd2FyZSBkcml2ZXIgZGVzaWduZWQgZm9yIHVzZSBpbiBBenVyZSBWTXM/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBldmVuIGJlICpyZWFjaGVkKiBieSB0aGUgc3RhbmRhcmQgdG9vbHMgSSBoYXZlLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWFsIGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSBmb3IgYW5zd2Vycywgc28gbXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZ3JlcCBmb3IgcmVmZXJlbmNlcyB0byB0aGUgTUFOQSBkZXZpY2UgSUQgb3IgUENJIGRyaXZlciB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDMuMjUwMjczMDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ4NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI4MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI4MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjgxODpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjgxOS1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODo0My4zNTM3NjE5MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc2NTI2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgZ2RtYV9tYWluLmNgIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYW4gaXNzdWUuLi4gbGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBpdC4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBgZ2RtYV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgbWFuYV9pZF90YWJsZWAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgaG9sZHMgdGhlIGtleSB0byB0aGUgcHJvYmxlbSB3ZSdyZSBzZWVpbmcuIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoYXQgdGFibGUgaXMgc3RydWN0dXJlZCwgd2hhdCBpdHMgcHVycG9zZSBpcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRE1BIGZyYW1ld29yay4gVGhpcyB3aWxsIHJlcXVpcmUgYSBzeXN0ZW1hdGljIHJldmlldyBvZiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBhcm91bmQgdGhlIGBtYW5hX2lkX3RhYmxlYCB0byBwaWVjZSB0b2dldGhlciB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY29tcGFyZSBpdCB0byB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgYW55IHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9ucyBvciBsb2dpY2FsIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTc3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDUuMTMwMjkxMzI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODEwOlxcdFxcbjI4MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4yODEyOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9QRl9ERVZJQ0VfSUQpIH0sXFxuMjgxMzpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NSUNST1NPRlQsIE1BTkFfUEYyX0RFVklDRV9JRCkgfSxcXG4yODE0OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01JQ1JPU09GVCwgTUFOQV9WRl9ERVZJQ0VfSUQpIH0sXFxuMjgxNTpcXHRcXHR7IH1cXG4yODE2OlxcdH07XFxuMjgxNzpcXHRcXG4yODE4OlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcXG4yODE5OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwibWFuYVxcXCIsXFxuMjgyMDpcXHRcXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuMjgyMTpcXHRcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuMjgyMjpcXHRcXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG4yODIzOlxcdFxcdC5zdXNwZW5kXFx0PSBtYW5hX2dkX3N1c3BlbmQsXFxuMjgyNDpcXHRcXHQucmVzdW1lXFx0XFx0PSBtYW5hX2dkX3Jlc3VtZSxcXG4yODI1OlxcdFxcdC5zaHV0ZG93blxcdD0gbWFuYV9nZF9zaHV0ZG93bixcXG4yODI2OlxcdFxcdC5zcmlvdl9jb25maWd1cmUgPSBtYW5hX3NyaW92X2NvbmZpZ3VyZSxcXG4yODI3OlxcdH07XFxuMjgyODpcXHRcXG4yODI5OlxcdHN0YXRpYyBpbnQgX19pbml0IG1hbmFfZHJpdmVyX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NDUuMTMwNTUzNzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NzA5NzM3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUFOQSBEcml2ZXIgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBlbnRpcmVseSB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgcmVsYXRlZCB0byB2YXJpb3VzIHNlcnZpY2UgZnVuY3Rpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIGJlaW5nIHRvdWNoZWQgKGBtYW5hX3NlcnZpY2VfZG9uZWAsIGBtYW5hX3NlcnZpY2VfZG9uZV9yZW1vdmluZ2AsIGV0Yy4pIGNvbmZpcm0gdGhpcy5cblxuS25vd2luZyB0aGlzLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhIGtleSBsaW1pdGF0aW9uLiBUaGlzIGRyaXZlciBpcyB0aWVkIHRvIHRoZSBwaHlzaWNhbCBNQU5BIGhhcmR3YXJlIG9yIGEgSHlwZXItViBzeW50aGV0aWMgUENJIGRldmljZS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHN5emthbGxlciAqY2Fubm90KiBlZmZlY3RpdmVseSB0ZXN0IHRoaXMgY29kZSBiZWNhdXNlIHRoZXkgZG9uJ3QgZW11bGF0ZSB0aGUgdW5kZXJseWluZyBQQ0llIGhhcmR3YXJlIChNQU5BIFBGL1ZGKS4gVGhhdCdzIGEgZGVhbGJyZWFrZXIuXG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBTZWN0aW9uIDIgY2xlYXJseSBkZWZpbmVzIHRoaXMgYXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsXCIgd2hpY2ggYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoaXMgc2NlbmFyaW8uIFRoaW5ncyBsaWtlIFNtYXJ0TklDcyBhbmQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgd2hlbiB0aGUgaGFyZHdhcmUgaXNuJ3QgZW11bGF0ZWQuXG5cblNvLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE15IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdHMgd2lsbCByZW1haW4gZW1wdHkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmb2N1cyBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUFOQSBkcml2ZXIsIHdoaWNoIHJlbGllcyBvbiB1bmF2YWlsYWJsZSwgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHRoZSB0YXJnZXQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkFscmlnaHQsIG9uZSBsYXN0IGNoZWNr4oCmIGBXb3J0aEZ1enppbmdgOiBmYWxzZS4gYEZvY3VzU3ltYm9sc2A6IGVtcHR5LiBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5LiBgUmVhc29uaW5nYDogY2xlYXJseSBkb2N1bWVudGVkLiBBbGwgY2hlY2tzIGFyZSBjb21wbGV0ZSwgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbnMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3ODUsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6NTg6NTEuODAxNTMxNjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIC8gSHlwZXItViBlbnZpcm9ubWVudHMuIEl0IHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsL2h5cGVydmlzb3IgUENJZSBoYXJkd2FyZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIHZpcnR1YWwgbWFjaGluZXMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBTbWFydE5JQyBkcml2ZXIgZm9yIE1pY3Jvc29mdCBBenVyZSAvIEh5cGVyLVYgZW52aXJvbm1lbnRzLiBJdCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbC9oeXBlcnZpc29yIFBDSWUgaGFyZHdhcmUgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZnV6emluZyB2aXJ0dWFsIG1hY2hpbmVzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDo1ODo1MS44MDE1NzM1MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4n4vd[1] Phase: Running StartedAt: 2026-09-09 04:59:03 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n4vd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 04:59:03 +0000 UTC FinishedAt: 2026-09-09 04:59:09 +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,}