Name: series-workflowr6zpx Phase: Failed StartedAt: 2026-09-01 01:25:13 +0000 UTC FinishedAt: 2026-09-01 02:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr6zpx[0] Phase: Succeeded StartedAt: 2026-09-01 01:25:13 +0000 UTC FinishedAt: 2026-09-01 02:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr6zpx[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 01:25:13 +0000 UTC FinishedAt: 2026-09-01 02:40:27 +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+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDI6Mzc6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuaW5kZXggNmMwODg4YWU0YzRlMS4uNjBkZmUyNTdlYWRjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuQEAgLTUwLDYgJiM0Mzs1MCw5IEBAIHByb3BlcnRpZXM6XG4gICAgICAgdXNlZCwgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4gV2hlbiBTRElPIGlzIHVzZWQsIHRoZSBcJiMzNDtpbi1iYW5kXCYjMzQ7XG4gICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cbiYjNDM7XG4mIzQzOyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGhcbiYjNDM7ICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXG4gICAgIG1heEl0ZW1zOiAxXG4gXG4gICByZXNldC1ncGlvczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguY1xuQEAgLTI4NCwxMCAmIzQzOzI4NCwxMCBAQCB2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIH1cbiBcbiAvKiBJZiBJUlEgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiBhbGxvdyB0byBtYW51YWxseSBwb2xsIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZCBzaW11bGF0ZVxuLSAqIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLlxuJiM0MzsgKiBhbiBJUlEgd2hlbiBhbiBldmVudCBoYXBwZW5lZC5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9sIHJlZ2lzdGVyLCB0aGUgSVJRIGlzXG4tICogbG9zdC4gU28sIHVzZSB0aGlzIGZ1bmN0aW9uIGNhcmVmdWxseSAob25seSBkdWluZyBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLlxuJiM0MzsgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpc1xuJiM0MzsgKiBsb3N0LiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBpbml0aWFsaXplIHRoZSBTRElPIHdpdGggb3V0LW9mLWJhbmQgSVJRLlxuICAqL1xuIHZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcbmluZGV4IGFiMDc5M2I5OTA4ZjQuLjFjYTJjYzI2MmZlYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gXHR9XG4gXG4mIzQzO1x0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggZGRhMzZlNDFlZWQxMy4uZGEzMGU4ZjQ4MWFkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTM2Miw3ICYjNDM7MzYyLDYgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdCAqL1xuIFx0Z3Bpb19zYXZlZCA9IHdkZXYtXHUwMDNlcGRhdGEuZ3Bpb193YWtldXA7XG4gXHR3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNlcG9sbF9pcnEgPSB0cnVlO1xuIFxuIFx0d2Rldi1cdTAwM2ViaF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt3ZnhfYmhfd3FcJiMzNDssIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xuIFx0aWYgKCF3ZGV2LVx1MDAzZWJoX3dxKVxuQEAgLTM3NCwxMiAmIzQzOzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuIFxuLVx0d2Z4X2JoX3BvbGxfaXJxKHdkZXYpO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZXBvbGxfaXJxKSB7XG4mIzQzO1x0XHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVyciA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNndkZXYtXHUwMDNlZmlybXdhcmVfcmVhZHksIDEgKiBIWik7XG4gXHRpZiAoZXJyID09IDApIHtcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7dGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFydHVwIGluZGljYXRpb25cXG5cJiMzNDspO1xuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4mIzQzO1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXG5AQCAtMzk5LDEyICYjNDM7NDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9uIChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1cm5zICVkKVxcblwmIzM0OyxcbiBcdFx0XHR3ZGV2LVx1MDAzZWh3X2NhcHMuYXBpX3ZlcnNpb25fbWFqb3IpO1xuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gXHR9XG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xuIFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4mIzM5O3QgbmVnb3RpYXRlIGl0XFxuXCYjMzQ7KTtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gXHR9XG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkge1xuQEAgLTQyMCwxMiAmIzQzOzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcXG5cJiMzNDssIHdkZXYtXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xuIFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FTk9FTlQpXG4tXHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiYjNDM7XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFxuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuLVx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZXBvbGxfaXJxKSB7XG4mIzQzO1x0XHR3ZGV2LVx1MDAzZXBvbGxfaXJxID0gZmFsc2U7XG4mIzQzO1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG5AQCAtNDc0LDcgJiM0Mzs0ODIsOCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIGllZWU4MDIxMV91bnJlZ2lzdGVyOlxuIFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi1cdTAwM2Vodyk7XG4gaXJxX3Vuc3Vic2NyaWJlOlxuLVx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4mIzQzO1x0aWYgKCF3ZGV2LVx1MDAzZXBvbGxfaXJxKVxuJiM0MztcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6Mzc6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCmluZGV4IDZjMDg4OGFlNGM0ZTEuLjYwZGZlMjU3ZWFkYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCkBAIC01MCw2ICYjNDM7NTAsOSBAQCBwcm9wZXJ0aWVzOgogICAgICAgdXNlZCwgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4gV2hlbiBTRElPIGlzIHVzZWQsIHRoZSAmIzM0O2luLWJhbmQmIzM0OwogICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZAogICAgICAgaW4gdGhlIERldmljZSBUcmVlLgomIzQzOwomIzQzOyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGgKJiM0MzsgICAgICBTRElPLiBPT0IgSVJRIHdpdGggU0RJTyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZWJ1Zy4KICAgICBtYXhJdGVtczogMQogCiAgIHJlc2V0LWdwaW9zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jCmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKQEAgLTI4NCwxMCAmIzQzOzI4NCwxMCBAQCB2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogfQogCiAvKiBJZiBJUlEgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiBhbGxvdyB0byBtYW51YWxseSBwb2xsIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZCBzaW11bGF0ZQotICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuCiYjNDM7ICogYW4gSVJRIHdoZW4gYW4gZXZlbnQgaGFwcGVuZWQuCiAgKgotICogTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGEgYnVnOiBJZiBhbiBJUlEgcmFpc2Ugd2hpbGUgaG9zdCByZWFkIGNvbnRyb2wgcmVnaXN0ZXIsIHRoZSBJUlEgaXMKLSAqIGxvc3QuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgKG9ubHkgZHVpbmcgZGV2aWNlIGluaXRpYWxpc2F0aW9uKS4KJiM0MzsgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpcwomIzQzOyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuCiAgKi8KIHZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jCmluZGV4IGFiMDc5M2I5OTA4ZjQuLjFjYTJjYzI2MmZlYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMKQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmkKIAkJZ290byBzZGlvX3JlbGVhc2U7CiAJfQogCiYjNDM7CWJ1cy0mZ3Q7Y29yZS0mZ3Q7cG9sbF9pcnEgPSAhIWJ1cy0mZ3Q7b2ZfaXJxOwogCXJldCA9IHdmeF9wcm9iZShidXMtJmd0O2NvcmUpOwogCWlmIChyZXQpCiAJCWdvdG8gc2Rpb19yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwppbmRleCBkZGEzNmU0MWVlZDEzLi5kYTMwZThmNDgxYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwpAQCAtMzYyLDcgJiM0MzszNjIsNiBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCSAqLwogCWdwaW9fc2F2ZWQgPSB3ZGV2LSZndDtwZGF0YS5ncGlvX3dha2V1cDsKIAl3ZGV2LSZndDtwZGF0YS5ncGlvX3dha2V1cCA9IE5VTEw7Ci0Jd2Rldi0mZ3Q7cG9sbF9pcnEgPSB0cnVlOwogCiAJd2Rldi0mZ3Q7Ymhfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDt3ZnhfYmhfd3EmIzM0OywgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwgMCk7CiAJaWYgKCF3ZGV2LSZndDtiaF93cSkKQEAgLTM3NCwxMiAmIzQzOzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gYmhfdW5yZWdpc3RlcjsKIAotCXdmeF9iaF9wb2xsX2lycSh3ZGV2KTsKJiM0MzsJaWYgKHdkZXYtJmd0O3BvbGxfaXJxKSB7CiYjNDM7CQl3ZnhfYmhfcG9sbF9pcnEod2Rldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJfQomIzQzOwogCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO3dkZXYtJmd0O2Zpcm13YXJlX3JlYWR5LCAxICogSFopOwogCWlmIChlcnIgPT0gMCkgewogCQlkZXZfZXJyKHdkZXYtJmd0O2RldiwgJiMzNDt0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxuJiMzNDspOwogCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIGJoX3VucmVnaXN0ZXI7CiYjNDM7CQlnb3RvIGlycV91bnN1YnNjcmliZTsKIAl9CiAKIAkvKiBGSVhNRTogZmlsbCB3aXBoeTo6aHdfdmVyc2lvbiAqLwpAQCAtMzk5LDEyICYjNDM7NDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJCWRldl9lcnIod2Rldi0mZ3Q7ZGV2LCAmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9uIChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1cm5zICVkKVxuJiMzNDssCiAJCQl3ZGV2LSZndDtod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTsKIAkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCX0KIAogCWlmICh3ZGV2LSZndDtod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkgewogCQlkZXZfZXJyKHdkZXYtJmd0O2RldiwgJiMzNDtjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4mIzM5O3QgbmVnb3RpYXRlIGl0XG4mIzM0Oyk7Ci0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCX0KIAogCWlmICh3ZGV2LSZndDtod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkgewpAQCAtNDIwLDEyICYjNDM7NDI2LDE0IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJZGV2X2RiZyh3ZGV2LSZndDtkZXYsICYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiYjMzQ7LCB3ZGV2LSZndDtwZGF0YS5maWxlX3Bkcyk7CiAJZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpOwogCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FTk9FTlQpCi0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCi0Jd2Rldi0mZ3Q7cG9sbF9pcnEgPSBmYWxzZTsKLQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7Ci0JaWYgKGVycikKLQkJZ290byBiaF91bnJlZ2lzdGVyOwomIzQzOwlpZiAod2Rldi0mZ3Q7cG9sbF9pcnEpIHsKJiM0MzsJCXdkZXYtJmd0O3BvbGxfaXJxID0gZmFsc2U7CiYjNDM7CQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJfQogCiAJZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQpAQCAtNDc0LDcgJiM0Mzs0ODIsOCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogaWVlZTgwMjExX3VucmVnaXN0ZXI6CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0mZ3Q7aHcpOwogaXJxX3Vuc3Vic2NyaWJlOgotCXdkZXYtJmd0O2h3YnVzX29wcy0mZ3Q7aXJxX3Vuc3Vic2NyaWJlKHdkZXYtJmd0O2h3YnVzX3ByaXYpOwomIzQzOwlpZiAoIXdkZXYtJmd0O3BvbGxfaXJxKQomIzQzOwkJd2Rldi0mZ3Q7aHdidXNfb3BzLSZndDtpcnFfdW5zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiBiaF91bnJlZ2lzdGVyOgogCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtJmd0O2JoX3dxKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNpbGFicyBXRlggRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBnaXQgZGlmZiBmb2N1c2VkIG9uIHRoZSBTaWxhYnMgV0ZYIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBuYXR1cmUgb2YgdGhpcyBkcml2ZXIuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHN0YW5kYXJkIHBpZWNlIG9mIGNvZGUgdGhhdCBjb3VsZCBiZSB0ZXN0ZWQgZWZmZWN0aXZlbHkgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IG9yIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGxveW1lbnQgY29udGV4dCBpbXBhY3RzIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLgoKRmlyc3QsIEkgbmVlZCB0byBrbm93IHRoZSB0cmFuc3BvcnQuIFdoYXQgYnVzIGlzIHRoaXMgYHdmeGAgZHJpdmVyIHVzaW5nPyBUaGUgYnVzIHR5cGUgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSB0aGUgY29tcGxleGl0eSBvZiB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuIFRpbWUgdG8gbG9vayBpbnRvIHRoYXQuCgpOb3csIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCB1c2UgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlIGFjdHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeGAgZGlyZWN0b3J5LiBJIG5lZWQgYSByYXBpZCBvdmVydmlldzogd2hhdCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGF0IGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhpcyBkcml2ZXI/IFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdGWFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U2lsaWNvbiBMYWJzIHdpcmVsZXNzIGNoaXBzIFdGMjAwIGFuZCBmdXJ0aGVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA1Olx0XHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXG4gICA2Olx0XHRkZXBlbmRzIG9uIChTUEkgfHwgTU1DKVxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBTaWxpY29ucyBMYWJzIFdGeHh4IHNlcmllcyAoV0YyMDAgYW5kIGZ1cnRoZXIpXG4gICA5Olx0XHQgIGNoaXBzZXRzLiBUaGlzIGNoaXAgY2FuIGJlIGZvdW5kIG9uIFNQSSBvciBTRElPIGJ1c2VzLlxuICAxMDpcdFxuICAxMTpcdFx0ICBTaWxhYnMgZG9lcyBub3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQuIFNvLCB0byBhdm9pZCBjb25mbGljdHMsXG4gIDEyOlx0XHQgIHRoZSBkcml2ZXIgd29uJiMzOTt0IHByb2JlIHRoZSBkZXZpY2UgaWYgaXQgaXMgbm90IGFsc28gZGVjbGFyZWQgaW4gdGhlXG4gIDEzOlx0XHQgIERldmljZSBUcmVlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqU0RJTyBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFNESU8gZHJpdmVyIHNpdHVhdGlvbi4gS2NvbmZpZyBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBsaW5lcyAxMS0xMywgYW5kIGl0IHNvdW5kcyBsaWtlIFNpbGFicyBoYXMgYSBsZXNzLXRoYW4taWRlYWwgU0RJTyB2ZW5kb3IgSUQgc2l0dWF0aW9uLiBUaGUgZ2lzdCBpcywgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cywgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiAqdHJ5KiB0byBwcm9iZSBhIGRldmljZSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2FmZWd1YXJkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjbGFzaGVzLgoKTm93LCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgcHJvYmluZyBhbmQgYmluZGluZyBhY3R1YWxseSB3b3JrcywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGhhbmRsaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBiaW5kaW5nIG1lY2hhbmlzbXMsIHRoZSBEZXZpY2UgVHJlZSBpbnRlcmFjdGlvbiwgYW5kIGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgd2hldGhlciBpdCAqc2hvdWxkKiBldmVuIGF0dGVtcHQgdG8gYXR0YWNoIHRvIGEgZGV2aWNlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IEtjb25maWcgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXNlIHNvdXJjZXMgaGF2ZSB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0c3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuIDI0MjpcdHtcbiAyNDM6XHRcdGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2ZnVuYy1cdTAwM2VkZXYpO1xuIDI0NDpcdFx0bW1jX3BtX2ZsYWdfdCBwbV9mbGFnID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpO1xuIDI0NTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGZ1bmMtXHUwMDNlZGV2Lm9mX25vZGU7XG4gMjQ2Olx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzO1xuIDI0NzpcdFx0aW50IHJldDtcbiAyNDg6XHRcbiAyNDk6XHRcdGlmIChmdW5jLVx1MDAzZW51bSAhPSAxKSB7XG4gMjUwOlx0XHRcdGRldl9lcnIoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O1NESU8gZnVuY3Rpb24gbnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hpcD8pXFxuXCYjMzQ7LFxuIDI1MTpcdFx0XHRcdGZ1bmMtXHUwMDNlbnVtKTtcbiAyNTI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoIXBkYXRhKSB7XG4gMjU2Olx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtubyBjb21wYXRpYmxlIGRldmljZSBmb3VuZCBpbiBEVFxcblwmIzM0Oyk7XG4gMjU3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI1ODpcdFx0fVxuIDI1OTpcdFxuIDI2MDpcdFx0YnVzID0gZGV2bV9remFsbG9jKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xuIDI2MTpcdFx0aWYgKCFidXMpXG4gMjYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI2MzpcdFxuIDI2NDpcdFx0YnVzLVx1MDAzZWZ1bmMgPSBmdW5jO1xuIDI2NTpcdFx0YnVzLVx1MDAzZW9mX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTtcbiAyNjY6XHRcdHNkaW9fc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcbiAyNjc6XHRcbiAyNjg6XHRcdHNkaW9fY2xhaW1faG9zdChmdW5jKTtcbiAyNjk6XHRcdHJldCA9IHNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7XG4gMjcwOlx0XHQvKiBCbG9jayBvZiA2NCBieXRlcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIDUxMkIgZm9yIGZyYW1lIHNpemVzIFx1MDAzYyA0ayAqL1xuIDI3MTpcdFx0c2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCA2NCk7XG4gMjcyOlx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAyNzM6XHRcdGlmIChyZXQpXG4gMjc0Olx0XHRcdHJldHVybiByZXQ7XG4gMjc1Olx0XG4gMjc2Olx0XHRidXMtXHUwMDNlY29yZSA9IHdmeF9pbml0X2NvbW1vbihcdTAwMjZmdW5jLVx1MDAzZWRldiwgcGRhdGEsIFx1MDAyNndmeF9zZGlvX2h3YnVzX29wcywgYnVzKTtcbiAyNzc6XHRcdGlmICghYnVzLVx1MDAzZWNvcmUpIHtcbiAyNzg6XHRcdFx0cmV0ID0gLUVJTztcbiAyNzk6XHRcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gMjgwOlx0XHR9XG4gMjgxOlx0XG4gMjgyOlx0XHRidXMtXHUwMDNlY29yZS1cdTAwM2Vwb2xsX2lycSA9ICEhYnVzLVx1MDAzZW9mX2lycTtcbiAyODM6XHRcdHJldCA9IHdmeF9wcm9iZShidXMtXHUwMDNlY29yZSk7XG4gMjg0Olx0XHRpZiAocmV0KVxuIDI4NTpcdFx0XHRnb3RvIHNkaW9fcmVsZWFzZTtcbiAyODY6XHRcbiAyODc6XHRcdGlmIChwbV9mbGFnIFx1MDAyNiBNTUNfUE1fS0VFUF9QT1dFUilcbiAyODg6XHRcdFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShcdTAwMjZmdW5jLVx1MDAzZWRldiwgdHJ1ZSk7XG4gMjg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIHdvcmtpbmcgdGhyb3VnaCB0aGlzIHN5c3RlbSwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYW5vdGhlciBrZXkgcGllY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1BJIGJ1cyBpcyBiZWluZyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBidXNfc3BpLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgU1BJIGRyaXZlciBjb2RlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGVpciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRoaW5ncyBsaWtlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIGVycm9yIGNoZWNraW5nLCBhbmQgY2xvY2sgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBlZmZpY2llbmN5IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFNQSSBpbnRlcmZhY2UuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy5cbiAgIDY6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFNhZ3JhZCBJbmMuXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxuICAgODpcdCAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O2J1cy5oXCYjMzQ7XG4gIDE5Olx0I2luY2x1ZGUgXCYjMzQ7d2Z4LmhcJiMzNDtcbiAgMjA6XHQjaW5jbHVkZSBcJiMzNDtod2lvLmhcJiMzNDtcbiAgMjE6XHQjaW5jbHVkZSBcJiMzNDttYWluLmhcJiMzNDtcbiAgMjI6XHQjaW5jbHVkZSBcJiMzNDtiaC5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBTRVRfV1JJVEUgMHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqL1xuICAyNTpcdCNkZWZpbmUgU0VUX1JFQUQgMHg4MDAwICAgICAgICAgLyogdXNhZ2U6IG9yIG9wZXJhdGlvbiAqL1xuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XG4gIDI4Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDI5Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3Zngvd2YyMDAucGRzXCYjMzQ7LFxuICAzMDpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgMzE6XHR9O1xuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkNDAwMWEgPSB7XG4gIDM0Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDM1Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkNDAwMWEucGRzXCYjMzQ7LFxuICAzNjpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgMzc6XHR9O1xuICAzODpcdFxuICAzOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyMmEgPSB7XG4gIDQwOlx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQxOlx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyMmEucGRzXCYjMzQ7LFxuICA0MjpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XG4gIDQ2Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQ3Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyM2EucGRzXCYjMzQ7LFxuICA0ODpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgNDk6XHR9O1xuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGJ1c19zcGkuYyoqCgpPa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIFNQSSBpc3N1ZS4gRmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYnVzX3NwaS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggdGhlIFNQSSBidXMgaXMgZGVmaW5lZCwgc28gaWYgdGhlcmUmIzM5O3MgYSBjb21tdW5pY2F0aW9uIGdsaXRjaCwgdGhhdCYjMzk7cyB0aGUgcHJpbWUgc3VzcGVjdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcm9iZSBmdW5jdGlvbmFsaXR5IHRoZXJlIOKAkyBtYWtlIHN1cmUgdGhlIGluaXRpYWxpemF0aW9uLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgdHJhbnNmZXIgbWVjaGFuaXNtcyBhcmUgYWxsIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsb2dpYyBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgc291bmQ7IGFyZSB0aGUgZXJyb3IgZmxhZ3MgYmVpbmcgc2V0IGNvcnJlY3RseSwgYW5kIGlzIHRoZSByZWNvdmVyeSBwcm9jZXNzIHJvYnVzdD8gR290IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSB0aW1pbmcgY29uc3RyYWludHMgYXJlIGJlaW5nIG1ldCB0b287IG1heWJlIHRoZSBjbG9jayBzcGVlZCBpcyB0b28gZmFzdCBmb3IgdGhlIHRhcmdldCBkZXZpY2Ugb3IgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgY2hpcCBzZWxlY3QuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBTUEkgcmVnaXN0ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHByb2JlIGlzIHJlYWxseSBkb2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHJldHVybiBBTElHTihzaXplLCA0KTtcbiAxODE6XHR9XG4gMTgyOlx0XG4gMTgzOlx0c3RhdGljIHZvaWQgd2Z4X3NwaV9zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcbiAxODQ6XHR7XG4gMTg1Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBwcml2O1xuIDE4NjpcdFxuIDE4NzpcdFx0ZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgZW5hYmxlZCk7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X2h3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9IHtcbiAxOTE6XHRcdC5jb3B5X2Zyb21faW8gICAgPSB3Znhfc3BpX2NvcHlfZnJvbV9pbyxcbiAxOTI6XHRcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc3BpX2NvcHlfdG9faW8sXG4gMTkzOlx0XHQuaXJxX3N1YnNjcmliZSAgID0gd2Z4X3NwaV9pcnFfc3Vic2NyaWJlLFxuIDE5NDpcdFx0LmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLFxuIDE5NTpcdFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zcGlfbG9jayxcbiAxOTY6XHRcdC51bmxvY2sgICAgICAgICAgPSB3Znhfc3BpX3VubG9jayxcbiAxOTc6XHRcdC5hbGlnbl9zaXplICAgICAgPSB3Znhfc3BpX2FsaWduX3NpemUsXG4gMTk4Olx0XHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NwaV9zZXRfd2FrZXVwLFxuIDE5OTpcdH07XG4gMjAwOlx0XG4gMjAxOlx0c3RhdGljIGludCB3Znhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIDIwMjpcdHtcbiAyMDM6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xuIDIwNDpcdFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIwNzpcdFx0XHRyZXR1cm4gMDtcbiAyMDg6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnVzLVx1MDAzZWNvcmUtXHUwMDNlaGlmLmJoKTtcbiAyMDk6XHRcdHJldHVybiBlbmFibGVfaXJxX3dha2UoZnVuYy1cdTAwM2VpcnEpO1xuIDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW50IHdmeF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiAyMTM6XHR7XG4gMjE0Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYyA9IHRvX3NwaV9kZXZpY2UoZGV2KTtcbiAyMTU6XHRcbiAyMTY6XHRcdGlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSlcbiAyMTc6XHRcdFx0cmV0dXJuIDA7XG4gMjE4Olx0XHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShmdW5jLVx1MDAzZWlycSk7XG4gMjE5Olx0fVxuIDIyMDpcdFxuIDIyMTpcdHN0YXRpYyBpbnQgd2Z4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYylcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhO1xuIDIyNDpcdFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzO1xuIDIyNTpcdFx0aW50IHJldDtcbiAyMjY6XHRcbiAyMjc6XHRcdGlmICghZnVuYy1cdTAwM2ViaXRzX3Blcl93b3JkKVxuIDIyODpcdFx0XHRmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgPSAxNjtcbiAyMjk6XHRcdHJldCA9IHNwaV9zZXR1cChmdW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggYSB3aXJlbGVzcyBmaXJtd2FyZSBkcml2ZXIgKHdmeCkuCgoqKkRpdmluZyBpbnRvIHRoZSBgd2Z4X3NwaV9wcm9iZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayB0aGlzIG9wZW4uICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgd2Z4X3NwaV9wcm9iZWAmIzM0Oy4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGxpa2VseSBiZWVuIHdvcmtpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyB3aXJlbGVzcyBpbnRlcmZhY2UgYW5kIEkmIzM5O20gZm9jdXNlZCBvbiB0aGlzIHByb2JlIGZ1bmN0aW9uLiBgd2Z4X3NwaV9wcm9iZWAgaXMga2V5LCBpdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdOKAmXMgdGhlIGdhdGVrZWVwZXIsIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIGJyaW5naW5nIHVwIHRoZSBTUEkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB3Znggd2lyZWxlc3MgY2hpcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFmdGVyIHRoZSBpbml0aWFsIHBhcnQgSSYjMzk7dmUgYmVlbiBzdHVkeWluZy4gV2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgc3RlcHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3M/IFdoYXQgY29uZmlndXJhdGlvbiBkYXRhIGlzIGJlaW5nIGxvYWRlZD8gSXMgdGhlcmUgYW55IHNwZWNpZmljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHBvd2VyLXVwIHNlcXVlbmNlcyBvciByZWdpc3RlciBzZXR0aW5ncz8gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHN0cmF0ZWd5IGFuZCBkZWJ1ZyBhbnkgaXNzdWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBJIHJlcXVpcmUgdG8gY29udGludWUgdG8gd29yayBvbiBteSBwcm9qZWN0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRpZiAocmV0KVxuIDIzMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIzMjpcdFx0cGRhdGEgPSAoc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICopc3BpX2dldF9kZXZpY2VfaWQoZnVuYyktXHUwMDNlZHJpdmVyX2RhdGE7XG4gMjMzOlx0XHRpZiAoIXBkYXRhKSB7XG4gMjM0Olx0XHRcdGRldl9lcnIoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O3VuYWJsZSB0byByZXRyaWV2ZSBkcml2ZXIgZGF0YSAocGxlYXNlIHJlcG9ydClcXG5cJiMzNDspO1xuIDIzNTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyMzY6XHRcdH1cbiAyMzc6XHRcbiAyMzg6XHRcdC8qIFRyYWNlIGJlbG93IGlzIGFsc28gZGlzcGxheWVkIGJ5IHNwaV9zZXR1cCgpIGlmIGNvbXBpbGVkIHdpdGggREVCVUcgKi9cbiAyMzk6XHRcdGRldl9kYmcoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O1NQSSBwYXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxcblwmIzM0OyxcbiAyNDA6XHRcdFx0c3BpX2dldF9jaGlwc2VsZWN0KGZ1bmMsIDApLCBmdW5jLVx1MDAzZW1vZGUsIGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCwgZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHopO1xuIDI0MTpcdFx0aWYgKGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCAhPSAxNiBcdTAwMjZcdTAwMjYgZnVuYy1cdTAwM2ViaXRzX3Blcl93b3JkICE9IDgpXG4gMjQyOlx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDt1bnVzdWFsIGJpdHMvd29yZCB2YWx1ZTogJWRcXG5cJiMzNDssIGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCk7XG4gMjQzOlx0XHRpZiAoZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHogXHUwMDNlIDUwMDAwMDAwKVxuIDI0NDpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7JWRIeiBpcyBhIHZlcnkgaGlnaCBzcGVlZFxcblwmIzM0OywgZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHopO1xuIDI0NTpcdFxuIDI0NjpcdFx0YnVzID0gZGV2bV9remFsbG9jKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xuIDI0NzpcdFx0aWYgKCFidXMpXG4gMjQ4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI0OTpcdFx0YnVzLVx1MDAzZWZ1bmMgPSBmdW5jO1xuIDI1MDpcdFx0aWYgKGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCA9PSA4IHx8IElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcbiAyNTE6XHRcdFx0YnVzLVx1MDAzZW5lZWRfc3dhYiA9IHRydWU7XG4gMjUyOlx0XHRzcGlfc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdGJ1cy1cdTAwM2VncGlvX3Jlc2V0ID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LCBHUElPRF9PVVRfTE9XKTtcbiAyNTU6XHRcdGlmIChJU19FUlIoYnVzLVx1MDAzZWdwaW9fcmVzZXQpKVxuIDI1NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihidXMtXHUwMDNlZ3Bpb19yZXNldCk7XG4gMjU3Olx0XHRpZiAoIWJ1cy1cdTAwM2VncGlvX3Jlc2V0KSB7XG4gMjU4Olx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtncGlvIHJlc2V0IGlzIG5vdCBkZWZpbmVkLCB0cnlpbmcgdG8gbG9hZCBmaXJtd2FyZSBhbnl3YXlcXG5cJiMzNDspO1xuIDI1OTpcdFx0fSBlbHNlIHtcbiAyNjA6XHRcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUoYnVzLVx1MDAzZWdwaW9fcmVzZXQsIFwmIzM0O3dmeCByZXNldFwmIzM0Oyk7XG4gMjYxOlx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXHUwMDNlZ3Bpb19yZXNldCwgMSk7XG4gMjYyOlx0XHRcdHVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7XG4gMjYzOlx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXHUwMDNlZ3Bpb19yZXNldCwgMCk7XG4gMjY0Olx0XHRcdHVzbGVlcF9yYW5nZSgyMDAwLCAyNTAwKTtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcbiAyNjc6XHRcdGJ1cy1cdTAwM2Vjb3JlID0gd2Z4X2luaXRfY29tbW9uKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBwZGF0YSwgXHUwMDI2d2Z4X3NwaV9od2J1c19vcHMsIGJ1cyk7XG4gMjY4Olx0XHRpZiAoIWJ1cy1cdTAwM2Vjb3JlKVxuIDI2OTpcdFx0XHRyZXR1cm4gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydCBhbmFseXppbmcgdGhlIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBOZXh0IFN0ZXBzIGluIGB3Znhfc3BpX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gYW50aWNpcGF0ZSB0aGUgc3Vic2VxdWVudCBhY3Rpb25zIHdpdGhpbiB0aGUgYHdmeF9zcGlfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgZHJpdmVyLCBwcm9iYWJseSBmb3IgYSB3aXJlbGVzcyBvciBuZXR3b3JrIGRldmljZSB1c2luZyBhbiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgYnVzLiBUaGUgcHJvYmUgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0byBpbml0aWFsaXplIGFuZCBjb25uZWN0IHRvIHRoZSBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aGlua2luZyBpcywgd2hhdCBjcnVjaWFsIHN0ZXBzIHR5cGljYWxseSBoYXBwZW4gKmFmdGVyKiBhIHByb2JlPwoKRmlyc3QsIEkmIzM5O2QgZXhwZWN0IGFuIGF0dGVtcHQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgU1BJIGRldmljZTogc2VuZGluZyBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgcGVyaGFwcyByZWFkaW5nIGl0cyBpZGVudGlmaWNhdGlvbiwgYW5kIHZlcmlmeWluZyBpdHMgcHJlc2VuY2UuIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRoZSBleGNoYW5nZSBvZiBkYXRhOiBjaGVja2luZyBmb3IgY29ycmVjdCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjb21tdW5pY2F0aW9uIGxpbmVzLCB0aGVuIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UuIFRoZSBleGFjdCBzZXF1ZW5jZSB3aWxsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHNvIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJucywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgdGltZW91dHMuCgpOZXh0LCBJIGFudGljaXBhdGUgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBUaGlzIG1pZ2h0IGluY2x1ZGUgbWVtb3J5IGZvciBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIGFuZCBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAoaWYgdGhpcyBpcyBhIG5ldHdvcmsgaW50ZXJmYWNlKS4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIGNoZWNrcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcuCgpCZXlvbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBzdGVwcyBpbnZvbHZpbmcgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgb3IgY2xvY2sgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBuZWVkIHRvIGVuYWJsZSBwb3dlciBkb21haW5zLCBjb25maWd1cmUgY2xvY2tzIGZvciB0aGUgU1BJIGJ1cyBpdHNlbGYsIG9yIGZvciB0aGUgZGV2aWNlJiMzOTtzIGludGVybmFsIGxvZ2ljPyBUaGVzZSBhcmUgY29tbW9uIHByb2JlIGFjdGlvbnMuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHN1YnN5c3RlbXMuIFdpbGwgdGhlcmUgYmUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0d29yayBzdGFjaywgb3Igd2l0aCBhbnkgb3RoZXIgcmVsZXZhbnQgZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgZGVwZW5kZW5jaWVzIGludm9sdmVkPyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdXBwb3NlZCogdG8gZG8sIGJhc2VkIG9uIGl0cyBjb250ZXh0LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciB3aGF0IEkgZXhwZWN0IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XG4gMjcxOlx0XHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIDI3MjpcdFx0aWYgKHJldClcbiAyNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNzQ6XHRcbiAyNzU6XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHRydWUpO1xuIDI3NjpcdFx0cmV0dXJuIDA7XG4gMjc3Olx0fVxuIDI3ODpcdFxuIDI3OTpcdHN0YXRpYyB2b2lkIHdmeF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHNwaV9nZXRfZHJ2ZGF0YShmdW5jKTtcbiAyODI6XHRcbiAyODM6XHRcdHdmeF9yZWxlYXNlKGJ1cy1cdTAwM2Vjb3JlKTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0LyogRm9yIGR5bmFtaWMgZHJpdmVyIGJpbmRpbmcsIGtlcm5lbCBkb2VzIG5vdCB1c2UgT0YgdG8gbWF0Y2ggZHJpdmVyLiBJdCBvbmx5XG4gMjg3Olx0ICogdXNlIG1vZGFsaWFzIGFuZCBtb2RhbGlhcyBpcyBhIGNvcHkgb2YgJiMzOTtjb21wYXRpYmxlJiMzOTsgRFQgbm9kZSB3aXRoIHZlbmRvclxuIDI4ODpcdCAqIHN0cmlwcGVkLlxuIDI4OTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnByb2JlKiBTUEkgb3IgU0RJTyBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gdGhlIGB3ZnhgIGRyaXZlciwgd2l0aGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZHJpdmVycyBkZXNpZ25lZCBmb3IgKmRlZGljYXRlZCogcGh5c2ljYWwgY2hpcHMsIGxpa2UgdGhhdCBTaWxhYnMgV0YyMDAsIG9mdGVuIHJlbHkgb24gcGh5c2ljYWwgU1BJL1NESU8gaGFyZHdhcmUgYW5kIHNwZWNpZmljIGJvYXJkIERldmljZSBUcmVlIChEVCkgY29uZmlndXJhdGlvbnMuIFN0YW5kYXJkIGVtdWxhdGVkIGhhcmR3YXJlLCBsaWtlIGEgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSwgdXN1YWxseSB3b24mIzM5O3QgY3V0IGl0LgoKUmlnaHQsIGxldCYjMzk7cyByZWZlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gd2hhdCBtYWtlcyBhIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCB0aGUgc2VjdGlvbnMgdGhhdCBtZW50aW9uOgoKKiAgIERvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLW9ubHkgY2hhbmdlcy4gVGhhdCYjMzk7cyBhIG5vLWdvLCBvZiBjb3Vyc2UuCiogICBEZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzLiBHb3QgaXQuCiogICBDaGFuZ2VzIHRvIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIE9idmlvdXMuCiogICAqQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyogdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaXMga2V5LiBJZiBhIGNvZGUgcGF0aCBuZWVkcyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIGl0JiMzOTtzIG5vdCB3b3J0aCBteSB0aW1lLgoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoLCBTbWFydE5JQ3MsIG9yIEdQVXMgcmVxdWlyaW5nICpwaHlzaWNhbCogUENJZSBjYXJkcy4gQWdhaW4sIG5vIHZpcnR1YWwgZXF1aXZhbGVudCwgc28gSSBkb24mIzM5O3QgY2FyZS4KKiAgIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBhcmUgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgdW5iaW5kLiBOb3QgcmVsZXZhbnQgdG8gdHlwaWNhbCBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgd2Z4YC4gVGhhdCYjMzk7cyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLCB1c2luZyBTUEkvU0RJTy4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gSSAqcmVhY2gqIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoZXJlIGFueSB2aXJ0dWFsIG9yIHNvZnR3YXJlLWJhc2VkIGludGVyZmFjZSwgYSBVU0IgaW50ZXJmYWNlIGZvciBpbnN0YW5jZSwgdGhhdCB3b3VsZCBsZXQgbWUgaW50ZXJhY3Qgd2l0aCBpdCBpbiBRRU1VPyBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQsIGV2ZW4gaWYgaW1wZXJmZWN0bHkuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB2aXJ0dWFsaXplZCBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHQjIE5lY2Vzc2FyeSBmb3IgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICAgNDpcdENGTEFHU19kZWJ1Zy5vID0gLUkkKHNyYylcbiAgIDU6XHRcbiAgIDY6XHR3ZngteSA6PSBcXFxuICAgNzpcdFx0YmgubyBcXFxuICAgODpcdFx0aHdpby5vIFxcXG4gICA5Olx0XHRmd2lvLm8gXFxcbiAgMTA6XHRcdGhpZl90eF9taWIubyBcXFxuICAxMTpcdFx0aGlmX3R4Lm8gXFxcbiAgMTI6XHRcdGhpZl9yeC5vIFxcXG4gIDEzOlx0XHRxdWV1ZS5vIFxcXG4gIDE0Olx0XHRkYXRhX3R4Lm8gXFxcbiAgMTU6XHRcdGRhdGFfcngubyBcXFxuICAxNjpcdFx0c2Nhbi5vIFxcXG4gIDE3Olx0XHRzdGEubyBcXFxuICAxODpcdFx0a2V5Lm8gXFxcbiAgMTk6XHRcdG1haW4ubyBcXFxuICAyMDpcdFx0ZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBXRlggV2lyZWxlc3MgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTaWxhYnMgV0ZYIHdpcmVsZXNzIGRyaXZlcnMgYmV0dGVyLiBNeSBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCYjMzk7cyBleHBsb3JlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9gLiBJIHdhbnQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgY29kZSBvcmdhbml6YXRpb24sIGFuZCBpZGVudGlmeSB0aGUga2V5IG1vZHVsZXMgYW5kIGZpbGVzIGludm9sdmVkLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHdmeC0kKENPTkZJR19TUEkpICYjNDM7PSBidXNfc3BpLm9cbiAgMjI6XHQjIFdoZW4gQ09ORklHX01NQyA9PSBtLCBhcHBlbmQgdG8gJiMzOTt3ZngteSYjMzk7IChhbmQgbm90IHRvICYjMzk7d2Z4LW0mIzM5OylcbiAgMjM6XHR3ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgJiM0Mzs9IGJ1c19zZGlvLm9cbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfV0ZYKSAmIzQzOz0gd2Z4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjYKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcsIGFuZCBoZXJlJiMzOTtzIHdoeS4gSSYjMzk7bSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIC8gV0Z4IFdpRmkgY2hpcHMsIGFuZCBpbXBvcnRhbnRseSwgdGhlc2UgYXJlIGNvbm5lY3RlZCB2aWEgU1BJIG9yIFNESU8uCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgdGhhdCBJIHR5cGljYWxseSB3b3JrIHdpdGgsIGxpa2Ugc3l6a2FsbGVyIHJ1bm5pbmcgb24geDg2XzY0IG9yIGFybTY0IHdpdGhpbiBRRU1VIG9yIEdDRS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhbmQgY29uZmlybWF0aW9uIHZpYSBteSByZXNlYXJjaCB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwLiBGdXJ0aGVybW9yZSwgU0RJTyBhbmQgU1BJIFdpRmkgY2hpcHMgb2YgdGhpcyB0eXBlIHR5cGljYWxseSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNvbWUgY3VzdG9tIERldmljZSBUcmVlIChEVCkgZW11bGF0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHNldHVwcyAqZG9uJiMzOTt0KiBvZmZlciB0aGF0LCBtZWFuaW5nIEkgY2FuJiMzOTt0IHRyaWdnZXIgdGhlc2UgY29kZSBwYXRocyB3aXRoIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBgd2Z4X3NkaW9fcHJvYmVgIGZ1bmN0aW9uLiBUaGUgY29kZSBjaGVja3MgZm9yIGEgJiMzNDtjb21wYXRpYmxlIGRldmljZSYjMzQ7IGluIHRoZSBEVCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBwcmVzZW50LCBpdCBpc3N1ZXMgYSB3YXJuaW5nIGFuZCByZXR1cm5zIC1FTk9ERVYuIENyaXRpY2FsbHksIGl0IHRoZW4gc2F5cyB0aGlzIGRyaXZlciB3aWxsICpvbmx5KiBwcm9iZSBpZiB0aGUgaGFyZHdhcmUgaXMgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgRFQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGRlcGVuZGVuY3kgb24gc3BlY2lmaWMgaGFyZHdhcmUgZGVzY3JpcHRpb25zLiBTaWxpY29uIExhYnMgZG9lc24mIzM5O3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQsIHNvIGl0IGlzIHJlcXVpcmVkLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0ICpuZWVkcyogZWl0aGVyIHBoeXNpY2FsIFdGMjAwIGhhcmR3YXJlIG9yIGF0IGxlYXN0IERULWJhc2VkIGhhcmR3YXJlIGRlZmluaXRpb24gZm9yIHByb2JpbmcgdG8gZXZlbiB0YWtlIHBsYWNlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGluaGVyZW50bHkgdGllZCB0byB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGF0IGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIGFzIHdlbGw6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbGAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jYCwgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AuIFRoZXkmIzM5O3JlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgd2Z4YCBkcml2ZXIgY29kZSBvciBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIHN0cmVuZ3RoZW5pbmcgdGhpcyBhc3Nlc3NtZW50LiBUaGUgY2hhbmdlcyBpbiBgYmguY2AgYXJlIHNpbXBseSBjb21tZW50cywgYW5kIGluIGBidXNfc2Rpby5jYCBhbmQgYG1haW4uY2AgaXQmIzM5O3MgcmVsYXRpbmcgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBHaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSBkb24mIzM5O3Qgc2VlIGFueSBwb3NzaWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgdXNpbmcgdHlwaWNhbCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgYmFzZWQgb24gdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFNpbGljb24gTGFicyBXRjIwMCB3aXJlbGVzcyBkcml2ZXIgKHdmeCkgb3ZlciBTUEkvU0RJTywgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIChvciBEVCBlbnRyaWVzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIE5vIGBFbmFibGVDb25maWdzYCBvciBgRm9jdXNTeW1ib2xzYCBhcmUgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAod2Z4KSBmb3IgU1BJL1NESU8gYW5kIGl0cyBEZXZpY2UgVHJlZSBkb2N1bWVudGF0aW9uLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChlLmcuIFFFTVUvR0NFKSwgYW5kIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgdmlhIHN0YW5kYXJkIHZpcnR1YWwvc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjI3LjAyMDE4NjE3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg2OTk2MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzc6MjcuMDIwMTkyMDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5ODA4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjM3OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWxcXG5pbmRleCA2YzA4ODhhZTRjNGUxLi42MGRmZTI1N2VhZGMyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWxcXG5AQCAtNTAsNiArNTAsOSBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICB1c2VkLCB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlIFxcXCJpbi1iYW5kXFxcIlxcbiAgICAgICBpbnRlcnJ1cHQgcHJvdmlkZWQgYnkgdGhlIFNESU8gYnVzIGlzIHVzZWQgdW5sZXNzIGFuIGludGVycnVwdCBpcyBkZWZpbmVkXFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cXG4rXFxuKyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGhcXG4rICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXFxuICAgICBtYXhJdGVtczogMVxcbiBcXG4gICByZXNldC1ncGlvczpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jXFxuaW5kZXggMjFkZmRjZjljYzI3My4uMDA3MTY1OWJjOWM5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcXG5AQCAtMjg0LDEwICsyODQsMTAgQEAgdm9pZCB3ZnhfYmhfcmVxdWVzdF90eChzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gfVxcbiBcXG4gLyogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbCByZWdpc3RlciBhbmQgc2ltdWxhdGVcXG4tICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXFxuKyAqIGFuIElSUSB3aGVuIGFuIGV2ZW50IGhhcHBlbmVkLlxcbiAgKlxcbi0gKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIElSUSBpc1xcbi0gKiBsb3N0LiBTbywgdXNlIHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IChvbmx5IGR1aW5nIGRldmljZSBpbml0aWFsaXNhdGlvbikuXFxuKyAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9sIHJlZ2lzdGVyLCB0aGUgZGV2aWNlIGlzXFxuKyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuXFxuICAqL1xcbiB2b2lkIHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcXG5pbmRleCBhYjA3OTNiOTkwOGY0Li4xY2EyY2MyNjJmZWIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xcbkBAIC0yNzksNiArMjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlcXG4gXFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIFxcdH1cXG4gXFxuK1xcdGJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cXHUwMDNlb2ZfaXJxO1xcbiBcXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVxcdTAwM2Vjb3JlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG5pbmRleCBkZGEzNmU0MWVlZDEzLi5kYTMwZThmNDgxYWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG5AQCAtMzYyLDcgKzM2Miw2IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdCAqL1xcbiBcXHRncGlvX3NhdmVkID0gd2Rldi1cXHUwMDNlcGRhdGEuZ3Bpb193YWtldXA7XFxuIFxcdHdkZXYtXFx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gTlVMTDtcXG4tXFx0d2Rldi1cXHUwMDNlcG9sbF9pcnEgPSB0cnVlO1xcbiBcXG4gXFx0d2Rldi1cXHUwMDNlYmhfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIndmeF9iaF93cVxcXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xcbiBcXHRpZiAoIXdkZXYtXFx1MDAzZWJoX3dxKVxcbkBAIC0zNzQsMTIgKzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGJoX3VucmVnaXN0ZXI7XFxuIFxcbi1cXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XFxuK1xcdGlmICh3ZGV2LVxcdTAwM2Vwb2xsX2lycSkge1xcbitcXHRcXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNndkZXYtXFx1MDAzZWZpcm13YXJlX3JlYWR5LCAxICogSFopO1xcbiBcXHRpZiAoZXJyID09IDApIHtcXG4gXFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXFxuQEAgLTM5OSwxMiArNDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdFxcdGRldl9lcnIod2Rldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZmlybXdhcmUgQVBJIHZlcnNpb24gKGV4cGVjdCAxIHdoaWxlIGZpcm13YXJlIHJldHVybnMgJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcXG4gXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiBcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkge1xcbkBAIC00MjAsMTIgKzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxcbiBcXHRkZXZfZGJnKHdkZXYtXFx1MDAzZWRldiwgXFxcInNlbmRpbmcgY29uZmlndXJhdGlvbiBmaWxlICVzXFxcXG5cXFwiLCB3ZGV2LVxcdTAwM2VwZGF0YS5maWxlX3Bkcyk7XFxuIFxcdGVyciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3ZGV2KTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FTk9FTlQpXFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcbi1cXHR3ZGV2LVxcdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xcbi1cXHRlcnIgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXBvbGxfaXJxKSB7XFxuK1xcdFxcdHdkZXYtXFx1MDAzZXBvbGxfaXJxID0gZmFsc2U7XFxuK1xcdFxcdGVyciA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSB3ZnhfaGlmX3VzZV9tdWx0aV90eF9jb25mKHdkZXYsIHRydWUpO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC00NzQsNyArNDgyLDggQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gaWVlZTgwMjExX3VucmVnaXN0ZXI6XFxuIFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXFx1MDAzZWh3KTtcXG4gaXJxX3Vuc3Vic2NyaWJlOlxcbi1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0aWYgKCF3ZGV2LVxcdTAwM2Vwb2xsX2lycSlcXG4rXFx0XFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIGJoX3VucmVnaXN0ZXI6XFxuIFxcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVxcdTAwM2ViaF93cSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjI4LjgwMDY1Njg5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY3MDg5NDc2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAod2Z4KSBmb3IgU1BJL1NESU8gYW5kIGl0cyBEZXZpY2UgVHJlZSBkb2N1bWVudGF0aW9uLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChlLmcuIFFFTVUvR0NFKSwgYW5kIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgdmlhIHN0YW5kYXJkIHZpcnR1YWwvc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmNDJlNmYxYjkwMWMyODZkMzg5NTI3NjgxMmE1NDBjMzY5MzA5MzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjM3OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuaW5kZXggNmMwODg4YWU0YzRlMS4uNjBkZmUyNTdlYWRjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuQEAgLTUwLDYgKzUwLDkgQEAgcHJvcGVydGllczpcbiAgICAgICB1c2VkLCB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlIFwiaW4tYmFuZFwiXG4gICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cbitcbisgICAgICBUaGUgaGFyZHdhcmUgc3VmZmVycyBmcm9tIGEgbGltaXRhdGlvbiB3aGVuIHRoaXMgcHJvcGVydHkgaXMgdXNlZCB3aXRoXG4rICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXG4gICAgIG1heEl0ZW1zOiAxXG4gXG4gICByZXNldC1ncGlvczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguY1xuQEAgLTI4NCwxMCArMjg0LDEwIEBAIHZvaWQgd2Z4X2JoX3JlcXVlc3RfdHgoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gfVxuIFxuIC8qIElmIElSUSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIGFsbG93IHRvIG1hbnVhbGx5IHBvbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHNpbXVsYXRlXG4tICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXG4rICogYW4gSVJRIHdoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXG4gICpcbi0gKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIElSUSBpc1xuLSAqIGxvc3QuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgKG9ubHkgZHVpbmcgZGV2aWNlIGluaXRpYWxpc2F0aW9uKS5cbisgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpc1xuKyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuXG4gICovXG4gdm9pZCB3ZnhfYmhfcG9sbF9pcnEoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuaW5kZXggYWIwNzkzYjk5MDhmNC4uMWNhMmNjMjYyZmViMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppXG4gXHRcdGdvdG8gc2Rpb19yZWxlYXNlO1xuIFx0fVxuIFxuK1x0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggZGRhMzZlNDFlZWQxMy4uZGEzMGU4ZjQ4MWFkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTM2Miw3ICszNjIsNiBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ICovXG4gXHRncGlvX3NhdmVkID0gd2Rldi1cdTAwM2VwZGF0YS5ncGlvX3dha2V1cDtcbiBcdHdkZXYtXHUwMDNlcGRhdGEuZ3Bpb193YWtldXAgPSBOVUxMO1xuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IHRydWU7XG4gXG4gXHR3ZGV2LVx1MDAzZWJoX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwid2Z4X2JoX3dxXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xuIFx0aWYgKCF3ZGV2LVx1MDAzZWJoX3dxKVxuQEAgLTM3NCwxMiArMzczLDE5IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4gXG4tXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4rXHRpZiAod2Rldi1cdTAwM2Vwb2xsX2lycSkge1xuK1x0XHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0fVxuK1xuIFx0ZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNndkZXYtXHUwMDNlZmlybXdhcmVfcmVhZHksIDEgKiBIWik7XG4gXHRpZiAoZXJyID09IDApIHtcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxcblwiKTtcbiBcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXG5AQCAtMzk5LDEyICs0MDUsMTIgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXG5cIixcbiBcdFx0XHR3ZGV2LVx1MDAzZWh3X2NhcHMuYXBpX3ZlcnNpb25fbWFqb3IpO1xuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7XG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwiY2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBidXQgY2FuJ3QgbmVnb3RpYXRlIGl0XFxuXCIpO1xuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4rXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuIFx0aWYgKHdkZXYtXHUwMDNlaHdfY2Fwcy5yZWdpb25fc2VsX21vZGUpIHtcbkBAIC00MjAsMTIgKzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xcblwiLCB3ZGV2LVx1MDAzZXBkYXRhLmZpbGVfcGRzKTtcbiBcdGVyciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3ZGV2KTtcbiBcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU5PRU5UKVxuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4rXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFxuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuLVx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0aWYgKHdkZXYtXHUwMDNlcG9sbF9pcnEpIHtcbitcdFx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuK1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0fVxuIFxuIFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG5AQCAtNDc0LDcgKzQ4Miw4IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gaWVlZTgwMjExX3VucmVnaXN0ZXI6XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVx1MDAzZWh3KTtcbiBpcnFfdW5zdWJzY3JpYmU6XG4tXHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbitcdGlmICghd2Rldi1cdTAwM2Vwb2xsX2lycSlcbitcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozNzoyOC44MDA2NTg2MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI4MTE4NDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNpbGFicyBXRlggRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgZ2l0IGRpZmYgZm9jdXNlZCBvbiB0aGUgU2lsYWJzIFdGWCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgbmF0dXJlIG9mIHRoaXMgZHJpdmVyLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHN0YW5kYXJkIHBpZWNlIG9mIGNvZGUgdGhhdCBjb3VsZCBiZSB0ZXN0ZWQgZWZmZWN0aXZlbHkgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IG9yIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGxveW1lbnQgY29udGV4dCBpbXBhY3RzIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIHRyYW5zcG9ydC4gV2hhdCBidXMgaXMgdGhpcyBgd2Z4YCBkcml2ZXIgdXNpbmc/IFRoZSBidXMgdHlwZSB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIHRoZSBjb21wbGV4aXR5IG9mIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gVGltZSB0byBsb29rIGludG8gdGhhdC5cblxuTm93LCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIHVzZSBteSB0b29scyDigJMgcHJvYmFibHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIEkgbmVlZCBhIHJhcGlkIG92ZXJ2aWV3OiB3aGF0IGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHdoYXQgYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGRyaXZlcj8gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjQ3LjA4MTg0NTA0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdGWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcyBXRjIwMCBhbmQgZnVydGhlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTU1DIHx8ICFNTUMgIyBkbyBub3QgYWxsb3cgV0ZYPXkgaWYgTU1DPW1cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gKFNQSSB8fCBNTUMpXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNpbGljb25zIExhYnMgV0Z4eHggc2VyaWVzIChXRjIwMCBhbmQgZnVydGhlcilcXG4gICA5OlxcdFxcdCAgY2hpcHNldHMuIFRoaXMgY2hpcCBjYW4gYmUgZm91bmQgb24gU1BJIG9yIFNESU8gYnVzZXMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgU2lsYWJzIGRvZXMgbm90IHVzZSBhIHJlbGlhYmxlIFNESU8gdmVuZG9yIElELiBTbywgdG8gYXZvaWQgY29uZmxpY3RzLFxcbiAgMTI6XFx0XFx0ICB0aGUgZHJpdmVyIHdvbid0IHByb2JlIHRoZSBkZXZpY2UgaWYgaXQgaXMgbm90IGFsc28gZGVjbGFyZWQgaW4gdGhlXFxuICAxMzpcXHRcXHQgIERldmljZSBUcmVlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozNzo0Ny4wODE5MDYwNjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk2NDk2MzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqU0RJTyBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBTRElPIGRyaXZlciBzaXR1YXRpb24uIEtjb25maWcgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gbGluZXMgMTEtMTMsIGFuZCBpdCBzb3VuZHMgbGlrZSBTaWxhYnMgaGFzIGEgbGVzcy10aGFuLWlkZWFsIFNESU8gdmVuZG9yIElEIHNpdHVhdGlvbi4gVGhlIGdpc3QgaXMsIHRvIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMsIHRoZSBkcml2ZXIgd29uJ3QgZXZlbiAqdHJ5KiB0byBwcm9iZSBhIGRldmljZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IGRlZmluZWQgaW4gdGhlIERldmljZSBUcmVlLiBUaGF0J3MgYSByZWFzb25hYmxlIHNhZmVndWFyZCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY2xhc2hlcy5cblxuTm93LCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgcHJvYmluZyBhbmQgYmluZGluZyBhY3R1YWxseSB3b3JrcywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgaGFuZGxpbmcgdGhlIHByb2JlIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgYmluZGluZyBtZWNoYW5pc21zLCB0aGUgRGV2aWNlIFRyZWUgaW50ZXJhY3Rpb24sIGFuZCBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHdoZXRoZXIgaXQgKnNob3VsZCogZXZlbiBhdHRlbXB0IHRvIGF0dGFjaCB0byBhIGRldmljZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBLY29uZmlnIHNldHRpbmcuIExldCdzIHNlZSB3aGF0IHRoZXNlIHNvdXJjZXMgaGF2ZSB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzg6MTMuMDQ2ODcyNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXG4gMjQxOlxcdHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4gMjQyOlxcdHtcXG4gMjQzOlxcdFxcdGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldik7XFxuIDI0NDpcXHRcXHRtbWNfcG1fZmxhZ190IHBtX2ZsYWcgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZnVuYy1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDI0NjpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzO1xcbiAyNDc6XFx0XFx0aW50IHJldDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZW51bSAhPSAxKSB7XFxuIDI1MDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJTRElPIGZ1bmN0aW9uIG51bWJlciBpcyAlZCB3aGlsZSBpdCBzaG91bGQgYWx3YXlzIGJlIDEgKHVuc3VwcG9ydGVkIGNoaXA/KVxcXFxuXFxcIixcXG4gMjUxOlxcdFxcdFxcdFxcdGZ1bmMtXFx1MDAzZW51bSk7XFxuIDI1MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjUzOlxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aWYgKCFwZGF0YSkge1xcbiAyNTY6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIm5vIGNvbXBhdGlibGUgZGV2aWNlIGZvdW5kIGluIERUXFxcXG5cXFwiKTtcXG4gMjU3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyNTg6XFx0XFx0fVxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRidXMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcXG4gMjYxOlxcdFxcdGlmICghYnVzKVxcbiAyNjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdGJ1cy1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuIDI2NTpcXHRcXHRidXMtXFx1MDAzZW9mX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTtcXG4gMjY2OlxcdFxcdHNkaW9fc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xcbiAyNjk6XFx0XFx0cmV0ID0gc2Rpb19lbmFibGVfZnVuYyhmdW5jKTtcXG4gMjcwOlxcdFxcdC8qIEJsb2NrIG9mIDY0IGJ5dGVzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gNTEyQiBmb3IgZnJhbWUgc2l6ZXMgXFx1MDAzYyA0ayAqL1xcbiAyNzE6XFx0XFx0c2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCA2NCk7XFxuIDI3MjpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcXG4gMjczOlxcdFxcdGlmIChyZXQpXFxuIDI3NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRidXMtXFx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgcGRhdGEsIFxcdTAwMjZ3Znhfc2Rpb19od2J1c19vcHMsIGJ1cyk7XFxuIDI3NzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlY29yZSkge1xcbiAyNzg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMjc5OlxcdFxcdFxcdGdvdG8gc2Rpb19yZWxlYXNlO1xcbiAyODA6XFx0XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRidXMtXFx1MDAzZWNvcmUtXFx1MDAzZXBvbGxfaXJxID0gISFidXMtXFx1MDAzZW9mX2lycTtcXG4gMjgzOlxcdFxcdHJldCA9IHdmeF9wcm9iZShidXMtXFx1MDAzZWNvcmUpO1xcbiAyODQ6XFx0XFx0aWYgKHJldClcXG4gMjg1OlxcdFxcdFxcdGdvdG8gc2Rpb19yZWxlYXNlO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAocG1fZmxhZyBcXHUwMDI2IE1NQ19QTV9LRUVQX1BPV0VSKVxcbiAyODg6XFx0XFx0XFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCB0cnVlKTtcXG4gMjg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozODoxMy4wNDcwMzA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MDk0MDI2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlKipcblxuT2theSwgc28gd2UndmUgYmVlbiB3b3JraW5nIHRocm91Z2ggdGhpcyBzeXN0ZW0sIGFuZCBpdCdzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYW5vdGhlciBrZXkgcGllY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1BJIGJ1cyBpcyBiZWluZyBoYW5kbGVkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgYnVzX3NwaS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIFNQSSBkcml2ZXIgY29kZSBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHdlbGwgdGhlaXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGluZ3MgbGlrZSB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LCBlcnJvciBjaGVja2luZywgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24uIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBlZmZpY2llbmN5IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjMyLjY1NjQzNzg5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBTUEkgaW50ZXJmYWNlLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLlxcbiAgIDY6XFx0ICogQ29weXJpZ2h0IChjKSAyMDExLCBTYWdyYWQgSW5jLlxcbiAgIDc6XFx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL3NwaS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcG0uaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFxcImJ1cy5oXFxcIlxcbiAgMTk6XFx0I2luY2x1ZGUgXFxcIndmeC5oXFxcIlxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcImh3aW8uaFxcXCJcXG4gIDIxOlxcdCNpbmNsdWRlIFxcXCJtYWluLmhcXFwiXFxuICAyMjpcXHQjaW5jbHVkZSBcXFwiYmguaFxcXCJcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0I2RlZmluZSBTRVRfV1JJVEUgMHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqL1xcbiAgMjU6XFx0I2RlZmluZSBTRVRfUkVBRCAweDgwMDAgICAgICAgICAvKiB1c2FnZTogb3Igb3BlcmF0aW9uICovXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XFxuICAyODpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDI5OlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3Zngvd2YyMDAucGRzXFxcIixcXG4gIDMwOlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICAzMTpcXHR9O1xcbiAgMzI6XFx0XFxuICAzMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xcbiAgMzQ6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzNTpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDQwMDFhLnBkc1xcXCIsXFxuICAzNjpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgMzc6XFx0fTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ4MDIyYSA9IHtcXG4gIDQwOlxcdFxcdC5maWxlX2Z3ID0gXFxcIndmeC93Zm1fd2YyMDBcXFwiLFxcbiAgNDE6XFx0XFx0LmZpbGVfcGRzID0gXFxcIndmeC9icmQ4MDIyYS5wZHNcXFwiLFxcbiAgNDI6XFx0XFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcXG4gIDQzOlxcdH07XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XFxuICA0NjpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDQ3OlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3ZngvYnJkODAyM2EucGRzXFxcIixcXG4gIDQ4OlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICA0OTpcXHR9O1xcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjMyLjY1NjU5OTUzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzc1MzA2MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJ1c19zcGkuYyoqXG5cbk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgU1BJIGlzc3VlLiBGaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBidXNfc3BpLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTUEkgYnVzIGlzIGRlZmluZWQsIHNvIGlmIHRoZXJlJ3MgYSBjb21tdW5pY2F0aW9uIGdsaXRjaCwgdGhhdCdzIHRoZSBwcmltZSBzdXNwZWN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByb2JlIGZ1bmN0aW9uYWxpdHkgdGhlcmUg4oCTIG1ha2Ugc3VyZSB0aGUgaW5pdGlhbGl6YXRpb24sIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCB0cmFuc2ZlciBtZWNoYW5pc21zIGFyZSBhbGwgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHNlZSBpZiB0aGUgbG9naWMgZm9yIGVycm9yIGhhbmRsaW5nIGlzIHNvdW5kOyBhcmUgdGhlIGVycm9yIGZsYWdzIGJlaW5nIHNldCBjb3JyZWN0bHksIGFuZCBpcyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyByb2J1c3Q/IEdvdCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIGFyZSBiZWluZyBtZXQgdG9vOyBtYXliZSB0aGUgY2xvY2sgc3BlZWQgaXMgdG9vIGZhc3QgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIG9yIHRoZXJlJ3MgYSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgY2hpcCBzZWxlY3QuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBTUEkgcmVnaXN0ZXJzLiBMZXQncyBzZWUgd2hhdCB0aGUgcHJvYmUgaXMgcmVhbGx5IGRvaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjUxLjAzMTkwOTQxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiBBTElHTihzaXplLCA0KTtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0c3RhdGljIHZvaWQgd2Z4X3NwaV9zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcXG4gMTg0OlxcdHtcXG4gMTg1OlxcdFxcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2YnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGVuYWJsZWQpO1xcbiAxODg6XFx0fVxcbiAxODk6XFx0XFxuIDE5MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NwaV9od2J1c19vcHMgPSB7XFxuIDE5MTpcXHRcXHQuY29weV9mcm9tX2lvICAgID0gd2Z4X3NwaV9jb3B5X2Zyb21faW8sXFxuIDE5MjpcXHRcXHQuY29weV90b19pbyAgICAgID0gd2Z4X3NwaV9jb3B5X3RvX2lvLFxcbiAxOTM6XFx0XFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zcGlfaXJxX3N1YnNjcmliZSxcXG4gMTk0OlxcdFxcdC5pcnFfdW5zdWJzY3JpYmUgPSB3Znhfc3BpX2lycV91bnN1YnNjcmliZSxcXG4gMTk1OlxcdFxcdC5sb2NrICAgICAgICAgICAgPSB3Znhfc3BpX2xvY2ssXFxuIDE5NjpcXHRcXHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NwaV91bmxvY2ssXFxuIDE5NzpcXHRcXHQuYWxpZ25fc2l6ZSAgICAgID0gd2Z4X3NwaV9hbGlnbl9zaXplLFxcbiAxOTg6XFx0XFx0LnNldF93YWtldXAgICAgICA9IHdmeF9zcGlfc2V0X3dha2V1cCxcXG4gMTk5OlxcdH07XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgd2Z4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xcbiAyMDQ6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXFxuIDIwNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjA4OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlaGlmLmJoKTtcXG4gMjA5OlxcdFxcdHJldHVybiBlbmFibGVfaXJxX3dha2UoZnVuYy1cXHUwMDNlaXJxKTtcXG4gMjEwOlxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0c3RhdGljIGludCB3Znhfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYyA9IHRvX3NwaV9kZXZpY2UoZGV2KTtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxODpcXHRcXHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShmdW5jLVxcdTAwM2VpcnEpO1xcbiAyMTk6XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRzdGF0aWMgaW50IHdmeF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMpXFxuIDIyMjpcXHR7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhO1xcbiAyMjQ6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzO1xcbiAyMjU6XFx0XFx0aW50IHJldDtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKCFmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkKVxcbiAyMjg6XFx0XFx0XFx0ZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCA9IDE2O1xcbiAyMjk6XFx0XFx0cmV0ID0gc3BpX3NldHVwKGZ1bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozODo1MS4wMzIwMjQzNTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NTMxNDg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggYSB3aXJlbGVzcyBmaXJtd2FyZSBkcml2ZXIgKHdmeCkuXG5cbioqRGl2aW5nIGludG8gdGhlIGB3Znhfc3BpX3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgdGhpcyBvcGVuLiBcIkxldCdzIHNlZSB0aGUgcmVzdCBvZiBgd2Z4X3NwaV9wcm9iZWBcIi4gVGhhdCdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ3ZlIGxpa2VseSBiZWVuIHdvcmtpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyB3aXJlbGVzcyBpbnRlcmZhY2UgYW5kIEknbSBmb2N1c2VkIG9uIHRoaXMgcHJvYmUgZnVuY3Rpb24uIGB3Znhfc3BpX3Byb2JlYCBpcyBrZXksIGl0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGFuZCBicmluZ2luZyB1cCB0aGUgU1BJIGNvbW11bmljYXRpb24gd2l0aCB0aGUgd2Z4IHdpcmVsZXNzIGNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBhZnRlciB0aGUgaW5pdGlhbCBwYXJ0IEkndmUgYmVlbiBzdHVkeWluZy4gV2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgc3RlcHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3M/IFdoYXQgY29uZmlndXJhdGlvbiBkYXRhIGlzIGJlaW5nIGxvYWRlZD8gSXMgdGhlcmUgYW55IHNwZWNpZmljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHBvd2VyLXVwIHNlcXVlbmNlcyBvciByZWdpc3RlciBzZXR0aW5ncz8gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHN0cmF0ZWd5IGFuZCBkZWJ1ZyBhbnkgaXNzdWVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBkZXRhaWxzIEkgcmVxdWlyZSB0byBjb250aW51ZSB0byB3b3JrIG9uIG15IHByb2plY3QuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOToxNi43ODUxNzUxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdGlmIChyZXQpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMzI6XFx0XFx0cGRhdGEgPSAoc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICopc3BpX2dldF9kZXZpY2VfaWQoZnVuYyktXFx1MDAzZWRyaXZlcl9kYXRhO1xcbiAyMzM6XFx0XFx0aWYgKCFwZGF0YSkge1xcbiAyMzQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwidW5hYmxlIHRvIHJldHJpZXZlIGRyaXZlciBkYXRhIChwbGVhc2UgcmVwb3J0KVxcXFxuXFxcIik7XFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjM2OlxcdFxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0XFx0LyogVHJhY2UgYmVsb3cgaXMgYWxzbyBkaXNwbGF5ZWQgYnkgc3BpX3NldHVwKCkgaWYgY29tcGlsZWQgd2l0aCBERUJVRyAqL1xcbiAyMzk6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiU1BJIHBhcmFtczogQ1M9JWQsIG1vZGU9JWQgYml0cy93b3JkPSVkIHNwZWVkPSVkXFxcXG5cXFwiLFxcbiAyNDA6XFx0XFx0XFx0c3BpX2dldF9jaGlwc2VsZWN0KGZ1bmMsIDApLCBmdW5jLVxcdTAwM2Vtb2RlLCBmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkLCBmdW5jLVxcdTAwM2VtYXhfc3BlZWRfaHopO1xcbiAyNDE6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gMTYgXFx1MDAyNlxcdTAwMjYgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCAhPSA4KVxcbiAyNDI6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcInVudXN1YWwgYml0cy93b3JkIHZhbHVlOiAlZFxcXFxuXFxcIiwgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCk7XFxuIDI0MzpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6IFxcdTAwM2UgNTAwMDAwMDApXFxuIDI0NDpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiJWRIeiBpcyBhIHZlcnkgaGlnaCBzcGVlZFxcXFxuXFxcIiwgZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6KTtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0YnVzID0gZGV2bV9remFsbG9jKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7XFxuIDI0NzpcXHRcXHRpZiAoIWJ1cylcXG4gMjQ4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNDk6XFx0XFx0YnVzLVxcdTAwM2VmdW5jID0gZnVuYztcXG4gMjUwOlxcdFxcdGlmIChmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkID09IDggfHwgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKVxcbiAyNTE6XFx0XFx0XFx0YnVzLVxcdTAwM2VuZWVkX3N3YWIgPSB0cnVlO1xcbiAyNTI6XFx0XFx0c3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdGJ1cy1cXHUwMDNlZ3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX09VVF9MT1cpO1xcbiAyNTU6XFx0XFx0aWYgKElTX0VSUihidXMtXFx1MDAzZWdwaW9fcmVzZXQpKVxcbiAyNTY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVzLVxcdTAwM2VncGlvX3Jlc2V0KTtcXG4gMjU3OlxcdFxcdGlmICghYnVzLVxcdTAwM2VncGlvX3Jlc2V0KSB7XFxuIDI1ODpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiZ3BpbyByZXNldCBpcyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XFxcXG5cXFwiKTtcXG4gMjU5OlxcdFxcdH0gZWxzZSB7XFxuIDI2MDpcXHRcXHRcXHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShidXMtXFx1MDAzZWdwaW9fcmVzZXQsIFxcXCJ3ZnggcmVzZXRcXFwiKTtcXG4gMjYxOlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZWdwaW9fcmVzZXQsIDEpO1xcbiAyNjI6XFx0XFx0XFx0dXNsZWVwX3JhbmdlKDEwMCwgMTUwKTtcXG4gMjYzOlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZWdwaW9fcmVzZXQsIDApO1xcbiAyNjQ6XFx0XFx0XFx0dXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApO1xcbiAyNjU6XFx0XFx0fVxcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRidXMtXFx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgcGRhdGEsIFxcdTAwMjZ3Znhfc3BpX2h3YnVzX29wcywgYnVzKTtcXG4gMjY4OlxcdFxcdGlmICghYnVzLVxcdTAwM2Vjb3JlKVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjE2Ljc4NTI1MjQ3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA2MDkyNTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydCBhbmFseXppbmcgdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIE5leHQgU3RlcHMgaW4gYHdmeF9zcGlfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gYW50aWNpcGF0ZSB0aGUgc3Vic2VxdWVudCBhY3Rpb25zIHdpdGhpbiB0aGUgYHdmeF9zcGlfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBkcml2ZXIsIHByb2JhYmx5IGZvciBhIHdpcmVsZXNzIG9yIG5ldHdvcmsgZGV2aWNlIHVzaW5nIGFuIFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBidXMuIFRoZSBwcm9iZSBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIGluaXRpYWxpemUgYW5kIGNvbm5lY3QgdG8gdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzLCB3aGF0IGNydWNpYWwgc3RlcHMgdHlwaWNhbGx5IGhhcHBlbiAqYWZ0ZXIqIGEgcHJvYmU/XG5cbkZpcnN0LCBJJ2QgZXhwZWN0IGFuIGF0dGVtcHQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgU1BJIGRldmljZTogc2VuZGluZyBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgcGVyaGFwcyByZWFkaW5nIGl0cyBpZGVudGlmaWNhdGlvbiwgYW5kIHZlcmlmeWluZyBpdHMgcHJlc2VuY2UuIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGV4Y2hhbmdlIG9mIGRhdGE6IGNoZWNraW5nIGZvciBjb3JyZWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNvbW11bmljYXRpb24gbGluZXMsIHRoZW4gY29uZmlndXJpbmcgdGhlIGRldmljZS4gVGhlIGV4YWN0IHNlcXVlbmNlIHdpbGwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgc28gSSdsbCBiZSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSByZWdpc3RlciBhY2Nlc3MgcGF0dGVybnMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHRpbWVvdXRzLlxuXG5OZXh0LCBJIGFudGljaXBhdGUgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBUaGlzIG1pZ2h0IGluY2x1ZGUgbWVtb3J5IGZvciBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIGFuZCBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAoaWYgdGhpcyBpcyBhIG5ldHdvcmsgaW50ZXJmYWNlKS4gSSdsbCBiZSBleHBlY3RpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZy5cblxuQmV5b25kIHJlc291cmNlIGFsbG9jYXRpb24sIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBzdGVwcyBpbnZvbHZpbmcgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgb3IgY2xvY2sgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBuZWVkIHRvIGVuYWJsZSBwb3dlciBkb21haW5zLCBjb25maWd1cmUgY2xvY2tzIGZvciB0aGUgU1BJIGJ1cyBpdHNlbGYsIG9yIGZvciB0aGUgZGV2aWNlJ3MgaW50ZXJuYWwgbG9naWM/IFRoZXNlIGFyZSBjb21tb24gcHJvYmUgYWN0aW9ucy5cblxuRmluYWxseSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHN1YnN5c3RlbXMuIFdpbGwgdGhlcmUgYmUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0d29yayBzdGFjaywgb3Igd2l0aCBhbnkgb3RoZXIgcmVsZXZhbnQgZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgZGVwZW5kZW5jaWVzIGludm9sdmVkPyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdXBwb3NlZCogdG8gZG8sIGJhc2VkIG9uIGl0cyBjb250ZXh0LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciB3aGF0IEkgZXhwZWN0IHRvIGZvbGxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzk6MjguODQ2MTgyOTU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVxcdTAwM2Vjb3JlKTtcXG4gMjcyOlxcdFxcdGlmIChyZXQpXFxuIDI3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHRydWUpO1xcbiAyNzY6XFx0XFx0cmV0dXJuIDA7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyB2b2lkIHdmeF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxcbiAyODA6XFx0e1xcbiAyODE6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHR3ZnhfcmVsZWFzZShidXMtXFx1MDAzZWNvcmUpO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHQvKiBGb3IgZHluYW1pYyBkcml2ZXIgYmluZGluZywga2VybmVsIGRvZXMgbm90IHVzZSBPRiB0byBtYXRjaCBkcml2ZXIuIEl0IG9ubHlcXG4gMjg3OlxcdCAqIHVzZSBtb2RhbGlhcyBhbmQgbW9kYWxpYXMgaXMgYSBjb3B5IG9mICdjb21wYXRpYmxlJyBEVCBub2RlIHdpdGggdmVuZG9yXFxuIDI4ODpcXHQgKiBzdHJpcHBlZC5cXG4gMjg5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOToyOC44NDYyODc3NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5NDg2MjI3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnByb2JlKiBTUEkgb3IgU0RJTyBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gdGhlIGB3ZnhgIGRyaXZlciwgd2l0aGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZHJpdmVycyBkZXNpZ25lZCBmb3IgKmRlZGljYXRlZCogcGh5c2ljYWwgY2hpcHMsIGxpa2UgdGhhdCBTaWxhYnMgV0YyMDAsIG9mdGVuIHJlbHkgb24gcGh5c2ljYWwgU1BJL1NESU8gaGFyZHdhcmUgYW5kIHNwZWNpZmljIGJvYXJkIERldmljZSBUcmVlIChEVCkgY29uZmlndXJhdGlvbnMuIFN0YW5kYXJkIGVtdWxhdGVkIGhhcmR3YXJlLCBsaWtlIGEgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSwgdXN1YWxseSB3b24ndCBjdXQgaXQuXG5cblJpZ2h0LCBsZXQncyByZWZlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gd2hhdCBtYWtlcyBhIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgcnVsZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhlIHNlY3Rpb25zIHRoYXQgbWVudGlvbjpcblxuKiAgIERvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLW9ubHkgY2hhbmdlcy4gVGhhdCdzIGEgbm8tZ28sIG9mIGNvdXJzZS5cbiogICBEZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzLiBHb3QgaXQuXG4qICAgQ2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIE9idmlvdXMuXG4qICAgKkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMqIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIGlzIGtleS4gSWYgYSBjb2RlIHBhdGggbmVlZHMgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCdzIG5vdCB3b3J0aCBteSB0aW1lLlxuKiAgIFZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGZvciBQQ0llIHN3aXRjaCwgU21hcnROSUNzLCBvciBHUFVzIHJlcXVpcmluZyAqcGh5c2ljYWwqIFBDSWUgY2FyZHMuIEFnYWluLCBubyB2aXJ0dWFsIGVxdWl2YWxlbnQsIHNvIEkgZG9uJ3QgY2FyZS5cbiogICBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIG9ubHkgdHJpZ2dlcmVkIGR1cmluZyBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4gTm90IHJlbGV2YW50IHRvIHR5cGljYWwgZnV6emluZy5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGB3ZnhgLiBUaGF0J3MgdGhlIFNpbGljb24gTGFicyBXRjIwMCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlciwgdXNpbmcgU1BJL1NESU8uIFRoZSBxdWVzdGlvbiBpczogY2FuIEkgKnJlYWNoKiBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhbnkgdmlydHVhbCBvciBzb2Z0d2FyZS1iYXNlZCBpbnRlcmZhY2UsIGEgVVNCIGludGVyZmFjZSBmb3IgaW5zdGFuY2UsIHRoYXQgd291bGQgbGV0IG1lIGludGVyYWN0IHdpdGggaXQgaW4gUUVNVT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGRyaXZlciBpcyBkZXNpZ25lZCB0byB3b3JrIGluIGEgc2ltdWxhdGVkIGVudmlyb25tZW50LCBldmVuIGlmIGltcGVyZmVjdGx5LiBMZXQncyBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB2aXJ0dWFsaXplZCBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzk6NDcuNzk0OTEyNDIyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0IyBOZWNlc3NhcnkgZm9yIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gICA0OlxcdENGTEFHU19kZWJ1Zy5vID0gLUkkKHNyYylcXG4gICA1OlxcdFxcbiAgIDY6XFx0d2Z4LXkgOj0gXFxcXFxcbiAgIDc6XFx0XFx0YmgubyBcXFxcXFxuICAgODpcXHRcXHRod2lvLm8gXFxcXFxcbiAgIDk6XFx0XFx0Zndpby5vIFxcXFxcXG4gIDEwOlxcdFxcdGhpZl90eF9taWIubyBcXFxcXFxuICAxMTpcXHRcXHRoaWZfdHgubyBcXFxcXFxuICAxMjpcXHRcXHRoaWZfcngubyBcXFxcXFxuICAxMzpcXHRcXHRxdWV1ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGRhdGFfdHgubyBcXFxcXFxuICAxNTpcXHRcXHRkYXRhX3J4Lm8gXFxcXFxcbiAgMTY6XFx0XFx0c2Nhbi5vIFxcXFxcXG4gIDE3OlxcdFxcdHN0YS5vIFxcXFxcXG4gIDE4OlxcdFxcdGtleS5vIFxcXFxcXG4gIDE5OlxcdFxcdG1haW4ubyBcXFxcXFxuICAyMDpcXHRcXHRkZWJ1Zy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjQ3Ljc5NDk4MjY2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjE4MDA2OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFdGWCBXaXJlbGVzcyBEcml2ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTaWxhYnMgV0ZYIHdpcmVsZXNzIGRyaXZlcnMgYmV0dGVyLiBNeSBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCdzIGV4cGxvcmUgd2hhdCdzIGFjdHVhbGx5ICppbiogYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYC4gSSB3YW50IHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZCB0aGUgc291cmNlIGNvZGUgb3JnYW5pemF0aW9uLCBhbmQgaWRlbnRpZnkgdGhlIGtleSBtb2R1bGVzIGFuZCBmaWxlcyBpbnZvbHZlZC4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjU5Ljk3NTA1NDQzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHR3ZngtJChDT05GSUdfU1BJKSArPSBidXNfc3BpLm9cXG4gIDIyOlxcdCMgV2hlbiBDT05GSUdfTU1DID09IG0sIGFwcGVuZCB0byAnd2Z4LXknIChhbmQgbm90IHRvICd3ZngtbScpXFxuICAyMzpcXHR3ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgKz0gYnVzX3NkaW8ub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRvYmotJChDT05GSUdfV0ZYKSArPSB3Zngub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOTo1OS45NzUyMTI1NDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5MTQ4OTY0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggZnV6emluZywgYW5kIGhlcmUncyB3aHkuIEknbSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgLyBXRnggV2lGaSBjaGlwcywgYW5kIGltcG9ydGFudGx5LCB0aGVzZSBhcmUgY29ubmVjdGVkIHZpYSBTUEkgb3IgU0RJTy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIHRoYXQgSSB0eXBpY2FsbHkgd29yayB3aXRoLCBsaWtlIHN5emthbGxlciBydW5uaW5nIG9uIHg4Nl82NCBvciBhcm02NCB3aXRoaW4gUUVNVSBvciBHQ0UuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgYW5kIGNvbmZpcm1hdGlvbiB2aWEgbXkgcmVzZWFyY2ggdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwLiBGdXJ0aGVybW9yZSwgU0RJTyBhbmQgU1BJIFdpRmkgY2hpcHMgb2YgdGhpcyB0eXBlIHR5cGljYWxseSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNvbWUgY3VzdG9tIERldmljZSBUcmVlIChEVCkgZW11bGF0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHNldHVwcyAqZG9uJ3QqIG9mZmVyIHRoYXQsIG1lYW5pbmcgSSBjYW4ndCB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMgd2l0aCBhIHN0YW5kYXJkIGVudmlyb25tZW50LlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGB3Znhfc2Rpb19wcm9iZWAgZnVuY3Rpb24uIFRoZSBjb2RlIGNoZWNrcyBmb3IgYSBcImNvbXBhdGlibGUgZGV2aWNlXCIgaW4gdGhlIERULCBhbmQgaWYgaXQncyBub3QgcHJlc2VudCwgaXQgaXNzdWVzIGEgd2FybmluZyBhbmQgcmV0dXJucyAtRU5PREVWLiBDcml0aWNhbGx5LCBpdCB0aGVuIHNheXMgdGhpcyBkcml2ZXIgd2lsbCAqb25seSogcHJvYmUgaWYgdGhlIGhhcmR3YXJlIGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIERULiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBkZXBlbmRlbmN5IG9uIHNwZWNpZmljIGhhcmR3YXJlIGRlc2NyaXB0aW9ucy4gU2lsaWNvbiBMYWJzIGRvZXNuJ3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQsIHNvIGl0IGlzIHJlcXVpcmVkLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0ICpuZWVkcyogZWl0aGVyIHBoeXNpY2FsIFdGMjAwIGhhcmR3YXJlIG9yIGF0IGxlYXN0IERULWJhc2VkIGhhcmR3YXJlIGRlZmluaXRpb24gZm9yIHByb2JpbmcgdG8gZXZlbiB0YWtlIHBsYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgaW5oZXJlbnRseSB0aWVkIHRvIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoYXQgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIGFzIHdlbGw6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbGAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jYCwgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AuIFRoZXkncmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB3ZnhgIGRyaXZlciBjb2RlIG9yIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3RyZW5ndGhlbmluZyB0aGlzIGFzc2Vzc21lbnQuIFRoZSBjaGFuZ2VzIGluIGBiaC5jYCBhcmUgc2ltcGx5IGNvbW1lbnRzLCBhbmQgaW4gYGJ1c19zZGlvLmNgIGFuZCBgbWFpbi5jYCBpdCdzIHJlbGF0aW5nIHRvIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gR2l2ZW4gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3ksIEkgZG9uJ3Qgc2VlIGFueSBwb3NzaWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgdXNpbmcgdHlwaWNhbCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcImNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcIiBiYXNlZCBvbiB0aGUgY3JpdGVyaWEuIFRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBTaWxpY29uIExhYnMgV0YyMDAgd2lyZWxlc3MgZHJpdmVyICh3ZngpIG92ZXIgU1BJL1NESU8sIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgRFQgZW50cmllcykgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBObyBgRW5hYmxlQ29uZmlnc2Agb3IgYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI2LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjQwOjE1Ljg5MDExMTM4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo0MDoxNS44OTAxMzUyMzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr6zpx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 01:25:13 +0000 UTC FinishedAt: 2026-09-01 02:40:17 +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+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDI6Mzc6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuaW5kZXggNmMwODg4YWU0YzRlMS4uNjBkZmUyNTdlYWRjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuQEAgLTUwLDYgJiM0Mzs1MCw5IEBAIHByb3BlcnRpZXM6XG4gICAgICAgdXNlZCwgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4gV2hlbiBTRElPIGlzIHVzZWQsIHRoZSBcJiMzNDtpbi1iYW5kXCYjMzQ7XG4gICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cbiYjNDM7XG4mIzQzOyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGhcbiYjNDM7ICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXG4gICAgIG1heEl0ZW1zOiAxXG4gXG4gICByZXNldC1ncGlvczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguY1xuQEAgLTI4NCwxMCAmIzQzOzI4NCwxMCBAQCB2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIH1cbiBcbiAvKiBJZiBJUlEgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiBhbGxvdyB0byBtYW51YWxseSBwb2xsIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZCBzaW11bGF0ZVxuLSAqIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLlxuJiM0MzsgKiBhbiBJUlEgd2hlbiBhbiBldmVudCBoYXBwZW5lZC5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9sIHJlZ2lzdGVyLCB0aGUgSVJRIGlzXG4tICogbG9zdC4gU28sIHVzZSB0aGlzIGZ1bmN0aW9uIGNhcmVmdWxseSAob25seSBkdWluZyBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLlxuJiM0MzsgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpc1xuJiM0MzsgKiBsb3N0LiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBpbml0aWFsaXplIHRoZSBTRElPIHdpdGggb3V0LW9mLWJhbmQgSVJRLlxuICAqL1xuIHZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcbmluZGV4IGFiMDc5M2I5OTA4ZjQuLjFjYTJjYzI2MmZlYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gXHR9XG4gXG4mIzQzO1x0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggZGRhMzZlNDFlZWQxMy4uZGEzMGU4ZjQ4MWFkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTM2Miw3ICYjNDM7MzYyLDYgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdCAqL1xuIFx0Z3Bpb19zYXZlZCA9IHdkZXYtXHUwMDNlcGRhdGEuZ3Bpb193YWtldXA7XG4gXHR3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gTlVMTDtcbi1cdHdkZXYtXHUwMDNlcG9sbF9pcnEgPSB0cnVlO1xuIFxuIFx0d2Rldi1cdTAwM2ViaF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt3ZnhfYmhfd3FcJiMzNDssIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xuIFx0aWYgKCF3ZGV2LVx1MDAzZWJoX3dxKVxuQEAgLTM3NCwxMiAmIzQzOzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuIFxuLVx0d2Z4X2JoX3BvbGxfaXJxKHdkZXYpO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZXBvbGxfaXJxKSB7XG4mIzQzO1x0XHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVyciA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNndkZXYtXHUwMDNlZmlybXdhcmVfcmVhZHksIDEgKiBIWik7XG4gXHRpZiAoZXJyID09IDApIHtcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7dGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFydHVwIGluZGljYXRpb25cXG5cJiMzNDspO1xuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4mIzQzO1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXG5AQCAtMzk5LDEyICYjNDM7NDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9uIChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1cm5zICVkKVxcblwmIzM0OyxcbiBcdFx0XHR3ZGV2LVx1MDAzZWh3X2NhcHMuYXBpX3ZlcnNpb25fbWFqb3IpO1xuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gXHR9XG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xuIFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4mIzM5O3QgbmVnb3RpYXRlIGl0XFxuXCYjMzQ7KTtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gXHR9XG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkge1xuQEAgLTQyMCwxMiAmIzQzOzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcXG5cJiMzNDssIHdkZXYtXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xuIFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FTk9FTlQpXG4tXHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiYjNDM7XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFxuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuLVx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZXBvbGxfaXJxKSB7XG4mIzQzO1x0XHR3ZGV2LVx1MDAzZXBvbGxfaXJxID0gZmFsc2U7XG4mIzQzO1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG5AQCAtNDc0LDcgJiM0Mzs0ODIsOCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIGllZWU4MDIxMV91bnJlZ2lzdGVyOlxuIFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi1cdTAwM2Vodyk7XG4gaXJxX3Vuc3Vic2NyaWJlOlxuLVx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4mIzQzO1x0aWYgKCF3ZGV2LVx1MDAzZXBvbGxfaXJxKVxuJiM0MztcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6Mzc6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCmluZGV4IDZjMDg4OGFlNGM0ZTEuLjYwZGZlMjU3ZWFkYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sCkBAIC01MCw2ICYjNDM7NTAsOSBAQCBwcm9wZXJ0aWVzOgogICAgICAgdXNlZCwgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4gV2hlbiBTRElPIGlzIHVzZWQsIHRoZSAmIzM0O2luLWJhbmQmIzM0OwogICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZAogICAgICAgaW4gdGhlIERldmljZSBUcmVlLgomIzQzOwomIzQzOyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGgKJiM0MzsgICAgICBTRElPLiBPT0IgSVJRIHdpdGggU0RJTyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZWJ1Zy4KICAgICBtYXhJdGVtczogMQogCiAgIHJlc2V0LWdwaW9zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jCmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKQEAgLTI4NCwxMCAmIzQzOzI4NCwxMCBAQCB2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogfQogCiAvKiBJZiBJUlEgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiBhbGxvdyB0byBtYW51YWxseSBwb2xsIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZCBzaW11bGF0ZQotICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuCiYjNDM7ICogYW4gSVJRIHdoZW4gYW4gZXZlbnQgaGFwcGVuZWQuCiAgKgotICogTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGEgYnVnOiBJZiBhbiBJUlEgcmFpc2Ugd2hpbGUgaG9zdCByZWFkIGNvbnRyb2wgcmVnaXN0ZXIsIHRoZSBJUlEgaXMKLSAqIGxvc3QuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgKG9ubHkgZHVpbmcgZGV2aWNlIGluaXRpYWxpc2F0aW9uKS4KJiM0MzsgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpcwomIzQzOyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuCiAgKi8KIHZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jCmluZGV4IGFiMDc5M2I5OTA4ZjQuLjFjYTJjYzI2MmZlYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMKQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmkKIAkJZ290byBzZGlvX3JlbGVhc2U7CiAJfQogCiYjNDM7CWJ1cy0mZ3Q7Y29yZS0mZ3Q7cG9sbF9pcnEgPSAhIWJ1cy0mZ3Q7b2ZfaXJxOwogCXJldCA9IHdmeF9wcm9iZShidXMtJmd0O2NvcmUpOwogCWlmIChyZXQpCiAJCWdvdG8gc2Rpb19yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwppbmRleCBkZGEzNmU0MWVlZDEzLi5kYTMwZThmNDgxYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwpAQCAtMzYyLDcgJiM0MzszNjIsNiBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCSAqLwogCWdwaW9fc2F2ZWQgPSB3ZGV2LSZndDtwZGF0YS5ncGlvX3dha2V1cDsKIAl3ZGV2LSZndDtwZGF0YS5ncGlvX3dha2V1cCA9IE5VTEw7Ci0Jd2Rldi0mZ3Q7cG9sbF9pcnEgPSB0cnVlOwogCiAJd2Rldi0mZ3Q7Ymhfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDt3ZnhfYmhfd3EmIzM0OywgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSwgMCk7CiAJaWYgKCF3ZGV2LSZndDtiaF93cSkKQEAgLTM3NCwxMiAmIzQzOzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gYmhfdW5yZWdpc3RlcjsKIAotCXdmeF9iaF9wb2xsX2lycSh3ZGV2KTsKJiM0MzsJaWYgKHdkZXYtJmd0O3BvbGxfaXJxKSB7CiYjNDM7CQl3ZnhfYmhfcG9sbF9pcnEod2Rldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJfQomIzQzOwogCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO3dkZXYtJmd0O2Zpcm13YXJlX3JlYWR5LCAxICogSFopOwogCWlmIChlcnIgPT0gMCkgewogCQlkZXZfZXJyKHdkZXYtJmd0O2RldiwgJiMzNDt0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxuJiMzNDspOwogCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIGJoX3VucmVnaXN0ZXI7CiYjNDM7CQlnb3RvIGlycV91bnN1YnNjcmliZTsKIAl9CiAKIAkvKiBGSVhNRTogZmlsbCB3aXBoeTo6aHdfdmVyc2lvbiAqLwpAQCAtMzk5LDEyICYjNDM7NDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJCWRldl9lcnIod2Rldi0mZ3Q7ZGV2LCAmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9uIChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1cm5zICVkKVxuJiMzNDssCiAJCQl3ZGV2LSZndDtod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTsKIAkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCX0KIAogCWlmICh3ZGV2LSZndDtod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkgewogCQlkZXZfZXJyKHdkZXYtJmd0O2RldiwgJiMzNDtjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4mIzM5O3QgbmVnb3RpYXRlIGl0XG4mIzM0Oyk7Ci0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCX0KIAogCWlmICh3ZGV2LSZndDtod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkgewpAQCAtNDIwLDEyICYjNDM7NDI2LDE0IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJZGV2X2RiZyh3ZGV2LSZndDtkZXYsICYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiYjMzQ7LCB3ZGV2LSZndDtwZGF0YS5maWxlX3Bkcyk7CiAJZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpOwogCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FTk9FTlQpCi0JCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJCWdvdG8gaXJxX3Vuc3Vic2NyaWJlOwogCi0Jd2Rldi0mZ3Q7cG9sbF9pcnEgPSBmYWxzZTsKLQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7Ci0JaWYgKGVycikKLQkJZ290byBiaF91bnJlZ2lzdGVyOwomIzQzOwlpZiAod2Rldi0mZ3Q7cG9sbF9pcnEpIHsKJiM0MzsJCXdkZXYtJmd0O3BvbGxfaXJxID0gZmFsc2U7CiYjNDM7CQllcnIgPSB3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV9zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYmhfdW5yZWdpc3RlcjsKJiM0MzsJfQogCiAJZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQpAQCAtNDc0LDcgJiM0Mzs0ODIsOCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogaWVlZTgwMjExX3VucmVnaXN0ZXI6CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0mZ3Q7aHcpOwogaXJxX3Vuc3Vic2NyaWJlOgotCXdkZXYtJmd0O2h3YnVzX29wcy0mZ3Q7aXJxX3Vuc3Vic2NyaWJlKHdkZXYtJmd0O2h3YnVzX3ByaXYpOwomIzQzOwlpZiAoIXdkZXYtJmd0O3BvbGxfaXJxKQomIzQzOwkJd2Rldi0mZ3Q7aHdidXNfb3BzLSZndDtpcnFfdW5zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiBiaF91bnJlZ2lzdGVyOgogCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtJmd0O2JoX3dxKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNpbGFicyBXRlggRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBnaXQgZGlmZiBmb2N1c2VkIG9uIHRoZSBTaWxhYnMgV0ZYIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBuYXR1cmUgb2YgdGhpcyBkcml2ZXIuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHN0YW5kYXJkIHBpZWNlIG9mIGNvZGUgdGhhdCBjb3VsZCBiZSB0ZXN0ZWQgZWZmZWN0aXZlbHkgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IG9yIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGxveW1lbnQgY29udGV4dCBpbXBhY3RzIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLgoKRmlyc3QsIEkgbmVlZCB0byBrbm93IHRoZSB0cmFuc3BvcnQuIFdoYXQgYnVzIGlzIHRoaXMgYHdmeGAgZHJpdmVyIHVzaW5nPyBUaGUgYnVzIHR5cGUgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSB0aGUgY29tcGxleGl0eSBvZiB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuIFRpbWUgdG8gbG9vayBpbnRvIHRoYXQuCgpOb3csIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCB1c2UgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlIGFjdHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeGAgZGlyZWN0b3J5LiBJIG5lZWQgYSByYXBpZCBvdmVydmlldzogd2hhdCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGF0IGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhpcyBkcml2ZXI/IFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdGWFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U2lsaWNvbiBMYWJzIHdpcmVsZXNzIGNoaXBzIFdGMjAwIGFuZCBmdXJ0aGVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gICA1Olx0XHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXG4gICA2Olx0XHRkZXBlbmRzIG9uIChTUEkgfHwgTU1DKVxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBTaWxpY29ucyBMYWJzIFdGeHh4IHNlcmllcyAoV0YyMDAgYW5kIGZ1cnRoZXIpXG4gICA5Olx0XHQgIGNoaXBzZXRzLiBUaGlzIGNoaXAgY2FuIGJlIGZvdW5kIG9uIFNQSSBvciBTRElPIGJ1c2VzLlxuICAxMDpcdFxuICAxMTpcdFx0ICBTaWxhYnMgZG9lcyBub3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQuIFNvLCB0byBhdm9pZCBjb25mbGljdHMsXG4gIDEyOlx0XHQgIHRoZSBkcml2ZXIgd29uJiMzOTt0IHByb2JlIHRoZSBkZXZpY2UgaWYgaXQgaXMgbm90IGFsc28gZGVjbGFyZWQgaW4gdGhlXG4gIDEzOlx0XHQgIERldmljZSBUcmVlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqU0RJTyBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFNESU8gZHJpdmVyIHNpdHVhdGlvbi4gS2NvbmZpZyBpcyBwb2ludGluZyBtZSBkaXJlY3RseSB0byBsaW5lcyAxMS0xMywgYW5kIGl0IHNvdW5kcyBsaWtlIFNpbGFicyBoYXMgYSBsZXNzLXRoYW4taWRlYWwgU0RJTyB2ZW5kb3IgSUQgc2l0dWF0aW9uLiBUaGUgZ2lzdCBpcywgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cywgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiAqdHJ5KiB0byBwcm9iZSBhIGRldmljZSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2FmZWd1YXJkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjbGFzaGVzLgoKTm93LCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgcHJvYmluZyBhbmQgYmluZGluZyBhY3R1YWxseSB3b3JrcywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGhhbmRsaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBiaW5kaW5nIG1lY2hhbmlzbXMsIHRoZSBEZXZpY2UgVHJlZSBpbnRlcmFjdGlvbiwgYW5kIGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgd2hldGhlciBpdCAqc2hvdWxkKiBldmVuIGF0dGVtcHQgdG8gYXR0YWNoIHRvIGEgZGV2aWNlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IEtjb25maWcgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXNlIHNvdXJjZXMgaGF2ZSB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0c3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuIDI0MjpcdHtcbiAyNDM6XHRcdGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2ZnVuYy1cdTAwM2VkZXYpO1xuIDI0NDpcdFx0bW1jX3BtX2ZsYWdfdCBwbV9mbGFnID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpO1xuIDI0NTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGZ1bmMtXHUwMDNlZGV2Lm9mX25vZGU7XG4gMjQ2Olx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzO1xuIDI0NzpcdFx0aW50IHJldDtcbiAyNDg6XHRcbiAyNDk6XHRcdGlmIChmdW5jLVx1MDAzZW51bSAhPSAxKSB7XG4gMjUwOlx0XHRcdGRldl9lcnIoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O1NESU8gZnVuY3Rpb24gbnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hpcD8pXFxuXCYjMzQ7LFxuIDI1MTpcdFx0XHRcdGZ1bmMtXHUwMDNlbnVtKTtcbiAyNTI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHRpZiAoIXBkYXRhKSB7XG4gMjU2Olx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtubyBjb21wYXRpYmxlIGRldmljZSBmb3VuZCBpbiBEVFxcblwmIzM0Oyk7XG4gMjU3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI1ODpcdFx0fVxuIDI1OTpcdFxuIDI2MDpcdFx0YnVzID0gZGV2bV9remFsbG9jKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xuIDI2MTpcdFx0aWYgKCFidXMpXG4gMjYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI2MzpcdFxuIDI2NDpcdFx0YnVzLVx1MDAzZWZ1bmMgPSBmdW5jO1xuIDI2NTpcdFx0YnVzLVx1MDAzZW9mX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTtcbiAyNjY6XHRcdHNkaW9fc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcbiAyNjc6XHRcbiAyNjg6XHRcdHNkaW9fY2xhaW1faG9zdChmdW5jKTtcbiAyNjk6XHRcdHJldCA9IHNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7XG4gMjcwOlx0XHQvKiBCbG9jayBvZiA2NCBieXRlcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIDUxMkIgZm9yIGZyYW1lIHNpemVzIFx1MDAzYyA0ayAqL1xuIDI3MTpcdFx0c2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCA2NCk7XG4gMjcyOlx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAyNzM6XHRcdGlmIChyZXQpXG4gMjc0Olx0XHRcdHJldHVybiByZXQ7XG4gMjc1Olx0XG4gMjc2Olx0XHRidXMtXHUwMDNlY29yZSA9IHdmeF9pbml0X2NvbW1vbihcdTAwMjZmdW5jLVx1MDAzZWRldiwgcGRhdGEsIFx1MDAyNndmeF9zZGlvX2h3YnVzX29wcywgYnVzKTtcbiAyNzc6XHRcdGlmICghYnVzLVx1MDAzZWNvcmUpIHtcbiAyNzg6XHRcdFx0cmV0ID0gLUVJTztcbiAyNzk6XHRcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gMjgwOlx0XHR9XG4gMjgxOlx0XG4gMjgyOlx0XHRidXMtXHUwMDNlY29yZS1cdTAwM2Vwb2xsX2lycSA9ICEhYnVzLVx1MDAzZW9mX2lycTtcbiAyODM6XHRcdHJldCA9IHdmeF9wcm9iZShidXMtXHUwMDNlY29yZSk7XG4gMjg0Olx0XHRpZiAocmV0KVxuIDI4NTpcdFx0XHRnb3RvIHNkaW9fcmVsZWFzZTtcbiAyODY6XHRcbiAyODc6XHRcdGlmIChwbV9mbGFnIFx1MDAyNiBNTUNfUE1fS0VFUF9QT1dFUilcbiAyODg6XHRcdFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShcdTAwMjZmdW5jLVx1MDAzZWRldiwgdHJ1ZSk7XG4gMjg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIHdvcmtpbmcgdGhyb3VnaCB0aGlzIHN5c3RlbSwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYW5vdGhlciBrZXkgcGllY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1BJIGJ1cyBpcyBiZWluZyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBidXNfc3BpLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgU1BJIGRyaXZlciBjb2RlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGVpciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRoaW5ncyBsaWtlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIGVycm9yIGNoZWNraW5nLCBhbmQgY2xvY2sgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBlZmZpY2llbmN5IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFNQSSBpbnRlcmZhY2UuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy5cbiAgIDY6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFNhZ3JhZCBJbmMuXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxuICAgODpcdCAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O2J1cy5oXCYjMzQ7XG4gIDE5Olx0I2luY2x1ZGUgXCYjMzQ7d2Z4LmhcJiMzNDtcbiAgMjA6XHQjaW5jbHVkZSBcJiMzNDtod2lvLmhcJiMzNDtcbiAgMjE6XHQjaW5jbHVkZSBcJiMzNDttYWluLmhcJiMzNDtcbiAgMjI6XHQjaW5jbHVkZSBcJiMzNDtiaC5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBTRVRfV1JJVEUgMHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqL1xuICAyNTpcdCNkZWZpbmUgU0VUX1JFQUQgMHg4MDAwICAgICAgICAgLyogdXNhZ2U6IG9yIG9wZXJhdGlvbiAqL1xuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XG4gIDI4Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDI5Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3Zngvd2YyMDAucGRzXCYjMzQ7LFxuICAzMDpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgMzE6XHR9O1xuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkNDAwMWEgPSB7XG4gIDM0Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDM1Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkNDAwMWEucGRzXCYjMzQ7LFxuICAzNjpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgMzc6XHR9O1xuICAzODpcdFxuICAzOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyMmEgPSB7XG4gIDQwOlx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQxOlx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyMmEucGRzXCYjMzQ7LFxuICA0MjpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XG4gIDQ2Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQ3Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyM2EucGRzXCYjMzQ7LFxuICA0ODpcdFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcbiAgNDk6XHR9O1xuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGJ1c19zcGkuYyoqCgpPa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIFNQSSBpc3N1ZS4gRmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgYnVzX3NwaS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggdGhlIFNQSSBidXMgaXMgZGVmaW5lZCwgc28gaWYgdGhlcmUmIzM5O3MgYSBjb21tdW5pY2F0aW9uIGdsaXRjaCwgdGhhdCYjMzk7cyB0aGUgcHJpbWUgc3VzcGVjdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcm9iZSBmdW5jdGlvbmFsaXR5IHRoZXJlIOKAkyBtYWtlIHN1cmUgdGhlIGluaXRpYWxpemF0aW9uLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgdHJhbnNmZXIgbWVjaGFuaXNtcyBhcmUgYWxsIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsb2dpYyBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgc291bmQ7IGFyZSB0aGUgZXJyb3IgZmxhZ3MgYmVpbmcgc2V0IGNvcnJlY3RseSwgYW5kIGlzIHRoZSByZWNvdmVyeSBwcm9jZXNzIHJvYnVzdD8gR290IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSB0aW1pbmcgY29uc3RyYWludHMgYXJlIGJlaW5nIG1ldCB0b287IG1heWJlIHRoZSBjbG9jayBzcGVlZCBpcyB0b28gZmFzdCBmb3IgdGhlIHRhcmdldCBkZXZpY2Ugb3IgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgY2hpcCBzZWxlY3QuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBTUEkgcmVnaXN0ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHByb2JlIGlzIHJlYWxseSBkb2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHJldHVybiBBTElHTihzaXplLCA0KTtcbiAxODE6XHR9XG4gMTgyOlx0XG4gMTgzOlx0c3RhdGljIHZvaWQgd2Z4X3NwaV9zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcbiAxODQ6XHR7XG4gMTg1Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBwcml2O1xuIDE4NjpcdFxuIDE4NzpcdFx0ZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgZW5hYmxlZCk7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X2h3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9IHtcbiAxOTE6XHRcdC5jb3B5X2Zyb21faW8gICAgPSB3Znhfc3BpX2NvcHlfZnJvbV9pbyxcbiAxOTI6XHRcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc3BpX2NvcHlfdG9faW8sXG4gMTkzOlx0XHQuaXJxX3N1YnNjcmliZSAgID0gd2Z4X3NwaV9pcnFfc3Vic2NyaWJlLFxuIDE5NDpcdFx0LmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLFxuIDE5NTpcdFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zcGlfbG9jayxcbiAxOTY6XHRcdC51bmxvY2sgICAgICAgICAgPSB3Znhfc3BpX3VubG9jayxcbiAxOTc6XHRcdC5hbGlnbl9zaXplICAgICAgPSB3Znhfc3BpX2FsaWduX3NpemUsXG4gMTk4Olx0XHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NwaV9zZXRfd2FrZXVwLFxuIDE5OTpcdH07XG4gMjAwOlx0XG4gMjAxOlx0c3RhdGljIGludCB3Znhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIDIwMjpcdHtcbiAyMDM6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xuIDIwNDpcdFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIwNzpcdFx0XHRyZXR1cm4gMDtcbiAyMDg6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnVzLVx1MDAzZWNvcmUtXHUwMDNlaGlmLmJoKTtcbiAyMDk6XHRcdHJldHVybiBlbmFibGVfaXJxX3dha2UoZnVuYy1cdTAwM2VpcnEpO1xuIDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW50IHdmeF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiAyMTM6XHR7XG4gMjE0Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYyA9IHRvX3NwaV9kZXZpY2UoZGV2KTtcbiAyMTU6XHRcbiAyMTY6XHRcdGlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSlcbiAyMTc6XHRcdFx0cmV0dXJuIDA7XG4gMjE4Olx0XHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShmdW5jLVx1MDAzZWlycSk7XG4gMjE5Olx0fVxuIDIyMDpcdFxuIDIyMTpcdHN0YXRpYyBpbnQgd2Z4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYylcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhO1xuIDIyNDpcdFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzO1xuIDIyNTpcdFx0aW50IHJldDtcbiAyMjY6XHRcbiAyMjc6XHRcdGlmICghZnVuYy1cdTAwM2ViaXRzX3Blcl93b3JkKVxuIDIyODpcdFx0XHRmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgPSAxNjtcbiAyMjk6XHRcdHJldCA9IHNwaV9zZXR1cChmdW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggYSB3aXJlbGVzcyBmaXJtd2FyZSBkcml2ZXIgKHdmeCkuCgoqKkRpdmluZyBpbnRvIHRoZSBgd2Z4X3NwaV9wcm9iZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayB0aGlzIG9wZW4uICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgd2Z4X3NwaV9wcm9iZWAmIzM0Oy4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGxpa2VseSBiZWVuIHdvcmtpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyB3aXJlbGVzcyBpbnRlcmZhY2UgYW5kIEkmIzM5O20gZm9jdXNlZCBvbiB0aGlzIHByb2JlIGZ1bmN0aW9uLiBgd2Z4X3NwaV9wcm9iZWAgaXMga2V5LCBpdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdOKAmXMgdGhlIGdhdGVrZWVwZXIsIHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgYW5kIGJyaW5naW5nIHVwIHRoZSBTUEkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB3Znggd2lyZWxlc3MgY2hpcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFmdGVyIHRoZSBpbml0aWFsIHBhcnQgSSYjMzk7dmUgYmVlbiBzdHVkeWluZy4gV2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgc3RlcHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3M/IFdoYXQgY29uZmlndXJhdGlvbiBkYXRhIGlzIGJlaW5nIGxvYWRlZD8gSXMgdGhlcmUgYW55IHNwZWNpZmljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHBvd2VyLXVwIHNlcXVlbmNlcyBvciByZWdpc3RlciBzZXR0aW5ncz8gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHN0cmF0ZWd5IGFuZCBkZWJ1ZyBhbnkgaXNzdWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBJIHJlcXVpcmUgdG8gY29udGludWUgdG8gd29yayBvbiBteSBwcm9qZWN0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRpZiAocmV0KVxuIDIzMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIzMjpcdFx0cGRhdGEgPSAoc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICopc3BpX2dldF9kZXZpY2VfaWQoZnVuYyktXHUwMDNlZHJpdmVyX2RhdGE7XG4gMjMzOlx0XHRpZiAoIXBkYXRhKSB7XG4gMjM0Olx0XHRcdGRldl9lcnIoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O3VuYWJsZSB0byByZXRyaWV2ZSBkcml2ZXIgZGF0YSAocGxlYXNlIHJlcG9ydClcXG5cJiMzNDspO1xuIDIzNTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyMzY6XHRcdH1cbiAyMzc6XHRcbiAyMzg6XHRcdC8qIFRyYWNlIGJlbG93IGlzIGFsc28gZGlzcGxheWVkIGJ5IHNwaV9zZXR1cCgpIGlmIGNvbXBpbGVkIHdpdGggREVCVUcgKi9cbiAyMzk6XHRcdGRldl9kYmcoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O1NQSSBwYXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxcblwmIzM0OyxcbiAyNDA6XHRcdFx0c3BpX2dldF9jaGlwc2VsZWN0KGZ1bmMsIDApLCBmdW5jLVx1MDAzZW1vZGUsIGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCwgZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHopO1xuIDI0MTpcdFx0aWYgKGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCAhPSAxNiBcdTAwMjZcdTAwMjYgZnVuYy1cdTAwM2ViaXRzX3Blcl93b3JkICE9IDgpXG4gMjQyOlx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDt1bnVzdWFsIGJpdHMvd29yZCB2YWx1ZTogJWRcXG5cJiMzNDssIGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCk7XG4gMjQzOlx0XHRpZiAoZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHogXHUwMDNlIDUwMDAwMDAwKVxuIDI0NDpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7JWRIeiBpcyBhIHZlcnkgaGlnaCBzcGVlZFxcblwmIzM0OywgZnVuYy1cdTAwM2VtYXhfc3BlZWRfaHopO1xuIDI0NTpcdFxuIDI0NjpcdFx0YnVzID0gZGV2bV9remFsbG9jKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xuIDI0NzpcdFx0aWYgKCFidXMpXG4gMjQ4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI0OTpcdFx0YnVzLVx1MDAzZWZ1bmMgPSBmdW5jO1xuIDI1MDpcdFx0aWYgKGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCA9PSA4IHx8IElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcbiAyNTE6XHRcdFx0YnVzLVx1MDAzZW5lZWRfc3dhYiA9IHRydWU7XG4gMjUyOlx0XHRzcGlfc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdGJ1cy1cdTAwM2VncGlvX3Jlc2V0ID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LCBHUElPRF9PVVRfTE9XKTtcbiAyNTU6XHRcdGlmIChJU19FUlIoYnVzLVx1MDAzZWdwaW9fcmVzZXQpKVxuIDI1NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihidXMtXHUwMDNlZ3Bpb19yZXNldCk7XG4gMjU3Olx0XHRpZiAoIWJ1cy1cdTAwM2VncGlvX3Jlc2V0KSB7XG4gMjU4Olx0XHRcdGRldl93YXJuKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtncGlvIHJlc2V0IGlzIG5vdCBkZWZpbmVkLCB0cnlpbmcgdG8gbG9hZCBmaXJtd2FyZSBhbnl3YXlcXG5cJiMzNDspO1xuIDI1OTpcdFx0fSBlbHNlIHtcbiAyNjA6XHRcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUoYnVzLVx1MDAzZWdwaW9fcmVzZXQsIFwmIzM0O3dmeCByZXNldFwmIzM0Oyk7XG4gMjYxOlx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXHUwMDNlZ3Bpb19yZXNldCwgMSk7XG4gMjYyOlx0XHRcdHVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7XG4gMjYzOlx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXHUwMDNlZ3Bpb19yZXNldCwgMCk7XG4gMjY0Olx0XHRcdHVzbGVlcF9yYW5nZSgyMDAwLCAyNTAwKTtcbiAyNjU6XHRcdH1cbiAyNjY6XHRcbiAyNjc6XHRcdGJ1cy1cdTAwM2Vjb3JlID0gd2Z4X2luaXRfY29tbW9uKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBwZGF0YSwgXHUwMDI2d2Z4X3NwaV9od2J1c19vcHMsIGJ1cyk7XG4gMjY4Olx0XHRpZiAoIWJ1cy1cdTAwM2Vjb3JlKVxuIDI2OTpcdFx0XHRyZXR1cm4gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydCBhbmFseXppbmcgdGhlIHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBOZXh0IFN0ZXBzIGluIGB3Znhfc3BpX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gYW50aWNpcGF0ZSB0aGUgc3Vic2VxdWVudCBhY3Rpb25zIHdpdGhpbiB0aGUgYHdmeF9zcGlfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgZHJpdmVyLCBwcm9iYWJseSBmb3IgYSB3aXJlbGVzcyBvciBuZXR3b3JrIGRldmljZSB1c2luZyBhbiBTUEkgKFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSkgYnVzLiBUaGUgcHJvYmUgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0byBpbml0aWFsaXplIGFuZCBjb25uZWN0IHRvIHRoZSBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aGlua2luZyBpcywgd2hhdCBjcnVjaWFsIHN0ZXBzIHR5cGljYWxseSBoYXBwZW4gKmFmdGVyKiBhIHByb2JlPwoKRmlyc3QsIEkmIzM5O2QgZXhwZWN0IGFuIGF0dGVtcHQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgU1BJIGRldmljZTogc2VuZGluZyBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgcGVyaGFwcyByZWFkaW5nIGl0cyBpZGVudGlmaWNhdGlvbiwgYW5kIHZlcmlmeWluZyBpdHMgcHJlc2VuY2UuIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRoZSBleGNoYW5nZSBvZiBkYXRhOiBjaGVja2luZyBmb3IgY29ycmVjdCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjb21tdW5pY2F0aW9uIGxpbmVzLCB0aGVuIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UuIFRoZSBleGFjdCBzZXF1ZW5jZSB3aWxsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHNvIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJucywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgdGltZW91dHMuCgpOZXh0LCBJIGFudGljaXBhdGUgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBUaGlzIG1pZ2h0IGluY2x1ZGUgbWVtb3J5IGZvciBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIGFuZCBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAoaWYgdGhpcyBpcyBhIG5ldHdvcmsgaW50ZXJmYWNlKS4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIGNoZWNrcyBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcuCgpCZXlvbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBzdGVwcyBpbnZvbHZpbmcgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgb3IgY2xvY2sgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBuZWVkIHRvIGVuYWJsZSBwb3dlciBkb21haW5zLCBjb25maWd1cmUgY2xvY2tzIGZvciB0aGUgU1BJIGJ1cyBpdHNlbGYsIG9yIGZvciB0aGUgZGV2aWNlJiMzOTtzIGludGVybmFsIGxvZ2ljPyBUaGVzZSBhcmUgY29tbW9uIHByb2JlIGFjdGlvbnMuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHN1YnN5c3RlbXMuIFdpbGwgdGhlcmUgYmUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0d29yayBzdGFjaywgb3Igd2l0aCBhbnkgb3RoZXIgcmVsZXZhbnQgZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgZGVwZW5kZW5jaWVzIGludm9sdmVkPyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdXBwb3NlZCogdG8gZG8sIGJhc2VkIG9uIGl0cyBjb250ZXh0LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciB3aGF0IEkgZXhwZWN0IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XG4gMjcxOlx0XHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIDI3MjpcdFx0aWYgKHJldClcbiAyNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNzQ6XHRcbiAyNzU6XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHRydWUpO1xuIDI3NjpcdFx0cmV0dXJuIDA7XG4gMjc3Olx0fVxuIDI3ODpcdFxuIDI3OTpcdHN0YXRpYyB2b2lkIHdmeF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHNwaV9nZXRfZHJ2ZGF0YShmdW5jKTtcbiAyODI6XHRcbiAyODM6XHRcdHdmeF9yZWxlYXNlKGJ1cy1cdTAwM2Vjb3JlKTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0LyogRm9yIGR5bmFtaWMgZHJpdmVyIGJpbmRpbmcsIGtlcm5lbCBkb2VzIG5vdCB1c2UgT0YgdG8gbWF0Y2ggZHJpdmVyLiBJdCBvbmx5XG4gMjg3Olx0ICogdXNlIG1vZGFsaWFzIGFuZCBtb2RhbGlhcyBpcyBhIGNvcHkgb2YgJiMzOTtjb21wYXRpYmxlJiMzOTsgRFQgbm9kZSB3aXRoIHZlbmRvclxuIDI4ODpcdCAqIHN0cmlwcGVkLlxuIDI4OTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnByb2JlKiBTUEkgb3IgU0RJTyBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gdGhlIGB3ZnhgIGRyaXZlciwgd2l0aGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZHJpdmVycyBkZXNpZ25lZCBmb3IgKmRlZGljYXRlZCogcGh5c2ljYWwgY2hpcHMsIGxpa2UgdGhhdCBTaWxhYnMgV0YyMDAsIG9mdGVuIHJlbHkgb24gcGh5c2ljYWwgU1BJL1NESU8gaGFyZHdhcmUgYW5kIHNwZWNpZmljIGJvYXJkIERldmljZSBUcmVlIChEVCkgY29uZmlndXJhdGlvbnMuIFN0YW5kYXJkIGVtdWxhdGVkIGhhcmR3YXJlLCBsaWtlIGEgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSwgdXN1YWxseSB3b24mIzM5O3QgY3V0IGl0LgoKUmlnaHQsIGxldCYjMzk7cyByZWZlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gd2hhdCBtYWtlcyBhIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCB0aGUgc2VjdGlvbnMgdGhhdCBtZW50aW9uOgoKKiAgIERvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLW9ubHkgY2hhbmdlcy4gVGhhdCYjMzk7cyBhIG5vLWdvLCBvZiBjb3Vyc2UuCiogICBEZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzLiBHb3QgaXQuCiogICBDaGFuZ2VzIHRvIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIE9idmlvdXMuCiogICAqQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyogdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaXMga2V5LiBJZiBhIGNvZGUgcGF0aCBuZWVkcyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIGl0JiMzOTtzIG5vdCB3b3J0aCBteSB0aW1lLgoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoLCBTbWFydE5JQ3MsIG9yIEdQVXMgcmVxdWlyaW5nICpwaHlzaWNhbCogUENJZSBjYXJkcy4gQWdhaW4sIG5vIHZpcnR1YWwgZXF1aXZhbGVudCwgc28gSSBkb24mIzM5O3QgY2FyZS4KKiAgIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBhcmUgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgdW5iaW5kLiBOb3QgcmVsZXZhbnQgdG8gdHlwaWNhbCBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgd2Z4YC4gVGhhdCYjMzk7cyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLCB1c2luZyBTUEkvU0RJTy4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gSSAqcmVhY2gqIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoZXJlIGFueSB2aXJ0dWFsIG9yIHNvZnR3YXJlLWJhc2VkIGludGVyZmFjZSwgYSBVU0IgaW50ZXJmYWNlIGZvciBpbnN0YW5jZSwgdGhhdCB3b3VsZCBsZXQgbWUgaW50ZXJhY3Qgd2l0aCBpdCBpbiBRRU1VPyBJIG5lZWQgdG8ga25vdyBpZiB0aGUgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQsIGV2ZW4gaWYgaW1wZXJmZWN0bHkuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB2aXJ0dWFsaXplZCBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHQjIE5lY2Vzc2FyeSBmb3IgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICAgNDpcdENGTEFHU19kZWJ1Zy5vID0gLUkkKHNyYylcbiAgIDU6XHRcbiAgIDY6XHR3ZngteSA6PSBcXFxuICAgNzpcdFx0YmgubyBcXFxuICAgODpcdFx0aHdpby5vIFxcXG4gICA5Olx0XHRmd2lvLm8gXFxcbiAgMTA6XHRcdGhpZl90eF9taWIubyBcXFxuICAxMTpcdFx0aGlmX3R4Lm8gXFxcbiAgMTI6XHRcdGhpZl9yeC5vIFxcXG4gIDEzOlx0XHRxdWV1ZS5vIFxcXG4gIDE0Olx0XHRkYXRhX3R4Lm8gXFxcbiAgMTU6XHRcdGRhdGFfcngubyBcXFxuICAxNjpcdFx0c2Nhbi5vIFxcXG4gIDE3Olx0XHRzdGEubyBcXFxuICAxODpcdFx0a2V5Lm8gXFxcbiAgMTk6XHRcdG1haW4ubyBcXFxuICAyMDpcdFx0ZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBXRlggV2lyZWxlc3MgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTaWxhYnMgV0ZYIHdpcmVsZXNzIGRyaXZlcnMgYmV0dGVyLiBNeSBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCYjMzk7cyBleHBsb3JlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9gLiBJIHdhbnQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgY29kZSBvcmdhbml6YXRpb24sIGFuZCBpZGVudGlmeSB0aGUga2V5IG1vZHVsZXMgYW5kIGZpbGVzIGludm9sdmVkLiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHdmeC0kKENPTkZJR19TUEkpICYjNDM7PSBidXNfc3BpLm9cbiAgMjI6XHQjIFdoZW4gQ09ORklHX01NQyA9PSBtLCBhcHBlbmQgdG8gJiMzOTt3ZngteSYjMzk7IChhbmQgbm90IHRvICYjMzk7d2Z4LW0mIzM5OylcbiAgMjM6XHR3ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgJiM0Mzs9IGJ1c19zZGlvLm9cbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfV0ZYKSAmIzQzOz0gd2Z4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjYKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcsIGFuZCBoZXJlJiMzOTtzIHdoeS4gSSYjMzk7bSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIC8gV0Z4IFdpRmkgY2hpcHMsIGFuZCBpbXBvcnRhbnRseSwgdGhlc2UgYXJlIGNvbm5lY3RlZCB2aWEgU1BJIG9yIFNESU8uCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgdGhhdCBJIHR5cGljYWxseSB3b3JrIHdpdGgsIGxpa2Ugc3l6a2FsbGVyIHJ1bm5pbmcgb24geDg2XzY0IG9yIGFybTY0IHdpdGhpbiBRRU1VIG9yIEdDRS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhbmQgY29uZmlybWF0aW9uIHZpYSBteSByZXNlYXJjaCB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwLiBGdXJ0aGVybW9yZSwgU0RJTyBhbmQgU1BJIFdpRmkgY2hpcHMgb2YgdGhpcyB0eXBlIHR5cGljYWxseSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNvbWUgY3VzdG9tIERldmljZSBUcmVlIChEVCkgZW11bGF0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHNldHVwcyAqZG9uJiMzOTt0KiBvZmZlciB0aGF0LCBtZWFuaW5nIEkgY2FuJiMzOTt0IHRyaWdnZXIgdGhlc2UgY29kZSBwYXRocyB3aXRoIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBgd2Z4X3NkaW9fcHJvYmVgIGZ1bmN0aW9uLiBUaGUgY29kZSBjaGVja3MgZm9yIGEgJiMzNDtjb21wYXRpYmxlIGRldmljZSYjMzQ7IGluIHRoZSBEVCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBwcmVzZW50LCBpdCBpc3N1ZXMgYSB3YXJuaW5nIGFuZCByZXR1cm5zIC1FTk9ERVYuIENyaXRpY2FsbHksIGl0IHRoZW4gc2F5cyB0aGlzIGRyaXZlciB3aWxsICpvbmx5KiBwcm9iZSBpZiB0aGUgaGFyZHdhcmUgaXMgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgRFQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGRlcGVuZGVuY3kgb24gc3BlY2lmaWMgaGFyZHdhcmUgZGVzY3JpcHRpb25zLiBTaWxpY29uIExhYnMgZG9lc24mIzM5O3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQsIHNvIGl0IGlzIHJlcXVpcmVkLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0ICpuZWVkcyogZWl0aGVyIHBoeXNpY2FsIFdGMjAwIGhhcmR3YXJlIG9yIGF0IGxlYXN0IERULWJhc2VkIGhhcmR3YXJlIGRlZmluaXRpb24gZm9yIHByb2JpbmcgdG8gZXZlbiB0YWtlIHBsYWNlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGluaGVyZW50bHkgdGllZCB0byB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0aGF0IGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIGFzIHdlbGw6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbGAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jYCwgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AuIFRoZXkmIzM5O3JlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgd2Z4YCBkcml2ZXIgY29kZSBvciBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIHN0cmVuZ3RoZW5pbmcgdGhpcyBhc3Nlc3NtZW50LiBUaGUgY2hhbmdlcyBpbiBgYmguY2AgYXJlIHNpbXBseSBjb21tZW50cywgYW5kIGluIGBidXNfc2Rpby5jYCBhbmQgYG1haW4uY2AgaXQmIzM5O3MgcmVsYXRpbmcgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBHaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSBkb24mIzM5O3Qgc2VlIGFueSBwb3NzaWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgdXNpbmcgdHlwaWNhbCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgYmFzZWQgb24gdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFNpbGljb24gTGFicyBXRjIwMCB3aXJlbGVzcyBkcml2ZXIgKHdmeCkgb3ZlciBTUEkvU0RJTywgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIChvciBEVCBlbnRyaWVzKSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIE5vIGBFbmFibGVDb25maWdzYCBvciBgRm9jdXNTeW1ib2xzYCBhcmUgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAod2Z4KSBmb3IgU1BJL1NESU8gYW5kIGl0cyBEZXZpY2UgVHJlZSBkb2N1bWVudGF0aW9uLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChlLmcuIFFFTVUvR0NFKSwgYW5kIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgdmlhIHN0YW5kYXJkIHZpcnR1YWwvc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjI3LjAyMDE4NjE3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg2OTk2MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzc6MjcuMDIwMTkyMDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5ODA4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWY0MmU2ZjFiOTAxYzI4NmQzODk1Mjc2ODEyYTU0MGMzNjkzMDkzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjM3OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWxcXG5pbmRleCA2YzA4ODhhZTRjNGUxLi42MGRmZTI1N2VhZGMyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWxcXG5AQCAtNTAsNiArNTAsOSBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICB1c2VkLCB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlIFxcXCJpbi1iYW5kXFxcIlxcbiAgICAgICBpbnRlcnJ1cHQgcHJvdmlkZWQgYnkgdGhlIFNESU8gYnVzIGlzIHVzZWQgdW5sZXNzIGFuIGludGVycnVwdCBpcyBkZWZpbmVkXFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cXG4rXFxuKyAgICAgIFRoZSBoYXJkd2FyZSBzdWZmZXJzIGZyb20gYSBsaW1pdGF0aW9uIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHdpdGhcXG4rICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXFxuICAgICBtYXhJdGVtczogMVxcbiBcXG4gICByZXNldC1ncGlvczpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5jXFxuaW5kZXggMjFkZmRjZjljYzI3My4uMDA3MTY1OWJjOWM5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcXG5AQCAtMjg0LDEwICsyODQsMTAgQEAgdm9pZCB3ZnhfYmhfcmVxdWVzdF90eChzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gfVxcbiBcXG4gLyogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbCByZWdpc3RlciBhbmQgc2ltdWxhdGVcXG4tICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXFxuKyAqIGFuIElSUSB3aGVuIGFuIGV2ZW50IGhhcHBlbmVkLlxcbiAgKlxcbi0gKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIElSUSBpc1xcbi0gKiBsb3N0LiBTbywgdXNlIHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IChvbmx5IGR1aW5nIGRldmljZSBpbml0aWFsaXNhdGlvbikuXFxuKyAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9sIHJlZ2lzdGVyLCB0aGUgZGV2aWNlIGlzXFxuKyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuXFxuICAqL1xcbiB2b2lkIHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcXG5pbmRleCBhYjA3OTNiOTkwOGY0Li4xY2EyY2MyNjJmZWIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xcbkBAIC0yNzksNiArMjc5LDcgQEAgc3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlcXG4gXFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIFxcdH1cXG4gXFxuK1xcdGJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cXHUwMDNlb2ZfaXJxO1xcbiBcXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVxcdTAwM2Vjb3JlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG5pbmRleCBkZGEzNmU0MWVlZDEzLi5kYTMwZThmNDgxYWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG5AQCAtMzYyLDcgKzM2Miw2IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdCAqL1xcbiBcXHRncGlvX3NhdmVkID0gd2Rldi1cXHUwMDNlcGRhdGEuZ3Bpb193YWtldXA7XFxuIFxcdHdkZXYtXFx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gTlVMTDtcXG4tXFx0d2Rldi1cXHUwMDNlcG9sbF9pcnEgPSB0cnVlO1xcbiBcXG4gXFx0d2Rldi1cXHUwMDNlYmhfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIndmeF9iaF93cVxcXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xcbiBcXHRpZiAoIXdkZXYtXFx1MDAzZWJoX3dxKVxcbkBAIC0zNzQsMTIgKzM3MywxOSBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGJoX3VucmVnaXN0ZXI7XFxuIFxcbi1cXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XFxuK1xcdGlmICh3ZGV2LVxcdTAwM2Vwb2xsX2lycSkge1xcbitcXHRcXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNndkZXYtXFx1MDAzZWZpcm13YXJlX3JlYWR5LCAxICogSFopO1xcbiBcXHRpZiAoZXJyID09IDApIHtcXG4gXFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxcXFxuXFxcIik7XFxuIFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXFxuQEAgLTM5OSwxMiArNDA1LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdFxcdGRldl9lcnIod2Rldi1cXHUwMDNlZGV2LCBcXFwidW5zdXBwb3J0ZWQgZmlybXdhcmUgQVBJIHZlcnNpb24gKGV4cGVjdCAxIHdoaWxlIGZpcm13YXJlIHJldHVybnMgJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcXG4gXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiBcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkge1xcbkBAIC00MjAsMTIgKzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxcbiBcXHRkZXZfZGJnKHdkZXYtXFx1MDAzZWRldiwgXFxcInNlbmRpbmcgY29uZmlndXJhdGlvbiBmaWxlICVzXFxcXG5cXFwiLCB3ZGV2LVxcdTAwM2VwZGF0YS5maWxlX3Bkcyk7XFxuIFxcdGVyciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3ZGV2KTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FTk9FTlQpXFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIFxcbi1cXHR3ZGV2LVxcdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xcbi1cXHRlcnIgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gYmhfdW5yZWdpc3RlcjtcXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXBvbGxfaXJxKSB7XFxuK1xcdFxcdHdkZXYtXFx1MDAzZXBvbGxfaXJxID0gZmFsc2U7XFxuK1xcdFxcdGVyciA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSB3ZnhfaGlmX3VzZV9tdWx0aV90eF9jb25mKHdkZXYsIHRydWUpO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC00NzQsNyArNDgyLDggQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gaWVlZTgwMjExX3VucmVnaXN0ZXI6XFxuIFxcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXFx1MDAzZWh3KTtcXG4gaXJxX3Vuc3Vic2NyaWJlOlxcbi1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4rXFx0aWYgKCF3ZGV2LVxcdTAwM2Vwb2xsX2lycSlcXG4rXFx0XFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIGJoX3VucmVnaXN0ZXI6XFxuIFxcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVxcdTAwM2ViaF93cSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjI4LjgwMDY1Njg5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY3MDg5NDc2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAod2Z4KSBmb3IgU1BJL1NESU8gYW5kIGl0cyBEZXZpY2UgVHJlZSBkb2N1bWVudGF0aW9uLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChlLmcuIFFFTVUvR0NFKSwgYW5kIGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgdmlhIHN0YW5kYXJkIHZpcnR1YWwvc29mdHdhcmUgZW11bGF0ZWQgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmNDJlNmYxYjkwMWMyODZkMzg5NTI3NjgxMmE1NDBjMzY5MzA5MzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjM3OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuaW5kZXggNmMwODg4YWU0YzRlMS4uNjBkZmUyNTdlYWRjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbFxuQEAgLTUwLDYgKzUwLDkgQEAgcHJvcGVydGllczpcbiAgICAgICB1c2VkLCB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlIFwiaW4tYmFuZFwiXG4gICAgICAgaW50ZXJydXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMgZGVmaW5lZFxuICAgICAgIGluIHRoZSBEZXZpY2UgVHJlZS5cbitcbisgICAgICBUaGUgaGFyZHdhcmUgc3VmZmVycyBmcm9tIGEgbGltaXRhdGlvbiB3aGVuIHRoaXMgcHJvcGVydHkgaXMgdXNlZCB3aXRoXG4rICAgICAgU0RJTy4gT09CIElSUSB3aXRoIFNESU8gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuXG4gICAgIG1heEl0ZW1zOiAxXG4gXG4gICByZXNldC1ncGlvczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbmluZGV4IDIxZGZkY2Y5Y2MyNzMuLjAwNzE2NTliYzljOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguY1xuQEAgLTI4NCwxMCArMjg0LDEwIEBAIHZvaWQgd2Z4X2JoX3JlcXVlc3RfdHgoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gfVxuIFxuIC8qIElmIElSUSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIGFsbG93IHRvIG1hbnVhbGx5IHBvbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHNpbXVsYXRlXG4tICogYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXG4rICogYW4gSVJRIHdoZW4gYW4gZXZlbnQgaGFwcGVuZWQuXG4gICpcbi0gKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIElSUSBpc1xuLSAqIGxvc3QuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgKG9ubHkgZHVpbmcgZGV2aWNlIGluaXRpYWxpc2F0aW9uKS5cbisgKiBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgYSBidWc6IElmIGFuIElSUSByYWlzZSB3aGlsZSBob3N0IHJlYWQgY29udHJvbCByZWdpc3RlciwgdGhlIGRldmljZSBpc1xuKyAqIGxvc3QuIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGluaXRpYWxpemUgdGhlIFNESU8gd2l0aCBvdXQtb2YtYmFuZCBJUlEuXG4gICovXG4gdm9pZCB3ZnhfYmhfcG9sbF9pcnEoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuaW5kZXggYWIwNzkzYjk5MDhmNC4uMWNhMmNjMjYyZmViMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppXG4gXHRcdGdvdG8gc2Rpb19yZWxlYXNlO1xuIFx0fVxuIFxuK1x0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzZGlvX3JlbGVhc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggZGRhMzZlNDFlZWQxMy4uZGEzMGU4ZjQ4MWFkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTM2Miw3ICszNjIsNiBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ICovXG4gXHRncGlvX3NhdmVkID0gd2Rldi1cdTAwM2VwZGF0YS5ncGlvX3dha2V1cDtcbiBcdHdkZXYtXHUwMDNlcGRhdGEuZ3Bpb193YWtldXAgPSBOVUxMO1xuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IHRydWU7XG4gXG4gXHR3ZGV2LVx1MDAzZWJoX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwid2Z4X2JoX3dxXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDApO1xuIFx0aWYgKCF3ZGV2LVx1MDAzZWJoX3dxKVxuQEAgLTM3NCwxMiArMzczLDE5IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4gXG4tXHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4rXHRpZiAod2Rldi1cdTAwM2Vwb2xsX2lycSkge1xuK1x0XHR3ZnhfYmhfcG9sbF9pcnEod2Rldik7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0fVxuK1xuIFx0ZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNndkZXYtXHUwMDNlZmlybXdhcmVfcmVhZHksIDEgKiBIWik7XG4gXHRpZiAoZXJyID09IDApIHtcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxcblwiKTtcbiBcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdC8qIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uICovXG5AQCAtMzk5LDEyICs0MDUsMTIgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXG5cIixcbiBcdFx0XHR3ZGV2LVx1MDAzZWh3X2NhcHMuYXBpX3ZlcnNpb25fbWFqb3IpO1xuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiBcdH1cbiBcbiBcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7XG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwiY2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBidXQgY2FuJ3QgbmVnb3RpYXRlIGl0XFxuXCIpO1xuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4rXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuIFx0aWYgKHdkZXYtXHUwMDNlaHdfY2Fwcy5yZWdpb25fc2VsX21vZGUpIHtcbkBAIC00MjAsMTIgKzQyNiwxNCBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xcblwiLCB3ZGV2LVx1MDAzZXBkYXRhLmZpbGVfcGRzKTtcbiBcdGVyciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3ZGV2KTtcbiBcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU5PRU5UKVxuLVx0XHRnb3RvIGJoX3VucmVnaXN0ZXI7XG4rXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFxuLVx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuLVx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0aWYgKHdkZXYtXHUwMDNlcG9sbF9pcnEpIHtcbitcdFx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuK1x0XHRlcnIgPSB3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBiaF91bnJlZ2lzdGVyO1xuK1x0fVxuIFxuIFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG5AQCAtNDc0LDcgKzQ4Miw4IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gaWVlZTgwMjExX3VucmVnaXN0ZXI6XG4gXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVx1MDAzZWh3KTtcbiBpcnFfdW5zdWJzY3JpYmU6XG4tXHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbitcdGlmICghd2Rldi1cdTAwM2Vwb2xsX2lycSlcbitcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozNzoyOC44MDA2NTg2MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI4MTE4NDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNpbGFicyBXRlggRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgZ2l0IGRpZmYgZm9jdXNlZCBvbiB0aGUgU2lsYWJzIFdGWCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgbmF0dXJlIG9mIHRoaXMgZHJpdmVyLiBJcyB0aGlzIHNvbWV0aGluZyB0aGF0J3MgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHN0YW5kYXJkIHBpZWNlIG9mIGNvZGUgdGhhdCBjb3VsZCBiZSB0ZXN0ZWQgZWZmZWN0aXZlbHkgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IG9yIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGxveW1lbnQgY29udGV4dCBpbXBhY3RzIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIHRyYW5zcG9ydC4gV2hhdCBidXMgaXMgdGhpcyBgd2Z4YCBkcml2ZXIgdXNpbmc/IFRoZSBidXMgdHlwZSB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIHRoZSBjb21wbGV4aXR5IG9mIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gVGltZSB0byBsb29rIGludG8gdGhhdC5cblxuTm93LCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIHVzZSBteSB0b29scyDigJMgcHJvYmFibHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIEkgbmVlZCBhIHJhcGlkIG92ZXJ2aWV3OiB3aGF0IGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHdoYXQgYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGRyaXZlcj8gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM3OjQ3LjA4MTg0NTA0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdGWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcyBXRjIwMCBhbmQgZnVydGhlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTU1DIHx8ICFNTUMgIyBkbyBub3QgYWxsb3cgV0ZYPXkgaWYgTU1DPW1cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gKFNQSSB8fCBNTUMpXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNpbGljb25zIExhYnMgV0Z4eHggc2VyaWVzIChXRjIwMCBhbmQgZnVydGhlcilcXG4gICA5OlxcdFxcdCAgY2hpcHNldHMuIFRoaXMgY2hpcCBjYW4gYmUgZm91bmQgb24gU1BJIG9yIFNESU8gYnVzZXMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgU2lsYWJzIGRvZXMgbm90IHVzZSBhIHJlbGlhYmxlIFNESU8gdmVuZG9yIElELiBTbywgdG8gYXZvaWQgY29uZmxpY3RzLFxcbiAgMTI6XFx0XFx0ICB0aGUgZHJpdmVyIHdvbid0IHByb2JlIHRoZSBkZXZpY2UgaWYgaXQgaXMgbm90IGFsc28gZGVjbGFyZWQgaW4gdGhlXFxuICAxMzpcXHRcXHQgIERldmljZSBUcmVlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozNzo0Ny4wODE5MDYwNjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk2NDk2MzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqU0RJTyBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBTRElPIGRyaXZlciBzaXR1YXRpb24uIEtjb25maWcgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gbGluZXMgMTEtMTMsIGFuZCBpdCBzb3VuZHMgbGlrZSBTaWxhYnMgaGFzIGEgbGVzcy10aGFuLWlkZWFsIFNESU8gdmVuZG9yIElEIHNpdHVhdGlvbi4gVGhlIGdpc3QgaXMsIHRvIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMsIHRoZSBkcml2ZXIgd29uJ3QgZXZlbiAqdHJ5KiB0byBwcm9iZSBhIGRldmljZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IGRlZmluZWQgaW4gdGhlIERldmljZSBUcmVlLiBUaGF0J3MgYSByZWFzb25hYmxlIHNhZmVndWFyZCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY2xhc2hlcy5cblxuTm93LCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgcHJvYmluZyBhbmQgYmluZGluZyBhY3R1YWxseSB3b3JrcywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgaGFuZGxpbmcgdGhlIHByb2JlIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgYmluZGluZyBtZWNoYW5pc21zLCB0aGUgRGV2aWNlIFRyZWUgaW50ZXJhY3Rpb24sIGFuZCBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHdoZXRoZXIgaXQgKnNob3VsZCogZXZlbiBhdHRlbXB0IHRvIGF0dGFjaCB0byBhIGRldmljZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBLY29uZmlnIHNldHRpbmcuIExldCdzIHNlZSB3aGF0IHRoZXNlIHNvdXJjZXMgaGF2ZSB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4MywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzg6MTMuMDQ2ODcyNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXG4gMjQxOlxcdHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4gMjQyOlxcdHtcXG4gMjQzOlxcdFxcdGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldik7XFxuIDI0NDpcXHRcXHRtbWNfcG1fZmxhZ190IHBtX2ZsYWcgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZnVuYy1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDI0NjpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzO1xcbiAyNDc6XFx0XFx0aW50IHJldDtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZW51bSAhPSAxKSB7XFxuIDI1MDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJTRElPIGZ1bmN0aW9uIG51bWJlciBpcyAlZCB3aGlsZSBpdCBzaG91bGQgYWx3YXlzIGJlIDEgKHVuc3VwcG9ydGVkIGNoaXA/KVxcXFxuXFxcIixcXG4gMjUxOlxcdFxcdFxcdFxcdGZ1bmMtXFx1MDAzZW51bSk7XFxuIDI1MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjUzOlxcdFxcdH1cXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0aWYgKCFwZGF0YSkge1xcbiAyNTY6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIm5vIGNvbXBhdGlibGUgZGV2aWNlIGZvdW5kIGluIERUXFxcXG5cXFwiKTtcXG4gMjU3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyNTg6XFx0XFx0fVxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHRidXMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcXG4gMjYxOlxcdFxcdGlmICghYnVzKVxcbiAyNjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdGJ1cy1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuIDI2NTpcXHRcXHRidXMtXFx1MDAzZW9mX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTtcXG4gMjY2OlxcdFxcdHNkaW9fc2V0X2RydmRhdGEoZnVuYywgYnVzKTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xcbiAyNjk6XFx0XFx0cmV0ID0gc2Rpb19lbmFibGVfZnVuYyhmdW5jKTtcXG4gMjcwOlxcdFxcdC8qIEJsb2NrIG9mIDY0IGJ5dGVzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gNTEyQiBmb3IgZnJhbWUgc2l6ZXMgXFx1MDAzYyA0ayAqL1xcbiAyNzE6XFx0XFx0c2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCA2NCk7XFxuIDI3MjpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcXG4gMjczOlxcdFxcdGlmIChyZXQpXFxuIDI3NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRidXMtXFx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgcGRhdGEsIFxcdTAwMjZ3Znhfc2Rpb19od2J1c19vcHMsIGJ1cyk7XFxuIDI3NzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlY29yZSkge1xcbiAyNzg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMjc5OlxcdFxcdFxcdGdvdG8gc2Rpb19yZWxlYXNlO1xcbiAyODA6XFx0XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRidXMtXFx1MDAzZWNvcmUtXFx1MDAzZXBvbGxfaXJxID0gISFidXMtXFx1MDAzZW9mX2lycTtcXG4gMjgzOlxcdFxcdHJldCA9IHdmeF9wcm9iZShidXMtXFx1MDAzZWNvcmUpO1xcbiAyODQ6XFx0XFx0aWYgKHJldClcXG4gMjg1OlxcdFxcdFxcdGdvdG8gc2Rpb19yZWxlYXNlO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAocG1fZmxhZyBcXHUwMDI2IE1NQ19QTV9LRUVQX1BPV0VSKVxcbiAyODg6XFx0XFx0XFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCB0cnVlKTtcXG4gMjg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozODoxMy4wNDcwMzA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MDk0MDI2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlKipcblxuT2theSwgc28gd2UndmUgYmVlbiB3b3JraW5nIHRocm91Z2ggdGhpcyBzeXN0ZW0sIGFuZCBpdCdzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgYW5vdGhlciBrZXkgcGllY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU1BJIGJ1cyBpcyBiZWluZyBoYW5kbGVkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgYnVzX3NwaS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIFNQSSBkcml2ZXIgY29kZSBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHdlbGwgdGhlaXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGluZ3MgbGlrZSB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LCBlcnJvciBjaGVja2luZywgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24uIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBlZmZpY2llbmN5IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjMyLjY1NjQzNzg5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBTUEkgaW50ZXJmYWNlLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLlxcbiAgIDY6XFx0ICogQ29weXJpZ2h0IChjKSAyMDExLCBTYWdyYWQgSW5jLlxcbiAgIDc6XFx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL3NwaS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcG0uaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFxcImJ1cy5oXFxcIlxcbiAgMTk6XFx0I2luY2x1ZGUgXFxcIndmeC5oXFxcIlxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcImh3aW8uaFxcXCJcXG4gIDIxOlxcdCNpbmNsdWRlIFxcXCJtYWluLmhcXFwiXFxuICAyMjpcXHQjaW5jbHVkZSBcXFwiYmguaFxcXCJcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0I2RlZmluZSBTRVRfV1JJVEUgMHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqL1xcbiAgMjU6XFx0I2RlZmluZSBTRVRfUkVBRCAweDgwMDAgICAgICAgICAvKiB1c2FnZTogb3Igb3BlcmF0aW9uICovXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XFxuICAyODpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDI5OlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3Zngvd2YyMDAucGRzXFxcIixcXG4gIDMwOlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICAzMTpcXHR9O1xcbiAgMzI6XFx0XFxuICAzMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xcbiAgMzQ6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzNTpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDQwMDFhLnBkc1xcXCIsXFxuICAzNjpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgMzc6XFx0fTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ4MDIyYSA9IHtcXG4gIDQwOlxcdFxcdC5maWxlX2Z3ID0gXFxcIndmeC93Zm1fd2YyMDBcXFwiLFxcbiAgNDE6XFx0XFx0LmZpbGVfcGRzID0gXFxcIndmeC9icmQ4MDIyYS5wZHNcXFwiLFxcbiAgNDI6XFx0XFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcXG4gIDQzOlxcdH07XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XFxuICA0NjpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDQ3OlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3ZngvYnJkODAyM2EucGRzXFxcIixcXG4gIDQ4OlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICA0OTpcXHR9O1xcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjMyLjY1NjU5OTUzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzc1MzA2MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJ1c19zcGkuYyoqXG5cbk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgU1BJIGlzc3VlLiBGaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBidXNfc3BpLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTUEkgYnVzIGlzIGRlZmluZWQsIHNvIGlmIHRoZXJlJ3MgYSBjb21tdW5pY2F0aW9uIGdsaXRjaCwgdGhhdCdzIHRoZSBwcmltZSBzdXNwZWN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByb2JlIGZ1bmN0aW9uYWxpdHkgdGhlcmUg4oCTIG1ha2Ugc3VyZSB0aGUgaW5pdGlhbGl6YXRpb24sIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCB0cmFuc2ZlciBtZWNoYW5pc21zIGFyZSBhbGwgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHNlZSBpZiB0aGUgbG9naWMgZm9yIGVycm9yIGhhbmRsaW5nIGlzIHNvdW5kOyBhcmUgdGhlIGVycm9yIGZsYWdzIGJlaW5nIHNldCBjb3JyZWN0bHksIGFuZCBpcyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyByb2J1c3Q/IEdvdCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIGFyZSBiZWluZyBtZXQgdG9vOyBtYXliZSB0aGUgY2xvY2sgc3BlZWQgaXMgdG9vIGZhc3QgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIG9yIHRoZXJlJ3MgYSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgY2hpcCBzZWxlY3QuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBTUEkgcmVnaXN0ZXJzLiBMZXQncyBzZWUgd2hhdCB0aGUgcHJvYmUgaXMgcmVhbGx5IGRvaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM4OjUxLjAzMTkwOTQxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiBBTElHTihzaXplLCA0KTtcXG4gMTgxOlxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0c3RhdGljIHZvaWQgd2Z4X3NwaV9zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcXG4gMTg0OlxcdHtcXG4gMTg1OlxcdFxcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2YnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGVuYWJsZWQpO1xcbiAxODg6XFx0fVxcbiAxODk6XFx0XFxuIDE5MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NwaV9od2J1c19vcHMgPSB7XFxuIDE5MTpcXHRcXHQuY29weV9mcm9tX2lvICAgID0gd2Z4X3NwaV9jb3B5X2Zyb21faW8sXFxuIDE5MjpcXHRcXHQuY29weV90b19pbyAgICAgID0gd2Z4X3NwaV9jb3B5X3RvX2lvLFxcbiAxOTM6XFx0XFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zcGlfaXJxX3N1YnNjcmliZSxcXG4gMTk0OlxcdFxcdC5pcnFfdW5zdWJzY3JpYmUgPSB3Znhfc3BpX2lycV91bnN1YnNjcmliZSxcXG4gMTk1OlxcdFxcdC5sb2NrICAgICAgICAgICAgPSB3Znhfc3BpX2xvY2ssXFxuIDE5NjpcXHRcXHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NwaV91bmxvY2ssXFxuIDE5NzpcXHRcXHQuYWxpZ25fc2l6ZSAgICAgID0gd2Z4X3NwaV9hbGlnbl9zaXplLFxcbiAxOTg6XFx0XFx0LnNldF93YWtldXAgICAgICA9IHdmeF9zcGlfc2V0X3dha2V1cCxcXG4gMTk5OlxcdH07XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgd2Z4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gMjAyOlxcdHtcXG4gMjAzOlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xcbiAyMDQ6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXFxuIDIwNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjA4OlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlaGlmLmJoKTtcXG4gMjA5OlxcdFxcdHJldHVybiBlbmFibGVfaXJxX3dha2UoZnVuYy1cXHUwMDNlaXJxKTtcXG4gMjEwOlxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0c3RhdGljIGludCB3Znhfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYyA9IHRvX3NwaV9kZXZpY2UoZGV2KTtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxODpcXHRcXHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShmdW5jLVxcdTAwM2VpcnEpO1xcbiAyMTk6XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRzdGF0aWMgaW50IHdmeF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMpXFxuIDIyMjpcXHR7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhO1xcbiAyMjQ6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzO1xcbiAyMjU6XFx0XFx0aW50IHJldDtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKCFmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkKVxcbiAyMjg6XFx0XFx0XFx0ZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCA9IDE2O1xcbiAyMjk6XFx0XFx0cmV0ID0gc3BpX3NldHVwKGZ1bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozODo1MS4wMzIwMjQzNTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NTMxNDg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggYSB3aXJlbGVzcyBmaXJtd2FyZSBkcml2ZXIgKHdmeCkuXG5cbioqRGl2aW5nIGludG8gdGhlIGB3Znhfc3BpX3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgdGhpcyBvcGVuLiBcIkxldCdzIHNlZSB0aGUgcmVzdCBvZiBgd2Z4X3NwaV9wcm9iZWBcIi4gVGhhdCdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ3ZlIGxpa2VseSBiZWVuIHdvcmtpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyB3aXJlbGVzcyBpbnRlcmZhY2UgYW5kIEknbSBmb2N1c2VkIG9uIHRoaXMgcHJvYmUgZnVuY3Rpb24uIGB3Znhfc3BpX3Byb2JlYCBpcyBrZXksIGl0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGFuZCBicmluZ2luZyB1cCB0aGUgU1BJIGNvbW11bmljYXRpb24gd2l0aCB0aGUgd2Z4IHdpcmVsZXNzIGNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBhZnRlciB0aGUgaW5pdGlhbCBwYXJ0IEkndmUgYmVlbiBzdHVkeWluZy4gV2hhdCBhcmUgdGhlIHN1YnNlcXVlbnQgc3RlcHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3M/IFdoYXQgY29uZmlndXJhdGlvbiBkYXRhIGlzIGJlaW5nIGxvYWRlZD8gSXMgdGhlcmUgYW55IHNwZWNpZmljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHBvd2VyLXVwIHNlcXVlbmNlcyBvciByZWdpc3RlciBzZXR0aW5ncz8gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZsb3cgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHN0cmF0ZWd5IGFuZCBkZWJ1ZyBhbnkgaXNzdWVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBkZXRhaWxzIEkgcmVxdWlyZSB0byBjb250aW51ZSB0byB3b3JrIG9uIG15IHByb2plY3QuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOToxNi43ODUxNzUxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdGlmIChyZXQpXFxuIDIzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMzI6XFx0XFx0cGRhdGEgPSAoc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICopc3BpX2dldF9kZXZpY2VfaWQoZnVuYyktXFx1MDAzZWRyaXZlcl9kYXRhO1xcbiAyMzM6XFx0XFx0aWYgKCFwZGF0YSkge1xcbiAyMzQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwidW5hYmxlIHRvIHJldHJpZXZlIGRyaXZlciBkYXRhIChwbGVhc2UgcmVwb3J0KVxcXFxuXFxcIik7XFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjM2OlxcdFxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0XFx0LyogVHJhY2UgYmVsb3cgaXMgYWxzbyBkaXNwbGF5ZWQgYnkgc3BpX3NldHVwKCkgaWYgY29tcGlsZWQgd2l0aCBERUJVRyAqL1xcbiAyMzk6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiU1BJIHBhcmFtczogQ1M9JWQsIG1vZGU9JWQgYml0cy93b3JkPSVkIHNwZWVkPSVkXFxcXG5cXFwiLFxcbiAyNDA6XFx0XFx0XFx0c3BpX2dldF9jaGlwc2VsZWN0KGZ1bmMsIDApLCBmdW5jLVxcdTAwM2Vtb2RlLCBmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkLCBmdW5jLVxcdTAwM2VtYXhfc3BlZWRfaHopO1xcbiAyNDE6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gMTYgXFx1MDAyNlxcdTAwMjYgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCAhPSA4KVxcbiAyNDI6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcInVudXN1YWwgYml0cy93b3JkIHZhbHVlOiAlZFxcXFxuXFxcIiwgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCk7XFxuIDI0MzpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6IFxcdTAwM2UgNTAwMDAwMDApXFxuIDI0NDpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiJWRIeiBpcyBhIHZlcnkgaGlnaCBzcGVlZFxcXFxuXFxcIiwgZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6KTtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0YnVzID0gZGV2bV9remFsbG9jKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7XFxuIDI0NzpcXHRcXHRpZiAoIWJ1cylcXG4gMjQ4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNDk6XFx0XFx0YnVzLVxcdTAwM2VmdW5jID0gZnVuYztcXG4gMjUwOlxcdFxcdGlmIChmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkID09IDggfHwgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKVxcbiAyNTE6XFx0XFx0XFx0YnVzLVxcdTAwM2VuZWVkX3N3YWIgPSB0cnVlO1xcbiAyNTI6XFx0XFx0c3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdGJ1cy1cXHUwMDNlZ3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX09VVF9MT1cpO1xcbiAyNTU6XFx0XFx0aWYgKElTX0VSUihidXMtXFx1MDAzZWdwaW9fcmVzZXQpKVxcbiAyNTY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVzLVxcdTAwM2VncGlvX3Jlc2V0KTtcXG4gMjU3OlxcdFxcdGlmICghYnVzLVxcdTAwM2VncGlvX3Jlc2V0KSB7XFxuIDI1ODpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwiZ3BpbyByZXNldCBpcyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XFxcXG5cXFwiKTtcXG4gMjU5OlxcdFxcdH0gZWxzZSB7XFxuIDI2MDpcXHRcXHRcXHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShidXMtXFx1MDAzZWdwaW9fcmVzZXQsIFxcXCJ3ZnggcmVzZXRcXFwiKTtcXG4gMjYxOlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZWdwaW9fcmVzZXQsIDEpO1xcbiAyNjI6XFx0XFx0XFx0dXNsZWVwX3JhbmdlKDEwMCwgMTUwKTtcXG4gMjYzOlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZWdwaW9fcmVzZXQsIDApO1xcbiAyNjQ6XFx0XFx0XFx0dXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApO1xcbiAyNjU6XFx0XFx0fVxcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRidXMtXFx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgcGRhdGEsIFxcdTAwMjZ3Znhfc3BpX2h3YnVzX29wcywgYnVzKTtcXG4gMjY4OlxcdFxcdGlmICghYnVzLVxcdTAwM2Vjb3JlKVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjE2Ljc4NTI1MjQ3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA2MDkyNTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydCBhbmFseXppbmcgdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIE5leHQgU3RlcHMgaW4gYHdmeF9zcGlfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gYW50aWNpcGF0ZSB0aGUgc3Vic2VxdWVudCBhY3Rpb25zIHdpdGhpbiB0aGUgYHdmeF9zcGlfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBkcml2ZXIsIHByb2JhYmx5IGZvciBhIHdpcmVsZXNzIG9yIG5ldHdvcmsgZGV2aWNlIHVzaW5nIGFuIFNQSSAoU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlKSBidXMuIFRoZSBwcm9iZSBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIGluaXRpYWxpemUgYW5kIGNvbm5lY3QgdG8gdGhlIGhhcmR3YXJlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzLCB3aGF0IGNydWNpYWwgc3RlcHMgdHlwaWNhbGx5IGhhcHBlbiAqYWZ0ZXIqIGEgcHJvYmU/XG5cbkZpcnN0LCBJJ2QgZXhwZWN0IGFuIGF0dGVtcHQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgU1BJIGRldmljZTogc2VuZGluZyBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgcGVyaGFwcyByZWFkaW5nIGl0cyBpZGVudGlmaWNhdGlvbiwgYW5kIHZlcmlmeWluZyBpdHMgcHJlc2VuY2UuIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBJJ2QgYmUgbG9va2luZyBmb3IgdGhlIGV4Y2hhbmdlIG9mIGRhdGE6IGNoZWNraW5nIGZvciBjb3JyZWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNvbW11bmljYXRpb24gbGluZXMsIHRoZW4gY29uZmlndXJpbmcgdGhlIGRldmljZS4gVGhlIGV4YWN0IHNlcXVlbmNlIHdpbGwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgc28gSSdsbCBiZSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSByZWdpc3RlciBhY2Nlc3MgcGF0dGVybnMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHRpbWVvdXRzLlxuXG5OZXh0LCBJIGFudGljaXBhdGUgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBUaGlzIG1pZ2h0IGluY2x1ZGUgbWVtb3J5IGZvciBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIGFuZCBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAoaWYgdGhpcyBpcyBhIG5ldHdvcmsgaW50ZXJmYWNlKS4gSSdsbCBiZSBleHBlY3RpbmcgY2hlY2tzIGZvciBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZy5cblxuQmV5b25kIHJlc291cmNlIGFsbG9jYXRpb24sIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBzdGVwcyBpbnZvbHZpbmcgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgb3IgY2xvY2sgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBuZWVkIHRvIGVuYWJsZSBwb3dlciBkb21haW5zLCBjb25maWd1cmUgY2xvY2tzIGZvciB0aGUgU1BJIGJ1cyBpdHNlbGYsIG9yIGZvciB0aGUgZGV2aWNlJ3MgaW50ZXJuYWwgbG9naWM/IFRoZXNlIGFyZSBjb21tb24gcHJvYmUgYWN0aW9ucy5cblxuRmluYWxseSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIHN1YnN5c3RlbXMuIFdpbGwgdGhlcmUgYmUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0d29yayBzdGFjaywgb3Igd2l0aCBhbnkgb3RoZXIgcmVsZXZhbnQgZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgZGVwZW5kZW5jaWVzIGludm9sdmVkPyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdXBwb3NlZCogdG8gZG8sIGJhc2VkIG9uIGl0cyBjb250ZXh0LiBUaGlzIHNldHMgdGhlIHN0YWdlIGZvciB3aGF0IEkgZXhwZWN0IHRvIGZvbGxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzk6MjguODQ2MTgyOTU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVxcdTAwM2Vjb3JlKTtcXG4gMjcyOlxcdFxcdGlmIChyZXQpXFxuIDI3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHRydWUpO1xcbiAyNzY6XFx0XFx0cmV0dXJuIDA7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyB2b2lkIHdmeF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxcbiAyODA6XFx0e1xcbiAyODE6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gc3BpX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHR3ZnhfcmVsZWFzZShidXMtXFx1MDAzZWNvcmUpO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHQvKiBGb3IgZHluYW1pYyBkcml2ZXIgYmluZGluZywga2VybmVsIGRvZXMgbm90IHVzZSBPRiB0byBtYXRjaCBkcml2ZXIuIEl0IG9ubHlcXG4gMjg3OlxcdCAqIHVzZSBtb2RhbGlhcyBhbmQgbW9kYWxpYXMgaXMgYSBjb3B5IG9mICdjb21wYXRpYmxlJyBEVCBub2RlIHdpdGggdmVuZG9yXFxuIDI4ODpcXHQgKiBzdHJpcHBlZC5cXG4gMjg5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOToyOC44NDYyODc3NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5NDg2MjI3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKnByb2JlKiBTUEkgb3IgU0RJTyBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gdGhlIGB3ZnhgIGRyaXZlciwgd2l0aGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZHJpdmVycyBkZXNpZ25lZCBmb3IgKmRlZGljYXRlZCogcGh5c2ljYWwgY2hpcHMsIGxpa2UgdGhhdCBTaWxhYnMgV0YyMDAsIG9mdGVuIHJlbHkgb24gcGh5c2ljYWwgU1BJL1NESU8gaGFyZHdhcmUgYW5kIHNwZWNpZmljIGJvYXJkIERldmljZSBUcmVlIChEVCkgY29uZmlndXJhdGlvbnMuIFN0YW5kYXJkIGVtdWxhdGVkIGhhcmR3YXJlLCBsaWtlIGEgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSwgdXN1YWxseSB3b24ndCBjdXQgaXQuXG5cblJpZ2h0LCBsZXQncyByZWZlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gd2hhdCBtYWtlcyBhIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgcnVsZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhlIHNlY3Rpb25zIHRoYXQgbWVudGlvbjpcblxuKiAgIERvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLW9ubHkgY2hhbmdlcy4gVGhhdCdzIGEgbm8tZ28sIG9mIGNvdXJzZS5cbiogICBEZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzLiBHb3QgaXQuXG4qICAgQ2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uIGZsb3cuIE9idmlvdXMuXG4qICAgKkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMqIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIGlzIGtleS4gSWYgYSBjb2RlIHBhdGggbmVlZHMgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCdzIG5vdCB3b3J0aCBteSB0aW1lLlxuKiAgIFZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGZvciBQQ0llIHN3aXRjaCwgU21hcnROSUNzLCBvciBHUFVzIHJlcXVpcmluZyAqcGh5c2ljYWwqIFBDSWUgY2FyZHMuIEFnYWluLCBubyB2aXJ0dWFsIGVxdWl2YWxlbnQsIHNvIEkgZG9uJ3QgY2FyZS5cbiogICBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIG9ubHkgdHJpZ2dlcmVkIGR1cmluZyBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4gTm90IHJlbGV2YW50IHRvIHR5cGljYWwgZnV6emluZy5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGB3ZnhgLiBUaGF0J3MgdGhlIFNpbGljb24gTGFicyBXRjIwMCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlciwgdXNpbmcgU1BJL1NESU8uIFRoZSBxdWVzdGlvbiBpczogY2FuIEkgKnJlYWNoKiBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhbnkgdmlydHVhbCBvciBzb2Z0d2FyZS1iYXNlZCBpbnRlcmZhY2UsIGEgVVNCIGludGVyZmFjZSBmb3IgaW5zdGFuY2UsIHRoYXQgd291bGQgbGV0IG1lIGludGVyYWN0IHdpdGggaXQgaW4gUUVNVT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGRyaXZlciBpcyBkZXNpZ25lZCB0byB3b3JrIGluIGEgc2ltdWxhdGVkIGVudmlyb25tZW50LCBldmVuIGlmIGltcGVyZmVjdGx5LiBMZXQncyBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB2aXJ0dWFsaXplZCBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mzk6NDcuNzk0OTEyNDIyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0IyBOZWNlc3NhcnkgZm9yIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gICA0OlxcdENGTEFHU19kZWJ1Zy5vID0gLUkkKHNyYylcXG4gICA1OlxcdFxcbiAgIDY6XFx0d2Z4LXkgOj0gXFxcXFxcbiAgIDc6XFx0XFx0YmgubyBcXFxcXFxuICAgODpcXHRcXHRod2lvLm8gXFxcXFxcbiAgIDk6XFx0XFx0Zndpby5vIFxcXFxcXG4gIDEwOlxcdFxcdGhpZl90eF9taWIubyBcXFxcXFxuICAxMTpcXHRcXHRoaWZfdHgubyBcXFxcXFxuICAxMjpcXHRcXHRoaWZfcngubyBcXFxcXFxuICAxMzpcXHRcXHRxdWV1ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGRhdGFfdHgubyBcXFxcXFxuICAxNTpcXHRcXHRkYXRhX3J4Lm8gXFxcXFxcbiAgMTY6XFx0XFx0c2Nhbi5vIFxcXFxcXG4gIDE3OlxcdFxcdHN0YS5vIFxcXFxcXG4gIDE4OlxcdFxcdGtleS5vIFxcXFxcXG4gIDE5OlxcdFxcdG1haW4ubyBcXFxcXFxuICAyMDpcXHRcXHRkZWJ1Zy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjQ3Ljc5NDk4MjY2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjE4MDA2OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFdGWCBXaXJlbGVzcyBEcml2ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTaWxhYnMgV0ZYIHdpcmVsZXNzIGRyaXZlcnMgYmV0dGVyLiBNeSBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCdzIGV4cGxvcmUgd2hhdCdzIGFjdHVhbGx5ICppbiogYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYC4gSSB3YW50IHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZCB0aGUgc291cmNlIGNvZGUgb3JnYW5pemF0aW9uLCBhbmQgaWRlbnRpZnkgdGhlIGtleSBtb2R1bGVzIGFuZCBmaWxlcyBpbnZvbHZlZC4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjM5OjU5Ljk3NTA1NDQzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHR3ZngtJChDT05GSUdfU1BJKSArPSBidXNfc3BpLm9cXG4gIDIyOlxcdCMgV2hlbiBDT05GSUdfTU1DID09IG0sIGFwcGVuZCB0byAnd2Z4LXknIChhbmQgbm90IHRvICd3ZngtbScpXFxuICAyMzpcXHR3ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgKz0gYnVzX3NkaW8ub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRvYmotJChDT05GSUdfV0ZYKSArPSB3Zngub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozOTo1OS45NzUyMTI1NDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5MTQ4OTY0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3Qgd29ydGggZnV6emluZywgYW5kIGhlcmUncyB3aHkuIEknbSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4YCBkaXJlY3RvcnkuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgLyBXRnggV2lGaSBjaGlwcywgYW5kIGltcG9ydGFudGx5LCB0aGVzZSBhcmUgY29ubmVjdGVkIHZpYSBTUEkgb3IgU0RJTy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIHRoYXQgSSB0eXBpY2FsbHkgd29yayB3aXRoLCBsaWtlIHN5emthbGxlciBydW5uaW5nIG9uIHg4Nl82NCBvciBhcm02NCB3aXRoaW4gUUVNVSBvciBHQ0UuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgYW5kIGNvbmZpcm1hdGlvbiB2aWEgbXkgcmVzZWFyY2ggdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwLiBGdXJ0aGVybW9yZSwgU0RJTyBhbmQgU1BJIFdpRmkgY2hpcHMgb2YgdGhpcyB0eXBlIHR5cGljYWxseSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNvbWUgY3VzdG9tIERldmljZSBUcmVlIChEVCkgZW11bGF0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHNldHVwcyAqZG9uJ3QqIG9mZmVyIHRoYXQsIG1lYW5pbmcgSSBjYW4ndCB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMgd2l0aCBhIHN0YW5kYXJkIGVudmlyb25tZW50LlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGB3Znhfc2Rpb19wcm9iZWAgZnVuY3Rpb24uIFRoZSBjb2RlIGNoZWNrcyBmb3IgYSBcImNvbXBhdGlibGUgZGV2aWNlXCIgaW4gdGhlIERULCBhbmQgaWYgaXQncyBub3QgcHJlc2VudCwgaXQgaXNzdWVzIGEgd2FybmluZyBhbmQgcmV0dXJucyAtRU5PREVWLiBDcml0aWNhbGx5LCBpdCB0aGVuIHNheXMgdGhpcyBkcml2ZXIgd2lsbCAqb25seSogcHJvYmUgaWYgdGhlIGhhcmR3YXJlIGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIERULiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBkZXBlbmRlbmN5IG9uIHNwZWNpZmljIGhhcmR3YXJlIGRlc2NyaXB0aW9ucy4gU2lsaWNvbiBMYWJzIGRvZXNuJ3QgdXNlIGEgcmVsaWFibGUgU0RJTyB2ZW5kb3IgSUQsIHNvIGl0IGlzIHJlcXVpcmVkLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0ICpuZWVkcyogZWl0aGVyIHBoeXNpY2FsIFdGMjAwIGhhcmR3YXJlIG9yIGF0IGxlYXN0IERULWJhc2VkIGhhcmR3YXJlIGRlZmluaXRpb24gZm9yIHByb2JpbmcgdG8gZXZlbiB0YWtlIHBsYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgaW5oZXJlbnRseSB0aWVkIHRvIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoYXQgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIGFzIHdlbGw6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3ZngueWFtbGAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jYCwgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AuIFRoZXkncmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB3ZnhgIGRyaXZlciBjb2RlIG9yIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3RyZW5ndGhlbmluZyB0aGlzIGFzc2Vzc21lbnQuIFRoZSBjaGFuZ2VzIGluIGBiaC5jYCBhcmUgc2ltcGx5IGNvbW1lbnRzLCBhbmQgaW4gYGJ1c19zZGlvLmNgIGFuZCBgbWFpbi5jYCBpdCdzIHJlbGF0aW5nIHRvIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gR2l2ZW4gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3ksIEkgZG9uJ3Qgc2VlIGFueSBwb3NzaWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgdXNpbmcgdHlwaWNhbCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcImNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcIiBiYXNlZCBvbiB0aGUgY3JpdGVyaWEuIFRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBTaWxpY29uIExhYnMgV0YyMDAgd2lyZWxlc3MgZHJpdmVyICh3ZngpIG92ZXIgU1BJL1NESU8sIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgRFQgZW50cmllcykgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBObyBgRW5hYmxlQ29uZmlnc2Agb3IgYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI2LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjQwOjE1Ljg5MDExMTM4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyICh3ZngpIGZvciBTUEkvU0RJTyBhbmQgaXRzIERldmljZSBUcmVlIGRvY3VtZW50YXRpb24uIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKGUuZy4gUUVNVS9HQ0UpLCBhbmQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCB2aWEgc3RhbmRhcmQgdmlydHVhbC9zb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKHdmeCkgZm9yIFNQSS9TRElPIGFuZCBpdHMgRGV2aWNlIFRyZWUgZG9jdW1lbnRhdGlvbi4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoZS5nLiBRRU1VL0dDRSksIGFuZCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIHZpYSBzdGFuZGFyZCB2aXJ0dWFsL3NvZnR3YXJlIGVtdWxhdGVkIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo0MDoxNS44OTAxMzUyMzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr6zpx[1] Phase: Running StartedAt: 2026-09-01 02:40:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr6zpx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-01 02:40:27 +0000 UTC FinishedAt: 2026-09-01 02:40:31 +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,}