Name: series-workflow8cc4l Phase: Failed StartedAt: 2026-09-05 17:23:06 +0000 UTC FinishedAt: 2026-09-05 17:42:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cc4l[0] Phase: Succeeded StartedAt: 2026-09-05 17:23:06 +0000 UTC FinishedAt: 2026-09-05 17:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cc4l[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 17:23:06 +0000 UTC FinishedAt: 2026-09-05 17:42:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDA5NDVkMTFmMzk2OWYwNGI0NmQwNjEyYTFiY2VjYTc5NTg1NWY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFNcbmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0XG4tLS0gYS9DUkVESVRTXG4mIzQzOyYjNDM7JiM0MzsgYi9DUkVESVRTXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgUzogTG9uZ2ZvcmQsIElyZWxhbmRcbiBTOiBTeWRuZXksIEF1c3RyYWxpYVxuIFxuIE46IFRpZ3JhbiBBLiBBaXZhemlhblxuLUU6IHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51a1xuJiM0MztFOiBhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXG4gVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzXG4gRDogQkZTIGZpbGVzeXN0ZW1cbiBEOiBJbnRlbCBJQTMyIENQVSBtaWNyb2NvZGUgdXBkYXRlIHN1cHBvcnRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxuaW5kZXggYTIyZjYwM2IyOTM4ZS4uYzFkYmZlOWM5NWQyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbkBAIC00NCw4ICYjNDM7NDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cbiBXaGljaCBpcyBpdCwgQkZTIG9yIEJFRlM/XG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuIEJlLCBJbmMgc2FpZCwgXCYjMzQ7QmVPUyBGaWxlc3lzdGVtIGlzIG9mZmljaWFsbHkgY2FsbGVkIEJGUywgbm90IEJlRlNcJiMzNDsuXG4tQnV0IFVuaXh3YXJlIEJvb3QgRmlsZXN5c3RlbSBpcyBjYWxsZWQgYmZzLCB0b28uIEFuZCB0aGV5IGFyZSBhbHJlYWR5IGluXG4tdGhlIGtlcm5lbC4gQmVjYXVzZSBvZiB0aGlzIG5hbWluZyBjb25mbGljdCwgb24gTGludXggdGhlIEJlT1NcbiYjNDM7QnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHlcbiYjNDM7aW4gdGhlIGtlcm5lbC4gQmVjYXVzZSBvZiB0aGlzIG5hbWluZyBjb25mbGljdCwgb24gTGludXggdGhlIEJlT1NcbiBmaWxlc3lzdGVtIGlzIGNhbGxlZCBiZWZzLlxuIFxuIEhvdyB0byBJbnN0YWxsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNlMTRiOTAxODgwNzIuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNjAgJiM0MzswLDAgQEBcbi0uLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLVxuLT09PT09PT09PT09PT09PT09PT09PT09PVxuLUJGUyBGaWxlc3lzdGVtIGZvciBMaW51eFxuLT09PT09PT09PT09PT09PT09PT09PT09PVxuLVxuLVRoZSBCRlMgZmlsZXN5c3RlbSBpcyB1c2VkIGJ5IFNDTyBVbml4V2FyZSBPUyBmb3IgdGhlIC9zdGFuZCBzbGljZSwgd2hpY2hcbi11c3VhbGx5IGNvbnRhaW5zIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIGEgZmV3IG90aGVyIGZpbGVzIHJlcXVpcmVkIGZvciB0aGVcbi1ib290IHByb2Nlc3MuXG4tXG4tSW4gb3JkZXIgdG8gYWNjZXNzIC9zdGFuZCBwYXJ0aXRpb24gdW5kZXIgTGludXggeW91IG9idmlvdXNseSBuZWVkIHRvXG4ta25vdyB0aGUgcGFydGl0aW9uIG51bWJlciBhbmQgdGhlIGtlcm5lbCBtdXN0IHN1cHBvcnQgVW5peFdhcmUgZGlzayBzbGljZXNcbi0oQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBjb25maWcgb3B0aW9uKS4gSG93ZXZlciBCRlMgc3VwcG9ydCBkb2VzIG5vdFxuLWRlcGVuZCBvbiBoYXZpbmcgVW5peFdhcmUgZGlza2xhYmVsIHN1cHBvcnQgYmVjYXVzZSBvbmUgY2FuIGFsc28gbW91bnRcbi1CRlMgZmlsZXN5c3RlbSB2aWEgbG9vcGJhY2s6OlxuLVxuLSAgICAjIGxvc2V0dXAgL2Rldi9sb29wMCBzdGFuZC5pbWdcbi0gICAgIyBtb3VudCAtdCBiZnMgL2Rldi9sb29wMCAvbW50L3N0YW5kXG4tXG4td2hlcmUgc3RhbmQuaW1nIGlzIGEgZmlsZSBjb250YWluaW5nIHRoZSBpbWFnZSBvZiBCRlMgZmlsZXN5c3RlbS5cbi1XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHVzaW5nIGl0IGFuZCB1bW91bnRlZCB5b3UgbmVlZCB0byBhbHNvIGRlYWxsb2NhdGVcbi0vZGV2L2xvb3AwIGRldmljZSBieTo6XG4tXG4tICAgICMgbG9zZXR1cCAtZCAvZGV2L2xvb3AwXG4tXG4tWW91IGNhbiBzaW1wbGlmeSBtb3VudGluZyBieSBqdXN0IHR5cGluZzo6XG4tXG4tICAgICMgbW91bnQgLXQgYmZzIC1vIGxvb3Agc3RhbmQuaW1nIC9tbnQvc3RhbmRcbi1cbi10aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3Aub1xuLWtlcm5lbCBtb2R1bGUgaWYgbmVjZXNzYXJ5KSBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgbG9vcGJhY2sgZHJpdmVyIGlzIG5vdFxuLWxvYWRlZCBhdXRvbWF0aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjb21waWxlZCB0aGUgbW9kdWxlIGFuZFxuLXRoYXQgbW9kcHJvYmUgaXMgZnVuY3Rpb25pbmcuIEJld2FyZSB0aGF0IHVtb3VudCB3aWxsIG5vdCBkZWFsbG9jYXRlXG4tL2Rldi9sb29wTiBkZXZpY2UgaWYgL2V0Yy9tdGFiIGZpbGUgb24geW91ciBzeXN0ZW0gaXMgYSBzeW1ib2xpYyBsaW5rIHRvXG4tL3Byb2MvbW91bnRzLiBZb3Ugd2lsbCBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IHVzaW5nIFwmIzM0Oy1kXCYjMzQ7IHN3aXRjaCBvZlxuLWxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uXG4tXG4tVG8gY3JlYXRlIHRoZSBCRlMgaW1hZ2UgdW5kZXIgVW5peFdhcmUgeW91IG5lZWQgdG8gZmluZCBvdXQgZmlyc3Qgd2hpY2hcbi1zbGljZSBjb250YWlucyBpdC4gVGhlIGNvbW1hbmQgcHJ0dnRvYygxTSkgaXMgeW91ciBmcmllbmQ6OlxuLVxuLSAgICAjIHBydHZ0b2MgL2Rldi9yZHNrL2MwYjB0MGQwczBcbi1cbi0oYXNzdW1pbmcgeW91ciByb290IGRpc2sgaXMgb24gdGFyZ2V0PTAsIGx1bj0wLCBidXM9MCwgY29udHJvbGxlcj0wKS4gVGhlbiB5b3Vcbi1sb29rIGZvciB0aGUgc2xpY2Ugd2l0aCB0YWcgXCYjMzQ7U1RBTkRcJiMzNDssIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xuLWluZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGRkKDEpIHRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlOjpcbi1cbi0gICAgIyB1bW91bnQgL3N0YW5kXG4tICAgICMgZGQgaWY9L2Rldi9yZHNrL2MwYjB0MGQwc2Egb2Y9c3RhbmQuaW1nIGJzPTUxMlxuLVxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xuLXRoZSBtYWdpYyBudW1iZXI6OlxuLVxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcbi1cbi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS5cbi1cbi1JZiB5b3UgaGF2ZSBhbnkgcGF0Y2hlcywgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIEJGU1xuLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6XG4tXG4tVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCA3MzRhNDVlNTE2Njc1Li43Y2NlN2NjMjhkMTI2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtNzUsNyAmIzQzOzc1LDYgQEAgRG9jdW1lbnRhdGlvbiBmb3IgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuXG4gICAgYXV0b2ZzXG4gICAgYXV0b2ZzLW1vdW50LWNvbnRyb2xcbiAgICBiZWZzXG4tICAgYmZzXG4gICAgYnRyZnNcbiAgICBjZXBoXG4gICAgY29kYVxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLjM4NTMwOTU1NjcwNWUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC00NjI3LDEzICYjNDM7NDYyNyw2IEBAIFM6XHRPZGQgRml4ZXNcbiBGOlx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcbiBGOlx0YmxvY2svYmZxLSpcbiBcbi1CRlMgRklMRSBTWVNURU1cbi1NOlx0XCYjMzQ7VGlncmFuIEEuIEFpdmF6aWFuXCYjMzQ7IFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi1TOlx0TWFpbnRhaW5lZFxuLUY6XHREb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3Rcbi1GOlx0ZnMvYmZzL1xuLUY6XHRpbmNsdWRlL3VhcGkvbGludXgvYmZzX2ZzLmhcbi1cbiBCSVRNQVAgQVBJXG4gTTpcdFl1cnkgTm9yb3YgXHUwMDNjeXVyeS5ub3JvdkBnbWFpbC5jb21cdTAwM2VcbiBSOlx0UmFzbXVzIFZpbGxlbW9lcyBcdTAwM2NsaW51eEByYXNtdXN2aWxsZW1vZXMuZGtcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWdcbmluZGV4IDU2YThmNzZkYWI0MTQuLjRmYjRkNDVmM2NkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuQEAgLTMzMyw3ICYjNDM7MzMzLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnXG5pbmRleCA4NWU5NWMwYWU0MTA3Li4zZDFjMzJkMzQ3NWU3IDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuQEAgLTM0MCw3ICYjNDM7MzQwLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuaW5kZXggMDQ5OGEwMTE1MzQ5MC4uMjU0NTE2OGI3NWJiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXG5AQCAtMzM5LDcgJiM0MzszMzksNiBAQCBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlM9bVxuIENPTkZJR19KRkZTMl9GU19YQVRUUj15XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnXG5pbmRleCAwOWUwMDZjN2NkN2M2Li5jZDJhODMxNjE0Yzg5IDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbkBAIC0zMTgsNyAmIzQzOzMxOCw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19DUkFNRlM9bVxuIENPTkZJR19WWEZTX0ZTPW1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG5pbmRleCAzOTFjOTkxMTdlZTA2Li42ODgwNTFiMTFjZTE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0FVRElUPXlcbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cbiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG4gQ09ORklHX0JMS19ERVZfSU5JVFJEPXlcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xuaW5kZXggYWNmZmM1YzE3ZjkyZC4uOGFhYjIyOWZiOTA5NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbkBAIC05NDUsNyAmIzQzOzk0NSw2IEBAIENPTkZJR19FQ1JZUFRfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0NSQU1GUz1tXG4gQ09ORklHX1ZYRlNfRlM9bVxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBlMDU5MTdhZGNkNjA4Li4xY2IwYjNhOGIxMmNhIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvS2NvbmZpZ1xuQEAgLTMxNCw3ICYjNDM7MzE0LDYgQEAgc291cmNlIFwmIzM0O2ZzL2VjcnlwdGZzL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZnMvaGZzL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2ZzL2JlZnMvS2NvbmZpZ1wmIzM0O1xuLXNvdXJjZSBcJiMzNDtmcy9iZnMvS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtmcy9qZmZzMi9LY29uZmlnXCYjMzQ7XG4gIyBVQklGUyBGaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uXG4gc291cmNlIFwmIzM0O2ZzL3ViaWZzL0tjb25maWdcJiMzNDtcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCAwNTVkZmMyM2Q4MmI2Li4xNmYxMTA4YjY0ZTFhIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtNzYsNyAmIzQzOzc2LDYgQEAgb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuIG9iai0kKENPTkZJR19NSU5JWF9GUylcdFx0JiM0Mzs9IG1pbml4L1xuIG9iai0kKENPTkZJR19GQVRfRlMpXHRcdCYjNDM7PSBmYXQvXG4gb2JqLSQoQ09ORklHX0VYRkFUX0ZTKVx0XHQmIzQzOz0gZXhmYXQvXG4tb2JqLSQoQ09ORklHX0JGU19GUylcdFx0JiM0Mzs9IGJmcy9cbiBvYmotJChDT05GSUdfSVNPOTY2MF9GUylcdCYjNDM7PSBpc29mcy9cbiBvYmotJChDT05GSUdfSEZTUExVU19GUylcdCYjNDM7PSBoZnNwbHVzLyAjIEJlZm9yZSBoZnMgdG8gZmluZCB3cmFwcGVkIEhGUyYjNDM7XG4gb2JqLSQoQ09ORklHX0hGU19GUylcdFx0JiM0Mzs9IGhmcy9cbmRpZmYgLS1naXQgYS9mcy9iZnMvS2NvbmZpZyBiL2ZzL2Jmcy9LY29uZmlnXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDhlN2VmODY2YjYyYTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwyMSAmIzQzOzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLWNvbmZpZyBCRlNfRlNcbi1cdHRyaXN0YXRlIFwmIzM0O0JGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEJMT0NLXG4tXHRzZWxlY3QgQlVGRkVSX0hFQURcbi1cdGhlbHBcbi1cdCAgQm9vdCBGaWxlIFN5c3RlbSAoQkZTKSBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgdW5kZXIgU0NPIFVuaXhXYXJlIHRvXG4tXHQgIGFsbG93IHRoZSBib290bG9hZGVyIGFjY2VzcyB0byB0aGUga2VybmVsIGltYWdlIGFuZCBvdGhlciBpbXBvcnRhbnRcbi1cdCAgZmlsZXMgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuICBJdCBpcyB1c3VhbGx5IG1vdW50ZWQgdW5kZXIgL3N0YW5kXG4tXHQgIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgc2xpY2UgbWFya2VkIGFzIFwmIzM0O1NUQU5EXCYjMzQ7IGluIHRoZSBVbml4V2FyZVxuLVx0ICBwYXJ0aXRpb24uICBZb3Ugc2hvdWxkIHNheSBZIGlmIHlvdSB3YW50IHRvIHJlYWQgb3Igd3JpdGUgdGhlIGZpbGVzXG4tXHQgIG9uIHlvdXIgL3N0YW5kIHNsaWNlIGZyb20gd2l0aGluIExpbnV4LiAgWW91IHRoZW4gYWxzbyBuZWVkIHRvIHNheSBZXG4tXHQgIHRvIFwmIzM0O1VuaXhXYXJlIHNsaWNlcyBzdXBwb3J0XCYjMzQ7LCBiZWxvdy4gIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJGU1xuLVx0ICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGVcbi1cdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcdTAwM2UuXG4tXG4tXHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRoaXMgaXMgYWJvdXQsIHNheSBOLlxuLVxuLVx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbi1cdCAgYmZzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBvZiB5b3VyIHJvb3QgcGFydGl0aW9uICh0aGUgb25lXG4tXHQgIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeSAvKSBjYW5ub3QgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL01ha2VmaWxlIGIvZnMvYmZzL01ha2VmaWxlXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDJiNmJjNWViNGRlOWMuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsOCAmIzQzOzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLSNcbi0jIE1ha2VmaWxlIGZvciBCRlMgZmlsZXN5c3RlbS5cbi0jXG4tXG4tb2JqLSQoQ09ORklHX0JGU19GUykgJiM0Mzs9IGJmcy5vXG4tXG4tYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm9cbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Jmcy5oXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw2OSAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tLypcbi0gKlx0ZnMvYmZzL2Jmcy5oXG4tICpcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICovXG4tI2lmbmRlZiBfRlNfQkZTX0JGU19IXG4tI2RlZmluZSBfRlNfQkZTX0JGU19IXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYmZzX2ZzLmhcdTAwM2Vcbi1cbi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuXG4tICAgSW4gYWN0dWFsIGZhY3QsIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSA1MTJ0aCBpbm9kZSAoaS5lLiBpbm9kZSBOby4gNTEzIG9yIGZpbGUgTm8uIDUxMSlcbi0gICB3aWxsIGZhaWwgd2l0aCBFTk9TUEMgaW4gYmZzX2FkZF9lbnRyeSgpOiB0aGUgcm9vdCBkaXJlY3RvcnkgY2Fubm90IGNvbnRhaW4gc28gbWFueSBlbnRyaWVzLCBjb3VudGluZyAmIzM5Oy4uJiMzOTsuXG4tICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nXG4tICAgaWYgYSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBzdWNoIFwmIzM0O2ltcG9zc2libGUgdG8gZmlsbCB1cFwmIzM0OyBudW1iZXIgb2YgaW5vZGVzICovXG4tI2RlZmluZSBCRlNfTUFYX0xBU1RJXHQ1MTNcbi1cbi0vKlxuLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIHN1cGVyYmxvY2sgaW5mb1xuLSAqL1xuLXN0cnVjdCBiZnNfc2JfaW5mbyB7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2Jsb2Nrcztcbi1cdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWI7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2ZyZWVpO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9sZl9lYmxrO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9sYXN0aTtcbi1cdERFQ0xBUkVfQklUTUFQKHNpX2ltYXAsIEJGU19NQVhfTEFTVEkmIzQzOzEpO1xuLVx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xuLX07XG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBpbm9kZSBpbmZvXG4tICovXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcbi1cdHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAvKiBpbm9kZSBudW1iZXIgZnJvbSB0aGUgZGlzaywgY2FuIGJlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4tXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuLVx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbi19O1xuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19zYl9pbmZvICpCRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4tfVxuLVxuLVxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcbi1cdHByaW50ayhLRVJOX0VSUiBcJiMzNDtCRlMtZnM6ICVzKCk6IFwmIzM0OyBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKVxuLVxuLS8qIGlub2RlLmMgKi9cbi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7XG4tZXh0ZXJuIHZvaWQgYmZzX2R1bXBfaW1hcChjb25zdCBjaGFyICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbi1cbi0vKiBmaWxlLmMgKi9cbi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmZzX2ZpbGVfaW5vcHM7XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucztcbi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcztcbi1cbi0vKiBkaXIuYyAqL1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucztcbi1cbi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDM1NiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2Rpci5jXG4tICpcdEJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggIFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICogIE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlIDIwMDVcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2Jmcy5oXCYjMzQ7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKTtcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRcdHN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7XG4tXG4tc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4te1xuLVx0c3RydWN0IGlub2RlICpkaXIgPSBmaWxlX2lub2RlKGYpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRpbnQgYmxvY2s7XG4tXG4tXHRpZiAoY3R4LVx1MDAzZXBvcyBcdTAwMjYgKEJGU19ESVJFTlRfU0laRSAtIDEpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgZl9wb3M9JTA4bHggZm9yICVzOiUwOGxseFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY3R4LVx1MDAzZXBvcyxcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHR3aGlsZSAoY3R4LVx1MDAzZXBvcyBcdTAwM2MgZGlyLVx1MDAzZWlfc2l6ZSkge1xuLVx0XHRvZmZzZXQgPSBjdHgtXHUwMDNlcG9zIFx1MDAyNiAoQkZTX0JTSVpFIC0gMSk7XG4tXHRcdGJsb2NrID0gQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jayAmIzQzOyAoY3R4LVx1MDAzZXBvcyBcdTAwM2VcdTAwM2UgQkZTX0JTSVpFX0JJVFMpO1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpIHtcbi1cdFx0XHRjdHgtXHUwMDNlcG9zICYjNDM7PSBCRlNfQlNJWkUgLSBvZmZzZXQ7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0ZG8ge1xuLVx0XHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRcdGlmIChkZS1cdTAwM2Vpbm8pIHtcbi1cdFx0XHRcdGludCBzaXplID0gc3RybmxlbihkZS1cdTAwM2VuYW1lLCBCRlNfTkFNRUxFTik7XG4tXHRcdFx0XHRpZiAoIWRpcl9lbWl0KGN0eCwgZGUtXHUwMDNlbmFtZSwgc2l6ZSxcbi1cdFx0XHRcdFx0XHRsZTE2X3RvX2NwdShkZS1cdTAwM2Vpbm8pLFxuLVx0XHRcdFx0XHRcdERUX1VOS05PV04pKSB7XG4tXHRcdFx0XHRcdGJyZWxzZShiaCk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0XHRjdHgtXHUwMDNlcG9zICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdH0gd2hpbGUgKChvZmZzZXQgXHUwMDNjIEJGU19CU0laRSkgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4tXHQuaXRlcmF0ZV9zaGFyZWRcdD0gYmZzX3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLXtcbi1cdGludCBlcnI7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1bnNpZ25lZCBsb25nIGlubztcbi1cbi1cdGlub2RlID0gbmV3X2lub2RlKHMpO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0aW5vID0gZmluZF9maXJzdF96ZXJvX2JpdChpbmZvLVx1MDAzZXNpX2ltYXAsIGluZm8tXHUwMDNlc2lfbGFzdGkgJiM0MzsgMSk7XG4tXHRpZiAoaW5vIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xhc3RpKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdFx0aXB1dChpbm9kZSk7XG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVx0fVxuLVx0c2V0X2JpdChpbm8sIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRpbmZvLVx1MDAzZXNpX2ZyZWVpLS07XG4tXHRpbm9kZV9pbml0X293bmVyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBkaXIsIG1vZGUpO1xuLVx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xuLVx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuLVx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19maWxlX2lub3BzO1xuLVx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZiZnNfZmlsZV9vcGVyYXRpb25zO1xuLVx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2YmZzX2FvcHM7XG4tXHRpbm9kZS1cdTAwM2VpX2lubyA9IGlubztcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2Rza19pbm8gPSBpbm87XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9zYmxvY2sgPSAwO1xuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfZWJsb2NrID0gMDtcbi1cdGluc2VydF9pbm9kZV9oYXNoKGlub2RlKTtcbi0gICAgICAgIG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0YmZzX2R1bXBfaW1hcChcJiMzNDtjcmVhdGVcJiMzNDssIHMpO1xuLVxuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRcdGlwdXQoaW5vZGUpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuLVxuLVx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBCRlNfTkFNRUxFTilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmIChiaCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGlubyA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlub2RlID0gYmZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIGlubyk7XG4tXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkKTtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGludCBlcnI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNm5ldy1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0aW5jX25saW5rKGlub2RlKTtcbi1cdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0aWhvbGQoaW5vZGUpO1xuLVx0ZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi17XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmICghYmggfHwgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgIT0gaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIG91dF9icmVsc2U7XG4tXG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbi1cdFx0cHJpbnRmKFwmIzM0O3VubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcXG5cJiMzNDssXG4tXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8sXG4tXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfbmxpbmspO1xuLVx0XHRzZXRfbmxpbmsoaW5vZGUsIDEpO1xuLVx0fVxuLVx0ZGUtXHUwMDNlaW5vID0gMDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbi1cdGlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgaW5vZGVfZ2V0X2N0aW1lKGRpcikpO1xuLVx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0ZXJyb3IgPSAwO1xuLVxuLW91dF9icmVsc2U6XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwgKm5ld19iaDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpvbGRfZGUsICpuZXdfZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+UkVOQU1FX05PUkVQTEFDRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRvbGRfYmggPSBuZXdfYmggPSBOVUxMO1xuLVx0b2xkX2lub2RlID0gZF9pbm9kZShvbGRfZGVudHJ5KTtcbi1cdGlmIChTX0lTRElSKG9sZF9pbm9kZS1cdTAwM2VpX21vZGUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGluZm8gPSBCRlNfU0Iob2xkX2lub2RlLVx1MDAzZWlfc2IpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdG9sZF9iaCA9IGJmc19maW5kX2VudHJ5KG9sZF9kaXIsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLCBcdTAwMjZvbGRfZGUpO1xuLVxuLVx0aWYgKCFvbGRfYmggfHwgKGxlMTZfdG9fY3B1KG9sZF9kZS1cdTAwM2Vpbm8pICE9IG9sZF9pbm9kZS1cdTAwM2VpX2lubykpXG4tXHRcdGdvdG8gZW5kX3JlbmFtZTtcbi1cbi1cdGVycm9yID0gLUVQRVJNO1xuLVx0bmV3X2lub2RlID0gZF9pbm9kZShuZXdfZGVudHJ5KTtcbi1cdG5ld19iaCA9IGJmc19maW5kX2VudHJ5KG5ld19kaXIsIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lLCBcdTAwMjZuZXdfZGUpO1xuLVxuLVx0aWYgKG5ld19iaCBcdTAwMjZcdTAwMjYgIW5ld19pbm9kZSkge1xuLVx0XHRicmVsc2UobmV3X2JoKTtcbi1cdFx0bmV3X2JoID0gTlVMTDtcbi1cdH1cbi1cdGlmICghbmV3X2JoKSB7XG4tXHRcdGVycm9yID0gYmZzX2FkZF9lbnRyeShuZXdfZGlyLCBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSxcbi1cdFx0XHRcdFx0b2xkX2lub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gZW5kX3JlbmFtZTtcbi1cdH1cbi1cdG9sZF9kZS1cdTAwM2Vpbm8gPSAwO1xuLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKG9sZF9kaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KG9sZF9kaXIpKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4tXHRpZiAobmV3X2lub2RlKSB7XG4tXHRcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KG5ld19pbm9kZSk7XG4tXHRcdGlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7XG4tXHR9XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkob2xkX2JoLCBcdTAwMjZCRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRlcnJvciA9IDA7XG4tXG4tZW5kX3JlbmFtZTpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGJyZWxzZShvbGRfYmgpO1xuLVx0YnJlbHNlKG5ld19iaCk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7XG4tXHQuY3JlYXRlXHRcdFx0PSBiZnNfY3JlYXRlLFxuLVx0Lmxvb2t1cFx0XHRcdD0gYmZzX2xvb2t1cCxcbi1cdC5saW5rXHRcdFx0PSBiZnNfbGluayxcbi1cdC51bmxpbmtcdFx0XHQ9IGJmc191bmxpbmssXG4tXHQucmVuYW1lXHRcdFx0PSBiZnNfcmVuYW1lLFxuLX07XG4tXG4tc3RhdGljIGludCBiZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsIGludCBpbm8pXG4te1xuLVx0Y29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGNoaWxkLVx1MDAzZW5hbWU7XG4tXHRpbnQgbmFtZWxlbiA9IGNoaWxkLVx1MDAzZWxlbjtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRpbnQgYmxvY2ssIHNibG9jaywgZWJsb2NrLCBvZmYsIHBvcztcbi1cdGludCBpO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtuYW1lPSVzLCBuYW1lbGVuPSVkXFxuXCYjMzQ7LCBuYW1lLCBuYW1lbGVuKTtcbi1cbi1cdHNibG9jayA9IEJGU19JKGRpciktXHUwMDNlaV9zYmxvY2s7XG4tXHRlYmxvY2sgPSBCRlNfSShkaXIpLVx1MDAzZWlfZWJsb2NrO1xuLVx0Zm9yIChibG9jayA9IHNibG9jazsgYmxvY2sgXHUwMDNjPSBlYmxvY2s7IGJsb2NrJiM0MzsmIzQzOykge1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBCRlNfQlNJWkU7IG9mZiAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFKSB7XG4tXHRcdFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZik7XG4tXHRcdFx0aWYgKCFkZS1cdTAwM2Vpbm8pIHtcbi1cdFx0XHRcdHBvcyA9IChibG9jayAtIHNibG9jaykgKiBCRlNfQlNJWkUgJiM0Mzsgb2ZmO1xuLVx0XHRcdFx0aWYgKHBvcyBcdTAwM2U9IGRpci1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2l6ZSAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFO1xuLVx0XHRcdFx0XHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpcixcbi1cdFx0XHRcdFx0XHQgICAgICBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbi1cdFx0XHRcdGRlLVx1MDAzZWlubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTtcbi1cdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJGU19OQU1FTEVOOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0ZGUtXHUwMDNlbmFtZVtpXSA9XG4tXHRcdFx0XHRcdFx0KGkgXHUwMDNjIG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXG4tXHRcdFx0XHRcdFx0XHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gLUVOT1NQQztcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbi1cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1ZmZlcilcbi17XG4tXHRpZiAoKGxlbiBcdTAwM2MgQkZTX05BTUVMRU4pIFx1MDAyNlx1MDAyNiBidWZmZXJbbGVuXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gIW1lbWNtcChuYW1lLCBidWZmZXIsIGxlbik7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXG4tXHQqcmVzX2RpciA9IE5VTEw7XG4tXHRpZiAobmFtZWxlbiBcdTAwM2UgQkZTX05BTUVMRU4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0d2hpbGUgKGJsb2NrICogQkZTX0JTSVpFICYjNDM7IG9mZnNldCBcdTAwM2MgZGlyLVx1MDAzZWlfc2l6ZSkge1xuLVx0XHRpZiAoIWJoKSB7XG4tXHRcdFx0YmggPSBzYl9icmVhZChkaXItXHUwMDNlaV9zYiwgQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jayAmIzQzOyBibG9jayk7XG4tXHRcdFx0aWYgKCFiaCkge1xuLVx0XHRcdFx0YmxvY2smIzQzOyYjNDM7O1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRvZmZzZXQgJiM0Mzs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0aWYgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cdTAwM2VuYW1lKSkge1xuLVx0XHRcdCpyZXNfZGlyID0gZGU7XG4tXHRcdFx0cmV0dXJuIGJoO1xuLVx0XHR9XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNjIGJoLVx1MDAzZWJfc2l6ZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0YmggPSBOVUxMO1xuLVx0XHRvZmZzZXQgPSAwO1xuLVx0XHRibG9jayYjNDM7JiM0Mzs7XG4tXHR9XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGQzM2Q2YmRlOTkyYjguLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDIwMyAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2ZpbGUuY1xuLSAqXHRCRlMgZmlsZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICpcdE1ha2UgdGhlIGZpbGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gdW5kZXJzdGFuZCB0aGUgc2l6ZVxuLSAqXHRvZiB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuXG4tICpcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXHUwMDNjZG1pdHJpLnZvcm9iaWV2QGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21wYWdlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7YmZzLmhcJiMzNDtcbi1cbi0jdW5kZWYgREVCVUdcbi1cbi0jaWZkZWYgREVCVUdcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcdHByaW50Zih4KVxuLSNlbHNlXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXG4tI2VuZGlmXG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2VlayBcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuLVx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4tfTtcbi1cbi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0byxcbi1cdFx0XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqbmV3O1xuLVxuLVx0YmggPSBzYl9icmVhZChzYiwgZnJvbSk7XG4tXHRpZiAoIWJoKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdG5ldyA9IHNiX2dldGJsayhzYiwgdG8pO1xuLVx0bWVtY3B5KG5ldy1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfZGF0YSwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdG1hcmtfYnVmZmVyX2RpcnR5KG5ldyk7XG4tXHRiZm9yZ2V0KGJoKTtcbi1cdGJyZWxzZShuZXcpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX21vdmVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyB3aGVyZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRkcHJpbnRmKFwmIzM0OyUwOGx4LSUwOGx4LVx1MDAzZSUwOGx4XFxuXCYjMzQ7LCBzdGFydCwgZW5kLCB3aGVyZSk7XG4tXHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2M9IGVuZDsgaSYjNDM7JiM0MzspXG4tXHRcdGlmKGJmc19tb3ZlX2Jsb2NrKGksIHdoZXJlICYjNDM7IGksIHNiKSkge1xuLVx0XHRcdGRwcmludGYoXCYjMzQ7ZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLVx1MDAzZSAlMDhseFxcblwmIzM0OywgaSxcbi1cdFx0XHRcdFx0XHRcdFx0d2hlcmUgJiM0MzsgaSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4tXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwaHlzO1xuLVx0aW50IGVycjtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHNiKTtcbi1cdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7XG4tXG4tXHRwaHlzID0gYmktXHUwMDNlaV9zYmxvY2sgJiM0MzsgYmxvY2s7XG4tXHRpZiAoIWNyZWF0ZSkge1xuLVx0XHRpZiAocGh5cyBcdTAwM2M9IGJpLVx1MDAzZWlfZWJsb2NrKSB7XG4tXHRcdFx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOWx4IChncmFudGVkKVxcblwmIzM0Oyxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgZmlsZSBpcyBub3QgZW1wdHkgYW5kIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgd2l0aGluIHRoZVxuLVx0ICogcmFuZ2Ugb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBmaWxlLCB3ZSBjYW4gZ3JhbnQgaXQuXG4tXHQgKi9cbi1cdGlmIChiaS1cdTAwM2VpX3NibG9jayBcdTAwMjZcdTAwMjYgKHBoeXMgXHUwMDNjPSBiaS1cdTAwM2VpX2VibG9jaykpIHtcbi1cdFx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChpbnRlcmltIGJsb2NrIGdyYW50ZWQpXFxuXCYjMzQ7LCBcbi1cdFx0XHRcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0LyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuICovXG4tXHRpZiAocGh5cyBcdTAwM2U9IGluZm8tXHUwMDNlc2lfYmxvY2tzKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbi1cbi1cdC8qIFRoZSByZXN0IGhhcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpdHNlbGYuICovXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVxuLVx0Lypcbi1cdCAqIElmIHRoZSBsYXN0IGRhdGEgYmxvY2sgZm9yIHRoaXMgZmlsZSBpcyB0aGUgbGFzdCBhbGxvY2F0ZWRcbi1cdCAqIGJsb2NrLCB3ZSBjYW4gZXh0ZW5kIHRoZSBmaWxlIHRyaXZpYWxseSwgd2l0aG91dCBtb3ZpbmcgaXRcbi1cdCAqIGFueXdoZXJlLlxuLVx0ICovXG4tXHRpZiAoYmktXHUwMDNlaV9lYmxvY2sgPT0gaW5mby1cdTAwM2VzaV9sZl9lYmxrKSB7XG4tXHRcdGRwcmludGYoXCYjMzQ7Yz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoc2ltcGxlIGV4dGVuc2lvbilcXG5cJiMzNDssIFxuLVx0XHRcdFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBwaHlzIC0gYmktXHUwMDNlaV9lYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdGVyciA9IDA7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXG4tXHRwaHlzID0gaW5mby1cdTAwM2VzaV9sZl9lYmxrICYjNDM7IDE7XG4tXHRpZiAocGh5cyAmIzQzOyBibG9jayBcdTAwM2U9IGluZm8tXHUwMDNlc2lfYmxvY2tzKSB7XG4tXHRcdGVyciA9IC1FTk9TUEM7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrKSB7XG4tXHRcdGVyciA9IGJmc19tb3ZlX2Jsb2Nrcyhpbm9kZS1cdTAwM2VpX3NiLCBiaS1cdTAwM2VpX3NibG9jaywgXG4tXHRcdFx0XHRcdFx0YmktXHUwMDNlaV9lYmxvY2ssIHBoeXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZHByaW50ZihcJiMzNDtmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLVx1MDAzZSBmcyBjb3JydXB0aW9uXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRlcnIgPSAwO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChtb3ZlZClcXG5cJiMzNDssXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0YmktXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xuLVx0cGh5cyAmIzQzOz0gYmxvY2s7XG4tXHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSBiaS1cdTAwM2VpX2VibG9jayA9IHBoeXM7XG4tXG4tXHQvKlxuLVx0ICogVGhpcyBhc3N1bWVzIG5vdGhpbmcgY2FuIHdyaXRlIHRoZSBpbm9kZSBiYWNrIHdoaWxlIHdlIGFyZSBoZXJlXG4tXHQgKiBhbmQgdGh1cyB1cGRhdGUgaW5vZGUtXHUwMDNlaV9ibG9ja3MhIChYWFgpXG4tXHQgKi9cbi1cdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gYmktXHUwMDNlaV9lYmxvY2sgLSBiaS1cdTAwM2VpX3NibG9jayAmIzQzOyAxIC0gaW5vZGUtXHUwMDNlaV9ibG9ja3M7XG4tXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi17XG4tXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGJmc19nZXRfYmxvY2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGJmc19nZXRfYmxvY2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBiZnNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cbi1cdGlmICh0byBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuLVx0XHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi1cdFx0XHQgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHQgICBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG4tXHRcdFx0ICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCB2b2lkICoqZnNkYXRhKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBiZnNfZ2V0X2Jsb2NrKTtcbi1cdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRiZnNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIHBvcyAmIzQzOyBsZW4pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGJmc19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gYmZzX3dyaXRlcGFnZXMsXG4tXHQud3JpdGVfYmVnaW5cdD0gYmZzX3dyaXRlX2JlZ2luLFxuLVx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbi1cdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXBcdFx0PSBiZnNfYm1hcCxcbi19O1xuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDUzOCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi0vKlxuLSAqXHRmcy9iZnMvaW5vZGUuY1xuLSAqXHRCRlMgc3VwZXJibG9jayBhbmQgaW5vZGUgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi0gKlx0RnJvbSBmcy9taW5peCwgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzLlxuLSAqXHRNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCBcdTAwM2NhZHNAd29tcG9tLm9yZ1x1MDAzZSwgMjAwNS5cbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2Jmcy5oXCYjMzQ7XG4tXG4tTU9EVUxFX0FVVEhPUihcJiMzNDtUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NDTyBVbml4V2FyZSBCRlMgZmlsZXN5c3RlbSBmb3IgTGludXhcJiMzNDspO1xuLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdGludCBibG9jaywgb2ZmO1xuLVxuLVx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcbi1cdGlmICghaW5vZGUpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKVxuLVx0XHRyZXR1cm4gaW5vZGU7XG4tXG4tXHRpZiAoKGlubyBcdTAwM2MgQkZTX1JPT1RfSU5PKSB8fCAoaW5vIFx1MDAzZSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgaW5vZGUgbnVtYmVyICVzOiUwOGx4XFxuXCYjMzQ7LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4tXHRibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTtcbi1cdGJoID0gc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCYjMzQ7VW5hYmxlIHRvIHJlYWQgaW5vZGUgJXM6JTA4bHhcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCxcbi1cdFx0XHRcdFx0XHRcdFx0XHRpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0b2ZmID0gKGlubyAtIEJGU19ST09UX0lOTykgJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcbi1cdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cdTAwM2ViX2RhdGEgJiM0Mzsgb2ZmO1xuLVxuLVx0Lypcbi1cdCAqIGh0dHBzOi8vbWFydGluLmhpbm5lci5pbmZvL2ZzL2Jmcy9iZnMtc3RydWN0dXJlLmh0bWwgZXhwbGFpbnMgdGhhdFxuLVx0ICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLVx1MDAzZWlfbW9kZVxuLVx0ICogdmFsdWUuIFRoaXMgbWVhbnMgdGhhdCwgYWx0aG91Z2ggYmZzX3dyaXRlX2lub2RlKCkgc2F2ZXMgd2hvbGVcbi1cdCAqIGlub2RlLVx1MDAzZWlfbW9kZSBiaXRzICh3aGljaCBpbmNsdWRlIFNfSUZNVCBiaXRzIGFuZCBTX0lTe1VJRCxHSUQsVlRYfVxuLVx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXHUwMDNlaV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2Vcbi1cdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXG4tXHQgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgdGVsbCB3aGV0aGVyIG1pZGRsZSA3IGJpdHMgYXJlIGdhcmJhZ2UsIHVzZSBvbmx5XG4tXHQgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmdcbi1cdCAqIGdhcmJhZ2UpIGFuZCByZWNvbnN0cnVjdCBTX0lGTVQgYml0cyBmb3IgTGludXggZW52aXJvbm1lbnQgZnJvbVxuLVx0ICogZGktXHUwMDNlaV92dHlwZSB2YWx1ZS5cbi1cdCAqL1xuLVx0aW5vZGUtXHUwMDNlaV9tb2RlID0gMHgwMDAwMEZGRiBcdTAwMjYgbGUzMl90b19jcHUoZGktXHUwMDNlaV9tb2RlKTtcbi1cdGlmIChsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVkRJUikge1xuLVx0XHRpbm9kZS1cdTAwM2VpX21vZGUgfD0gU19JRkRJUjtcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19kaXJfaW5vcHM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2YmZzX2Rpcl9vcGVyYXRpb25zO1xuLVx0fSBlbHNlIGlmIChsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVlJFRykge1xuLVx0XHRpbm9kZS1cdTAwM2VpX21vZGUgfD0gU19JRlJFRztcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19maWxlX2lub3BzO1xuLVx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmJmc19hb3BzO1xuLVx0fSBlbHNlIHtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0cHJpbnRmKFwmIzM0O1Vua25vd24gdnR5cGU9JXUgJXM6JTA4bHhcXG5cJiMzNDssXG4tXHRcdCAgICAgICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfc2Jsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfc2Jsb2NrKTtcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2VibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX2VibG9jayk7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXHUwMDNlaV9pbm8pO1xuLVx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdWlkKSk7XG4tXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZ2lkKSk7XG4tXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfbmxpbmspKTtcbi1cdGlub2RlLVx1MDAzZWlfc2l6ZSA9IEJGU19GSUxFU0laRShkaSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTtcbi1cdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXHUwMDNlaV9hdGltZSksIDApO1xuLVx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX210aW1lKSwgMCk7XG4tXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfY3RpbWUpLCAwKTtcbi1cbi1cdGJyZWxzZShiaCk7XG4tXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcbi1cdHJldHVybiBpbm9kZTtcbi1cbi1lcnJvcjpcbi1cdGlnZXRfZmFpbGVkKGlub2RlKTtcbi1cdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGJmc19pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwKVxuLXtcbi1cdGlmICgoaW5vIFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXHUwMDNlIEJGU19TQihzYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgaW5vZGUgbnVtYmVyICVzOiUwOHhcXG5cJiMzNDssIHNiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLVx0fVxuLVxuLVx0aW5vIC09IEJGU19ST09UX0lOTztcbi1cbi1cdCpwID0gc2JfYnJlYWQoc2IsIDEgJiM0MzsgaW5vIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0spO1xuLVx0aWYgKCEqcCkge1xuLVx0XHRwcmludGYoXCYjMzQ7VW5hYmxlIHRvIHJlYWQgaW5vZGUgJXM6JTA4eFxcblwmIzM0Oywgc2ItXHUwMDNlc19pZCwgaW5vKTtcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gKHN0cnVjdCBiZnNfaW5vZGUgKikoKnApLVx1MDAzZWJfZGF0YSAmIzQzOyAgaW5vICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHVuc2lnbmVkIGludCBpbm8gPSAodTE2KWlub2RlLVx1MDAzZWlfaW5vO1xuLVx0dW5zaWduZWQgbG9uZyBpX3NibG9jaztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cbi1cdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vLCBcdTAwMjZiaCk7XG4tXHRpZiAoSVNfRVJSKGRpKSlcbi1cdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cbi1cdGlmIChpbm8gPT0gQkZTX1JPT1RfSU5PKVxuLVx0XHRkaS1cdTAwM2VpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZESVIpO1xuLVx0ZWxzZVxuLVx0XHRkaS1cdTAwM2VpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZSRUcpO1xuLVxuLVx0ZGktXHUwMDNlaV9pbm8gPSBjcHVfdG9fbGUxNihpbm8pO1xuLVx0ZGktXHUwMDNlaV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtXHUwMDNlaV9tb2RlKTtcbi1cdGRpLVx1MDAzZWlfdWlkID0gY3B1X3RvX2xlMzIoaV91aWRfcmVhZChpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9naWQgPSBjcHVfdG9fbGUzMihpX2dpZF9yZWFkKGlub2RlKSk7XG4tXHRkaS1cdTAwM2VpX25saW5rID0gY3B1X3RvX2xlMzIoaW5vZGUtXHUwMDNlaV9ubGluayk7XG4tXHRkaS1cdTAwM2VpX2F0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X2F0aW1lX3NlYyhpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9tdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9tdGltZV9zZWMoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfY3RpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfY3RpbWVfc2VjKGlub2RlKSk7XG4tXHRpX3NibG9jayA9IEJGU19JKGlub2RlKS1cdTAwM2VpX3NibG9jaztcbi1cdGRpLVx1MDAzZWlfc2Jsb2NrID0gY3B1X3RvX2xlMzIoaV9zYmxvY2spO1xuLVx0ZGktXHUwMDNlaV9lYmxvY2sgPSBjcHVfdG9fbGUzMihCRlNfSShpbm9kZSktXHUwMDNlaV9lYmxvY2spO1xuLVx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4tXG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0aW50IGVyciA9IDA7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdGVyciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1vdXQ6XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtpbm89JTA4bHhcXG5cJiMzNDssIGlubyk7XG4tXG4tXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLVx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdG1tYl9zeW5jKFx1MDAyNkJGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZCRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuLVxuLVx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdHJldHVybjtcbi1cbi1cdGRpID0gZmluZF9pbm9kZShzLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHQvKiBjbGVhciBvbi1kaXNrIGlub2RlICovXG4tXHRtZW1zZXQoZGksIDAsIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlKSk7XG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVxuLVx0aWYgKGJpLVx1MDAzZWlfZHNrX2lubykge1xuLVx0XHRpZiAoYmktXHUwMDNlaV9zYmxvY2spXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAmIzQzOz0gYmktXHUwMDNlaV9lYmxvY2sgJiM0MzsgMSAtIGJpLVx1MDAzZWlfc2Jsb2NrO1xuLVx0XHRpbmZvLVx1MDAzZXNpX2ZyZWVpJiM0MzsmIzQzOztcbi1cdFx0Y2xlYXJfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdFx0YmZzX2R1bXBfaW1hcChcJiMzNDtldmljdF9pbm9kZVwmIzM0Oywgcyk7XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgZmlsZSwgbWFrZSB0aGUgcHJldmlvdXMgYmxvY2tcbi1cdCAqIFwmIzM0O2xhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZVwmIzM0OyBldmVuIGlmIHRoZXJlIGlzIG5vXG4tXHQgKiByZWFsIGZpbGUgdGhlcmUsIHNhdmVzIHVzIDEgZ2FwLlxuLVx0ICovXG4tXHRpZiAoaW5mby1cdTAwM2VzaV9sZl9lYmxrID09IGJpLVx1MDAzZWlfZWJsb2NrKVxuLVx0XHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSBiaS1cdTAwM2VpX3NibG9jayAtIDE7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihzKTtcbi1cbi1cdGlmICghaW5mbylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGtmcmVlKGluZm8pO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpO1xuLVx0dTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHMtXHUwMDNlc19iZGV2LVx1MDAzZWJkX2Rldik7XG4tXHRidWYtXHUwMDNlZl90eXBlID0gQkZTX01BR0lDO1xuLVx0YnVmLVx1MDAzZWZfYnNpemUgPSBzLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0YnVmLVx1MDAzZWZfYmxvY2tzID0gaW5mby1cdTAwM2VzaV9ibG9ja3M7XG4tXHRidWYtXHUwMDNlZl9iZnJlZSA9IGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGluZm8tXHUwMDNlc2lfZnJlZWI7XG4tXHRidWYtXHUwMDNlZl9maWxlcyA9IGluZm8tXHUwMDNlc2lfbGFzdGkgJiM0MzsgMSAtIEJGU19ST09UX0lOTztcbi1cdGJ1Zi1cdTAwM2VmX2ZmcmVlID0gaW5mby1cdTAwM2VzaV9mcmVlaTtcbi1cdGJ1Zi1cdTAwM2VmX2ZzaWQgPSB1NjRfdG9fZnNpZChpZCk7XG4tXHRidWYtXHUwMDNlZl9uYW1lbGVuID0gQkZTX05BTUVMRU47XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiZnNfaW5vZGVfY2FjaGVwO1xuLVxuLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLXtcbi1cdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7XG4tXHRiaSA9IGFsbG9jX2lub2RlX3NiKHNiLCBiZnNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYmkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0bW1iX2luaXQoXHUwMDI2YmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuLVxuLVx0cmV0dXJuIFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbi17XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vO1xuLVxuLVx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5vZGVjYWNoZSh2b2lkKVxuLXtcbi1cdGJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtiZnNfaW5vZGVfY2FjaGVcJiMzNDssXG4tXHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGVfaW5mbyksXG4tXHRcdFx0XHRcdCAgICAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFxuLVx0XHRcdFx0XHRcdFNMQUJfQUNDT1VOVCksXG4tXHRcdFx0XHRcdCAgICAgaW5pdF9vbmNlKTtcbi1cdGlmIChiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKVxuLXtcbi1cdC8qXG4tXHQgKiBNYWtlIHN1cmUgYWxsIGRlbGF5ZWQgcmN1IGZyZWUgaW5vZGVzIGFyZSBmbHVzaGVkIGJlZm9yZSB3ZVxuLVx0ICogZGVzdHJveSBjYWNoZS5cbi1cdCAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cdGttZW1fY2FjaGVfZGVzdHJveShiZnNfaW5vZGVfY2FjaGVwKTtcbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJmc19zb3BzID0ge1xuLVx0LmFsbG9jX2lub2RlXHQ9IGJmc19hbGxvY19pbm9kZSxcbi1cdC5mcmVlX2lub2RlXHQ9IGJmc19mcmVlX2lub2RlLFxuLVx0LndyaXRlX2lub2RlXHQ9IGJmc193cml0ZV9pbm9kZSxcbi1cdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4tXHQuZXZpY3RfaW5vZGVcdD0gYmZzX2V2aWN0X2lub2RlLFxuLVx0LnB1dF9zdXBlclx0PSBiZnNfcHV0X3N1cGVyLFxuLVx0LnN0YXRmc1x0XHQ9IGJmc19zdGF0ZnMsXG4tfTtcbi1cbi12b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4te1xuLSNpZmRlZiBERUJVR1xuLVx0aW50IGk7XG4tXHRjaGFyICp0bXBidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4tXG4tXHRpZiAoIXRtcGJ1Zilcbi1cdFx0cmV0dXJuO1xuLVx0Zm9yIChpID0gQkZTX1NCKHMpLVx1MDAzZXNpX2xhc3RpOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4tXHRcdGlmIChpIFx1MDAzZSBQQUdFX1NJWkUgLSAxMDApIGJyZWFrO1xuLVx0XHRpZiAodGVzdF9iaXQoaSwgQkZTX1NCKHMpLVx1MDAzZXNpX2ltYXApKVxuLVx0XHRcdHN0cmNhdCh0bXBidWYsIFwmIzM0OzFcJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCYjMzQ7MFwmIzM0Oyk7XG4tXHR9XG4tXHRwcmludGYoXCYjMzQ7JXM6IGxhc3RpPSUwOGx4IFx1MDAzYyVzXHUwMDNlXFxuXCYjMzQ7LCBwcmVmaXgsIEJGU19TQihzKS1cdTAwM2VzaV9sYXN0aSwgdG1wYnVmKTtcbi1cdGtmcmVlKHRtcGJ1Zik7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4te1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKnNiaDtcbi1cdHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKmJmc19zYjtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tXHR1bnNpZ25lZCBpO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrLCBpX2VibG9jaywgaV9lb2ZmLCBzX3NpemU7XG4tXHRpbnQgc2lsZW50ID0gZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1NJTEVOVDtcbi1cbi1cdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG4tXHRpZiAoIWluZm8pXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHMtXHUwMDNlc19mc19pbmZvID0gaW5mbztcbi1cdHMtXHUwMDNlc190aW1lX21pbiA9IDA7XG4tXHRzLVx1MDAzZXNfdGltZV9tYXggPSBVMzJfTUFYO1xuLVxuLVx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIEJGU19CU0laRSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0c2JoID0gc2JfYnJlYWQocywgMCk7XG4tXHRpZiAoIXNiaClcbi1cdFx0Z290byBvdXQ7XG4tXHRiZnNfc2IgPSAoc3RydWN0IGJmc19zdXBlcl9ibG9jayAqKXNiaC1cdTAwM2ViX2RhdGE7XG4tXHRpZiAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfbWFnaWMpICE9IEJGU19NQUdJQykge1xuLVx0XHRpZiAoIXNpbGVudClcbi1cdFx0XHRwcmludGYoXCYjMzQ7Tm8gQkZTIGZpbGVzeXN0ZW0gb24gJXMgKG1hZ2ljPSUwOHgpXFxuXCYjMzQ7LCBzLVx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRpZiAoQkZTX1VOQ0xFQU4oYmZzX3NiLCBzKSBcdTAwMjZcdTAwMjYgIXNpbGVudClcbi1cdFx0cHJpbnRmKFwmIzM0OyVzIGlzIHVuY2xlYW4sIGNvbnRpbnVpbmdcXG5cJiMzNDssIHMtXHUwMDNlc19pZCk7XG4tXG4tXHRzLVx1MDAzZXNfbWFnaWMgPSBCRlNfTUFHSUM7XG4tXG4tXHRpZiAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIFx1MDAzZSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19lbmQpIHx8XG4tXHQgICAgbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGJmc19zdXBlcl9ibG9jaykgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBiZnNfZGlyZW50KSkge1xuLVx0XHRwcmludGYoXCYjMzQ7U3VwZXJibG9jayBpcyBjb3JydXB0ZWQgb24gJXNcXG5cJiMzNDssIHMtXHUwMDNlc19pZCk7XG4tXHRcdGdvdG8gb3V0MTtcbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlc2lfbGFzdGkgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIC0gQkZTX0JTSVpFKSAvIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlKSAmIzQzOyBCRlNfUk9PVF9JTk8gLSAxO1xuLVx0aWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcbi1cdFx0cHJpbnRmKFwmIzM0O05PVEU6IGZpbGVzeXN0ZW0gJXMgd2FzIGNyZWF0ZWQgd2l0aCA1MTIgaW5vZGVzLCB0aGUgcmVhbCBtYXhpbXVtIGlzIDUxMSwgbW91bnRpbmcgYW55d2F5XFxuXCYjMzQ7LCBzLVx1MDAzZXNfaWQpO1xuLVx0ZWxzZSBpZiAoaW5mby1cdTAwM2VzaV9sYXN0aSBcdTAwM2UgQkZTX01BWF9MQVNUSSkge1xuLVx0XHRwcmludGYoXCYjMzQ7SW1wb3NzaWJsZSBsYXN0IGlub2RlIG51bWJlciAlbHUgXHUwMDNlICVkIG9uICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZXNpX2xhc3RpLCBCRlNfTUFYX0xBU1RJLCBzLVx1MDAzZXNfaWQpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCRlNfUk9PVF9JTk87IGkmIzQzOyYjNDM7KVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXG4tXHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZiZnNfc29wcztcbi1cdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcbi1cdGlmIChJU19FUlIoaW5vZGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaW5vZGUpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbi1cdGlmICghcy1cdTAwM2VzX3Jvb3QpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXQxO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgQkZTX0JTSVpFX0JJVFM7XG4tXHRpbmZvLVx1MDAzZXNpX2ZyZWViID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX2VuZCkgJiM0MzsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSkgXHUwMDNlXHUwMDNlIEJGU19CU0laRV9CSVRTO1xuLVx0aW5mby1cdTAwM2VzaV9mcmVlaSA9IDA7XG4tXHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSAwO1xuLVxuLVx0LyogY2FuIHdlIHJlYWQgdGhlIGxhc3QgYmxvY2s/ICovXG4tXHRiaCA9IHNiX2JyZWFkKHMsIGluZm8tXHUwMDNlc2lfYmxvY2tzIC0gMSk7XG4tXHRpZiAoIWJoKSB7XG4tXHRcdHByaW50ZihcJiMzNDtMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcblwmIzM0Oywgcy1cdTAwM2VzX2lkLCBpbmZvLVx1MDAzZXNpX2Jsb2NrcyAtIDEpO1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dDI7XG4tXHR9XG4tXHRicmVsc2UoYmgpO1xuLVxuLVx0YmggPSBOVUxMO1xuLVx0Zm9yIChpID0gQkZTX1JPT1RfSU5POyBpIFx1MDAzYz0gaW5mby1cdTAwM2VzaV9sYXN0aTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRcdGludCBibG9jayA9IChpIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICYjNDM7IDE7XG4tXHRcdGludCBvZmYgPSAoaSAtIEJGU19ST09UX0lOTykgJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcbi1cdFx0dW5zaWduZWQgbG9uZyBlYmxvY2s7XG4tXG4tXHRcdGlmICghb2ZmKSB7XG4tXHRcdFx0YnJlbHNlKGJoKTtcbi1cdFx0XHRiaCA9IHNiX2JyZWFkKHMsIGJsb2NrKTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoIWJoKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRkaSA9IChzdHJ1Y3QgYmZzX2lub2RlICopYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZjtcbi1cbi1cdFx0LyogdGVzdCBpZiBmaWxlc3lzdGVtIGlzIG5vdCBjb3JydXB0ZWQgKi9cbi1cbi1cdFx0aV9lb2ZmID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9lb2Zmc2V0KTtcbi1cdFx0aV9zYmxvY2sgPSBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3NibG9jayk7XG4tXHRcdGlfZWJsb2NrID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRzX3NpemUgPSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19lbmQpO1xuLVxuLVx0XHRpZiAoaV9zYmxvY2sgXHUwMDNlIGluZm8tXHUwMDNlc2lfYmxvY2tzIHx8XG4tXHRcdFx0aV9lYmxvY2sgXHUwMDNlIGluZm8tXHUwMDNlc2lfYmxvY2tzIHx8XG4tXHRcdFx0aV9zYmxvY2sgXHUwMDNlIGlfZWJsb2NrIHx8XG4tXHRcdFx0KGlfZW9mZiAhPSBsZTMyX3RvX2NwdSgtMSkgXHUwMDI2XHUwMDI2IGlfZW9mZiBcdTAwM2Ugc19zaXplKSB8fFxuLVx0XHRcdGlfc2Jsb2NrICogQkZTX0JTSVpFIFx1MDAzZSBpX2VvZmYpIHtcbi1cbi1cdFx0XHRwcmludGYoXCYjMzQ7SW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcblwmIzM0OywgaSwgcy1cdTAwM2VzX2lkKTtcbi1cbi1cdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0Z290byBvdXQyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghZGktXHUwMDNlaV9pbm8pIHtcbi1cdFx0XHRpbmZvLVx1MDAzZXNpX2ZyZWVpJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gQkZTX0ZJTEVCTE9DS1MoZGkpO1xuLVxuLVx0XHRlYmxvY2sgPSAgbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRpZiAoZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xmX2VibGspXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gZWJsb2NrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdGJyZWxzZShzYmgpO1xuLVx0YmZzX2R1bXBfaW1hcChcJiMzNDtmaWxsX3N1cGVyXCYjMzQ7LCBzKTtcbi1cdHJldHVybiAwO1xuLVxuLW91dDI6XG4tXHRkcHV0KHMtXHUwMDNlc19yb290KTtcbi1cdHMtXHUwMDNlc19yb290ID0gTlVMTDtcbi1vdXQxOlxuLVx0YnJlbHNlKHNiaCk7XG4tb3V0OlxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGtmcmVlKGluZm8pO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLXtcbi1cdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHtcbi1cdC5nZXRfdHJlZSA9IGJmc19nZXRfdHJlZSxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4te1xuLVx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2YmZzX2NvbnRleHRfb3BzO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBiZnNfZnNfdHlwZSA9IHtcbi1cdC5vd25lclx0XHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHRcdD0gXCYjMzQ7YmZzXCYjMzQ7LFxuLVx0LmluaXRfZnNfY29udGV4dFx0PSBiZnNfaW5pdF9mc19jb250ZXh0LFxuLVx0LmtpbGxfc2JcdFx0PSBraWxsX2Jsb2NrX3N1cGVyLFxuLVx0LmZzX2ZsYWdzXHRcdD0gRlNfUkVRVUlSRVNfREVWLFxuLX07XG4tTU9EVUxFX0FMSUFTX0ZTKFwmIzM0O2Jmc1wmIzM0Oyk7XG4tXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcbi17XG4tXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDE7XG4tXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmJmc19mc190eXBlKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuLVx0cmV0dXJuIDA7XG4tb3V0OlxuLVx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XG4tb3V0MTpcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxuLXtcbi1cdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZiZnNfZnNfdHlwZSk7XG4tXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXG4tbW9kdWxlX2V4aXQoZXhpdF9iZnNfZnMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuQEAgLTE3LDcgJiM0MzsxNyw3IEBAXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtub3duX2ZzW10gPSB7XG4gXHRcJiMzNDs5cFwmIzM0OywgXCYjMzQ7YWRmc1wmIzM0OywgXCYjMzQ7YWZmc1wmIzM0OywgXCYjMzQ7YWZzXCYjMzQ7LCBcJiMzNDthaW9cJiMzNDssIFwmIzM0O2Fub25faW5vZGVmc1wmIzM0OywgXCYjMzQ7YXBwYXJtb3Jmc1wmIzM0Oyxcbi1cdFwmIzM0O2F1dG9mc1wmIzM0OywgXCYjMzQ7YmNhY2hlZnNcJiMzNDssIFwmIzM0O2JkZXZcJiMzNDssIFwmIzM0O2JlZnNcJiMzNDssIFwmIzM0O2Jmc1wmIzM0OywgXCYjMzQ7YmluZGVyXCYjMzQ7LCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0OyxcbiYjNDM7XHRcJiMzNDthdXRvZnNcJiMzNDssIFwmIzM0O2JjYWNoZWZzXCYjMzQ7LCBcJiMzNDtiZGV2XCYjMzQ7LCBcJiMzNDtiZWZzXCYjMzQ7LCBcJiMzNDtiaW5kZXJcJiMzNDssIFwmIzM0O2JpbmZtdF9taXNjXCYjMzQ7LFxuIFx0XCYjMzQ7YnBmXCYjMzQ7LCBcJiMzNDtidHJmc1wmIzM0OywgXCYjMzQ7YnRyZnNfdGVzdF9mc1wmIzM0OywgXCYjMzQ7Y2VwaFwmIzM0OywgXCYjMzQ7Y2dyb3VwXCYjMzQ7LCBcJiMzNDtjZ3JvdXAyXCYjMzQ7LCBcJiMzNDtjaWZzXCYjMzQ7LFxuIFx0XCYjMzQ7Y29kYVwmIzM0OywgXCYjMzQ7Y29uZmlnZnNcJiMzNDssIFwmIzM0O2NwdXNldFwmIzM0OywgXCYjMzQ7Y3JhbWZzXCYjMzQ7LCBcJiMzNDtjeGxcJiMzNDssIFwmIzM0O2RheFwmIzM0OywgXCYjMzQ7ZGVidWdmc1wmIzM0OyxcbiBcdFwmIzM0O2RldnB0c1wmIzM0OywgXCYjMzQ7ZGV2dG1wZnNcJiMzNDssIFwmIzM0O2RtYWJ1ZlwmIzM0OywgXCYjMzQ7ZHJtXCYjMzQ7LCBcJiMzNDtlY3J5cHRmc1wmIzM0OywgXCYjMzQ7ZWZpdmFyZnNcJiMzNDssIFwmIzM0O2Vmc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDk0NWQxMWYzOTY5ZjA0YjQ2ZDA2MTJhMWJjZWNhNzk1ODU1ZjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzo0MTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKJiM0MzsmIzQzOyYjNDM7IGIvQ1JFRElUUwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgUzogTG9uZ2ZvcmQsIElyZWxhbmQKIFM6IFN5ZG5leSwgQXVzdHJhbGlhCiAKIE46IFRpZ3JhbiBBLiBBaXZhemlhbgotRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrCiYjNDM7RTogYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbQogVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzCiBEOiBCRlMgZmlsZXN5c3RlbQogRDogSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHVwZGF0ZSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdAppbmRleCBhMjJmNjAzYjI5MzhlLi5jMWRiZmU5Yzk1ZDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3QKQEAgLTQ0LDggJiM0Mzs0NCw4IEBAIGltcGxlbWVudGF0aW9uLgogV2hpY2ggaXMgaXQsIEJGUyBvciBCRUZTPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogQmUsIEluYyBzYWlkLCAmIzM0O0JlT1MgRmlsZXN5c3RlbSBpcyBvZmZpY2lhbGx5IGNhbGxlZCBCRlMsIG5vdCBCZUZTJiMzNDsuCi1CdXQgVW5peHdhcmUgQm9vdCBGaWxlc3lzdGVtIGlzIGNhbGxlZCBiZnMsIHRvby4gQW5kIHRoZXkgYXJlIGFscmVhZHkgaW4KLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TCiYjNDM7QnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHkKJiM0MztpbiB0aGUga2VybmVsLiBCZWNhdXNlIG9mIHRoaXMgbmFtaW5nIGNvbmZsaWN0LCBvbiBMaW51eCB0aGUgQmVPUwogZmlsZXN5c3RlbSBpcyBjYWxsZWQgYmVmcy4KIAogSG93IHRvIEluc3RhbGwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNGI5MDE4ODA3Mi4uMDAwMDAwMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw2MCAmIzQzOzAsMCBAQAotLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotPT09PT09PT09PT09PT09PT09PT09PT09Ci1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXgKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoCi11c3VhbGx5IGNvbnRhaW5zIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIGEgZmV3IG90aGVyIGZpbGVzIHJlcXVpcmVkIGZvciB0aGUKLWJvb3QgcHJvY2Vzcy4KLQotSW4gb3JkZXIgdG8gYWNjZXNzIC9zdGFuZCBwYXJ0aXRpb24gdW5kZXIgTGludXggeW91IG9idmlvdXNseSBuZWVkIHRvCi1rbm93IHRoZSBwYXJ0aXRpb24gbnVtYmVyIGFuZCB0aGUga2VybmVsIG11c3Qgc3VwcG9ydCBVbml4V2FyZSBkaXNrIHNsaWNlcwotKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3QKLWRlcGVuZCBvbiBoYXZpbmcgVW5peFdhcmUgZGlza2xhYmVsIHN1cHBvcnQgYmVjYXVzZSBvbmUgY2FuIGFsc28gbW91bnQKLUJGUyBmaWxlc3lzdGVtIHZpYSBsb29wYmFjazo6Ci0KLSAgICAjIGxvc2V0dXAgL2Rldi9sb29wMCBzdGFuZC5pbWcKLSAgICAjIG1vdW50IC10IGJmcyAvZGV2L2xvb3AwIC9tbnQvc3RhbmQKLQotd2hlcmUgc3RhbmQuaW1nIGlzIGEgZmlsZSBjb250YWluaW5nIHRoZSBpbWFnZSBvZiBCRlMgZmlsZXN5c3RlbS4KLVdoZW4geW91IGhhdmUgZmluaXNoZWQgdXNpbmcgaXQgYW5kIHVtb3VudGVkIHlvdSBuZWVkIHRvIGFsc28gZGVhbGxvY2F0ZQotL2Rldi9sb29wMCBkZXZpY2UgYnk6OgotCi0gICAgIyBsb3NldHVwIC1kIC9kZXYvbG9vcDAKLQotWW91IGNhbiBzaW1wbGlmeSBtb3VudGluZyBieSBqdXN0IHR5cGluZzo6Ci0KLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kCi0KLXRoaXMgd2lsbCBhbGxvY2F0ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIGxvb3BiYWNrIGRldmljZSAoYW5kIGxvYWQgbG9vcC5vCi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3QKLWxvYWRlZCBhdXRvbWF0aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjb21waWxlZCB0aGUgbW9kdWxlIGFuZAotdGhhdCBtb2Rwcm9iZSBpcyBmdW5jdGlvbmluZy4gQmV3YXJlIHRoYXQgdW1vdW50IHdpbGwgbm90IGRlYWxsb2NhdGUKLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0bwotL3Byb2MvbW91bnRzLiBZb3Ugd2lsbCBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IHVzaW5nICYjMzQ7LWQmIzM0OyBzd2l0Y2ggb2YKLWxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uCi0KLVRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlIHVuZGVyIFVuaXhXYXJlIHlvdSBuZWVkIHRvIGZpbmQgb3V0IGZpcnN0IHdoaWNoCi1zbGljZSBjb250YWlucyBpdC4gVGhlIGNvbW1hbmQgcHJ0dnRvYygxTSkgaXMgeW91ciBmcmllbmQ6OgotCi0gICAgIyBwcnR2dG9jIC9kZXYvcmRzay9jMGIwdDBkMHMwCi0KLShhc3N1bWluZyB5b3VyIHJvb3QgZGlzayBpcyBvbiB0YXJnZXQ9MCwgbHVuPTAsIGJ1cz0wLCBjb250cm9sbGVyPTApLiBUaGVuIHlvdQotbG9vayBmb3IgdGhlIHNsaWNlIHdpdGggdGFnICYjMzQ7U1RBTkQmIzM0Oywgd2hpY2ggaXMgdXN1YWxseSBzbGljZSAxMC4gV2l0aCB0aGlzCi1pbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSBkZCgxKSB0byBjcmVhdGUgdGhlIEJGUyBpbWFnZTo6Ci0KLSAgICAjIHVtb3VudCAvc3RhbmQKLSAgICAjIGRkIGlmPS9kZXYvcmRzay9jMGIwdDBkMHNhIG9mPXN0YW5kLmltZyBicz01MTIKLQotSnVzdCBpbiBjYXNlLCB5b3UgY2FuIHZlcmlmeSB0aGF0IHlvdSBoYXZlIGRvbmUgdGhlIHJpZ2h0IHRoaW5nIGJ5IGNoZWNraW5nCi10aGUgbWFnaWMgbnVtYmVyOjoKLQotICAgICMgb2QgLUFkIC10eDQgc3RhbmQuaW1nIHwgbW9yZQotCi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS4KLQotSWYgeW91IGhhdmUgYW55IHBhdGNoZXMsIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBCRlMKLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6Ci0KLVRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKaW5kZXggNzM0YTQ1ZTUxNjY3NS4uN2NjZTdjYzI4ZDEyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKQEAgLTc1LDcgJiM0Mzs3NSw2IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLgogICAgYXV0b2ZzCiAgICBhdXRvZnMtbW91bnQtY29udHJvbAogICAgYmVmcwotICAgYmZzCiAgICBidHJmcwogICAgY2VwaAogICAgY29kYQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmYzMyMGIzNzM2NTZmLi4zODUzMDk1NTY3MDVlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtNDYyNywxMyAmIzQzOzQ2MjcsNiBAQCBTOglPZGQgRml4ZXMKIEY6CURvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0CiBGOglibG9jay9iZnEtKgogCi1CRlMgRklMRSBTWVNURU0KLU06CSYjMzQ7VGlncmFuIEEuIEFpdmF6aWFuJiMzNDsgJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QKLUY6CWZzL2Jmcy8KLUY6CWluY2x1ZGUvdWFwaS9saW51eC9iZnNfZnMuaAotCiBCSVRNQVAgQVBJCiBNOglZdXJ5IE5vcm92ICZsdDt5dXJ5Lm5vcm92QGdtYWlsLmNvbSZndDsKIFI6CVJhc211cyBWaWxsZW1vZXMgJmx0O2xpbnV4QHJhc211c3ZpbGxlbW9lcy5kayZndDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwppbmRleCA1NmE4Zjc2ZGFiNDE0Li40ZmI0ZDQ1ZjNjZGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCkBAIC0zMzMsNyAmIzQzOzMzMyw2IEBAIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19KRkZTMl9GUz1tCiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWcKaW5kZXggODVlOTVjMGFlNDEwNy4uM2QxYzMyZDM0NzVlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnCkBAIC0zNDAsNyAmIzQzOzM0MCw2IEBAIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19KRkZTMl9GUz1tCiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnCmluZGV4IDA0OThhMDExNTM0OTAuLjI1NDUxNjhiNzViYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWcKQEAgLTMzOSw3ICYjNDM7MzM5LDYgQEAgQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi1DT05GSUdfQkZTX0ZTPW0KIENPTkZJR19FRlNfRlM9bQogQ09ORklHX0pGRlMyX0ZTPW0KIENPTkZJR19KRkZTMl9GU19YQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggMDllMDA2YzdjZDdjNi4uY2QyYTgzMTYxNGM4OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMzE4LDcgJiM0MzszMTgsNiBAQCBDT05GSUdfQURGU19GUz1tCiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19CRUZTX0ZTPW0KLUNPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19WWEZTX0ZTPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKaW5kZXggMzkxYzk5MTE3ZWUwNi4uNjg4MDUxYjExY2UxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKQEAgLTIsNyAmIzQzOzIsNiBAQCBDT05GSUdfQURGU19GUz1tCiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfQklORk1UX01JU0M9bQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCmluZGV4IGFjZmZjNWMxN2Y5MmQuLjhhYWIyMjlmYjkwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZwpAQCAtOTQ1LDcgJiM0Mzs5NDUsNiBAQCBDT05GSUdfRUNSWVBUX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1ZYRlNfRlM9bQpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZTA1OTE3YWRjZDYwOC4uMWNiMGIzYThiMTJjYSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnCkBAIC0zMTQsNyAmIzQzOzMxNCw2IEBAIHNvdXJjZSAmIzM0O2ZzL2VjcnlwdGZzL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZnMvaGZzL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2ZzL2JlZnMvS2NvbmZpZyYjMzQ7Ci1zb3VyY2UgJiMzNDtmcy9iZnMvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtmcy9qZmZzMi9LY29uZmlnJiMzNDsKICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbgogc291cmNlICYjMzQ7ZnMvdWJpZnMvS2NvbmZpZyYjMzQ7CmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDA1NWRmYzIzZDgyYjYuLjE2ZjExMDhiNjRlMWEgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlCkBAIC03Niw3ICYjNDM7NzYsNiBAQCBvYmotJChDT05GSUdfQ09EQV9GUykJCSYjNDM7PSBjb2RhLwogb2JqLSQoQ09ORklHX01JTklYX0ZTKQkJJiM0Mzs9IG1pbml4Lwogb2JqLSQoQ09ORklHX0ZBVF9GUykJCSYjNDM7PSBmYXQvCiBvYmotJChDT05GSUdfRVhGQVRfRlMpCQkmIzQzOz0gZXhmYXQvCi1vYmotJChDT05GSUdfQkZTX0ZTKQkJJiM0Mzs9IGJmcy8KIG9iai0kKENPTkZJR19JU085NjYwX0ZTKQkmIzQzOz0gaXNvZnMvCiBvYmotJChDT05GSUdfSEZTUExVU19GUykJJiM0Mzs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTJiM0MzsKIG9iai0kKENPTkZJR19IRlNfRlMpCQkmIzQzOz0gaGZzLwpkaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3ZWY4NjZiNjJhNi4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDIxICYjNDM7MCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLWNvbmZpZyBCRlNfRlMKLQl0cmlzdGF0ZSAmIzM0O0JGUyBmaWxlIHN5c3RlbSBzdXBwb3J0JiMzNDsKLQlkZXBlbmRzIG9uIEJMT0NLCi0Jc2VsZWN0IEJVRkZFUl9IRUFECi0JaGVscAotCSAgQm9vdCBGaWxlIFN5c3RlbSAoQkZTKSBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgdW5kZXIgU0NPIFVuaXhXYXJlIHRvCi0JICBhbGxvdyB0aGUgYm9vdGxvYWRlciBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBpbWFnZSBhbmQgb3RoZXIgaW1wb3J0YW50Ci0JICBmaWxlcyBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gIEl0IGlzIHVzdWFsbHkgbW91bnRlZCB1bmRlciAvc3RhbmQKLQkgIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgc2xpY2UgbWFya2VkIGFzICYjMzQ7U1RBTkQmIzM0OyBpbiB0aGUgVW5peFdhcmUKLQkgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXMKLQkgIG9uIHlvdXIgL3N0YW5kIHNsaWNlIGZyb20gd2l0aGluIExpbnV4LiAgWW91IHRoZW4gYWxzbyBuZWVkIHRvIHNheSBZCi0JICB0byAmIzM0O1VuaXhXYXJlIHNsaWNlcyBzdXBwb3J0JiMzNDssIGJlbG93LiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQkZTCi0JICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGUKLQkgICZsdDtmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdCZndDsuCi0KLQkgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRoaXMgaXMgYWJvdXQsIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKLQkgIGJmcy4gIE5vdGUgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiAodGhlIG9uZQotCSAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9NYWtlZmlsZSBiL2ZzL2Jmcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw4ICYjNDM7MCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLSMKLSMgTWFrZWZpbGUgZm9yIEJGUyBmaWxlc3lzdGVtLgotIwotCi1vYmotJChDT05GSUdfQkZTX0ZTKSAmIzQzOz0gYmZzLm8KLQotYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm8KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9iZnMuaCBiL2ZzL2Jmcy9iZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvYmZzLmgKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw2OSAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qCi0gKglmcy9iZnMvYmZzLmgKLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKLSAqLwotI2lmbmRlZiBfRlNfQkZTX0JGU19ICi0jZGVmaW5lIF9GU19CRlNfQkZTX0gKLQotI2luY2x1ZGUgJmx0O2xpbnV4L2Jmc19mcy5oJmd0OwotCi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuCi0gICBJbiBhY3R1YWwgZmFjdCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIDUxMnRoIGlub2RlIChpLmUuIGlub2RlIE5vLiA1MTMgb3IgZmlsZSBOby4gNTExKQotICAgd2lsbCBmYWlsIHdpdGggRU5PU1BDIGluIGJmc19hZGRfZW50cnkoKTogdGhlIHJvb3QgZGlyZWN0b3J5IGNhbm5vdCBjb250YWluIHNvIG1hbnkgZW50cmllcywgY291bnRpbmcgJiMzOTsuLiYjMzk7LgotICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nCi0gICBpZiBhIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHN1Y2ggJiMzNDtpbXBvc3NpYmxlIHRvIGZpbGwgdXAmIzM0OyBudW1iZXIgb2YgaW5vZGVzICovCi0jZGVmaW5lIEJGU19NQVhfTEFTVEkJNTEzCi0KLS8qCi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBzdXBlcmJsb2NrIGluZm8KLSAqLwotc3RydWN0IGJmc19zYl9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIHNpX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nIHNpX2ZyZWViOwotCXVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7Ci0JdW5zaWduZWQgbG9uZyBzaV9sZl9lYmxrOwotCXVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7Ci0JREVDTEFSRV9CSVRNQVAoc2lfaW1hcCwgQkZTX01BWF9MQVNUSSYjNDM7MSk7Ci0Jc3RydWN0IG11dGV4IGJmc19sb2NrOwotfTsKLQotLyoKLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIGlub2RlIGluZm8KLSAqLwotc3RydWN0IGJmc19pbm9kZV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGlfZHNrX2lubzsgLyogaW5vZGUgbnVtYmVyIGZyb20gdGhlIGRpc2ssIGNhbiBiZSAwICovCi0JdW5zaWduZWQgbG9uZyBpX3NibG9jazsKLQl1bnNpZ25lZCBsb25nIGlfZWJsb2NrOwotCXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyBpX21ldGFkYXRhX2JoczsKLQlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZzX3NiX2luZm8gKkJGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Ci19Ci0KLQotI2RlZmluZSBwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSICYjMzQ7QkZTLWZzOiAlcygpOiAmIzM0OyBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKQotCi0vKiBpbm9kZS5jICovCi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7Ci1leHRlcm4gdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwotCi0vKiBmaWxlLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9pbm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wczsKLQotLyogZGlyLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zOwotCi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2ZzL2Jmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM1NiAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8qCi0gKglmcy9iZnMvZGlyLmMKLSAqCUJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4KLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4ICBUaWdyYW4gQWl2YXppYW4gJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci0gKiAgTWFkZSBlbmRpYW5uZXNzLWNsZWFuIGJ5IEFuZHJldyBTdHJpYmJsZWhpbGwgJmx0O2Fkc0B3b21wb20ub3JnJmd0OyAyMDA1Ci0gKi8KLQotI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2J1ZmZlcl9oZWFkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLSNpbmNsdWRlICYjMzQ7YmZzLmgmIzM0OwotCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGRwcmludGYoeC4uLikJcHJpbnRmKHgpCi0jZWxzZQotI2RlZmluZSBkcHJpbnRmKHguLi4pCi0jZW5kaWYKLQotc3RhdGljIGludCBiZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsIGludCBpbm8pOwotc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqYmZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLAotCQkJCXN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7Ci0KLXN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShmKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBiZnNfZGlyZW50ICpkZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCBibG9jazsKLQotCWlmIChjdHgtJmd0O3BvcyAmYW1wOyAoQkZTX0RJUkVOVF9TSVpFIC0gMSkpIHsKLQkJcHJpbnRmKCYjMzQ7QmFkIGZfcG9zPSUwOGx4IGZvciAlczolMDhsbHhcbiYjMzQ7LAotCQkJCQkodW5zaWduZWQgbG9uZyljdHgtJmd0O3BvcywKLQkJCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd2hpbGUgKGN0eC0mZ3Q7cG9zICZsdDsgZGlyLSZndDtpX3NpemUpIHsKLQkJb2Zmc2V0ID0gY3R4LSZndDtwb3MgJmFtcDsgKEJGU19CU0laRSAtIDEpOwotCQlibG9jayA9IEJGU19JKGRpciktJmd0O2lfc2Jsb2NrICYjNDM7IChjdHgtJmd0O3BvcyAmZ3Q7Jmd0OyBCRlNfQlNJWkVfQklUUyk7Ci0JCWJoID0gc2JfYnJlYWQoZGlyLSZndDtpX3NiLCBibG9jayk7Ci0JCWlmICghYmgpIHsKLQkJCWN0eC0mZ3Q7cG9zICYjNDM7PSBCRlNfQlNJWkUgLSBvZmZzZXQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkbyB7Ci0JCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZnNldCk7Ci0JCQlpZiAoZGUtJmd0O2lubykgewotCQkJCWludCBzaXplID0gc3RybmxlbihkZS0mZ3Q7bmFtZSwgQkZTX05BTUVMRU4pOwotCQkJCWlmICghZGlyX2VtaXQoY3R4LCBkZS0mZ3Q7bmFtZSwgc2l6ZSwKLQkJCQkJCWxlMTZfdG9fY3B1KGRlLSZndDtpbm8pLAotCQkJCQkJRFRfVU5LTk9XTikpIHsKLQkJCQkJYnJlbHNlKGJoKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQkJb2Zmc2V0ICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7Ci0JCQljdHgtJmd0O3BvcyAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFOwotCQl9IHdoaWxlICgob2Zmc2V0ICZsdDsgQkZTX0JTSVpFKSAmYW1wOyZhbXA7IChjdHgtJmd0O3BvcyAmbHQ7IGRpci0mZ3Q7aV9zaXplKSk7Ci0JCWJyZWxzZShiaCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHsKLQkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAotCS5pdGVyYXRlX3NoYXJlZAk9IGJmc19yZWFkZGlyLAotCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCi0JLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotfTsKLQotc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRpci0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7Ci0JdW5zaWduZWQgbG9uZyBpbm87Ci0KLQlpbm9kZSA9IG5ld19pbm9kZShzKTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gLUVOT01FTTsKLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby0mZ3Q7c2lfaW1hcCwgaW5mby0mZ3Q7c2lfbGFzdGkgJiM0MzsgMSk7Ci0JaWYgKGlubyAmZ3Q7IGluZm8tJmd0O3NpX2xhc3RpKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQlzZXRfYml0KGlubywgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0JaW5mby0mZ3Q7c2lfZnJlZWktLTsKLQlpbm9kZV9pbml0X293bmVyKCZhbXA7bm9wX21udF9pZG1hcCwgaW5vZGUsIGRpciwgbW9kZSk7Ci0Jc2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpOwotCWlub2RlLSZndDtpX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19maWxlX2lub3BzOwotCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7YmZzX2ZpbGVfb3BlcmF0aW9uczsKLQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7YmZzX2FvcHM7Ci0JaW5vZGUtJmd0O2lfaW5vID0gaW5vOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9kc2tfaW5vID0gaW5vOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9zYmxvY2sgPSAwOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2sgPSAwOwotCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKLSAgICAgICAgbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JYmZzX2R1bXBfaW1hcCgmIzM0O2NyZWF0ZSYjMzQ7LCBzKTsKLQotCWVyciA9IGJmc19hZGRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCBpbm9kZS0mZ3Q7aV9pbm8pOwotCWlmIChlcnIpIHsKLQkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwotCQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJCXVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBiZnNfZGlyZW50ICpkZTsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLSZndDtpX3NiKTsKLQotCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBCRlNfTkFNRUxFTikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7Ci0KLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWJoID0gYmZzX2ZpbmRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCAmYW1wO2RlKTsKLQlpZiAoYmgpIHsKLQkJdW5zaWduZWQgbG9uZyBpbm8gPSAodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdShkZS0mZ3Q7aW5vKTsKLQkJYnJlbHNlKGJoKTsKLQkJaW5vZGUgPSBiZnNfaWdldChkaXItJmd0O2lfc2IsIGlubyk7Ci0JfQotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJCXN0cnVjdCBkZW50cnkgKm5ldykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShvbGQpOwotCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS0mZ3Q7aV9zYik7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsICZhbXA7bmV3LSZndDtkX25hbWUsIGlub2RlLSZndDtpX2lubyk7Ci0JaWYgKGVycikgewotCQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWluY19ubGluayhpbm9kZSk7Ci0JaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWlob2xkKGlub2RlKTsKLQlkX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpOwotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IGVycm9yID0gLUVOT0VOVDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKmRlOwotCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS0mZ3Q7aV9zYik7Ci0KLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWJoID0gYmZzX2ZpbmRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCAmYW1wO2RlKTsKLQlpZiAoIWJoIHx8IChsZTE2X3RvX2NwdShkZS0mZ3Q7aW5vKSAhPSBpbm9kZS0mZ3Q7aV9pbm8pKQotCQlnb3RvIG91dF9icmVsc2U7Ci0KLQlpZiAoIWlub2RlLSZndDtpX25saW5rKSB7Ci0JCXByaW50ZigmIzM0O3VubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcbiYjMzQ7LAotCQkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vZGUtJmd0O2lfaW5vLAotCQkJCQlpbm9kZS0mZ3Q7aV9ubGluayk7Ci0JCXNldF9ubGluayhpbm9kZSwgMSk7Ci0JfQotCWRlLSZndDtpbm8gPSAwOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtCRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JaW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7Ci0JbWFya19pbm9kZV9kaXJ0eShkaXIpOwotCWlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgaW5vZGVfZ2V0X2N0aW1lKGRpcikpOwotCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKLQllcnJvciA9IDA7Ci0KLW91dF9icmVsc2U6Ci0JYnJlbHNlKGJoKTsKLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsICpuZXdfYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKm9sZF9kZSwgKm5ld19kZTsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87Ci0JaW50IGVycm9yID0gLUVOT0VOVDsKLQotCWlmIChmbGFncyAmYW1wOyB+UkVOQU1FX05PUkVQTEFDRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvbGRfYmggPSBuZXdfYmggPSBOVUxMOwotCW9sZF9pbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7Ci0JaWYgKFNfSVNESVIob2xkX2lub2RlLSZndDtpX21vZGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZm8gPSBCRlNfU0Iob2xkX2lub2RlLSZndDtpX3NiKTsKLQotCW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Jb2xkX2JoID0gYmZzX2ZpbmRfZW50cnkob2xkX2RpciwgJmFtcDtvbGRfZGVudHJ5LSZndDtkX25hbWUsICZhbXA7b2xkX2RlKTsKLQotCWlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtJmd0O2lubykgIT0gb2xkX2lub2RlLSZndDtpX2lubykpCi0JCWdvdG8gZW5kX3JlbmFtZTsKLQotCWVycm9yID0gLUVQRVJNOwotCW5ld19pbm9kZSA9IGRfaW5vZGUobmV3X2RlbnRyeSk7Ci0JbmV3X2JoID0gYmZzX2ZpbmRfZW50cnkobmV3X2RpciwgJmFtcDtuZXdfZGVudHJ5LSZndDtkX25hbWUsICZhbXA7bmV3X2RlKTsKLQotCWlmIChuZXdfYmggJmFtcDsmYW1wOyAhbmV3X2lub2RlKSB7Ci0JCWJyZWxzZShuZXdfYmgpOwotCQluZXdfYmggPSBOVUxMOwotCX0KLQlpZiAoIW5ld19iaCkgewotCQllcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgJmFtcDtuZXdfZGVudHJ5LSZndDtkX25hbWUsCi0JCQkJCW9sZF9pbm9kZS0mZ3Q7aV9pbm8pOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVuZF9yZW5hbWU7Ci0JfQotCW9sZF9kZS0mZ3Q7aW5vID0gMDsKLQlpbm9kZV9zZXRfbXRpbWVfdG9fdHMob2xkX2RpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQob2xkX2RpcikpOwotCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7Ci0JaWYgKG5ld19pbm9kZSkgewotCQlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpOwotCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwotCX0KLQltbWJfbWFya19idWZmZXJfZGlydHkob2xkX2JoLCAmYW1wO0JGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JZXJyb3IgPSAwOwotCi1lbmRfcmVuYW1lOgotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlicmVsc2Uob2xkX2JoKTsKLQlicmVsc2UobmV3X2JoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7Ci0JLmNyZWF0ZQkJCT0gYmZzX2NyZWF0ZSwKLQkubG9va3VwCQkJPSBiZnNfbG9va3VwLAotCS5saW5rCQkJPSBiZnNfbGluaywKLQkudW5saW5rCQkJPSBiZnNfdW5saW5rLAotCS5yZW5hbWUJCQk9IGJmc19yZW5hbWUsCi19OwotCi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubykKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gY2hpbGQtJmd0O25hbWU7Ci0JaW50IG5hbWVsZW4gPSBjaGlsZC0mZ3Q7bGVuOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKmRlOwotCWludCBibG9jaywgc2Jsb2NrLCBlYmxvY2ssIG9mZiwgcG9zOwotCWludCBpOwotCi0JZHByaW50ZigmIzM0O25hbWU9JXMsIG5hbWVsZW49JWRcbiYjMzQ7LCBuYW1lLCBuYW1lbGVuKTsKLQotCXNibG9jayA9IEJGU19JKGRpciktJmd0O2lfc2Jsb2NrOwotCWVibG9jayA9IEJGU19JKGRpciktJmd0O2lfZWJsb2NrOwotCWZvciAoYmxvY2sgPSBzYmxvY2s7IGJsb2NrICZsdDs9IGVibG9jazsgYmxvY2smIzQzOyYjNDM7KSB7Ci0JCWJoID0gc2JfYnJlYWQoZGlyLSZndDtpX3NiLCBibG9jayk7Ci0JCWlmICghYmgpCi0JCQlyZXR1cm4gLUVJTzsKLQkJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBCRlNfQlNJWkU7IG9mZiAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFKSB7Ci0JCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZik7Ci0JCQlpZiAoIWRlLSZndDtpbm8pIHsKLQkJCQlwb3MgPSAoYmxvY2sgLSBzYmxvY2spICogQkZTX0JTSVpFICYjNDM7IG9mZjsKLQkJCQlpZiAocG9zICZndDs9IGRpci0mZ3Q7aV9zaXplKSB7Ci0JCQkJCWRpci0mZ3Q7aV9zaXplICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7Ci0JCQkJCWlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7Ci0JCQkJfQotCQkJCWlub2RlX3NldF9tdGltZV90b190cyhkaXIsCi0JCQkJCQkgICAgICBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTsKLQkJCQltYXJrX2lub2RlX2RpcnR5KGRpcik7Ci0JCQkJZGUtJmd0O2lubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTsKLQkJCQlmb3IgKGkgPSAwOyBpICZsdDsgQkZTX05BTUVMRU47IGkmIzQzOyYjNDM7KQotCQkJCQlkZS0mZ3Q7bmFtZVtpXSA9Ci0JCQkJCQkoaSAmbHQ7IG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJCQkJJmFtcDtCRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCQkJYnJlbHNlKGJoKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQlicmVsc2UoYmgpOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKLQkJCQkJCQljb25zdCBjaGFyICpidWZmZXIpCi17Ci0JaWYgKChsZW4gJmx0OyBCRlNfTkFNRUxFTikgJmFtcDsmYW1wOyBidWZmZXJbbGVuXSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuICFtZW1jbXAobmFtZSwgYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCWNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwKLQkJCXN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2RpcikKLXsKLQl1bnNpZ25lZCBsb25nIGJsb2NrID0gMCwgb2Zmc2V0ID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKLQlzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGNoaWxkLSZndDtuYW1lOwotCWludCBuYW1lbGVuID0gY2hpbGQtJmd0O2xlbjsKLQotCSpyZXNfZGlyID0gTlVMTDsKLQlpZiAobmFtZWxlbiAmZ3Q7IEJGU19OQU1FTEVOKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlIChibG9jayAqIEJGU19CU0laRSAmIzQzOyBvZmZzZXQgJmx0OyBkaXItJmd0O2lfc2l6ZSkgewotCQlpZiAoIWJoKSB7Ci0JCQliaCA9IHNiX2JyZWFkKGRpci0mZ3Q7aV9zYiwgQkZTX0koZGlyKS0mZ3Q7aV9zYmxvY2sgJiM0MzsgYmxvY2spOwotCQkJaWYgKCFiaCkgewotCQkJCWJsb2NrJiM0MzsmIzQzOzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZnNldCk7Ci0JCW9mZnNldCAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFOwotCQlpZiAobGUxNl90b19jcHUoZGUtJmd0O2lubykgJmFtcDsmYW1wOwotCQkJCWJmc19uYW1lY21wKG5hbWVsZW4sIG5hbWUsIGRlLSZndDtuYW1lKSkgewotCQkJKnJlc19kaXIgPSBkZTsKLQkJCXJldHVybiBiaDsKLQkJfQotCQlpZiAob2Zmc2V0ICZsdDsgYmgtJmd0O2Jfc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlicmVsc2UoYmgpOwotCQliaCA9IE5VTEw7Ci0JCW9mZnNldCA9IDA7Ci0JCWJsb2NrJiM0MzsmIzQzOzsKLQl9Ci0JYnJlbHNlKGJoKTsKLQlyZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzNkNmJkZTk5MmI4Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2ZzL2Jmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyMDMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICoJZnMvYmZzL2ZpbGUuYwotICoJQkZTIGZpbGUgb3BlcmF0aW9ucy4KLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKLSAqCi0gKglNYWtlIHRoZSBmaWxlIGJsb2NrIGFsbG9jYXRpb24gYWxnb3JpdGhtIHVuZGVyc3RhbmQgdGhlIHNpemUKLSAqCW9mIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4KLSAqCUNvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgJmx0O2RtaXRyaS52b3JvYmlldkBnbWFpbC5jb20mZ3Q7Ci0gKgotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L21wYWdlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnVmZmVyX2hlYWQuaCZndDsKLSNpbmNsdWRlICYjMzQ7YmZzLmgmIzM0OwotCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGRwcmludGYoeC4uLikJcHJpbnRmKHgpCi0jZWxzZQotI2RlZmluZSBkcHJpbnRmKHguLi4pCi0jZW5kaWYKLQotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsgCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi19OwotCi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqbmV3OwotCi0JYmggPSBzYl9icmVhZChzYiwgZnJvbSk7Ci0JaWYgKCFiaCkKLQkJcmV0dXJuIC1FSU87Ci0JbmV3ID0gc2JfZ2V0YmxrKHNiLCB0byk7Ci0JbWVtY3B5KG5ldy0mZ3Q7Yl9kYXRhLCBiaC0mZ3Q7Yl9kYXRhLCBiaC0mZ3Q7Yl9zaXplKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShuZXcpOwotCWJmb3JnZXQoYmgpOwotCWJyZWxzZShuZXcpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHdoZXJlKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWRwcmludGYoJiMzNDslMDhseC0lMDhseC0mZ3Q7JTA4bHhcbiYjMzQ7LCBzdGFydCwgZW5kLCB3aGVyZSk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgJmx0Oz0gZW5kOyBpJiM0MzsmIzQzOykKLQkJaWYoYmZzX21vdmVfYmxvY2soaSwgd2hlcmUgJiM0MzsgaSwgc2IpKSB7Ci0JCQlkcHJpbnRmKCYjMzQ7ZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLSZndDsgJTA4bHhcbiYjMzQ7LCBpLAotCQkJCQkJCQl3aGVyZSAmIzQzOyBpKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGh5czsKLQlpbnQgZXJyOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpOwotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7Ci0KLQlwaHlzID0gYmktJmd0O2lfc2Jsb2NrICYjNDM7IGJsb2NrOwotCWlmICghY3JlYXRlKSB7Ci0JCWlmIChwaHlzICZsdDs9IGJpLSZndDtpX2VibG9jaykgewotCQkJZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA5bHggKGdyYW50ZWQpXG4mIzM0OywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCQltYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGUgZmlsZSBpcyBub3QgZW1wdHkgYW5kIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgd2l0aGluIHRoZQotCSAqIHJhbmdlIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZmlsZSwgd2UgY2FuIGdyYW50IGl0LgotCSAqLwotCWlmIChiaS0mZ3Q7aV9zYmxvY2sgJmFtcDsmYW1wOyAocGh5cyAmbHQ7PSBiaS0mZ3Q7aV9lYmxvY2spKSB7Ci0JCWRwcmludGYoJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChpbnRlcmltIGJsb2NrIGdyYW50ZWQpXG4mIzM0OywgCi0JCQkJY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCW1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuICovCi0JaWYgKHBoeXMgJmd0Oz0gaW5mby0mZ3Q7c2lfYmxvY2tzKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCS8qIFRoZSByZXN0IGhhcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpdHNlbGYuICovCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQotCS8qCi0JICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZAotCSAqIGJsb2NrLCB3ZSBjYW4gZXh0ZW5kIHRoZSBmaWxlIHRyaXZpYWxseSwgd2l0aG91dCBtb3ZpbmcgaXQKLQkgKiBhbnl3aGVyZS4KLQkgKi8KLQlpZiAoYmktJmd0O2lfZWJsb2NrID09IGluZm8tJmd0O3NpX2xmX2VibGspIHsKLQkJZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXG4mIzM0OywgCi0JCQkJY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCW1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTsKLQkJaW5mby0mZ3Q7c2lfZnJlZWIgLT0gcGh5cyAtIGJpLSZndDtpX2VibG9jazsKLQkJaW5mby0mZ3Q7c2lfbGZfZWJsayA9IGJpLSZndDtpX2VibG9jayA9IHBoeXM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQllcnIgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBPaywgd2UgaGF2ZSB0byBtb3ZlIHRoaXMgZW50aXJlIGZpbGUgdG8gdGhlIG5leHQgZnJlZSBibG9jay4gKi8KLQlwaHlzID0gaW5mby0mZ3Q7c2lfbGZfZWJsayAmIzQzOyAxOwotCWlmIChwaHlzICYjNDM7IGJsb2NrICZndDs9IGluZm8tJmd0O3NpX2Jsb2NrcykgewotCQllcnIgPSAtRU5PU1BDOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYmktJmd0O2lfc2Jsb2NrKSB7Ci0JCWVyciA9IGJmc19tb3ZlX2Jsb2Nrcyhpbm9kZS0mZ3Q7aV9zYiwgYmktJmd0O2lfc2Jsb2NrLCAKLQkJCQkJCWJpLSZndDtpX2VibG9jaywgcGh5cyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGYoJiMzNDtmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLSZndDsgZnMgY29ycnVwdGlvblxuJiMzNDssCi0JCQkJCQkJCWlub2RlLSZndDtpX2lubyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZQotCQllcnIgPSAwOwotCi0JZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKG1vdmVkKVxuJiMzNDssCi0gICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JYmktJmd0O2lfc2Jsb2NrID0gcGh5czsKLQlwaHlzICYjNDM7PSBibG9jazsKLQlpbmZvLSZndDtzaV9sZl9lYmxrID0gYmktJmd0O2lfZWJsb2NrID0gcGh5czsKLQotCS8qCi0JICogVGhpcyBhc3N1bWVzIG5vdGhpbmcgY2FuIHdyaXRlIHRoZSBpbm9kZSBiYWNrIHdoaWxlIHdlIGFyZSBoZXJlCi0JICogYW5kIHRodXMgdXBkYXRlIGlub2RlLSZndDtpX2Jsb2NrcyEgKFhYWCkKLQkgKi8KLQlpbmZvLSZndDtzaV9mcmVlYiAtPSBiaS0mZ3Q7aV9lYmxvY2sgLSBiaS0mZ3Q7aV9zYmxvY2sgJiM0MzsgMSAtIGlub2RlLSZndDtpX2Jsb2NrczsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQltYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQotewotCXJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQotCWlmICh0byAmZ3Q7IGlub2RlLSZndDtpX3NpemUpCi0JCXRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKLQkJCSAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCB2b2lkICoqZnNkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBiZnNfZ2V0X2Jsb2NrKTsKLQlpZiAodW5saWtlbHkocmV0KSkKLQkJYmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgJiM0MzsgbGVuKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzZWN0b3JfdCBiZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHMgPSB7Ci0JLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCi0JLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gYmZzX3JlYWRfZm9saW8sCi0JLndyaXRlcGFnZXMJPSBiZnNfd3JpdGVwYWdlcywKLQkud3JpdGVfYmVnaW4JPSBiZnNfd3JpdGVfYmVnaW4sCi0JLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAotCS5taWdyYXRlX2ZvbGlvCT0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCi0JLmJtYXAJCT0gYmZzX2JtYXAsCi19OwotCi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9pbm9wczsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZTNhODQ4YjRlZmQuLjAwMDAwMDAwMDAwMDAKLS0tIGEvZnMvYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw1MzggJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKglmcy9iZnMvaW5vZGUuYwotICoJQkZTIHN1cGVyYmxvY2sgYW5kIGlub2RlIG9wZXJhdGlvbnMuCi0gKglDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci0gKglGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuCi0gKglNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCAmbHQ7YWRzQHdvbXBvbS5vcmcmZ3Q7LCAyMDA1LgotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3Zmcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mc19jb250ZXh0LmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2Jmcy5oJiMzNDsKLQotTU9EVUxFX0FVVEhPUigmIzM0O1RpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsmIzM0Oyk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtTQ08gVW5peFdhcmUgQkZTIGZpbGVzeXN0ZW0gZm9yIExpbnV4JiMzNDspOwotTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KLSN1bmRlZiBERUJVRwotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgZHByaW50Zih4Li4uKQlwcmludGYoeCkKLSNlbHNlCi0jZGVmaW5lIGRwcmludGYoeC4uLikKLSNlbmRpZgotCi1zdHJ1Y3QgaW5vZGUgKmJmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQotewotCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgYmxvY2ssIG9mZjsKLQotCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX05FVykpCi0JCXJldHVybiBpbm9kZTsKLQotCWlmICgoaW5vICZsdDsgQkZTX1JPT1RfSU5PKSB8fCAoaW5vICZndDsgQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c2lfbGFzdGkpKSB7Ci0JCXByaW50ZigmIzM0O0JhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcbiYjMzQ7LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTsKLQliaCA9IHNiX2JyZWFkKGlub2RlLSZndDtpX3NiLCBibG9jayk7Ci0JaWYgKCFiaCkgewotCQlwcmludGYoJiMzNDtVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxuJiMzNDssIGlub2RlLSZndDtpX3NiLSZndDtzX2lkLAotCQkJCQkJCQkJaW5vKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlvZmYgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOwotCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZjsKLQotCS8qCi0JICogaHR0cHM6Ly9tYXJ0aW4uaGlubmVyLmluZm8vZnMvYmZzL2Jmcy1zdHJ1Y3R1cmUuaHRtbCBleHBsYWlucyB0aGF0Ci0JICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLSZndDtpX21vZGUKLQkgKiB2YWx1ZS4gVGhpcyBtZWFucyB0aGF0LCBhbHRob3VnaCBiZnNfd3JpdGVfaW5vZGUoKSBzYXZlcyB3aG9sZQotCSAqIGlub2RlLSZndDtpX21vZGUgYml0cyAod2hpY2ggaW5jbHVkZSBTX0lGTVQgYml0cyBhbmQgU19JU3tVSUQsR0lELFZUWH0KLQkgKiBiaXRzKSwgbWlkZGxlIDcgYml0cyBvZiBkaS0mZ3Q7aV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2UKLQkgKiBiaXRzIHdlcmUgbm90IHNhdmVkIGJ5IGJmc193cml0ZV9pbm9kZSgpLgotCSAqIFNpbmNlIHdlIGNhbiYjMzk7dCB0ZWxsIHdoZXRoZXIgbWlkZGxlIDcgYml0cyBhcmUgZ2FyYmFnZSwgdXNlIG9ubHkKLQkgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmcKLQkgKiBnYXJiYWdlKSBhbmQgcmVjb25zdHJ1Y3QgU19JRk1UIGJpdHMgZm9yIExpbnV4IGVudmlyb25tZW50IGZyb20KLQkgKiBkaS0mZ3Q7aV92dHlwZSB2YWx1ZS4KLQkgKi8KLQlpbm9kZS0mZ3Q7aV9tb2RlID0gMHgwMDAwMEZGRiAmYW1wOyBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9tb2RlKTsKLQlpZiAobGUzMl90b19jcHUoZGktJmd0O2lfdnR5cGUpID09IEJGU19WRElSKSB7Ci0JCWlub2RlLSZndDtpX21vZGUgfD0gU19JRkRJUjsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19kaXJfaW5vcHM7Ci0JCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7YmZzX2Rpcl9vcGVyYXRpb25zOwotCX0gZWxzZSBpZiAobGUzMl90b19jcHUoZGktJmd0O2lfdnR5cGUpID09IEJGU19WUkVHKSB7Ci0JCWlub2RlLSZndDtpX21vZGUgfD0gU19JRlJFRzsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19maWxlX2lub3BzOwotCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2Jmc19maWxlX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtiZnNfYW9wczsKLQl9IGVsc2UgewotCQlicmVsc2UoYmgpOwotCQlwcmludGYoJiMzNDtVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XG4mIzM0OywKLQkJICAgICAgIGxlMzJfdG9fY3B1KGRpLSZndDtpX3Z0eXBlKSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlubyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JQkZTX0koaW5vZGUpLSZndDtpX3NibG9jayA9ICBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9zYmxvY2spOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2sgPSAgbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQlCRlNfSShpbm9kZSktJmd0O2lfZHNrX2lubyA9IGxlMTZfdG9fY3B1KGRpLSZndDtpX2lubyk7Ci0JaV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLSZndDtpX3VpZCkpOwotCWlfZ2lkX3dyaXRlKGlub2RlLCAgbGUzMl90b19jcHUoZGktJmd0O2lfZ2lkKSk7Ci0Jc2V0X25saW5rKGlub2RlLCBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9ubGluaykpOwotCWlub2RlLSZndDtpX3NpemUgPSBCRlNfRklMRVNJWkUoZGkpOwotCWlub2RlLSZndDtpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTsKLQlpbm9kZV9zZXRfYXRpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLSZndDtpX2F0aW1lKSwgMCk7Ci0JaW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9tdGltZSksIDApOwotCWlub2RlX3NldF9jdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktJmd0O2lfY3RpbWUpLCAwKTsKLQotCWJyZWxzZShiaCk7Ci0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JcmV0dXJuIGlub2RlOwotCi1lcnJvcjoKLQlpZ2V0X2ZhaWxlZChpbm9kZSk7Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmZzX2lub2RlICpmaW5kX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKnApCi17Ci0JaWYgKChpbm8gJmx0OyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gJmd0OyBCRlNfU0Ioc2IpLSZndDtzaV9sYXN0aSkpIHsKLQkJcHJpbnRmKCYjMzQ7QmFkIGlub2RlIG51bWJlciAlczolMDh4XG4mIzM0Oywgc2ItJmd0O3NfaWQsIGlubyk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCX0KLQotCWlubyAtPSBCRlNfUk9PVF9JTk87Ci0KLQkqcCA9IHNiX2JyZWFkKHNiLCAxICYjNDM7IGlubyAvIEJGU19JTk9ERVNfUEVSX0JMT0NLKTsKLQlpZiAoISpwKSB7Ci0JCXByaW50ZigmIzM0O1VuYWJsZSB0byByZWFkIGlub2RlICVzOiUwOHhcbiYjMzQ7LCBzYi0mZ3Q7c19pZCwgaW5vKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci0JfQotCi0JcmV0dXJuIChzdHJ1Y3QgYmZzX2lub2RlICopKCpwKS0mZ3Q7Yl9kYXRhICYjNDM7ICBpbm8gJSBCRlNfSU5PREVTX1BFUl9CTE9DSzsKLX0KLQotc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCi17Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLSZndDtpX3NiKTsKLQl1bnNpZ25lZCBpbnQgaW5vID0gKHUxNilpbm9kZS0mZ3Q7aV9pbm87Ci0JdW5zaWduZWQgbG9uZyBpX3NibG9jazsKLQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JZHByaW50ZigmIzM0O2lubz0lMDh4XG4mIzM0OywgaW5vKTsKLQotCWRpID0gZmluZF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vLCAmYW1wO2JoKTsKLQlpZiAoSVNfRVJSKGRpKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGkpOwotCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQotCWlmIChpbm8gPT0gQkZTX1JPT1RfSU5PKQotCQlkaS0mZ3Q7aV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WRElSKTsKLQllbHNlCi0JCWRpLSZndDtpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZSRUcpOwotCi0JZGktJmd0O2lfaW5vID0gY3B1X3RvX2xlMTYoaW5vKTsKLQlkaS0mZ3Q7aV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtJmd0O2lfbW9kZSk7Ci0JZGktJmd0O2lfdWlkID0gY3B1X3RvX2xlMzIoaV91aWRfcmVhZChpbm9kZSkpOwotCWRpLSZndDtpX2dpZCA9IGNwdV90b19sZTMyKGlfZ2lkX3JlYWQoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLSZndDtpX25saW5rKTsKLQlkaS0mZ3Q7aV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9hdGltZV9zZWMoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9tdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9tdGltZV9zZWMoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9jdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9jdGltZV9zZWMoaW5vZGUpKTsKLQlpX3NibG9jayA9IEJGU19JKGlub2RlKS0mZ3Q7aV9zYmxvY2s7Ci0JZGktJmd0O2lfc2Jsb2NrID0gY3B1X3RvX2xlMzIoaV9zYmxvY2spOwotCWRpLSZndDtpX2VibG9jayA9IGNwdV90b19sZTMyKEJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2spOwotCWRpLSZndDtpX2VvZmZzZXQgPSBjcHVfdG9fbGUzMihpX3NibG9jayAqIEJGU19CU0laRSAmIzQzOyBpbm9kZS0mZ3Q7aV9zaXplIC0gMSk7Ci0KLQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JYnJlbHNlKGJoKTsKLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Jc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKLXsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JZGkgPSBmaW5kX2lub2RlKGlub2RlLSZndDtpX3NiLCAodTE2KWlub2RlLSZndDtpX2lubywgJmFtcDtiaCk7Ci0JaWYgKElTX0VSUihkaSkpCi0JCXJldHVybiBQVFJfRVJSKGRpKTsKLQotCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0JZXJyID0gbW1iX3N5bmMoJmFtcDtCRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLW91dDoKLQlicmVsc2UoYmgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtJmd0O2lfaW5vOwotCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gaW5vZGUtJmd0O2lfc2I7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpOwotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7Ci0KLQlkcHJpbnRmKCYjMzQ7aW5vPSUwOGx4XG4mIzM0OywgaW5vKTsKLQotCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKCZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7Ci0JaWYgKGlub2RlLSZndDtpX25saW5rKQotCQltbWJfc3luYygmYW1wO0JGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9pbnZhbGlkYXRlKCZhbXA7QkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwotCi0JaWYgKGlub2RlLSZndDtpX25saW5rKQotCQlyZXR1cm47Ci0KLQlkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKLQlpZiAoSVNfRVJSKGRpKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQkvKiBjbGVhciBvbi1kaXNrIGlub2RlICovCi0JbWVtc2V0KGRpLCAwLCBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpOwotCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlicmVsc2UoYmgpOwotCi0JaWYgKGJpLSZndDtpX2Rza19pbm8pIHsKLQkJaWYgKGJpLSZndDtpX3NibG9jaykKLQkJCWluZm8tJmd0O3NpX2ZyZWViICYjNDM7PSBiaS0mZ3Q7aV9lYmxvY2sgJiM0MzsgMSAtIGJpLSZndDtpX3NibG9jazsKLQkJaW5mby0mZ3Q7c2lfZnJlZWkmIzQzOyYjNDM7OwotCQljbGVhcl9iaXQoaW5vLCBpbmZvLSZndDtzaV9pbWFwKTsKLQkJYmZzX2R1bXBfaW1hcCgmIzM0O2V2aWN0X2lub2RlJiMzNDssIHMpOwotCX0KLQotCS8qCi0JICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgZmlsZSwgbWFrZSB0aGUgcHJldmlvdXMgYmxvY2sKLQkgKiAmIzM0O2xhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZSYjMzQ7IGV2ZW4gaWYgdGhlcmUgaXMgbm8KLQkgKiByZWFsIGZpbGUgdGhlcmUsIHNhdmVzIHVzIDEgZ2FwLgotCSAqLwotCWlmIChpbmZvLSZndDtzaV9sZl9lYmxrID09IGJpLSZndDtpX2VibG9jaykKLQkJaW5mby0mZ3Q7c2lfbGZfZWJsayA9IGJpLSZndDtpX3NibG9jayAtIDE7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKLXsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7Ci0KLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQotCW11dGV4X2Rlc3Ryb3koJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Ja2ZyZWUoaW5mbyk7Ci0Jcy0mZ3Q7c19mc19pbmZvID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBkZW50cnktJmd0O2Rfc2I7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpOwotCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLSZndDtzX2JkZXYtJmd0O2JkX2Rldik7Ci0JYnVmLSZndDtmX3R5cGUgPSBCRlNfTUFHSUM7Ci0JYnVmLSZndDtmX2JzaXplID0gcy0mZ3Q7c19ibG9ja3NpemU7Ci0JYnVmLSZndDtmX2Jsb2NrcyA9IGluZm8tJmd0O3NpX2Jsb2NrczsKLQlidWYtJmd0O2ZfYmZyZWUgPSBidWYtJmd0O2ZfYmF2YWlsID0gaW5mby0mZ3Q7c2lfZnJlZWI7Ci0JYnVmLSZndDtmX2ZpbGVzID0gaW5mby0mZ3Q7c2lfbGFzdGkgJiM0MzsgMSAtIEJGU19ST09UX0lOTzsKLQlidWYtJmd0O2ZfZmZyZWUgPSBpbmZvLSZndDtzaV9mcmVlaTsKLQlidWYtJmd0O2ZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTsKLQlidWYtJmd0O2ZfbmFtZWxlbiA9IEJGU19OQU1FTEVOOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJmc19pbm9kZV9jYWNoZXA7Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7Ci0JYmkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaSkKLQkJcmV0dXJuIE5VTEw7Ci0JbW1iX2luaXQoJmFtcDtiaS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7YmktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwotCi0JcmV0dXJuICZhbXA7YmktJmd0O3Zmc19pbm9kZTsKLX0KLQotc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKLXsKLQlzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vOwotCi0JaW5vZGVfaW5pdF9vbmNlKCZhbXA7YmktJmd0O3Zmc19pbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5vZGVjYWNoZSh2b2lkKQotewotCWJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgmIzM0O2Jmc19pbm9kZV9jYWNoZSYjMzQ7LAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKLQkJCQkJCVNMQUJfQUNDT1VOVCksCi0JCQkJCSAgICAgaW5pdF9vbmNlKTsKLQlpZiAoYmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCi17Ci0JLyoKLQkgKiBNYWtlIHN1cmUgYWxsIGRlbGF5ZWQgcmN1IGZyZWUgaW5vZGVzIGFyZSBmbHVzaGVkIGJlZm9yZSB3ZQotCSAqIGRlc3Ryb3kgY2FjaGUuCi0JICovCi0JcmN1X2JhcnJpZXIoKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koYmZzX2lub2RlX2NhY2hlcCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHsKLQkuYWxsb2NfaW5vZGUJPSBiZnNfYWxsb2NfaW5vZGUsCi0JLmZyZWVfaW5vZGUJPSBiZnNfZnJlZV9pbm9kZSwKLQkud3JpdGVfaW5vZGUJPSBiZnNfd3JpdGVfaW5vZGUsCi0JLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSwKLQkuZXZpY3RfaW5vZGUJPSBiZnNfZXZpY3RfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IGJmc19wdXRfc3VwZXIsCi0JLnN0YXRmcwkJPSBiZnNfc3RhdGZzLAotfTsKLQotdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotI2lmZGVmIERFQlVHCi0JaW50IGk7Ci0JY2hhciAqdG1wYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCF0bXBidWYpCi0JCXJldHVybjsKLQlmb3IgKGkgPSBCRlNfU0IocyktJmd0O3NpX2xhc3RpOyBpICZndDs9IDA7IGktLSkgewotCQlpZiAoaSAmZ3Q7IFBBR0VfU0laRSAtIDEwMCkgYnJlYWs7Ci0JCWlmICh0ZXN0X2JpdChpLCBCRlNfU0IocyktJmd0O3NpX2ltYXApKQotCQkJc3RyY2F0KHRtcGJ1ZiwgJiMzNDsxJiMzNDspOwotCQllbHNlCi0JCQlzdHJjYXQodG1wYnVmLCAmIzM0OzAmIzM0Oyk7Ci0JfQotCXByaW50ZigmIzM0OyVzOiBsYXN0aT0lMDhseCAmbHQ7JXMmZ3Q7XG4mIzM0OywgcHJlZml4LCBCRlNfU0IocyktJmd0O3NpX2xhc3RpLCB0bXBidWYpOwotCWtmcmVlKHRtcGJ1Zik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBiZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqc2JoOwotCXN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKmJmc19zYjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXVuc2lnbmVkIGk7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvOwotCWludCByZXQgPSAtRUlOVkFMOwotCXVuc2lnbmVkIGxvbmcgaV9zYmxvY2ssIGlfZWJsb2NrLCBpX2VvZmYsIHNfc2l6ZTsKLQlpbnQgc2lsZW50ID0gZmMtJmd0O3NiX2ZsYWdzICZhbXA7IFNCX1NJTEVOVDsKLQotCWluZm8gPSBremFsbG9jX29iaigqaW5mbyk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQltdXRleF9pbml0KCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCXMtJmd0O3NfZnNfaW5mbyA9IGluZm87Ci0Jcy0mZ3Q7c190aW1lX21pbiA9IDA7Ci0Jcy0mZ3Q7c190aW1lX21heCA9IFUzMl9NQVg7Ci0KLQlpZiAoIXNiX3NldF9ibG9ja3NpemUocywgQkZTX0JTSVpFKSkKLQkJZ290byBvdXQ7Ci0KLQlzYmggPSBzYl9icmVhZChzLCAwKTsKLQlpZiAoIXNiaCkKLQkJZ290byBvdXQ7Ci0JYmZzX3NiID0gKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKilzYmgtJmd0O2JfZGF0YTsKLQlpZiAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX21hZ2ljKSAhPSBCRlNfTUFHSUMpIHsKLQkJaWYgKCFzaWxlbnQpCi0JCQlwcmludGYoJiMzNDtObyBCRlMgZmlsZXN5c3RlbSBvbiAlcyAobWFnaWM9JTA4eClcbiYjMzQ7LCBzLSZndDtzX2lkLCAgbGUzMl90b19jcHUoYmZzX3NiLSZndDtzX21hZ2ljKSk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0JaWYgKEJGU19VTkNMRUFOKGJmc19zYiwgcykgJmFtcDsmYW1wOyAhc2lsZW50KQotCQlwcmludGYoJiMzNDslcyBpcyB1bmNsZWFuLCBjb250aW51aW5nXG4mIzM0Oywgcy0mZ3Q7c19pZCk7Ci0KLQlzLSZndDtzX21hZ2ljID0gQkZTX01BR0lDOwotCi0JaWYgKGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkgJmd0OyBsZTMyX3RvX2NwdShiZnNfc2ItJmd0O3NfZW5kKSB8fAotCSAgICBsZTMyX3RvX2NwdShiZnNfc2ItJmd0O3Nfc3RhcnQpICZsdDsgc2l6ZW9mKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2spICYjNDM7IHNpemVvZihzdHJ1Y3QgYmZzX2RpcmVudCkpIHsKLQkJcHJpbnRmKCYjMzQ7U3VwZXJibG9jayBpcyBjb3JydXB0ZWQgb24gJXNcbiYjMzQ7LCBzLSZndDtzX2lkKTsKLQkJZ290byBvdXQxOwotCX0KLQotCWluZm8tJmd0O3NpX2xhc3RpID0gKGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkgLSBCRlNfQlNJWkUpIC8gc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGUpICYjNDM7IEJGU19ST09UX0lOTyAtIDE7Ci0JaWYgKGluZm8tJmd0O3NpX2xhc3RpID09IEJGU19NQVhfTEFTVEkpCi0JCXByaW50ZigmIzM0O05PVEU6IGZpbGVzeXN0ZW0gJXMgd2FzIGNyZWF0ZWQgd2l0aCA1MTIgaW5vZGVzLCB0aGUgcmVhbCBtYXhpbXVtIGlzIDUxMSwgbW91bnRpbmcgYW55d2F5XG4mIzM0Oywgcy0mZ3Q7c19pZCk7Ci0JZWxzZSBpZiAoaW5mby0mZ3Q7c2lfbGFzdGkgJmd0OyBCRlNfTUFYX0xBU1RJKSB7Ci0JCXByaW50ZigmIzM0O0ltcG9zc2libGUgbGFzdCBpbm9kZSBudW1iZXIgJWx1ICZndDsgJWQgb24gJXNcbiYjMzQ7LCBpbmZvLSZndDtzaV9sYXN0aSwgQkZTX01BWF9MQVNUSSwgcy0mZ3Q7c19pZCk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0JZm9yIChpID0gMDsgaSAmbHQ7IEJGU19ST09UX0lOTzsgaSYjNDM7JiM0MzspCi0JCXNldF9iaXQoaSwgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0KLQlzLSZndDtzX29wID0gJmFtcDtiZnNfc29wczsKLQlpbm9kZSA9IGJmc19pZ2V0KHMsIEJGU19ST09UX0lOTyk7Ci0JaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihpbm9kZSk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0Jcy0mZ3Q7c19yb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpOwotCWlmICghcy0mZ3Q7c19yb290KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0MTsKLQl9Ci0KLQlpbmZvLSZndDtzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCkgJiM0MzsgMSkgJmd0OyZndDsgQkZTX0JTSVpFX0JJVFM7Ci0JaW5mby0mZ3Q7c2lfZnJlZWIgPSAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCkgJiM0MzsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkpICZndDsmZ3Q7IEJGU19CU0laRV9CSVRTOwotCWluZm8tJmd0O3NpX2ZyZWVpID0gMDsKLQlpbmZvLSZndDtzaV9sZl9lYmxrID0gMDsKLQotCS8qIGNhbiB3ZSByZWFkIHRoZSBsYXN0IGJsb2NrPyAqLwotCWJoID0gc2JfYnJlYWQocywgaW5mby0mZ3Q7c2lfYmxvY2tzIC0gMSk7Ci0JaWYgKCFiaCkgewotCQlwcmludGYoJiMzNDtMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxuJiMzNDssIHMtJmd0O3NfaWQsIGluZm8tJmd0O3NpX2Jsb2NrcyAtIDEpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDI7Ci0JfQotCWJyZWxzZShiaCk7Ci0KLQliaCA9IE5VTEw7Ci0JZm9yIChpID0gQkZTX1JPT1RfSU5POyBpICZsdDs9IGluZm8tJmd0O3NpX2xhc3RpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQkJaW50IGJsb2NrID0gKGkgLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTsKLQkJaW50IG9mZiA9IChpIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOwotCQl1bnNpZ25lZCBsb25nIGVibG9jazsKLQotCQlpZiAoIW9mZikgewotCQkJYnJlbHNlKGJoKTsKLQkJCWJoID0gc2JfYnJlYWQocywgYmxvY2spOwotCQl9Ci0KLQkJaWYgKCFiaCkKLQkJCWNvbnRpbnVlOwotCi0JCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZjsKLQotCQkvKiB0ZXN0IGlmIGZpbGVzeXN0ZW0gaXMgbm90IGNvcnJ1cHRlZCAqLwotCi0JCWlfZW9mZiA9IGxlMzJfdG9fY3B1KGRpLSZndDtpX2VvZmZzZXQpOwotCQlpX3NibG9jayA9IGxlMzJfdG9fY3B1KGRpLSZndDtpX3NibG9jayk7Ci0JCWlfZWJsb2NrID0gbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQkJc19zaXplID0gbGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCk7Ci0KLQkJaWYgKGlfc2Jsb2NrICZndDsgaW5mby0mZ3Q7c2lfYmxvY2tzIHx8Ci0JCQlpX2VibG9jayAmZ3Q7IGluZm8tJmd0O3NpX2Jsb2NrcyB8fAotCQkJaV9zYmxvY2sgJmd0OyBpX2VibG9jayB8fAotCQkJKGlfZW9mZiAhPSBsZTMyX3RvX2NwdSgtMSkgJmFtcDsmYW1wOyBpX2VvZmYgJmd0OyBzX3NpemUpIHx8Ci0JCQlpX3NibG9jayAqIEJGU19CU0laRSAmZ3Q7IGlfZW9mZikgewotCi0JCQlwcmludGYoJiMzNDtJbm9kZSAweCUwOHggY29ycnVwdGVkIG9uICVzXG4mIzM0OywgaSwgcy0mZ3Q7c19pZCk7Ci0KLQkJCWJyZWxzZShiaCk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQyOwotCQl9Ci0KLQkJaWYgKCFkaS0mZ3Q7aV9pbm8pIHsKLQkJCWluZm8tJmd0O3NpX2ZyZWVpJiM0MzsmIzQzOzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNldF9iaXQoaSwgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0JCWluZm8tJmd0O3NpX2ZyZWViIC09IEJGU19GSUxFQkxPQ0tTKGRpKTsKLQotCQllYmxvY2sgPSAgbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQkJaWYgKGVibG9jayAmZ3Q7IGluZm8tJmd0O3NpX2xmX2VibGspCi0JCQlpbmZvLSZndDtzaV9sZl9lYmxrID0gZWJsb2NrOwotCX0KLQlicmVsc2UoYmgpOwotCWJyZWxzZShzYmgpOwotCWJmc19kdW1wX2ltYXAoJiMzNDtmaWxsX3N1cGVyJiMzNDssIHMpOwotCXJldHVybiAwOwotCi1vdXQyOgotCWRwdXQocy0mZ3Q7c19yb290KTsKLQlzLSZndDtzX3Jvb3QgPSBOVUxMOwotb3V0MToKLQlicmVsc2Uoc2JoKTsKLW91dDoKLQltdXRleF9kZXN0cm95KCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWtmcmVlKGluZm8pOwotCXMtJmd0O3NfZnNfaW5mbyA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQotewotCXJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHsKLQkuZ2V0X3RyZWUgPSBiZnNfZ2V0X3RyZWUsCi19OwotCi1zdGF0aWMgaW50IGJmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKQotewotCWZjLSZndDtvcHMgPSAmYW1wO2Jmc19jb250ZXh0X29wczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gJiMzNDtiZnMmIzM0OywKLQkuaW5pdF9mc19jb250ZXh0CT0gYmZzX2luaXRfZnNfY29udGV4dCwKLQkua2lsbF9zYgkJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwkJPSBGU19SRVFVSVJFU19ERVYsCi19OwotTU9EVUxFX0FMSUFTX0ZTKCYjMzQ7YmZzJiMzNDspOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2Jmc19mcyh2b2lkKQotewotCWludCBlcnIgPSBpbml0X2lub2RlY2FjaGUoKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDE7Ci0JZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO2Jmc19mc190eXBlKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLW91dDoKLQlkZXN0cm95X2lub2RlY2FjaGUoKTsKLW91dDE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfYmZzX2ZzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7YmZzX2ZzX3R5cGUpOwotCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2Jmc19mcykKLW1vZHVsZV9leGl0KGV4aXRfYmZzX2ZzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwppbmRleCA2MGMyYzU0NGRiNmE0Li41MjU0NDUxMmVkYzc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwpAQCAtMTcsNyAmIzQzOzE3LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtub3duX2ZzW10gPSB7CiAJJiMzNDs5cCYjMzQ7LCAmIzM0O2FkZnMmIzM0OywgJiMzNDthZmZzJiMzNDssICYjMzQ7YWZzJiMzNDssICYjMzQ7YWlvJiMzNDssICYjMzQ7YW5vbl9pbm9kZWZzJiMzNDssICYjMzQ7YXBwYXJtb3JmcyYjMzQ7LAotCSYjMzQ7YXV0b2ZzJiMzNDssICYjMzQ7YmNhY2hlZnMmIzM0OywgJiMzNDtiZGV2JiMzNDssICYjMzQ7YmVmcyYjMzQ7LCAmIzM0O2JmcyYjMzQ7LCAmIzM0O2JpbmRlciYjMzQ7LCAmIzM0O2JpbmZtdF9taXNjJiMzNDssCiYjNDM7CSYjMzQ7YXV0b2ZzJiMzNDssICYjMzQ7YmNhY2hlZnMmIzM0OywgJiMzNDtiZGV2JiMzNDssICYjMzQ7YmVmcyYjMzQ7LCAmIzM0O2JpbmRlciYjMzQ7LCAmIzM0O2JpbmZtdF9taXNjJiMzNDssCiAJJiMzNDticGYmIzM0OywgJiMzNDtidHJmcyYjMzQ7LCAmIzM0O2J0cmZzX3Rlc3RfZnMmIzM0OywgJiMzNDtjZXBoJiMzNDssICYjMzQ7Y2dyb3VwJiMzNDssICYjMzQ7Y2dyb3VwMiYjMzQ7LCAmIzM0O2NpZnMmIzM0OywKIAkmIzM0O2NvZGEmIzM0OywgJiMzNDtjb25maWdmcyYjMzQ7LCAmIzM0O2NwdXNldCYjMzQ7LCAmIzM0O2NyYW1mcyYjMzQ7LCAmIzM0O2N4bCYjMzQ7LCAmIzM0O2RheCYjMzQ7LCAmIzM0O2RlYnVnZnMmIzM0OywKIAkmIzM0O2RldnB0cyYjMzQ7LCAmIzM0O2RldnRtcGZzJiMzNDssICYjMzQ7ZG1hYnVmJiMzNDssICYjMzQ7ZHJtJiMzNDssICYjMzQ7ZWNyeXB0ZnMmIzM0OywgJiMzNDtlZml2YXJmcyYjMzQ7LCAmIzM0O2VmcyYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMxMwoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCRlMgRmlsZXN5c3RlbSBSZW1vdmFsIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uZS4gVGhleSYjMzk7cmUgcmlwcGluZyBvdXQgdGhlIEJGUyBmaWxlc3lzdGVtIGZyb20gdGhlIExpbnV4IGtlcm5lbCBjb21wbGV0ZWx5LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0JiMzOTtzIHByZXR0eSB0aG9yb3VnaC4gV2UmIzM5O3ZlIGdvdDoKCiogICBgQ1JFRElUU2AgdXBkYXRlZCB3aXRoIGF1dGhvciBlbWFpbC4gRmluZS4KKiAgIERvY3VtZW50YXRpb24gdXBkYXRlZCBhbmQsIGluIHNvbWUgY2FzZXMsIGRlbGV0ZWQuIFRoYXQmIzM5O3MgZXhwZWN0ZWQgZm9yIGEgZGVwcmVjYXRlZCBmaWxlc3lzdGVtLgoqICAgYE1BSU5UQUlORVJTYCB1cGRhdGVkIOKAkyBCRlMgc2VjdGlvbiBnb25lLiBNYWtlcyBzZW5zZS4KKiAgIEFyY2gtc3BlY2lmaWMgY29uZmlncyBnZXR0aW5nIHRoZSBgQ09ORklHX0JGU19GU2Agb3B0aW9uIHJlbW92ZWQuIFN0YW5kYXJkLgoqICAgVGhlIGBmcy9LY29uZmlnYCBhbmQgYGZzL01ha2VmaWxlYCBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byByZW1vdmUgYW55IHRyYWNlIG9mIEJGUy4gRXNzZW50aWFsIGZvciBhIGNsZWFuIHJlbW92YWwuCiogICBUaGUgYGZzL2Jmcy9gIGRpcmVjdG9yeSBpdHNlbGYsIHRoZSAqYWN0dWFsIGZpbGVzeXN0ZW0gY29kZSosIGlzIGdvbmUuIEV2ZXJ5dGhpbmcuIGBLY29uZmlnYCwgYE1ha2VmaWxlYCwgdGhlIGAuY2AgZmlsZXMsIHRoZSBgLmhgLi4uIGl0JiMzOTtzIGFsbCBkZWxldGVkLiBHb29kLgoqICAgVGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY2AgZmlsZSBpcyByZW1vdmluZyByZWZlcmVuY2VzIHRvICYjMzQ7YmZzJiMzNDsuIFJpZ2h0LgoKU28sIHRoZSBjb3JlIG9mIHRoZSBjaGVjayBpczogaXMgdGhlcmUgYW55IGV4ZWN1dGFibGUgY29kZSAqbGVmdCo/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIG5vLiBBbGwgdGhlIGZpbGVzeXN0ZW0gY29kZSBpcyBkZWxldGVkLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgY29uZmlndXJhdGlvbiB0d2Vha3MsIGRvY3VtZW50YXRpb24gdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IGNsZWFudXAuIE5vbmUgb2YgdGhhdCBpcyAqZXhlY3V0YWJsZSoga2VybmVsIGNvZGUuIFRoZSBwYXRjaCBpcyBwdXJlbHkgZGVzdHJ1Y3RpdmUgaW4gdGVybXMgb2YgY29kZSBwcmVzZW5jZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGNvcnJlY3RseS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgc2F5czoKCiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzCiogICBTZWxmLXRlc3RzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLgoqICAgQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBjb21waWxlZCBDIGxvZ2ljCgpXZWxsLCB0aGlzIHBhdGNoIG5haWxzIGFsbCBvZiB0aG9zZS4gVGhlIEJGUyBmaWxlc3lzdGVtIGNvZGUgaXMgKmdvbmUqLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHJlbW92YWwsIHNvIG5vIGNvZGUgaXMgYmVpbmcgYWRkZWQgb3IgbW9kaWZpZWQgdGhhdCBuZWVkcyBmdXp6aW5nLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIFdlIGNhbiBlbmFibGUgemVybyBjb25maWdzLCBhbmQgdGhlcmUgYXJlIHplcm8gZm9jdXMgc3ltYm9scy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoICpyZW1vdmVzKiB0aGUgbGVnYWN5IEJGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQ6IGNvZGUsIGRvY3VtZW50YXRpb24sIGNvbmZpZyBlbnRyaWVzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gTm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcmVtYWlucy4gVGhpcyBpcyBhIGNsZWFuIHN3ZWVwLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjIwMzE1NDUxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjc5NDcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjIwMzE2MTg1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDI0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDA5NDVkMTFmMzk2OWYwNGI0NmQwNjEyYTFiY2VjYTc5NTg1NWY4M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQxOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTXFxuaW5kZXggYmJhNTA3MWMyOWE1ZC4uYzU3MGRkN2VlYmJkZSAxMDA2NDRcXG4tLS0gYS9DUkVESVRTXFxuKysrIGIvQ1JFRElUU1xcbkBAIC01Nyw3ICs1Nyw3IEBAIFM6IExvbmdmb3JkLCBJcmVsYW5kXFxuIFM6IFN5ZG5leSwgQXVzdHJhbGlhXFxuIFxcbiBOOiBUaWdyYW4gQS4gQWl2YXppYW5cXG4tRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrXFxuK0U6IGFpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXG4gVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzXFxuIEQ6IEJGUyBmaWxlc3lzdGVtXFxuIEQ6IEludGVsIElBMzIgQ1BVIG1pY3JvY29kZSB1cGRhdGUgc3VwcG9ydFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxcbmluZGV4IGEyMmY2MDNiMjkzOGUuLmMxZGJmZTljOTVkMjkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcXG5AQCAtNDQsOCArNDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cXG4gV2hpY2ggaXMgaXQsIEJGUyBvciBCRUZTP1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09XFxuIEJlLCBJbmMgc2FpZCwgXFxcIkJlT1MgRmlsZXN5c3RlbSBpcyBvZmZpY2lhbGx5IGNhbGxlZCBCRlMsIG5vdCBCZUZTXFxcIi5cXG4tQnV0IFVuaXh3YXJlIEJvb3QgRmlsZXN5c3RlbSBpcyBjYWxsZWQgYmZzLCB0b28uIEFuZCB0aGV5IGFyZSBhbHJlYWR5IGluXFxuLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXFxuK0J1dCB0aGUgVW5peFdhcmUgQm9vdCBGaWxlc3lzdGVtIGlzIGNhbGxlZCBiZnMsIHRvbywgYW5kIGl0IHdhcyBhbHJlYWR5XFxuK2luIHRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXFxuIGZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJlZnMuXFxuIFxcbiBIb3cgdG8gSW5zdGFsbFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjZTE0YjkwMTg4MDcyLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDYwICswLDAgQEBcXG4tLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tXFxuLT09PT09PT09PT09PT09PT09PT09PT09PVxcbi1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXhcXG4tPT09PT09PT09PT09PT09PT09PT09PT09XFxuLVxcbi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoXFxuLXVzdWFsbHkgY29udGFpbnMgdGhlIGtlcm5lbCBpbWFnZSBhbmQgYSBmZXcgb3RoZXIgZmlsZXMgcmVxdWlyZWQgZm9yIHRoZVxcbi1ib290IHByb2Nlc3MuXFxuLVxcbi1JbiBvcmRlciB0byBhY2Nlc3MgL3N0YW5kIHBhcnRpdGlvbiB1bmRlciBMaW51eCB5b3Ugb2J2aW91c2x5IG5lZWQgdG9cXG4ta25vdyB0aGUgcGFydGl0aW9uIG51bWJlciBhbmQgdGhlIGtlcm5lbCBtdXN0IHN1cHBvcnQgVW5peFdhcmUgZGlzayBzbGljZXNcXG4tKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3RcXG4tZGVwZW5kIG9uIGhhdmluZyBVbml4V2FyZSBkaXNrbGFiZWwgc3VwcG9ydCBiZWNhdXNlIG9uZSBjYW4gYWxzbyBtb3VudFxcbi1CRlMgZmlsZXN5c3RlbSB2aWEgbG9vcGJhY2s6Olxcbi1cXG4tICAgICMgbG9zZXR1cCAvZGV2L2xvb3AwIHN0YW5kLmltZ1xcbi0gICAgIyBtb3VudCAtdCBiZnMgL2Rldi9sb29wMCAvbW50L3N0YW5kXFxuLVxcbi13aGVyZSBzdGFuZC5pbWcgaXMgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGltYWdlIG9mIEJGUyBmaWxlc3lzdGVtLlxcbi1XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHVzaW5nIGl0IGFuZCB1bW91bnRlZCB5b3UgbmVlZCB0byBhbHNvIGRlYWxsb2NhdGVcXG4tL2Rldi9sb29wMCBkZXZpY2UgYnk6Olxcbi1cXG4tICAgICMgbG9zZXR1cCAtZCAvZGV2L2xvb3AwXFxuLVxcbi1Zb3UgY2FuIHNpbXBsaWZ5IG1vdW50aW5nIGJ5IGp1c3QgdHlwaW5nOjpcXG4tXFxuLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kXFxuLVxcbi10aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3Aub1xcbi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3RcXG4tbG9hZGVkIGF1dG9tYXRpY2FsbHksIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGNvbXBpbGVkIHRoZSBtb2R1bGUgYW5kXFxuLXRoYXQgbW9kcHJvYmUgaXMgZnVuY3Rpb25pbmcuIEJld2FyZSB0aGF0IHVtb3VudCB3aWxsIG5vdCBkZWFsbG9jYXRlXFxuLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0b1xcbi0vcHJvYy9tb3VudHMuIFlvdSB3aWxsIG5lZWQgdG8gZG8gaXQgbWFudWFsbHkgdXNpbmcgXFxcIi1kXFxcIiBzd2l0Y2ggb2ZcXG4tbG9zZXR1cCg4KS4gUmVhZCBsb3NldHVwKDgpIG1hbnBhZ2UgZm9yIG1vcmUgaW5mby5cXG4tXFxuLVRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlIHVuZGVyIFVuaXhXYXJlIHlvdSBuZWVkIHRvIGZpbmQgb3V0IGZpcnN0IHdoaWNoXFxuLXNsaWNlIGNvbnRhaW5zIGl0LiBUaGUgY29tbWFuZCBwcnR2dG9jKDFNKSBpcyB5b3VyIGZyaWVuZDo6XFxuLVxcbi0gICAgIyBwcnR2dG9jIC9kZXYvcmRzay9jMGIwdDBkMHMwXFxuLVxcbi0oYXNzdW1pbmcgeW91ciByb290IGRpc2sgaXMgb24gdGFyZ2V0PTAsIGx1bj0wLCBidXM9MCwgY29udHJvbGxlcj0wKS4gVGhlbiB5b3VcXG4tbG9vayBmb3IgdGhlIHNsaWNlIHdpdGggdGFnIFxcXCJTVEFORFxcXCIsIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xcbi1pbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSBkZCgxKSB0byBjcmVhdGUgdGhlIEJGUyBpbWFnZTo6XFxuLVxcbi0gICAgIyB1bW91bnQgL3N0YW5kXFxuLSAgICAjIGRkIGlmPS9kZXYvcmRzay9jMGIwdDBkMHNhIG9mPXN0YW5kLmltZyBicz01MTJcXG4tXFxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xcbi10aGUgbWFnaWMgbnVtYmVyOjpcXG4tXFxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcXG4tXFxuLVRoZSBmaXJzdCA0IGJ5dGVzIHNob3VsZCBiZSAweDFiYWRmYWNlLlxcbi1cXG4tSWYgeW91IGhhdmUgYW55IHBhdGNoZXMsIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBCRlNcXG4taW1wbGVtZW50YXRpb24gcGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvcjpcXG4tXFxuLVRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbmluZGV4IDczNGE0NWU1MTY2NzUuLjdjY2U3Y2MyOGQxMjYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbkBAIC03NSw3ICs3NSw2IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLlxcbiAgICBhdXRvZnNcXG4gICAgYXV0b2ZzLW1vdW50LWNvbnRyb2xcXG4gICAgYmVmc1xcbi0gICBiZnNcXG4gICAgYnRyZnNcXG4gICAgY2VwaFxcbiAgICBjb2RhXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBmYzMyMGIzNzM2NTZmLi4zODUzMDk1NTY3MDVlIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNDYyNywxMyArNDYyNyw2IEBAIFM6XFx0T2RkIEZpeGVzXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcXG4gRjpcXHRibG9jay9iZnEtKlxcbiBcXG4tQkZTIEZJTEUgU1lTVEVNXFxuLU06XFx0XFxcIlRpZ3JhbiBBLiBBaXZhemlhblxcXCIgXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLVM6XFx0TWFpbnRhaW5lZFxcbi1GOlxcdERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxcbi1GOlxcdGZzL2Jmcy9cXG4tRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvYmZzX2ZzLmhcXG4tXFxuIEJJVE1BUCBBUElcXG4gTTpcXHRZdXJ5IE5vcm92IFxcdTAwM2N5dXJ5Lm5vcm92QGdtYWlsLmNvbVxcdTAwM2VcXG4gUjpcXHRSYXNtdXMgVmlsbGVtb2VzIFxcdTAwM2NsaW51eEByYXNtdXN2aWxsZW1vZXMuZGtcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xcbmluZGV4IDU2YThmNzZkYWI0MTQuLjRmYjRkNDVmM2NkY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXFxuQEAgLTMzMyw3ICszMzMsNiBAQCBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfSEZTUExVU19GUz1tXFxuIENPTkZJR19CRUZTX0ZTPW1cXG4tQ09ORklHX0JGU19GUz1tXFxuIENPTkZJR19FRlNfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xcbmluZGV4IDg1ZTk1YzBhZTQxMDcuLjNkMWMzMmQzNDc1ZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcXG5AQCAtMzQwLDcgKzM0MCw2IEBAIENPTkZJR19BRkZTX0ZTPW1cXG4gQ09ORklHX0hGU19GUz1tXFxuIENPTkZJR19IRlNQTFVTX0ZTPW1cXG4gQ09ORklHX0JFRlNfRlM9bVxcbi1DT05GSUdfQkZTX0ZTPW1cXG4gQ09ORklHX0VGU19GUz1tXFxuIENPTkZJR19KRkZTMl9GUz1tXFxuIENPTkZJR19KRkZTMl9GU19YQVRUUj15XFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xcbmluZGV4IDA0OThhMDExNTM0OTAuLjI1NDUxNjhiNzViYmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXFxuQEAgLTMzOSw3ICszMzksNiBAQCBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfSEZTUExVU19GUz1tXFxuIENPTkZJR19CRUZTX0ZTPW1cXG4tQ09ORklHX0JGU19GUz1tXFxuIENPTkZJR19FRlNfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcXG5pbmRleCAwOWUwMDZjN2NkN2M2Li5jZDJhODMxNjE0Yzg5IDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xcbkBAIC0zMTgsNyArMzE4LDYgQEAgQ09ORklHX0FERlNfRlM9bVxcbiBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfQkVGU19GUz1tXFxuLUNPTkZJR19CRlNfRlM9bVxcbiBDT05GSUdfRUZTX0ZTPW1cXG4gQ09ORklHX0NSQU1GUz1tXFxuIENPTkZJR19WWEZTX0ZTPW1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xcbmluZGV4IDM5MWM5OTExN2VlMDYuLjY4ODA1MWIxMWNlMTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xcbkBAIC0yLDcgKzIsNiBAQCBDT05GSUdfQURGU19GUz1tXFxuIENPTkZJR19BRkZTX0ZTPW1cXG4gQ09ORklHX0FVRElUPXlcXG4gQ09ORklHX0JFRlNfRlM9bVxcbi1DT05GSUdfQkZTX0ZTPW1cXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cXG4gIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xcbmluZGV4IGFjZmZjNWMxN2Y5MmQuLjhhYWIyMjlmYjkwOTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcXG5AQCAtOTQ1LDcgKzk0NSw2IEBAIENPTkZJR19FQ1JZUFRfRlM9bVxcbiBDT05GSUdfSEZTX0ZTPW1cXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxcbiBDT05GSUdfQkVGU19GUz1tXFxuLUNPTkZJR19CRlNfRlM9bVxcbiBDT05GSUdfRUZTX0ZTPW1cXG4gQ09ORklHX0NSQU1GUz1tXFxuIENPTkZJR19WWEZTX0ZTPW1cXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcXG5pbmRleCBlMDU5MTdhZGNkNjA4Li4xY2IwYjNhOGIxMmNhIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTMxNCw3ICszMTQsNiBAQCBzb3VyY2UgXFxcImZzL2VjcnlwdGZzL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZnMvaGZzL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZnMvaGZzcGx1cy9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImZzL2JlZnMvS2NvbmZpZ1xcXCJcXG4tc291cmNlIFxcXCJmcy9iZnMvS2NvbmZpZ1xcXCJcXG4gc291cmNlIFxcXCJmcy9qZmZzMi9LY29uZmlnXFxcIlxcbiAjIFVCSUZTIEZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb25cXG4gc291cmNlIFxcXCJmcy91Ymlmcy9LY29uZmlnXFxcIlxcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXFxuaW5kZXggMDU1ZGZjMjNkODJiNi4uMTZmMTEwOGI2NGUxYSAxMDA2NDRcXG4tLS0gYS9mcy9NYWtlZmlsZVxcbisrKyBiL2ZzL01ha2VmaWxlXFxuQEAgLTc2LDcgKzc2LDYgQEAgb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4gb2JqLSQoQ09ORklHX01JTklYX0ZTKVxcdFxcdCs9IG1pbml4L1xcbiBvYmotJChDT05GSUdfRkFUX0ZTKVxcdFxcdCs9IGZhdC9cXG4gb2JqLSQoQ09ORklHX0VYRkFUX0ZTKVxcdFxcdCs9IGV4ZmF0L1xcbi1vYmotJChDT05GSUdfQkZTX0ZTKVxcdFxcdCs9IGJmcy9cXG4gb2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpXFx0Kz0gaXNvZnMvXFxuIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKVxcdCs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTK1xcbiBvYmotJChDT05GSUdfSEZTX0ZTKVxcdFxcdCs9IGhmcy9cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZ1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDhlN2VmODY2YjYyYTYuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS9mcy9iZnMvS2NvbmZpZ1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwyMSArMCwwIEBAXFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbi1jb25maWcgQkZTX0ZTXFxuLVxcdHRyaXN0YXRlIFxcXCJCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbi1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4tXFx0aGVscFxcbi1cXHQgIEJvb3QgRmlsZSBTeXN0ZW0gKEJGUykgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIHVuZGVyIFNDTyBVbml4V2FyZSB0b1xcbi1cXHQgIGFsbG93IHRoZSBib290bG9hZGVyIGFjY2VzcyB0byB0aGUga2VybmVsIGltYWdlIGFuZCBvdGhlciBpbXBvcnRhbnRcXG4tXFx0ICBmaWxlcyBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gIEl0IGlzIHVzdWFsbHkgbW91bnRlZCB1bmRlciAvc3RhbmRcXG4tXFx0ICBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIHNsaWNlIG1hcmtlZCBhcyBcXFwiU1RBTkRcXFwiIGluIHRoZSBVbml4V2FyZVxcbi1cXHQgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXNcXG4tXFx0ICBvbiB5b3VyIC9zdGFuZCBzbGljZSBmcm9tIHdpdGhpbiBMaW51eC4gIFlvdSB0aGVuIGFsc28gbmVlZCB0byBzYXkgWVxcbi1cXHQgIHRvIFxcXCJVbml4V2FyZSBzbGljZXMgc3VwcG9ydFxcXCIsIGJlbG93LiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQkZTXFxuLVxcdCAgZmlsZSBzeXN0ZW0gaXMgY29udGFpbmVkIGluIHRoZSBmaWxlXFxuLVxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XFx1MDAzZS5cXG4tXFxuLVxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGFib3V0LCBzYXkgTi5cXG4tXFxuLVxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuLVxcdCAgYmZzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBvZiB5b3VyIHJvb3QgcGFydGl0aW9uICh0aGUgb25lXFxuLVxcdCAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS5cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL01ha2VmaWxlIGIvZnMvYmZzL01ha2VmaWxlXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9NYWtlZmlsZVxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw4ICswLDAgQEBcXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuLSNcXG4tIyBNYWtlZmlsZSBmb3IgQkZTIGZpbGVzeXN0ZW0uXFxuLSNcXG4tXFxuLW9iai0kKENPTkZJR19CRlNfRlMpICs9IGJmcy5vXFxuLVxcbi1iZnMtb2JqcyA6PSBpbm9kZS5vIGZpbGUubyBkaXIub1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBiMDhhZmU3MzNlNjMyLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvZnMvYmZzL2Jmcy5oXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDY5ICswLDAgQEBcXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4tLypcXG4tICpcXHRmcy9iZnMvYmZzLmhcXG4tICpcXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqL1xcbi0jaWZuZGVmIF9GU19CRlNfQkZTX0hcXG4tI2RlZmluZSBfRlNfQkZTX0JGU19IXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmZzX2ZzLmhcXHUwMDNlXFxuLVxcbi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuXFxuLSAgIEluIGFjdHVhbCBmYWN0LCBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgNTEydGggaW5vZGUgKGkuZS4gaW5vZGUgTm8uIDUxMyBvciBmaWxlIE5vLiA1MTEpXFxuLSAgIHdpbGwgZmFpbCB3aXRoIEVOT1NQQyBpbiBiZnNfYWRkX2VudHJ5KCk6IHRoZSByb290IGRpcmVjdG9yeSBjYW5ub3QgY29udGFpbiBzbyBtYW55IGVudHJpZXMsIGNvdW50aW5nICcuLicuXFxuLSAgIFNvLCBta2ZzLmJmcyg4KSBzaG91bGQgcmVhbGx5IGxpbWl0IGl0cyAtTiBvcHRpb24gdG8gNTExIGFuZCBub3QgNTEyLiBGb3Igbm93LCB3ZSBqdXN0IHByaW50IGEgd2FybmluZ1xcbi0gICBpZiBhIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHN1Y2ggXFxcImltcG9zc2libGUgdG8gZmlsbCB1cFxcXCIgbnVtYmVyIG9mIGlub2RlcyAqL1xcbi0jZGVmaW5lIEJGU19NQVhfTEFTVElcXHQ1MTNcXG4tXFxuLS8qXFxuLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIHN1cGVyYmxvY2sgaW5mb1xcbi0gKi9cXG4tc3RydWN0IGJmc19zYl9pbmZvIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBzaV9ibG9ja3M7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfbGZfZWJsaztcXG4tXFx0dW5zaWduZWQgbG9uZyBzaV9sYXN0aTtcXG4tXFx0REVDTEFSRV9CSVRNQVAoc2lfaW1hcCwgQkZTX01BWF9MQVNUSSsxKTtcXG4tXFx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xcbi19O1xcbi1cXG4tLypcXG4tICogQkZTIGZpbGUgc3lzdGVtIGluLWNvcmUgaW5vZGUgaW5mb1xcbi0gKi9cXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBpX2Rza19pbm87IC8qIGlub2RlIG51bWJlciBmcm9tIHRoZSBkaXNrLCBjYW4gYmUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuLVxcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XFxuLX07XFxuLVxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfc2JfaW5mbyAqQkZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLXtcXG4tXFx0cmV0dXJuIHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19pbm9kZV9pbmZvICpCRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBiZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG4tfVxcbi1cXG4tXFxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcXFxcbi1cXHRwcmludGsoS0VSTl9FUlIgXFxcIkJGUy1mczogJXMoKTogXFxcIiBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKVxcbi1cXG4tLyogaW5vZGUuYyAqL1xcbi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7XFxuLWV4dGVybiB2b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuLVxcbi0vKiBmaWxlLmMgKi9cXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcztcXG4tXFxuLS8qIGRpci5jICovXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnM7XFxuLVxcbi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvZnMvYmZzL2Rpci5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDM1NiArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8qXFxuLSAqXFx0ZnMvYmZzL2Rpci5jXFxuLSAqXFx0QkZTIGRpcmVjdG9yeSBvcGVyYXRpb25zLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4ICBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqICBNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCBcXHUwMDNjYWRzQHdvbXBvbS5vcmdcXHUwMDNlIDIwMDVcXG4tICovXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJiZnMuaFxcXCJcXG4tXFxuLSN1bmRlZiBERUJVR1xcbi1cXG4tI2lmZGVmIERFQlVHXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcdHByaW50Zih4KVxcbi0jZWxzZVxcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubyk7XFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7XFxuLVxcbi1zdGF0aWMgaW50IGJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGZpbGVfaW5vZGUoZik7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuLVxcdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0aW50IGJsb2NrO1xcbi1cXG4tXFx0aWYgKGN0eC1cXHUwMDNlcG9zIFxcdTAwMjYgKEJGU19ESVJFTlRfU0laRSAtIDEpKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiQmFkIGZfcG9zPSUwOGx4IGZvciAlczolMDhsbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKWN0eC1cXHUwMDNlcG9zLFxcbi1cXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0d2hpbGUgKGN0eC1cXHUwMDNlcG9zIFxcdTAwM2MgZGlyLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0b2Zmc2V0ID0gY3R4LVxcdTAwM2Vwb3MgXFx1MDAyNiAoQkZTX0JTSVpFIC0gMSk7XFxuLVxcdFxcdGJsb2NrID0gQkZTX0koZGlyKS1cXHUwMDNlaV9zYmxvY2sgKyAoY3R4LVxcdTAwM2Vwb3MgXFx1MDAzZVxcdTAwM2UgQkZTX0JTSVpFX0JJVFMpO1xcbi1cXHRcXHRiaCA9IHNiX2JyZWFkKGRpci1cXHUwMDNlaV9zYiwgYmxvY2spO1xcbi1cXHRcXHRpZiAoIWJoKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zICs9IEJGU19CU0laRSAtIG9mZnNldDtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFx0XFx0ZG8ge1xcbi1cXHRcXHRcXHRkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC1cXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcXG4tXFx0XFx0XFx0aWYgKGRlLVxcdTAwM2Vpbm8pIHtcXG4tXFx0XFx0XFx0XFx0aW50IHNpemUgPSBzdHJubGVuKGRlLVxcdTAwM2VuYW1lLCBCRlNfTkFNRUxFTik7XFxuLVxcdFxcdFxcdFxcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlbmFtZSwgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUoZGUtXFx1MDAzZWlubyksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdERUX1VOS05PV04pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0b2Zmc2V0ICs9IEJGU19ESVJFTlRfU0laRTtcXG4tXFx0XFx0XFx0Y3R4LVxcdTAwM2Vwb3MgKz0gQkZTX0RJUkVOVF9TSVpFO1xcbi1cXHRcXHR9IHdoaWxlICgob2Zmc2V0IFxcdTAwM2MgQkZTX0JTSVpFKSBcXHUwMDI2XFx1MDAyNiAoY3R4LVxcdTAwM2Vwb3MgXFx1MDAzYyBkaXItXFx1MDAzZWlfc2l6ZSkpO1xcbi1cXHRcXHRicmVsc2UoYmgpO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuLVxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gYmZzX3JlYWRkaXIsXFxuLVxcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbi1cXHQubGxzZWVrXFx0XFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLXtcXG4tXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5vO1xcbi1cXG4tXFx0aW5vZGUgPSBuZXdfaW5vZGUocyk7XFxuLVxcdGlmICghaW5vZGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdGlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby1cXHUwMDNlc2lfaW1hcCwgaW5mby1cXHUwMDNlc2lfbGFzdGkgKyAxKTtcXG4tXFx0aWYgKGlubyBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2xhc3RpKSB7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRcXHRpcHV0KGlub2RlKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLVxcdH1cXG4tXFx0c2V0X2JpdChpbm8sIGluZm8tXFx1MDAzZXNpX2ltYXApO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9mcmVlaS0tO1xcbi1cXHRpbm9kZV9pbml0X293bmVyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgZGlyLCBtb2RlKTtcXG4tXFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSAwO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZiZnNfZmlsZV9pbm9wcztcXG4tXFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XFxuLVxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmJmc19hb3BzO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9pbm8gPSBpbm87XFxuLVxcdEJGU19JKGlub2RlKS1cXHUwMDNlaV9kc2tfaW5vID0gaW5vO1xcbi1cXHRCRlNfSShpbm9kZSktXFx1MDAzZWlfc2Jsb2NrID0gMDtcXG4tXFx0QkZTX0koaW5vZGUpLVxcdTAwM2VpX2VibG9jayA9IDA7XFxuLVxcdGluc2VydF9pbm9kZV9oYXNoKGlub2RlKTtcXG4tICAgICAgICBtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0YmZzX2R1bXBfaW1hcChcXFwiY3JlYXRlXFxcIiwgcyk7XFxuLVxcbi1cXHRlcnIgPSBiZnNfYWRkX2VudHJ5KGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdFxcdGlwdXQoaW5vZGUpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBkZW50cnkgKmJmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihkaXItXFx1MDAzZWlfc2IpO1xcbi1cXG4tXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIEJGU19OQU1FTEVOKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNmRlKTtcXG4tXFx0aWYgKGJoKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgaW5vID0gKHVuc2lnbmVkIGxvbmcpbGUxNl90b19jcHUoZGUtXFx1MDAzZWlubyk7XFxuLVxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdGlub2RlID0gYmZzX2lnZXQoZGlyLVxcdTAwM2VpX3NiLCBpbm8pO1xcbi1cXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqbmV3KVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKG9sZCk7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdGVyciA9IGJmc19hZGRfZW50cnkoZGlyLCBcXHUwMDI2bmV3LVxcdTAwM2VkX25hbWUsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFx0aW5jX25saW5rKGlub2RlKTtcXG4tXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbi1cXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0aWhvbGQoaW5vZGUpO1xcbi1cXHRkX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi17XFxuLVxcdGludCBlcnJvciA9IC1FTk9FTlQ7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuLVxcdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcXG4tXFx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNmRlKTtcXG4tXFx0aWYgKCFiaCB8fCAobGUxNl90b19jcHUoZGUtXFx1MDAzZWlubykgIT0gaW5vZGUtXFx1MDAzZWlfaW5vKSlcXG4tXFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbi1cXG4tXFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbi1cXHRcXHRwcmludGYoXFxcInVubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8sXFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX25saW5rKTtcXG4tXFx0XFx0c2V0X25saW5rKGlub2RlLCAxKTtcXG4tXFx0fVxcbi1cXHRkZS1cXHUwMDNlaW5vID0gMDtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbi1cXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIGlub2RlX2dldF9jdGltZShkaXIpKTtcXG4tXFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xcbi1cXHRlcnJvciA9IDA7XFxuLVxcbi1vdXRfYnJlbHNlOlxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLCAqbmV3X2JoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqb2xkX2RlLCAqbmV3X2RlO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XFxuLVxcdGludCBlcnJvciA9IC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+UkVOQU1FX05PUkVQTEFDRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRvbGRfYmggPSBuZXdfYmggPSBOVUxMO1xcbi1cXHRvbGRfaW5vZGUgPSBkX2lub2RlKG9sZF9kZW50cnkpO1xcbi1cXHRpZiAoU19JU0RJUihvbGRfaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aW5mbyA9IEJGU19TQihvbGRfaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRvbGRfYmggPSBiZnNfZmluZF9lbnRyeShvbGRfZGlyLCBcXHUwMDI2b2xkX2RlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXHUwMDI2b2xkX2RlKTtcXG4tXFxuLVxcdGlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtXFx1MDAzZWlubykgIT0gb2xkX2lub2RlLVxcdTAwM2VpX2lubykpXFxuLVxcdFxcdGdvdG8gZW5kX3JlbmFtZTtcXG4tXFxuLVxcdGVycm9yID0gLUVQRVJNO1xcbi1cXHRuZXdfaW5vZGUgPSBkX2lub2RlKG5ld19kZW50cnkpO1xcbi1cXHRuZXdfYmggPSBiZnNfZmluZF9lbnRyeShuZXdfZGlyLCBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXHUwMDI2bmV3X2RlKTtcXG4tXFxuLVxcdGlmIChuZXdfYmggXFx1MDAyNlxcdTAwMjYgIW5ld19pbm9kZSkge1xcbi1cXHRcXHRicmVsc2UobmV3X2JoKTtcXG4tXFx0XFx0bmV3X2JoID0gTlVMTDtcXG4tXFx0fVxcbi1cXHRpZiAoIW5ld19iaCkge1xcbi1cXHRcXHRlcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0b2xkX2lub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBlbmRfcmVuYW1lO1xcbi1cXHR9XFxuLVxcdG9sZF9kZS1cXHUwMDNlaW5vID0gMDtcXG4tXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKG9sZF9kaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KG9sZF9kaXIpKTtcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4tXFx0aWYgKG5ld19pbm9kZSkge1xcbi1cXHRcXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpO1xcbi1cXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpO1xcbi1cXHR9XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShvbGRfYmgsIFxcdTAwMjZCRlNfSShvbGRfZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRlcnJvciA9IDA7XFxuLVxcbi1lbmRfcmVuYW1lOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YnJlbHNlKG9sZF9iaCk7XFxuLVxcdGJyZWxzZShuZXdfYmgpO1xcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7XFxuLVxcdC5jcmVhdGVcXHRcXHRcXHQ9IGJmc19jcmVhdGUsXFxuLVxcdC5sb29rdXBcXHRcXHRcXHQ9IGJmc19sb29rdXAsXFxuLVxcdC5saW5rXFx0XFx0XFx0PSBiZnNfbGluayxcXG4tXFx0LnVubGlua1xcdFxcdFxcdD0gYmZzX3VubGluayxcXG4tXFx0LnJlbmFtZVxcdFxcdFxcdD0gYmZzX3JlbmFtZSxcXG4tfTtcXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKVxcbi17XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cXHUwMDNlbmFtZTtcXG4tXFx0aW50IG5hbWVsZW4gPSBjaGlsZC1cXHUwMDNlbGVuO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdGludCBibG9jaywgc2Jsb2NrLCBlYmxvY2ssIG9mZiwgcG9zO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGRwcmludGYoXFxcIm5hbWU9JXMsIG5hbWVsZW49JWRcXFxcblxcXCIsIG5hbWUsIG5hbWVsZW4pO1xcbi1cXG4tXFx0c2Jsb2NrID0gQkZTX0koZGlyKS1cXHUwMDNlaV9zYmxvY2s7XFxuLVxcdGVibG9jayA9IEJGU19JKGRpciktXFx1MDAzZWlfZWJsb2NrO1xcbi1cXHRmb3IgKGJsb2NrID0gc2Jsb2NrOyBibG9jayBcXHUwMDNjPSBlYmxvY2s7IGJsb2NrKyspIHtcXG4tXFx0XFx0YmggPSBzYl9icmVhZChkaXItXFx1MDAzZWlfc2IsIGJsb2NrKTtcXG4tXFx0XFx0aWYgKCFiaClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdGZvciAob2ZmID0gMDsgb2ZmIFxcdTAwM2MgQkZTX0JTSVpFOyBvZmYgKz0gQkZTX0RJUkVOVF9TSVpFKSB7XFxuLVxcdFxcdFxcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVxcdTAwM2ViX2RhdGEgKyBvZmYpO1xcbi1cXHRcXHRcXHRpZiAoIWRlLVxcdTAwM2Vpbm8pIHtcXG4tXFx0XFx0XFx0XFx0cG9zID0gKGJsb2NrIC0gc2Jsb2NrKSAqIEJGU19CU0laRSArIG9mZjtcXG4tXFx0XFx0XFx0XFx0aWYgKHBvcyBcXHUwMDNlPSBkaXItXFx1MDAzZWlfc2l6ZSkge1xcbi1cXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2l6ZSArPSBCRlNfRElSRU5UX1NJWkU7XFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuLVxcdFxcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4tXFx0XFx0XFx0XFx0ZGUtXFx1MDAzZWlubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTtcXG4tXFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJGU19OQU1FTEVOOyBpKyspXFxuLVxcdFxcdFxcdFxcdFxcdGRlLVxcdTAwM2VuYW1lW2ldID1cXG4tXFx0XFx0XFx0XFx0XFx0XFx0KGkgXFx1MDAzYyBuYW1lbGVuKSA/IG5hbWVbaV0gOiAwO1xcbi1cXHRcXHRcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZCRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gLUVOT1NQQztcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmZmVyKVxcbi17XFxuLVxcdGlmICgobGVuIFxcdTAwM2MgQkZTX05BTUVMRU4pIFxcdTAwMjZcXHUwMDI2IGJ1ZmZlcltsZW5dKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuICFtZW1jbXAobmFtZSwgYnVmZmVyLCBsZW4pO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cXHUwMDNlbmFtZTtcXG4tXFx0aW50IG5hbWVsZW4gPSBjaGlsZC1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0KnJlc19kaXIgPSBOVUxMO1xcbi1cXHRpZiAobmFtZWxlbiBcXHUwMDNlIEJGU19OQU1FTEVOKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHdoaWxlIChibG9jayAqIEJGU19CU0laRSArIG9mZnNldCBcXHUwMDNjIGRpci1cXHUwMDNlaV9zaXplKSB7XFxuLVxcdFxcdGlmICghYmgpIHtcXG4tXFx0XFx0XFx0YmggPSBzYl9icmVhZChkaXItXFx1MDAzZWlfc2IsIEJGU19JKGRpciktXFx1MDAzZWlfc2Jsb2NrICsgYmxvY2spO1xcbi1cXHRcXHRcXHRpZiAoIWJoKSB7XFxuLVxcdFxcdFxcdFxcdGJsb2NrKys7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXFx1MDAzZWJfZGF0YSArIG9mZnNldCk7XFxuLVxcdFxcdG9mZnNldCArPSBCRlNfRElSRU5UX1NJWkU7XFxuLVxcdFxcdGlmIChsZTE2X3RvX2NwdShkZS1cXHUwMDNlaW5vKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cXHUwMDNlbmFtZSkpIHtcXG4tXFx0XFx0XFx0KnJlc19kaXIgPSBkZTtcXG4tXFx0XFx0XFx0cmV0dXJuIGJoO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyBiaC1cXHUwMDNlYl9zaXplKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0YmggPSBOVUxMO1xcbi1cXHRcXHRvZmZzZXQgPSAwO1xcbi1cXHRcXHRibG9jaysrO1xcbi1cXHR9XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZDMzZDZiZGU5OTJiOC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9maWxlLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjAzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLypcXG4tICpcXHRmcy9iZnMvZmlsZS5jXFxuLSAqXFx0QkZTIGZpbGUgb3BlcmF0aW9ucy5cXG4tICpcXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqXFxuLSAqXFx0TWFrZSB0aGUgZmlsZSBibG9jayBhbGxvY2F0aW9uIGFsZ29yaXRobSB1bmRlcnN0YW5kIHRoZSBzaXplXFxuLSAqXFx0b2YgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXFx1MDAzY2RtaXRyaS52b3JvYmlldkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqXFxuLSAqL1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcGFnZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImJmcy5oXFxcIlxcbi1cXG4tI3VuZGVmIERFQlVHXFxuLVxcbi0jaWZkZWYgREVCVUdcXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXFx0cHJpbnRmKHgpXFxuLSNlbHNlXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcbi0jZW5kaWZcXG4tXFxuLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0Lmxsc2VlayBcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4tXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4tXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfbW92ZV9ibG9jayh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLXtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKm5ldztcXG4tXFxuLVxcdGJoID0gc2JfYnJlYWQoc2IsIGZyb20pO1xcbi1cXHRpZiAoIWJoKVxcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0bmV3ID0gc2JfZ2V0YmxrKHNiLCB0byk7XFxuLVxcdG1lbWNweShuZXctXFx1MDAzZWJfZGF0YSwgYmgtXFx1MDAzZWJfZGF0YSwgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuLVxcdG1hcmtfYnVmZmVyX2RpcnR5KG5ldyk7XFxuLVxcdGJmb3JnZXQoYmgpO1xcbi1cXHRicmVsc2UobmV3KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX21vdmVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHdoZXJlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFxuLVxcdGRwcmludGYoXFxcIiUwOGx4LSUwOGx4LVxcdTAwM2UlMDhseFxcXFxuXFxcIiwgc3RhcnQsIGVuZCwgd2hlcmUpO1xcbi1cXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjPSBlbmQ7IGkrKylcXG4tXFx0XFx0aWYoYmZzX21vdmVfYmxvY2soaSwgd2hlcmUgKyBpLCBzYikpIHtcXG4tXFx0XFx0XFx0ZHByaW50ZihcXFwiZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLVxcdTAwM2UgJTA4bHhcXFxcblxcXCIsIGksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHdoZXJlICsgaSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IGJmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuLVxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGh5cztcXG4tXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xcbi1cXG4tXFx0cGh5cyA9IGJpLVxcdTAwM2VpX3NibG9jayArIGJsb2NrO1xcbi1cXHRpZiAoIWNyZWF0ZSkge1xcbi1cXHRcXHRpZiAocGh5cyBcXHUwMDNjPSBiaS1cXHUwMDNlaV9lYmxvY2spIHtcXG4tXFx0XFx0XFx0ZHByaW50ZihcXFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDlseCAoZ3JhbnRlZClcXFxcblxcXCIsXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XFxuLVxcdFxcdFxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgdGhlIGZpbGUgaXMgbm90IGVtcHR5IGFuZCB0aGUgcmVxdWVzdGVkIGJsb2NrIGlzIHdpdGhpbiB0aGVcXG4tXFx0ICogcmFuZ2Ugb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBmaWxlLCB3ZSBjYW4gZ3JhbnQgaXQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYmktXFx1MDAzZWlfc2Jsb2NrIFxcdTAwMjZcXHUwMDI2IChwaHlzIFxcdTAwM2M9IGJpLVxcdTAwM2VpX2VibG9jaykpIHtcXG4tXFx0XFx0ZHByaW50ZihcXFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoaW50ZXJpbSBibG9jayBncmFudGVkKVxcXFxuXFxcIiwgXFxuLVxcdFxcdFxcdFxcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xcbi1cXHRcXHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBUaGUgZmlsZSB3aWxsIGJlIGV4dGVuZGVkLCBzbyBsZXQncyBzZWUgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLiAqL1xcbi1cXHRpZiAocGh5cyBcXHUwMDNlPSBpbmZvLVxcdTAwM2VzaV9ibG9ja3MpXFxuLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi1cXG4tXFx0LyogVGhlIHJlc3QgaGFzIHRvIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGl0c2VsZi4gKi9cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZFxcbi1cXHQgKiBibG9jaywgd2UgY2FuIGV4dGVuZCB0aGUgZmlsZSB0cml2aWFsbHksIHdpdGhvdXQgbW92aW5nIGl0XFxuLVxcdCAqIGFueXdoZXJlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGJpLVxcdTAwM2VpX2VibG9jayA9PSBpbmZvLVxcdTAwM2VzaV9sZl9lYmxrKSB7XFxuLVxcdFxcdGRwcmludGYoXFxcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXFxcXG5cXFwiLCBcXG4tXFx0XFx0XFx0XFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XFxuLVxcdFxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgLT0gcGh5cyAtIGJpLVxcdTAwM2VpX2VibG9jaztcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGJpLVxcdTAwM2VpX2VibG9jayA9IHBoeXM7XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHRcXHRlcnIgPSAwO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXFxuLVxcdHBoeXMgPSBpbmZvLVxcdTAwM2VzaV9sZl9lYmxrICsgMTtcXG4tXFx0aWYgKHBoeXMgKyBibG9jayBcXHUwMDNlPSBpbmZvLVxcdTAwM2VzaV9ibG9ja3MpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChiaS1cXHUwMDNlaV9zYmxvY2spIHtcXG4tXFx0XFx0ZXJyID0gYmZzX21vdmVfYmxvY2tzKGlub2RlLVxcdTAwM2VpX3NiLCBiaS1cXHUwMDNlaV9zYmxvY2ssIFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRiaS1cXHUwMDNlaV9lYmxvY2ssIHBoeXMpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGRwcmludGYoXFxcImZhaWxlZCB0byBtb3ZlIGlubz0lMDhseCAtXFx1MDAzZSBmcyBjb3JydXB0aW9uXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0ZXJyID0gMDtcXG4tXFxuLVxcdGRwcmludGYoXFxcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKG1vdmVkKVxcXFxuXFxcIixcXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xcbi1cXHRiaS1cXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xcbi1cXHRwaHlzICs9IGJsb2NrO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9sZl9lYmxrID0gYmktXFx1MDAzZWlfZWJsb2NrID0gcGh5cztcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoaXMgYXNzdW1lcyBub3RoaW5nIGNhbiB3cml0ZSB0aGUgaW5vZGUgYmFjayB3aGlsZSB3ZSBhcmUgaGVyZVxcbi1cXHQgKiBhbmQgdGh1cyB1cGRhdGUgaW5vZGUtXFx1MDAzZWlfYmxvY2tzISAoWFhYKVxcbi1cXHQgKi9cXG4tXFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgLT0gYmktXFx1MDAzZWlfZWJsb2NrIC0gYmktXFx1MDAzZWlfc2Jsb2NrICsgMSAtIGlub2RlLVxcdTAwM2VpX2Jsb2NrcztcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuLVxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIGVycjtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4te1xcbi1cXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXG4tXFx0aWYgKHRvIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG4tXFx0XFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0ICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHZvaWQgKipmc2RhdGEpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmb2xpb3AsIGJmc19nZXRfYmxvY2spO1xcbi1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tXFx0XFx0YmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4te1xcbi1cXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcXG4tXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gYmZzX3JlYWRfZm9saW8sXFxuLVxcdC53cml0ZXBhZ2VzXFx0PSBiZnNfd3JpdGVwYWdlcyxcXG4tXFx0LndyaXRlX2JlZ2luXFx0PSBiZnNfd3JpdGVfYmVnaW4sXFxuLVxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbi1cXHQubWlncmF0ZV9mb2xpb1xcdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXFxuLVxcdC5ibWFwXFx0XFx0PSBiZnNfYm1hcCxcXG4tfTtcXG4tXFxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDUzOCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4tLypcXG4tICpcXHRmcy9iZnMvaW5vZGUuY1xcbi0gKlxcdEJGUyBzdXBlcmJsb2NrIGFuZCBpbm9kZSBvcGVyYXRpb25zLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXG4tICpcXHRGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuXFxuLSAqXFx0TWFkZSBlbmRpYW5uZXNzLWNsZWFuIGJ5IEFuZHJldyBTdHJpYmJsZWhpbGwgXFx1MDAzY2Fkc0B3b21wb20ub3JnXFx1MDAzZSwgMjAwNS5cXG4tICovXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJiZnMuaFxcXCJcXG4tXFxuLU1PRFVMRV9BVVRIT1IoXFxcIlRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTQ08gVW5peFdhcmUgQkZTIGZpbGVzeXN0ZW0gZm9yIExpbnV4XFxcIik7XFxuLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tXFxuLSN1bmRlZiBERUJVR1xcbi1cXG4tI2lmZGVmIERFQlVHXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcdHByaW50Zih4KVxcbi0jZWxzZVxcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcXG4tI2VuZGlmXFxuLVxcbi1zdHJ1Y3QgaW5vZGUgKmJmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi17XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRpbnQgYmxvY2ssIG9mZjtcXG4tXFxuLVxcdGlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7XFxuLVxcdGlmICghaW5vZGUpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ORVcpKVxcbi1cXHRcXHRyZXR1cm4gaW5vZGU7XFxuLVxcbi1cXHRpZiAoKGlubyBcXHUwMDNjIEJGU19ST09UX0lOTykgfHwgKGlubyBcXHUwMDNlIEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNpX2xhc3RpKSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm8pO1xcbi1cXHRcXHRnb3RvIGVycm9yO1xcbi1cXHR9XFxuLVxcbi1cXHRibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgKyAxO1xcbi1cXHRiaCA9IHNiX2JyZWFkKGlub2RlLVxcdTAwM2VpX3NiLCBibG9jayk7XFxuLVxcdGlmICghYmgpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxcXFxuXFxcIiwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlubyk7XFxuLVxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdH1cXG4tXFxuLVxcdG9mZiA9IChpbm8gLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XFxuLVxcdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cXHUwMDNlYl9kYXRhICsgb2ZmO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogaHR0cHM6Ly9tYXJ0aW4uaGlubmVyLmluZm8vZnMvYmZzL2Jmcy1zdHJ1Y3R1cmUuaHRtbCBleHBsYWlucyB0aGF0XFxuLVxcdCAqIEJGUyBpbiBTQ08gVW5peFdhcmUgZW52aXJvbm1lbnQgdXNlZCBvbmx5IGxvd2VyIDkgYml0cyBvZiBkaS1cXHUwMDNlaV9tb2RlXFxuLVxcdCAqIHZhbHVlLiBUaGlzIG1lYW5zIHRoYXQsIGFsdGhvdWdoIGJmc193cml0ZV9pbm9kZSgpIHNhdmVzIHdob2xlXFxuLVxcdCAqIGlub2RlLVxcdTAwM2VpX21vZGUgYml0cyAod2hpY2ggaW5jbHVkZSBTX0lGTVQgYml0cyBhbmQgU19JU3tVSUQsR0lELFZUWH1cXG4tXFx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXFx1MDAzZWlfbW9kZSB2YWx1ZSBjYW4gYmUgZ2FyYmFnZSB3aGVuIHRoZXNlXFxuLVxcdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXFxuLVxcdCAqIFNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBtaWRkbGUgNyBiaXRzIGFyZSBnYXJiYWdlLCB1c2Ugb25seVxcbi1cXHQgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmdcXG4tXFx0ICogZ2FyYmFnZSkgYW5kIHJlY29uc3RydWN0IFNfSUZNVCBiaXRzIGZvciBMaW51eCBlbnZpcm9ubWVudCBmcm9tXFxuLVxcdCAqIGRpLVxcdTAwM2VpX3Z0eXBlIHZhbHVlLlxcbi1cXHQgKi9cXG4tXFx0aW5vZGUtXFx1MDAzZWlfbW9kZSA9IDB4MDAwMDBGRkYgXFx1MDAyNiBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9tb2RlKTtcXG4tXFx0aWYgKGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVkRJUikge1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlIHw9IFNfSUZESVI7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmJmc19kaXJfaW5vcHM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZiZnNfZGlyX29wZXJhdGlvbnM7XFxuLVxcdH0gZWxzZSBpZiAobGUzMl90b19jcHUoZGktXFx1MDAzZWlfdnR5cGUpID09IEJGU19WUkVHKSB7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUgfD0gU19JRlJFRztcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZiZnNfZmlsZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZiZnNfYW9wcztcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgICAgbGUzMl90b19jcHUoZGktXFx1MDAzZWlfdnR5cGUpLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgaW5vKTtcXG4tXFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbi1cXG4tXFx0QkZTX0koaW5vZGUpLVxcdTAwM2VpX3NibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9zYmxvY2spO1xcbi1cXHRCRlNfSShpbm9kZSktXFx1MDAzZWlfZWJsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2VibG9jayk7XFxuLVxcdEJGU19JKGlub2RlKS1cXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXFx1MDAzZWlfaW5vKTtcXG4tXFx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX3VpZCkpO1xcbi1cXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2dpZCkpO1xcbi1cXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX25saW5rKSk7XFxuLVxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBCRlNfRklMRVNJWkUoZGkpO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSBCRlNfRklMRUJMT0NLUyhkaSk7XFxuLVxcdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXFx1MDAzZWlfYXRpbWUpLCAwKTtcXG4tXFx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9tdGltZSksIDApO1xcbi1cXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2N0aW1lKSwgMCk7XFxuLVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcXG4tXFx0cmV0dXJuIGlub2RlO1xcbi1cXG4tZXJyb3I6XFxuLVxcdGlnZXRfZmFpbGVkKGlub2RlKTtcXG4tXFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgYmZzX2lub2RlICpmaW5kX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKnApXFxuLXtcXG4tXFx0aWYgKChpbm8gXFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXFx1MDAzZSBCRlNfU0Ioc2IpLVxcdTAwM2VzaV9sYXN0aSkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJCYWQgaW5vZGUgbnVtYmVyICVzOiUwOHhcXFxcblxcXCIsIHNiLVxcdTAwM2VzX2lkLCBpbm8pO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5vIC09IEJGU19ST09UX0lOTztcXG4tXFxuLVxcdCpwID0gc2JfYnJlYWQoc2IsIDEgKyBpbm8gLyBCRlNfSU5PREVTX1BFUl9CTE9DSyk7XFxuLVxcdGlmICghKnApIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDh4XFxcXG5cXFwiLCBzYi1cXHUwMDNlc19pZCwgaW5vKTtcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAoc3RydWN0IGJmc19pbm9kZSAqKSgqcCktXFx1MDAzZWJfZGF0YSArICBpbm8gJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0dW5zaWduZWQgaW50IGlubyA9ICh1MTYpaW5vZGUtXFx1MDAzZWlfaW5vO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFxuLVxcdGRwcmludGYoXFxcImlubz0lMDh4XFxcXG5cXFwiLCBpbm8pO1xcbi1cXG4tXFx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm8sIFxcdTAwMjZiaCk7XFxuLVxcdGlmIChJU19FUlIoZGkpKVxcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihkaSk7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcbi1cXHRpZiAoaW5vID09IEJGU19ST09UX0lOTylcXG4tXFx0XFx0ZGktXFx1MDAzZWlfdnR5cGUgPSBjcHVfdG9fbGUzMihCRlNfVkRJUik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZGktXFx1MDAzZWlfdnR5cGUgPSBjcHVfdG9fbGUzMihCRlNfVlJFRyk7XFxuLVxcbi1cXHRkaS1cXHUwMDNlaV9pbm8gPSBjcHVfdG9fbGUxNihpbm8pO1xcbi1cXHRkaS1cXHUwMDNlaV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtXFx1MDAzZWlfbW9kZSk7XFxuLVxcdGRpLVxcdTAwM2VpX3VpZCA9IGNwdV90b19sZTMyKGlfdWlkX3JlYWQoaW5vZGUpKTtcXG4tXFx0ZGktXFx1MDAzZWlfZ2lkID0gY3B1X3RvX2xlMzIoaV9naWRfcmVhZChpbm9kZSkpO1xcbi1cXHRkaS1cXHUwMDNlaV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLVxcdTAwM2VpX25saW5rKTtcXG4tXFx0ZGktXFx1MDAzZWlfYXRpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfYXRpbWVfc2VjKGlub2RlKSk7XFxuLVxcdGRpLVxcdTAwM2VpX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X210aW1lX3NlYyhpbm9kZSkpO1xcbi1cXHRkaS1cXHUwMDNlaV9jdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9jdGltZV9zZWMoaW5vZGUpKTtcXG4tXFx0aV9zYmxvY2sgPSBCRlNfSShpbm9kZSktXFx1MDAzZWlfc2Jsb2NrO1xcbi1cXHRkaS1cXHUwMDNlaV9zYmxvY2sgPSBjcHVfdG9fbGUzMihpX3NibG9jayk7XFxuLVxcdGRpLVxcdTAwM2VpX2VibG9jayA9IGNwdV90b19sZTMyKEJGU19JKGlub2RlKS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuLVxcbi1cXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXG4tXFx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCAodTE2KWlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4tXFx0aWYgKElTX0VSUihkaSkpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKGRpKTtcXG4tXFxuLVxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4tXFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFx0ZXJyID0gbW1iX3N5bmMoXFx1MDAyNkJGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1vdXQ6XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtXFx1MDAzZWlfaW5vO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihzKTtcXG4tXFx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTtcXG4tXFxuLVxcdGRwcmludGYoXFxcImlubz0lMDhseFxcXFxuXFxcIiwgaW5vKTtcXG4tXFxuLVxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4tXFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9pbnZhbGlkYXRlKFxcdTAwMjZCRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4tXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbi1cXG4tXFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbi1cXHRpZiAoSVNfRVJSKGRpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHQvKiBjbGVhciBvbi1kaXNrIGlub2RlICovXFxuLVxcdG1lbXNldChkaSwgMCwgc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGUpKTtcXG4tXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRicmVsc2UoYmgpO1xcbi1cXG4tXFx0aWYgKGJpLVxcdTAwM2VpX2Rza19pbm8pIHtcXG4tXFx0XFx0aWYgKGJpLVxcdTAwM2VpX3NibG9jaylcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgKz0gYmktXFx1MDAzZWlfZWJsb2NrICsgMSAtIGJpLVxcdTAwM2VpX3NibG9jaztcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWkrKztcXG4tXFx0XFx0Y2xlYXJfYml0KGlubywgaW5mby1cXHUwMDNlc2lfaW1hcCk7XFxuLVxcdFxcdGJmc19kdW1wX2ltYXAoXFxcImV2aWN0X2lub2RlXFxcIiwgcyk7XFxuLVxcdH1cXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZpbGUsIG1ha2UgdGhlIHByZXZpb3VzIGJsb2NrXFxuLVxcdCAqIFxcXCJsYXN0IGJsb2NrIG9mIHRoZSBsYXN0IGZpbGVcXFwiIGV2ZW4gaWYgdGhlcmUgaXMgbm9cXG4tXFx0ICogcmVhbCBmaWxlIHRoZXJlLCBzYXZlcyB1cyAxIGdhcC5cXG4tXFx0ICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VzaV9sZl9lYmxrID09IGJpLVxcdTAwM2VpX2VibG9jaylcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGJpLVxcdTAwM2VpX3NibG9jayAtIDE7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4te1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcbi1cXHRpZiAoIWluZm8pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0a2ZyZWUoaW5mbyk7XFxuLVxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LVxcdTAwM2VkX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcdHU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX2Rldik7XFxuLVxcdGJ1Zi1cXHUwMDNlZl90eXBlID0gQkZTX01BR0lDO1xcbi1cXHRidWYtXFx1MDAzZWZfYnNpemUgPSBzLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IGluZm8tXFx1MDAzZXNpX2Jsb2NrcztcXG4tXFx0YnVmLVxcdTAwM2VmX2JmcmVlID0gYnVmLVxcdTAwM2VmX2JhdmFpbCA9IGluZm8tXFx1MDAzZXNpX2ZyZWViO1xcbi1cXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBpbmZvLVxcdTAwM2VzaV9sYXN0aSArIDEgLSBCRlNfUk9PVF9JTk87XFxuLVxcdGJ1Zi1cXHUwMDNlZl9mZnJlZSA9IGluZm8tXFx1MDAzZXNpX2ZyZWVpO1xcbi1cXHRidWYtXFx1MDAzZWZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTtcXG4tXFx0YnVmLVxcdTAwM2VmX25hbWVsZW4gPSBCRlNfTkFNRUxFTjtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmZzX2lub2RlX2NhY2hlcDtcXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi17XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7XFxuLVxcdGJpID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIWJpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0bW1iX2luaXQoXFx1MDAyNmJpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmJpLVxcdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcXG4tXFxuLVxcdHJldHVybiBcXHUwMDI2YmktXFx1MDAzZXZmc19pbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4te1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vO1xcbi1cXG4tXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZiaS1cXHUwMDNldmZzX2lub2RlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpXFxuLXtcXG4tXFx0YmZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJiZnNfaW5vZGVfY2FjaGVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlX2luZm8pLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0U0xBQl9BQ0NPVU5UKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBpbml0X29uY2UpO1xcbi1cXHRpZiAoYmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKVxcbi17XFxuLVxcdC8qXFxuLVxcdCAqIE1ha2Ugc3VyZSBhbGwgZGVsYXllZCByY3UgZnJlZSBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlXFxuLVxcdCAqIGRlc3Ryb3kgY2FjaGUuXFxuLVxcdCAqL1xcbi1cXHRyY3VfYmFycmllcigpO1xcbi1cXHRrbWVtX2NhY2hlX2Rlc3Ryb3koYmZzX2lub2RlX2NhY2hlcCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4tXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuLVxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4tXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuLVxcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuLVxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbi1cXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbi1cXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbi19O1xcbi1cXG4tdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbi17XFxuLSNpZmRlZiBERUJVR1xcbi1cXHRpbnQgaTtcXG4tXFx0Y2hhciAqdG1wYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbi1cXG4tXFx0aWYgKCF0bXBidWYpXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0Zm9yIChpID0gQkZTX1NCKHMpLVxcdTAwM2VzaV9sYXN0aTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4tXFx0XFx0aWYgKGkgXFx1MDAzZSBQQUdFX1NJWkUgLSAxMDApIGJyZWFrO1xcbi1cXHRcXHRpZiAodGVzdF9iaXQoaSwgQkZTX1NCKHMpLVxcdTAwM2VzaV9pbWFwKSlcXG4tXFx0XFx0XFx0c3RyY2F0KHRtcGJ1ZiwgXFxcIjFcXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRzdHJjYXQodG1wYnVmLCBcXFwiMFxcXCIpO1xcbi1cXHR9XFxuLVxcdHByaW50ZihcXFwiJXM6IGxhc3RpPSUwOGx4IFxcdTAwM2Mlc1xcdTAwM2VcXFxcblxcXCIsIHByZWZpeCwgQkZTX1NCKHMpLVxcdTAwM2VzaV9sYXN0aSwgdG1wYnVmKTtcXG4tXFx0a2ZyZWUodG1wYnVmKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLXtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKnNiaDtcXG4tXFx0c3RydWN0IGJmc19zdXBlcl9ibG9jayAqYmZzX3NiO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi1cXHR1bnNpZ25lZCBpO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrLCBpX2VibG9jaywgaV9lb2ZmLCBzX3NpemU7XFxuLVxcdGludCBzaWxlbnQgPSBmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9TSUxFTlQ7XFxuLVxcbi1cXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbi1cXHRpZiAoIWluZm8pXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IGluZm87XFxuLVxcdHMtXFx1MDAzZXNfdGltZV9taW4gPSAwO1xcbi1cXHRzLVxcdTAwM2VzX3RpbWVfbWF4ID0gVTMyX01BWDtcXG4tXFxuLVxcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBCRlNfQlNJWkUpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHNiaCA9IHNiX2JyZWFkKHMsIDApO1xcbi1cXHRpZiAoIXNiaClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdGJmc19zYiA9IChzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICopc2JoLVxcdTAwM2ViX2RhdGE7XFxuLVxcdGlmIChsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfbWFnaWMpICE9IEJGU19NQUdJQykge1xcbi1cXHRcXHRpZiAoIXNpbGVudClcXG4tXFx0XFx0XFx0cHJpbnRmKFxcXCJObyBCRlMgZmlsZXN5c3RlbSBvbiAlcyAobWFnaWM9JTA4eClcXFxcblxcXCIsIHMtXFx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfbWFnaWMpKTtcXG4tXFx0XFx0Z290byBvdXQxO1xcbi1cXHR9XFxuLVxcdGlmIChCRlNfVU5DTEVBTihiZnNfc2IsIHMpIFxcdTAwMjZcXHUwMDI2ICFzaWxlbnQpXFxuLVxcdFxcdHByaW50ZihcXFwiJXMgaXMgdW5jbGVhbiwgY29udGludWluZ1xcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcbi1cXHRzLVxcdTAwM2VzX21hZ2ljID0gQkZTX01BR0lDO1xcbi1cXG4tXFx0aWYgKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19zdGFydCkgXFx1MDAzZSBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfZW5kKSB8fFxcbi1cXHQgICAgbGUzMl90b19jcHUoYmZzX3NiLVxcdTAwM2VzX3N0YXJ0KSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrKSArIHNpemVvZihzdHJ1Y3QgYmZzX2RpcmVudCkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJTdXBlcmJsb2NrIGlzIGNvcnJ1cHRlZCBvbiAlc1xcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5mby1cXHUwMDNlc2lfbGFzdGkgPSAobGUzMl90b19jcHUoYmZzX3NiLVxcdTAwM2VzX3N0YXJ0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkgKyBCRlNfUk9PVF9JTk8gLSAxO1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcXG4tXFx0XFx0cHJpbnRmKFxcXCJOT1RFOiBmaWxlc3lzdGVtICVzIHdhcyBjcmVhdGVkIHdpdGggNTEyIGlub2RlcywgdGhlIHJlYWwgbWF4aW11bSBpcyA1MTEsIG1vdW50aW5nIGFueXdheVxcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcdGVsc2UgaWYgKGluZm8tXFx1MDAzZXNpX2xhc3RpIFxcdTAwM2UgQkZTX01BWF9MQVNUSSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkltcG9zc2libGUgbGFzdCBpbm9kZSBudW1iZXIgJWx1IFxcdTAwM2UgJWQgb24gJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZXNpX2xhc3RpLCBCRlNfTUFYX0xBU1RJLCBzLVxcdTAwM2VzX2lkKTtcXG4tXFx0XFx0Z290byBvdXQxO1xcbi1cXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCRlNfUk9PVF9JTk87IGkrKylcXG4tXFx0XFx0c2V0X2JpdChpLCBpbmZvLVxcdTAwM2VzaV9pbWFwKTtcXG4tXFxuLVxcdHMtXFx1MDAzZXNfb3AgPSBcXHUwMDI2YmZzX3NvcHM7XFxuLVxcdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcXG4tXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUihpbm9kZSk7XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXHRzLVxcdTAwM2VzX3Jvb3QgPSBkX21ha2Vfcm9vdChpbm9kZSk7XFxuLVxcdGlmICghcy1cXHUwMDNlc19yb290KSB7XFxuLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5mby1cXHUwMDNlc2lfYmxvY2tzID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19lbmQpICsgMSkgXFx1MDAzZVxcdTAwM2UgQkZTX0JTSVpFX0JJVFM7XFxuLVxcdGluZm8tXFx1MDAzZXNpX2ZyZWViID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19lbmQpICsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19zdGFydCkpIFxcdTAwM2VcXHUwMDNlIEJGU19CU0laRV9CSVRTO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9mcmVlaSA9IDA7XFxuLVxcdGluZm8tXFx1MDAzZXNpX2xmX2VibGsgPSAwO1xcbi1cXG4tXFx0LyogY2FuIHdlIHJlYWQgdGhlIGxhc3QgYmxvY2s/ICovXFxuLVxcdGJoID0gc2JfYnJlYWQocywgaW5mby1cXHUwMDNlc2lfYmxvY2tzIC0gMSk7XFxuLVxcdGlmICghYmgpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCwgaW5mby1cXHUwMDNlc2lfYmxvY2tzIC0gMSk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0MjtcXG4tXFx0fVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXG4tXFx0YmggPSBOVUxMO1xcbi1cXHRmb3IgKGkgPSBCRlNfUk9PVF9JTk87IGkgXFx1MDAzYz0gaW5mby1cXHUwMDNlc2lfbGFzdGk7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0XFx0aW50IGJsb2NrID0gKGkgLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgKyAxO1xcbi1cXHRcXHRpbnQgb2ZmID0gKGkgLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgZWJsb2NrO1xcbi1cXG4tXFx0XFx0aWYgKCFvZmYpIHtcXG4tXFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0XFx0YmggPSBzYl9icmVhZChzLCBibG9jayk7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghYmgpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0ZGkgPSAoc3RydWN0IGJmc19pbm9kZSAqKWJoLVxcdTAwM2ViX2RhdGEgKyBvZmY7XFxuLVxcbi1cXHRcXHQvKiB0ZXN0IGlmIGZpbGVzeXN0ZW0gaXMgbm90IGNvcnJ1cHRlZCAqL1xcbi1cXG4tXFx0XFx0aV9lb2ZmID0gbGUzMl90b19jcHUoZGktXFx1MDAzZWlfZW9mZnNldCk7XFxuLVxcdFxcdGlfc2Jsb2NrID0gbGUzMl90b19jcHUoZGktXFx1MDAzZWlfc2Jsb2NrKTtcXG4tXFx0XFx0aV9lYmxvY2sgPSBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRcXHRzX3NpemUgPSBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfZW5kKTtcXG4tXFxuLVxcdFxcdGlmIChpX3NibG9jayBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2Jsb2NrcyB8fFxcbi1cXHRcXHRcXHRpX2VibG9jayBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2Jsb2NrcyB8fFxcbi1cXHRcXHRcXHRpX3NibG9jayBcXHUwMDNlIGlfZWJsb2NrIHx8XFxuLVxcdFxcdFxcdChpX2VvZmYgIT0gbGUzMl90b19jcHUoLTEpIFxcdTAwMjZcXHUwMDI2IGlfZW9mZiBcXHUwMDNlIHNfc2l6ZSkgfHxcXG4tXFx0XFx0XFx0aV9zYmxvY2sgKiBCRlNfQlNJWkUgXFx1MDAzZSBpX2VvZmYpIHtcXG4tXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiSW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcXFxuXFxcIiwgaSwgcy1cXHUwMDNlc19pZCk7XFxuLVxcbi1cXHRcXHRcXHRicmVsc2UoYmgpO1xcbi1cXHRcXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRcXHRnb3RvIG91dDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghZGktXFx1MDAzZWlfaW5vKSB7XFxuLVxcdFxcdFxcdGluZm8tXFx1MDAzZXNpX2ZyZWVpKys7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNldF9iaXQoaSwgaW5mby1cXHUwMDNlc2lfaW1hcCk7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXNpX2ZyZWViIC09IEJGU19GSUxFQkxPQ0tTKGRpKTtcXG4tXFxuLVxcdFxcdGVibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRcXHRpZiAoZWJsb2NrIFxcdTAwM2UgaW5mby1cXHUwMDNlc2lfbGZfZWJsaylcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGVibG9jaztcXG4tXFx0fVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHRicmVsc2Uoc2JoKTtcXG4tXFx0YmZzX2R1bXBfaW1hcChcXFwiZmlsbF9zdXBlclxcXCIsIHMpO1xcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLW91dDI6XFxuLVxcdGRwdXQocy1cXHUwMDNlc19yb290KTtcXG4tXFx0cy1cXHUwMDNlc19yb290ID0gTlVMTDtcXG4tb3V0MTpcXG4tXFx0YnJlbHNlKHNiaCk7XFxuLW91dDpcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRrZnJlZShpbmZvKTtcXG4tXFx0cy1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi17XFxuLVxcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHtcXG4tXFx0LmdldF90cmVlID0gYmZzX2dldF90cmVlLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4te1xcbi1cXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmJmc19jb250ZXh0X29wcztcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7XFxuLVxcdC5vd25lclxcdFxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiYmZzXFxcIixcXG4tXFx0LmluaXRfZnNfY29udGV4dFxcdD0gYmZzX2luaXRfZnNfY29udGV4dCxcXG4tXFx0LmtpbGxfc2JcXHRcXHQ9IGtpbGxfYmxvY2tfc3VwZXIsXFxuLVxcdC5mc19mbGFnc1xcdFxcdD0gRlNfUkVRVUlSRVNfREVWLFxcbi19O1xcbi1NT0RVTEVfQUxJQVNfRlMoXFxcImJmc1xcXCIpO1xcbi1cXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcXG4te1xcbi1cXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2YmZzX2ZzX3R5cGUpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0cmV0dXJuIDA7XFxuLW91dDpcXG4tXFx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XFxuLW91dDE6XFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxcbi17XFxuLVxcdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2YmZzX2ZzX3R5cGUpO1xcbi1cXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcXG4tfVxcbi1cXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXFxuLW1vZHVsZV9leGl0KGV4aXRfYmZzX2ZzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXFxuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXFxuQEAgLTE3LDcgKzE3LDcgQEBcXG4gXFxuIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBrbm93bl9mc1tdID0ge1xcbiBcXHRcXFwiOXBcXFwiLCBcXFwiYWRmc1xcXCIsIFxcXCJhZmZzXFxcIiwgXFxcImFmc1xcXCIsIFxcXCJhaW9cXFwiLCBcXFwiYW5vbl9pbm9kZWZzXFxcIiwgXFxcImFwcGFybW9yZnNcXFwiLFxcbi1cXHRcXFwiYXV0b2ZzXFxcIiwgXFxcImJjYWNoZWZzXFxcIiwgXFxcImJkZXZcXFwiLCBcXFwiYmVmc1xcXCIsIFxcXCJiZnNcXFwiLCBcXFwiYmluZGVyXFxcIiwgXFxcImJpbmZtdF9taXNjXFxcIixcXG4rXFx0XFxcImF1dG9mc1xcXCIsIFxcXCJiY2FjaGVmc1xcXCIsIFxcXCJiZGV2XFxcIiwgXFxcImJlZnNcXFwiLCBcXFwiYmluZGVyXFxcIiwgXFxcImJpbmZtdF9taXNjXFxcIixcXG4gXFx0XFxcImJwZlxcXCIsIFxcXCJidHJmc1xcXCIsIFxcXCJidHJmc190ZXN0X2ZzXFxcIiwgXFxcImNlcGhcXFwiLCBcXFwiY2dyb3VwXFxcIiwgXFxcImNncm91cDJcXFwiLCBcXFwiY2lmc1xcXCIsXFxuIFxcdFxcXCJjb2RhXFxcIiwgXFxcImNvbmZpZ2ZzXFxcIiwgXFxcImNwdXNldFxcXCIsIFxcXCJjcmFtZnNcXFwiLCBcXFwiY3hsXFxcIiwgXFxcImRheFxcXCIsIFxcXCJkZWJ1Z2ZzXFxcIixcXG4gXFx0XFxcImRldnB0c1xcXCIsIFxcXCJkZXZ0bXBmc1xcXCIsIFxcXCJkbWFidWZcXFwiLCBcXFwiZHJtXFxcIiwgXFxcImVjcnlwdGZzXFxcIiwgXFxcImVmaXZhcmZzXFxcIiwgXFxcImVmc1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjY3MTMyMDIzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc5OTc3MDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQwOTQ1ZDExZjM5NjlmMDRiNDZkMDYxMmExYmNlY2E3OTU4NTVmODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQxOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFNcbmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0XG4tLS0gYS9DUkVESVRTXG4rKysgYi9DUkVESVRTXG5AQCAtNTcsNyArNTcsNyBAQCBTOiBMb25nZm9yZCwgSXJlbGFuZFxuIFM6IFN5ZG5leSwgQXVzdHJhbGlhXG4gXG4gTjogVGlncmFuIEEuIEFpdmF6aWFuXG4tRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrXG4rRTogYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxuIFc6IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlc1xuIEQ6IEJGUyBmaWxlc3lzdGVtXG4gRDogSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHVwZGF0ZSBzdXBwb3J0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbmluZGV4IGEyMmY2MDNiMjkzOGUuLmMxZGJmZTljOTVkMjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0XG5AQCAtNDQsOCArNDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cbiBXaGljaCBpcyBpdCwgQkZTIG9yIEJFRlM/XG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuIEJlLCBJbmMgc2FpZCwgXCJCZU9TIEZpbGVzeXN0ZW0gaXMgb2ZmaWNpYWxseSBjYWxsZWQgQkZTLCBub3QgQmVGU1wiLlxuLUJ1dCBVbml4d2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLiBBbmQgdGhleSBhcmUgYWxyZWFkeSBpblxuLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXG4rQnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHlcbitpbiB0aGUga2VybmVsLiBCZWNhdXNlIG9mIHRoaXMgbmFtaW5nIGNvbmZsaWN0LCBvbiBMaW51eCB0aGUgQmVPU1xuIGZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJlZnMuXG4gXG4gSG93IHRvIEluc3RhbGxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2UxNGI5MDE4ODA3Mi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XG4rKysgL2Rldi9udWxsXG5AQCAtMSw2MCArMCwwIEBAXG4tLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi09PT09PT09PT09PT09PT09PT09PT09PT1cbi1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXhcbi09PT09PT09PT09PT09PT09PT09PT09PT1cbi1cbi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoXG4tdXN1YWxseSBjb250YWlucyB0aGUga2VybmVsIGltYWdlIGFuZCBhIGZldyBvdGhlciBmaWxlcyByZXF1aXJlZCBmb3IgdGhlXG4tYm9vdCBwcm9jZXNzLlxuLVxuLUluIG9yZGVyIHRvIGFjY2VzcyAvc3RhbmQgcGFydGl0aW9uIHVuZGVyIExpbnV4IHlvdSBvYnZpb3VzbHkgbmVlZCB0b1xuLWtub3cgdGhlIHBhcnRpdGlvbiBudW1iZXIgYW5kIHRoZSBrZXJuZWwgbXVzdCBzdXBwb3J0IFVuaXhXYXJlIGRpc2sgc2xpY2VzXG4tKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3Rcbi1kZXBlbmQgb24gaGF2aW5nIFVuaXhXYXJlIGRpc2tsYWJlbCBzdXBwb3J0IGJlY2F1c2Ugb25lIGNhbiBhbHNvIG1vdW50XG4tQkZTIGZpbGVzeXN0ZW0gdmlhIGxvb3BiYWNrOjpcbi1cbi0gICAgIyBsb3NldHVwIC9kZXYvbG9vcDAgc3RhbmQuaW1nXG4tICAgICMgbW91bnQgLXQgYmZzIC9kZXYvbG9vcDAgL21udC9zdGFuZFxuLVxuLXdoZXJlIHN0YW5kLmltZyBpcyBhIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2Ugb2YgQkZTIGZpbGVzeXN0ZW0uXG4tV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB1c2luZyBpdCBhbmQgdW1vdW50ZWQgeW91IG5lZWQgdG8gYWxzbyBkZWFsbG9jYXRlXG4tL2Rldi9sb29wMCBkZXZpY2UgYnk6OlxuLVxuLSAgICAjIGxvc2V0dXAgLWQgL2Rldi9sb29wMFxuLVxuLVlvdSBjYW4gc2ltcGxpZnkgbW91bnRpbmcgYnkganVzdCB0eXBpbmc6OlxuLVxuLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kXG4tXG4tdGhpcyB3aWxsIGFsbG9jYXRlIHRoZSBmaXJzdCBhdmFpbGFibGUgbG9vcGJhY2sgZGV2aWNlIChhbmQgbG9hZCBsb29wLm9cbi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3Rcbi1sb2FkZWQgYXV0b21hdGljYWxseSwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgY29tcGlsZWQgdGhlIG1vZHVsZSBhbmRcbi10aGF0IG1vZHByb2JlIGlzIGZ1bmN0aW9uaW5nLiBCZXdhcmUgdGhhdCB1bW91bnQgd2lsbCBub3QgZGVhbGxvY2F0ZVxuLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0b1xuLS9wcm9jL21vdW50cy4gWW91IHdpbGwgbmVlZCB0byBkbyBpdCBtYW51YWxseSB1c2luZyBcIi1kXCIgc3dpdGNoIG9mXG4tbG9zZXR1cCg4KS4gUmVhZCBsb3NldHVwKDgpIG1hbnBhZ2UgZm9yIG1vcmUgaW5mby5cbi1cbi1UbyBjcmVhdGUgdGhlIEJGUyBpbWFnZSB1bmRlciBVbml4V2FyZSB5b3UgbmVlZCB0byBmaW5kIG91dCBmaXJzdCB3aGljaFxuLXNsaWNlIGNvbnRhaW5zIGl0LiBUaGUgY29tbWFuZCBwcnR2dG9jKDFNKSBpcyB5b3VyIGZyaWVuZDo6XG4tXG4tICAgICMgcHJ0dnRvYyAvZGV2L3Jkc2svYzBiMHQwZDBzMFxuLVxuLShhc3N1bWluZyB5b3VyIHJvb3QgZGlzayBpcyBvbiB0YXJnZXQ9MCwgbHVuPTAsIGJ1cz0wLCBjb250cm9sbGVyPTApLiBUaGVuIHlvdVxuLWxvb2sgZm9yIHRoZSBzbGljZSB3aXRoIHRhZyBcIlNUQU5EXCIsIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xuLWluZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGRkKDEpIHRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlOjpcbi1cbi0gICAgIyB1bW91bnQgL3N0YW5kXG4tICAgICMgZGQgaWY9L2Rldi9yZHNrL2MwYjB0MGQwc2Egb2Y9c3RhbmQuaW1nIGJzPTUxMlxuLVxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xuLXRoZSBtYWdpYyBudW1iZXI6OlxuLVxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcbi1cbi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS5cbi1cbi1JZiB5b3UgaGF2ZSBhbnkgcGF0Y2hlcywgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIEJGU1xuLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6XG4tXG4tVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCA3MzRhNDVlNTE2Njc1Li43Y2NlN2NjMjhkMTI2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtNzUsNyArNzUsNiBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBhdXRvZnNcbiAgICBhdXRvZnMtbW91bnQtY29udHJvbFxuICAgIGJlZnNcbi0gICBiZnNcbiAgICBidHJmc1xuICAgIGNlcGhcbiAgICBjb2RhXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZmMzMjBiMzczNjU2Zi4uMzg1MzA5NTU2NzA1ZSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTQ2MjcsMTMgKzQ2MjcsNiBAQCBTOlx0T2RkIEZpeGVzXG4gRjpcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XG4gRjpcdGJsb2NrL2JmcS0qXG4gXG4tQkZTIEZJTEUgU1lTVEVNXG4tTTpcdFwiVGlncmFuIEEuIEFpdmF6aWFuXCIgXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLVM6XHRNYWludGFpbmVkXG4tRjpcdERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxuLUY6XHRmcy9iZnMvXG4tRjpcdGluY2x1ZGUvdWFwaS9saW51eC9iZnNfZnMuaFxuLVxuIEJJVE1BUCBBUElcbiBNOlx0WXVyeSBOb3JvdiBcdTAwM2N5dXJ5Lm5vcm92QGdtYWlsLmNvbVx1MDAzZVxuIFI6XHRSYXNtdXMgVmlsbGVtb2VzIFx1MDAzY2xpbnV4QHJhc211c3ZpbGxlbW9lcy5ka1x1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuaW5kZXggNTZhOGY3NmRhYjQxNC4uNGZiNGQ0NWYzY2RjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXG5AQCAtMzMzLDcgKzMzMyw2IEBAIENPTkZJR19BRkZTX0ZTPW1cbiBDT05GSUdfSEZTX0ZTPW1cbiBDT05GSUdfSEZTUExVU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19KRkZTMl9GUz1tXG4gQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuaW5kZXggODVlOTVjMGFlNDEwNy4uM2QxYzMyZDM0NzVlNyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcbkBAIC0zNDAsNyArMzQwLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuaW5kZXggMDQ5OGEwMTE1MzQ5MC4uMjU0NTE2OGI3NWJiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXG5AQCAtMzM5LDcgKzMzOSw2IEBAIENPTkZJR19BRkZTX0ZTPW1cbiBDT05GSUdfSEZTX0ZTPW1cbiBDT05GSUdfSEZTUExVU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19KRkZTMl9GUz1tXG4gQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbmluZGV4IDA5ZTAwNmM3Y2Q3YzYuLmNkMmE4MzE2MTRjODkgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xuQEAgLTMxOCw3ICszMTgsNiBAQCBDT05GSUdfQURGU19GUz1tXG4gQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfQ1JBTUZTPW1cbiBDT05GSUdfVlhGU19GUz1tXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xuaW5kZXggMzkxYzk5MTE3ZWUwNi4uNjg4MDUxYjExY2UxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xuQEAgLTIsNyArMiw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0FVRElUPXlcbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cbiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG4gQ09ORklHX0JMS19ERVZfSU5JVFJEPXlcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xuaW5kZXggYWNmZmM1YzE3ZjkyZC4uOGFhYjIyOWZiOTA5NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbkBAIC05NDUsNyArOTQ1LDYgQEAgQ09ORklHX0VDUllQVF9GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfQ1JBTUZTPW1cbiBDT05GSUdfVlhGU19GUz1tXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGUwNTkxN2FkY2Q2MDguLjFjYjBiM2E4YjEyY2EgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMzE0LDcgKzMxNCw2IEBAIHNvdXJjZSBcImZzL2VjcnlwdGZzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2hmcy9LY29uZmlnXCJcbiBzb3VyY2UgXCJmcy9oZnNwbHVzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2JlZnMvS2NvbmZpZ1wiXG4tc291cmNlIFwiZnMvYmZzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2pmZnMyL0tjb25maWdcIlxuICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvblxuIHNvdXJjZSBcImZzL3ViaWZzL0tjb25maWdcIlxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcbmluZGV4IDA1NWRmYzIzZDgyYjYuLjE2ZjExMDhiNjRlMWEgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC03Niw3ICs3Niw2IEBAIG9iai0kKENPTkZJR19DT0RBX0ZTKVx0XHQrPSBjb2RhL1xuIG9iai0kKENPTkZJR19NSU5JWF9GUylcdFx0Kz0gbWluaXgvXG4gb2JqLSQoQ09ORklHX0ZBVF9GUylcdFx0Kz0gZmF0L1xuIG9iai0kKENPTkZJR19FWEZBVF9GUylcdFx0Kz0gZXhmYXQvXG4tb2JqLSQoQ09ORklHX0JGU19GUylcdFx0Kz0gYmZzL1xuIG9iai0kKENPTkZJR19JU085NjYwX0ZTKVx0Kz0gaXNvZnMvXG4gb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpXHQrPSBoZnNwbHVzLyAjIEJlZm9yZSBoZnMgdG8gZmluZCB3cmFwcGVkIEhGUytcbiBvYmotJChDT05GSUdfSEZTX0ZTKVx0XHQrPSBoZnMvXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZ1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA4ZTdlZjg2NmI2MmE2Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvS2NvbmZpZ1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMjEgKzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLWNvbmZpZyBCRlNfRlNcbi1cdHRyaXN0YXRlIFwiQkZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcIlxuLVx0ZGVwZW5kcyBvbiBCTE9DS1xuLVx0c2VsZWN0IEJVRkZFUl9IRUFEXG4tXHRoZWxwXG4tXHQgIEJvb3QgRmlsZSBTeXN0ZW0gKEJGUykgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIHVuZGVyIFNDTyBVbml4V2FyZSB0b1xuLVx0ICBhbGxvdyB0aGUgYm9vdGxvYWRlciBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBpbWFnZSBhbmQgb3RoZXIgaW1wb3J0YW50XG4tXHQgIGZpbGVzIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiAgSXQgaXMgdXN1YWxseSBtb3VudGVkIHVuZGVyIC9zdGFuZFxuLVx0ICBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIHNsaWNlIG1hcmtlZCBhcyBcIlNUQU5EXCIgaW4gdGhlIFVuaXhXYXJlXG4tXHQgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXNcbi1cdCAgb24geW91ciAvc3RhbmQgc2xpY2UgZnJvbSB3aXRoaW4gTGludXguICBZb3UgdGhlbiBhbHNvIG5lZWQgdG8gc2F5IFlcbi1cdCAgdG8gXCJVbml4V2FyZSBzbGljZXMgc3VwcG9ydFwiLCBiZWxvdy4gIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJGU1xuLVx0ICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGVcbi1cdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcdTAwM2UuXG4tXG4tXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBhYm91dCwgc2F5IE4uXG4tXG4tXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuLVx0ICBiZnMuICBOb3RlIHRoYXQgdGhlIGZpbGUgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gKHRoZSBvbmVcbi1cdCAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS5cbmRpZmYgLS1naXQgYS9mcy9iZnMvTWFrZWZpbGUgYi9mcy9iZnMvTWFrZWZpbGVcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL01ha2VmaWxlXG4rKysgL2Rldi9udWxsXG5AQCAtMSw4ICswLDAgQEBcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi0jXG4tIyBNYWtlZmlsZSBmb3IgQkZTIGZpbGVzeXN0ZW0uXG4tI1xuLVxuLW9iai0kKENPTkZJR19CRlNfRlMpICs9IGJmcy5vXG4tXG4tYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm9cbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Jmcy5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSw2OSArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbi0vKlxuLSAqXHRmcy9iZnMvYmZzLmhcbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi0gKi9cbi0jaWZuZGVmIF9GU19CRlNfQkZTX0hcbi0jZGVmaW5lIF9GU19CRlNfQkZTX0hcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iZnNfZnMuaFx1MDAzZVxuLVxuLS8qIEluIHRoZW9yeSBCRlMgc3VwcG9ydHMgdXAgdG8gNTEyIGlub2RlcywgbnVtYmVyZWQgZnJvbSAyIChmb3IgLykgdXAgdG8gNTEzIGluY2x1c2l2ZS5cbi0gICBJbiBhY3R1YWwgZmFjdCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIDUxMnRoIGlub2RlIChpLmUuIGlub2RlIE5vLiA1MTMgb3IgZmlsZSBOby4gNTExKVxuLSAgIHdpbGwgZmFpbCB3aXRoIEVOT1NQQyBpbiBiZnNfYWRkX2VudHJ5KCk6IHRoZSByb290IGRpcmVjdG9yeSBjYW5ub3QgY29udGFpbiBzbyBtYW55IGVudHJpZXMsIGNvdW50aW5nICcuLicuXG4tICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nXG4tICAgaWYgYSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBzdWNoIFwiaW1wb3NzaWJsZSB0byBmaWxsIHVwXCIgbnVtYmVyIG9mIGlub2RlcyAqL1xuLSNkZWZpbmUgQkZTX01BWF9MQVNUSVx0NTEzXG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBzdXBlcmJsb2NrIGluZm9cbi0gKi9cbi1zdHJ1Y3QgYmZzX3NiX2luZm8ge1xuLVx0dW5zaWduZWQgbG9uZyBzaV9ibG9ja3M7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2ZyZWViO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9mcmVlaTtcbi1cdHVuc2lnbmVkIGxvbmcgc2lfbGZfZWJsaztcbi1cdHVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7XG4tXHRERUNMQVJFX0JJVE1BUChzaV9pbWFwLCBCRlNfTUFYX0xBU1RJKzEpO1xuLVx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xuLX07XG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBpbm9kZSBpbmZvXG4tICovXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcbi1cdHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAvKiBpbm9kZSBudW1iZXIgZnJvbSB0aGUgZGlzaywgY2FuIGJlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4tXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuLVx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbi19O1xuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19zYl9pbmZvICpCRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4tfVxuLVxuLVxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcbi1cdHByaW50ayhLRVJOX0VSUiBcIkJGUy1mczogJXMoKTogXCIgZm9ybWF0LCBfX2Z1bmNfXywgIyMgYXJncylcbi1cbi0vKiBpbm9kZS5jICovXG4tZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pO1xuLWV4dGVybiB2b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4tXG4tLyogZmlsZS5jICovXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19maWxlX29wZXJhdGlvbnM7XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHM7XG4tXG4tLyogZGlyLmMgKi9cbi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmZzX2Rpcl9pbm9wcztcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnM7XG4tXG4tI2VuZGlmIC8qIF9GU19CRlNfQkZTX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggOTFhNDg3MWZhMDUxOS4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwzNTYgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2Rpci5jXG4tICpcdEJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggIFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICogIE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlIDIwMDVcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFwiYmZzLmhcIlxuLVxuLSN1bmRlZiBERUJVR1xuLVxuLSNpZmRlZiBERUJVR1xuLSNkZWZpbmUgZHByaW50Zih4Li4uKVx0cHJpbnRmKHgpXG4tI2Vsc2Vcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcbi0jZW5kaWZcbi1cbi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubyk7XG4tc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqYmZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsXG4tXHRcdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpO1xuLVxuLXN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShmKTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IGJsb2NrO1xuLVxuLVx0aWYgKGN0eC1cdTAwM2Vwb3MgXHUwMDI2IChCRlNfRElSRU5UX1NJWkUgLSAxKSkge1xuLVx0XHRwcmludGYoXCJCYWQgZl9wb3M9JTA4bHggZm9yICVzOiUwOGxseFxcblwiLFxuLVx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljdHgtXHUwMDNlcG9zLFxuLVx0XHRcdFx0XHRkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBkaXItXHUwMDNlaV9pbm8pO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHdoaWxlIChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSB7XG4tXHRcdG9mZnNldCA9IGN0eC1cdTAwM2Vwb3MgXHUwMDI2IChCRlNfQlNJWkUgLSAxKTtcbi1cdFx0YmxvY2sgPSBCRlNfSShkaXIpLVx1MDAzZWlfc2Jsb2NrICsgKGN0eC1cdTAwM2Vwb3MgXHUwMDNlXHUwMDNlIEJGU19CU0laRV9CSVRTKTtcbi1cdFx0YmggPSBzYl9icmVhZChkaXItXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0XHRpZiAoIWJoKSB7XG4tXHRcdFx0Y3R4LVx1MDAzZXBvcyArPSBCRlNfQlNJWkUgLSBvZmZzZXQ7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0ZG8ge1xuLVx0XHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSArIG9mZnNldCk7XG4tXHRcdFx0aWYgKGRlLVx1MDAzZWlubykge1xuLVx0XHRcdFx0aW50IHNpemUgPSBzdHJubGVuKGRlLVx1MDAzZW5hbWUsIEJGU19OQU1FTEVOKTtcbi1cdFx0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VuYW1lLCBzaXplLFxuLVx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyksXG4tXHRcdFx0XHRcdFx0RFRfVU5LTk9XTikpIHtcbi1cdFx0XHRcdFx0YnJlbHNlKGJoKTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdG9mZnNldCArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdFx0Y3R4LVx1MDAzZXBvcyArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdH0gd2hpbGUgKChvZmZzZXQgXHUwMDNjIEJGU19CU0laRSkgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4tXHQuaXRlcmF0ZV9zaGFyZWRcdD0gYmZzX3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLXtcbi1cdGludCBlcnI7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1bnNpZ25lZCBsb25nIGlubztcbi1cbi1cdGlub2RlID0gbmV3X2lub2RlKHMpO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0aW5vID0gZmluZF9maXJzdF96ZXJvX2JpdChpbmZvLVx1MDAzZXNpX2ltYXAsIGluZm8tXHUwMDNlc2lfbGFzdGkgKyAxKTtcbi1cdGlmIChpbm8gXHUwMDNlIGluZm8tXHUwMDNlc2lfbGFzdGkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRpcHV0KGlub2RlKTtcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tXHR9XG4tXHRzZXRfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWktLTtcbi1cdGlub2RlX2luaXRfb3duZXIoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGRpciwgbW9kZSk7XG4tXHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IDA7XG4tXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XG4tXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XG4tXHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZiZnNfYW9wcztcbi1cdGlub2RlLVx1MDAzZWlfaW5vID0gaW5vO1xuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfZHNrX2lubyA9IGlubztcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX3NibG9jayA9IDA7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9lYmxvY2sgPSAwO1xuLVx0aW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpO1xuLSAgICAgICAgbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRiZnNfZHVtcF9pbWFwKFwiY3JlYXRlXCIsIHMpO1xuLVxuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRcdGlwdXQoaW5vZGUpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuLVxuLVx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBCRlNfTkFNRUxFTilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmIChiaCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGlubyA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlub2RlID0gYmZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIGlubyk7XG4tXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkKTtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGludCBlcnI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNm5ldy1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0aW5jX25saW5rKGlub2RlKTtcbi1cdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0aWhvbGQoaW5vZGUpO1xuLVx0ZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi17XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmICghYmggfHwgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgIT0gaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIG91dF9icmVsc2U7XG4tXG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbi1cdFx0cHJpbnRmKFwidW5saW5raW5nIG5vbi1leGlzdGVudCBmaWxlICVzOiVsbHUgKG5saW5rPSVkKVxcblwiLFxuLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX25saW5rKTtcbi1cdFx0c2V0X25saW5rKGlub2RlLCAxKTtcbi1cdH1cbi1cdGRlLVx1MDAzZWlubyA9IDA7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkJGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG4tXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4tXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIGlub2RlX2dldF9jdGltZShkaXIpKTtcbi1cdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbi1cdGVycm9yID0gMDtcbi1cbi1vdXRfYnJlbHNlOlxuLVx0YnJlbHNlKGJoKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2Rpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLCAqbmV3X2lub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsICpuZXdfYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqb2xkX2RlLCAqbmV3X2RlO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvO1xuLVx0aW50IGVycm9yID0gLUVOT0VOVDtcbi1cbi1cdGlmIChmbGFncyBcdTAwMjYgflJFTkFNRV9OT1JFUExBQ0UpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0b2xkX2JoID0gbmV3X2JoID0gTlVMTDtcbi1cdG9sZF9pbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7XG4tXHRpZiAoU19JU0RJUihvbGRfaW5vZGUtXHUwMDNlaV9tb2RlKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpbmZvID0gQkZTX1NCKG9sZF9pbm9kZS1cdTAwM2VpX3NiKTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRvbGRfYmggPSBiZnNfZmluZF9lbnRyeShvbGRfZGlyLCBcdTAwMjZvbGRfZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2b2xkX2RlKTtcbi1cbi1cdGlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtXHUwMDNlaW5vKSAhPSBvbGRfaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIGVuZF9yZW5hbWU7XG4tXG4tXHRlcnJvciA9IC1FUEVSTTtcbi1cdG5ld19pbm9kZSA9IGRfaW5vZGUobmV3X2RlbnRyeSk7XG4tXHRuZXdfYmggPSBiZnNfZmluZF9lbnRyeShuZXdfZGlyLCBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2bmV3X2RlKTtcbi1cbi1cdGlmIChuZXdfYmggXHUwMDI2XHUwMDI2ICFuZXdfaW5vZGUpIHtcbi1cdFx0YnJlbHNlKG5ld19iaCk7XG4tXHRcdG5ld19iaCA9IE5VTEw7XG4tXHR9XG4tXHRpZiAoIW5ld19iaCkge1xuLVx0XHRlcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG4tXHRcdFx0XHRcdG9sZF9pbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIGVuZF9yZW5hbWU7XG4tXHR9XG4tXHRvbGRfZGUtXHUwMDNlaW5vID0gMDtcbi1cdGlub2RlX3NldF9tdGltZV90b190cyhvbGRfZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChvbGRfZGlyKSk7XG4tXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuLVx0aWYgKG5ld19pbm9kZSkge1xuLVx0XHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpO1xuLVx0XHRpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpO1xuLVx0fVxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG9sZF9iaCwgXHUwMDI2QkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0ZXJyb3IgPSAwO1xuLVxuLWVuZF9yZW5hbWU6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRicmVsc2Uob2xkX2JoKTtcbi1cdGJyZWxzZShuZXdfYmgpO1xuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzID0ge1xuLVx0LmNyZWF0ZVx0XHRcdD0gYmZzX2NyZWF0ZSxcbi1cdC5sb29rdXBcdFx0XHQ9IGJmc19sb29rdXAsXG4tXHQubGlua1x0XHRcdD0gYmZzX2xpbmssXG4tXHQudW5saW5rXHRcdFx0PSBiZnNfdW5saW5rLFxuLVx0LnJlbmFtZVx0XHRcdD0gYmZzX3JlbmFtZSxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKVxuLXtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0c3RydWN0IGJmc19kaXJlbnQgKmRlO1xuLVx0aW50IGJsb2NrLCBzYmxvY2ssIGVibG9jaywgb2ZmLCBwb3M7XG4tXHRpbnQgaTtcbi1cbi1cdGRwcmludGYoXCJuYW1lPSVzLCBuYW1lbGVuPSVkXFxuXCIsIG5hbWUsIG5hbWVsZW4pO1xuLVxuLVx0c2Jsb2NrID0gQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jaztcbi1cdGVibG9jayA9IEJGU19JKGRpciktXHUwMDNlaV9lYmxvY2s7XG4tXHRmb3IgKGJsb2NrID0gc2Jsb2NrOyBibG9jayBcdTAwM2M9IGVibG9jazsgYmxvY2srKykge1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBCRlNfQlNJWkU7IG9mZiArPSBCRlNfRElSRU5UX1NJWkUpIHtcbi1cdFx0XHRkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC1cdTAwM2ViX2RhdGEgKyBvZmYpO1xuLVx0XHRcdGlmICghZGUtXHUwMDNlaW5vKSB7XG4tXHRcdFx0XHRwb3MgPSAoYmxvY2sgLSBzYmxvY2spICogQkZTX0JTSVpFICsgb2ZmO1xuLVx0XHRcdFx0aWYgKHBvcyBcdTAwM2U9IGRpci1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2l6ZSArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdFx0XHRcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcikpO1xuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuLVx0XHRcdFx0ZGUtXHUwMDNlaW5vID0gY3B1X3RvX2xlMTYoKHUxNilpbm8pO1xuLVx0XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkZTX05BTUVMRU47IGkrKylcbi1cdFx0XHRcdFx0ZGUtXHUwMDNlbmFtZVtpXSA9XG4tXHRcdFx0XHRcdFx0KGkgXHUwMDNjIG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXG4tXHRcdFx0XHRcdFx0XHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gLUVOT1NQQztcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbi1cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1ZmZlcilcbi17XG4tXHRpZiAoKGxlbiBcdTAwM2MgQkZTX05BTUVMRU4pIFx1MDAyNlx1MDAyNiBidWZmZXJbbGVuXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gIW1lbWNtcChuYW1lLCBidWZmZXIsIGxlbik7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXG4tXHQqcmVzX2RpciA9IE5VTEw7XG4tXHRpZiAobmFtZWxlbiBcdTAwM2UgQkZTX05BTUVMRU4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0d2hpbGUgKGJsb2NrICogQkZTX0JTSVpFICsgb2Zmc2V0IFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSB7XG4tXHRcdGlmICghYmgpIHtcbi1cdFx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBCRlNfSShkaXIpLVx1MDAzZWlfc2Jsb2NrICsgYmxvY2spO1xuLVx0XHRcdGlmICghYmgpIHtcbi1cdFx0XHRcdGJsb2NrKys7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcbi1cdFx0b2Zmc2V0ICs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0aWYgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cdTAwM2VuYW1lKSkge1xuLVx0XHRcdCpyZXNfZGlyID0gZGU7XG4tXHRcdFx0cmV0dXJuIGJoO1xuLVx0XHR9XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNjIGJoLVx1MDAzZWJfc2l6ZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0YmggPSBOVUxMO1xuLVx0XHRvZmZzZXQgPSAwO1xuLVx0XHRibG9jaysrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBOVUxMO1xuLX1cbmRpZmYgLS1naXQgYS9mcy9iZnMvZmlsZS5jIGIvZnMvYmZzL2ZpbGUuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkMzNkNmJkZTk5MmI4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvZmlsZS5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyMDMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2ZpbGUuY1xuLSAqXHRCRlMgZmlsZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICpcdE1ha2UgdGhlIGZpbGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gdW5kZXJzdGFuZCB0aGUgc2l6ZVxuLSAqXHRvZiB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuXG4tICpcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXHUwMDNjZG1pdHJpLnZvcm9iaWV2QGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21wYWdlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJiZnMuaFwiXG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5sbHNlZWsgXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLX07XG4tXG4tc3RhdGljIGludCBiZnNfbW92ZV9ibG9jayh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8sXG4tXHRcdFx0XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4te1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKm5ldztcbi1cbi1cdGJoID0gc2JfYnJlYWQoc2IsIGZyb20pO1xuLVx0aWYgKCFiaClcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRuZXcgPSBzYl9nZXRibGsoc2IsIHRvKTtcbi1cdG1lbWNweShuZXctXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfc2l6ZSk7XG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXcpO1xuLVx0YmZvcmdldChiaCk7XG4tXHRicmVsc2UobmV3KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgd2hlcmUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuLVxuLVx0ZHByaW50ZihcIiUwOGx4LSUwOGx4LVx1MDAzZSUwOGx4XFxuXCIsIHN0YXJ0LCBlbmQsIHdoZXJlKTtcbi1cdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYz0gZW5kOyBpKyspXG4tXHRcdGlmKGJmc19tb3ZlX2Jsb2NrKGksIHdoZXJlICsgaSwgc2IpKSB7XG4tXHRcdFx0ZHByaW50ZihcImZhaWxlZCB0byBtb3ZlIGJsb2NrICUwOGx4IC1cdTAwM2UgJTA4bHhcXG5cIiwgaSxcbi1cdFx0XHRcdFx0XHRcdFx0d2hlcmUgKyBpKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi1cdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIHBoeXM7XG4tXHRpbnQgZXJyO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpO1xuLVx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTtcbi1cbi1cdHBoeXMgPSBiaS1cdTAwM2VpX3NibG9jayArIGJsb2NrO1xuLVx0aWYgKCFjcmVhdGUpIHtcbi1cdFx0aWYgKHBoeXMgXHUwMDNjPSBiaS1cdTAwM2VpX2VibG9jaykge1xuLVx0XHRcdGRwcmludGYoXCJjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOWx4IChncmFudGVkKVxcblwiLFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdFx0bWFwX2JoKGJoX3Jlc3VsdCwgc2IsIHBoeXMpO1xuLVx0XHR9XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIHRoZSBmaWxlIGlzIG5vdCBlbXB0eSBhbmQgdGhlIHJlcXVlc3RlZCBibG9jayBpcyB3aXRoaW4gdGhlXG4tXHQgKiByYW5nZSBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciB0aGlzIGZpbGUsIHdlIGNhbiBncmFudCBpdC5cbi1cdCAqL1xuLVx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrIFx1MDAyNlx1MDAyNiAocGh5cyBcdTAwM2M9IGJpLVx1MDAzZWlfZWJsb2NrKSkge1xuLVx0XHRkcHJpbnRmKFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoaW50ZXJpbSBibG9jayBncmFudGVkKVxcblwiLCBcbi1cdFx0XHRcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0LyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZS4gKi9cbi1cdGlmIChwaHlzIFx1MDAzZT0gaW5mby1cdTAwM2VzaV9ibG9ja3MpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0LyogVGhlIHJlc3QgaGFzIHRvIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGl0c2VsZi4gKi9cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZFxuLVx0ICogYmxvY2ssIHdlIGNhbiBleHRlbmQgdGhlIGZpbGUgdHJpdmlhbGx5LCB3aXRob3V0IG1vdmluZyBpdFxuLVx0ICogYW55d2hlcmUuXG4tXHQgKi9cbi1cdGlmIChiaS1cdTAwM2VpX2VibG9jayA9PSBpbmZvLVx1MDAzZXNpX2xmX2VibGspIHtcbi1cdFx0ZHByaW50ZihcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXFxuXCIsIFxuLVx0XHRcdFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBwaHlzIC0gYmktXHUwMDNlaV9lYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdGVyciA9IDA7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXG4tXHRwaHlzID0gaW5mby1cdTAwM2VzaV9sZl9lYmxrICsgMTtcbi1cdGlmIChwaHlzICsgYmxvY2sgXHUwMDNlPSBpbmZvLVx1MDAzZXNpX2Jsb2Nrcykge1xuLVx0XHRlcnIgPSAtRU5PU1BDO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGlmIChiaS1cdTAwM2VpX3NibG9jaykge1xuLVx0XHRlcnIgPSBiZnNfbW92ZV9ibG9ja3MoaW5vZGUtXHUwMDNlaV9zYiwgYmktXHUwMDNlaV9zYmxvY2ssIFxuLVx0XHRcdFx0XHRcdGJpLVx1MDAzZWlfZWJsb2NrLCBwaHlzKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGRwcmludGYoXCJmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLVx1MDAzZSBmcyBjb3JydXB0aW9uXFxuXCIsXG4tXHRcdFx0XHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fSBlbHNlXG4tXHRcdGVyciA9IDA7XG4tXG4tXHRkcHJpbnRmKFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAobW92ZWQpXFxuXCIsXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0YmktXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xuLVx0cGh5cyArPSBibG9jaztcbi1cdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cbi1cdC8qXG4tXHQgKiBUaGlzIGFzc3VtZXMgbm90aGluZyBjYW4gd3JpdGUgdGhlIGlub2RlIGJhY2sgd2hpbGUgd2UgYXJlIGhlcmVcbi1cdCAqIGFuZCB0aHVzIHVwZGF0ZSBpbm9kZS1cdTAwM2VpX2Jsb2NrcyEgKFhYWClcbi1cdCAqL1xuLVx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBiaS1cdTAwM2VpX2VibG9jayAtIGJpLVx1MDAzZWlfc2Jsb2NrICsgMSAtIGlub2RlLVx1MDAzZWlfYmxvY2tzO1xuLVx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXG4tXHRpZiAodG8gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tXHRcdFx0ICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgdm9pZCAqKmZzZGF0YSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZvbGlvcCwgYmZzX2dldF9ibG9jayk7XG4tXHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0YmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGJmc19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gYmZzX3dyaXRlcGFnZXMsXG4tXHQud3JpdGVfYmVnaW5cdD0gYmZzX3dyaXRlX2JlZ2luLFxuLVx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbi1cdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXBcdFx0PSBiZnNfYm1hcCxcbi19O1xuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDUzOCArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLS8qXG4tICpcdGZzL2Jmcy9pbm9kZS5jXG4tICpcdEJGUyBzdXBlcmJsb2NrIGFuZCBpbm9kZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXHRGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuXG4tICpcdE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlLCAyMDA1LlxuLSAqL1xuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdmZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfY29udGV4dC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJiZnMuaFwiXG4tXG4tTU9EVUxFX0FVVEhPUihcIlRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlNDTyBVbml4V2FyZSBCRlMgZmlsZXN5c3RlbSBmb3IgTGludXhcIik7XG4tTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdGludCBibG9jaywgb2ZmO1xuLVxuLVx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcbi1cdGlmICghaW5vZGUpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKVxuLVx0XHRyZXR1cm4gaW5vZGU7XG4tXG4tXHRpZiAoKGlubyBcdTAwM2MgQkZTX1JPT1RfSU5PKSB8fCAoaW5vIFx1MDAzZSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcXG5cIiwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0YmxvY2sgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICsgMTtcbi1cdGJoID0gc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxcblwiLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsXG4tXHRcdFx0XHRcdFx0XHRcdFx0aW5vKTtcbi1cdFx0Z290byBlcnJvcjtcbi1cdH1cbi1cbi1cdG9mZiA9IChpbm8gLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tXHRkaSA9IChzdHJ1Y3QgYmZzX2lub2RlICopYmgtXHUwMDNlYl9kYXRhICsgb2ZmO1xuLVxuLVx0Lypcbi1cdCAqIGh0dHBzOi8vbWFydGluLmhpbm5lci5pbmZvL2ZzL2Jmcy9iZnMtc3RydWN0dXJlLmh0bWwgZXhwbGFpbnMgdGhhdFxuLVx0ICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLVx1MDAzZWlfbW9kZVxuLVx0ICogdmFsdWUuIFRoaXMgbWVhbnMgdGhhdCwgYWx0aG91Z2ggYmZzX3dyaXRlX2lub2RlKCkgc2F2ZXMgd2hvbGVcbi1cdCAqIGlub2RlLVx1MDAzZWlfbW9kZSBiaXRzICh3aGljaCBpbmNsdWRlIFNfSUZNVCBiaXRzIGFuZCBTX0lTe1VJRCxHSUQsVlRYfVxuLVx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXHUwMDNlaV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2Vcbi1cdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXG4tXHQgKiBTaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgbWlkZGxlIDcgYml0cyBhcmUgZ2FyYmFnZSwgdXNlIG9ubHlcbi1cdCAqIGxvd2VyIDEyIGJpdHMgKGkuZS4gdG9sZXJhdGUgU19JU3tVSUQsR0lELFZUWH0gYml0cyBwb3NzaWJseSBiZWluZ1xuLVx0ICogZ2FyYmFnZSkgYW5kIHJlY29uc3RydWN0IFNfSUZNVCBiaXRzIGZvciBMaW51eCBlbnZpcm9ubWVudCBmcm9tXG4tXHQgKiBkaS1cdTAwM2VpX3Z0eXBlIHZhbHVlLlxuLVx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX21vZGUgPSAweDAwMDAwRkZGIFx1MDAyNiBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX21vZGUpO1xuLVx0aWYgKGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdnR5cGUpID09IEJGU19WRElSKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfbW9kZSB8PSBTX0lGRElSO1xuLVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2Rpcl9pbm9wcztcbi1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZiZnNfZGlyX29wZXJhdGlvbnM7XG4tXHR9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdnR5cGUpID09IEJGU19WUkVHKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfbW9kZSB8PSBTX0lGUkVHO1xuLVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2YmZzX2ZpbGVfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2YmZzX2FvcHM7XG4tXHR9IGVsc2Uge1xuLVx0XHRicmVsc2UoYmgpO1xuLVx0XHRwcmludGYoXCJVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XFxuXCIsXG4tXHRcdCAgICAgICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfc2Jsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfc2Jsb2NrKTtcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2VibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX2VibG9jayk7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXHUwMDNlaV9pbm8pO1xuLVx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdWlkKSk7XG4tXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZ2lkKSk7XG4tXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfbmxpbmspKTtcbi1cdGlub2RlLVx1MDAzZWlfc2l6ZSA9IEJGU19GSUxFU0laRShkaSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTtcbi1cdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXHUwMDNlaV9hdGltZSksIDApO1xuLVx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX210aW1lKSwgMCk7XG4tXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfY3RpbWUpLCAwKTtcbi1cbi1cdGJyZWxzZShiaCk7XG4tXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcbi1cdHJldHVybiBpbm9kZTtcbi1cbi1lcnJvcjpcbi1cdGlnZXRfZmFpbGVkKGlub2RlKTtcbi1cdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGJmc19pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwKVxuLXtcbi1cdGlmICgoaW5vIFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXHUwMDNlIEJGU19TQihzYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4eFxcblwiLCBzYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbi1cdH1cbi1cbi1cdGlubyAtPSBCRlNfUk9PVF9JTk87XG4tXG4tXHQqcCA9IHNiX2JyZWFkKHNiLCAxICsgaW5vIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0spO1xuLVx0aWYgKCEqcCkge1xuLVx0XHRwcmludGYoXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDh4XFxuXCIsIHNiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLVx0fVxuLVxuLVx0cmV0dXJuIChzdHJ1Y3QgYmZzX2lub2RlICopKCpwKS1cdTAwM2ViX2RhdGEgKyAgaW5vICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHVuc2lnbmVkIGludCBpbm8gPSAodTE2KWlub2RlLVx1MDAzZWlfaW5vO1xuLVx0dW5zaWduZWQgbG9uZyBpX3NibG9jaztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cbi1cdGRwcmludGYoXCJpbm89JTA4eFxcblwiLCBpbm8pO1xuLVxuLVx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXG4tXHRpZiAoaW5vID09IEJGU19ST09UX0lOTylcbi1cdFx0ZGktXHUwMDNlaV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WRElSKTtcbi1cdGVsc2Vcbi1cdFx0ZGktXHUwMDNlaV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WUkVHKTtcbi1cbi1cdGRpLVx1MDAzZWlfaW5vID0gY3B1X3RvX2xlMTYoaW5vKTtcbi1cdGRpLVx1MDAzZWlfbW9kZSA9IGNwdV90b19sZTMyKGlub2RlLVx1MDAzZWlfbW9kZSk7XG4tXHRkaS1cdTAwM2VpX3VpZCA9IGNwdV90b19sZTMyKGlfdWlkX3JlYWQoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfZ2lkID0gY3B1X3RvX2xlMzIoaV9naWRfcmVhZChpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLVx1MDAzZWlfbmxpbmspO1xuLVx0ZGktXHUwMDNlaV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9hdGltZV9zZWMoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfbXRpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfbXRpbWVfc2VjKGlub2RlKSk7XG4tXHRkaS1cdTAwM2VpX2N0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X2N0aW1lX3NlYyhpbm9kZSkpO1xuLVx0aV9zYmxvY2sgPSBCRlNfSShpbm9kZSktXHUwMDNlaV9zYmxvY2s7XG4tXHRkaS1cdTAwM2VpX3NibG9jayA9IGNwdV90b19sZTMyKGlfc2Jsb2NrKTtcbi1cdGRpLVx1MDAzZWlfZWJsb2NrID0gY3B1X3RvX2xlMzIoQkZTX0koaW5vZGUpLVx1MDAzZWlfZWJsb2NrKTtcbi1cdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4tXG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0aW50IGVyciA9IDA7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdGVyciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1vdXQ6XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xuLVxuLVx0ZHByaW50ZihcImlubz0lMDhseFxcblwiLCBpbm8pO1xuLVxuLVx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRtbWJfc3luYyhcdTAwMjZCRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0bW1iX2ludmFsaWRhdGUoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGNsZWFyX2lub2RlKGlub2RlKTtcbi1cbi1cdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbi1cdGlmIChJU19FUlIoZGkpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0LyogY2xlYXIgb24tZGlzayBpbm9kZSAqL1xuLVx0bWVtc2V0KGRpLCAwLCBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpO1xuLVx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuLVx0YnJlbHNlKGJoKTtcbi1cbi1cdGlmIChiaS1cdTAwM2VpX2Rza19pbm8pIHtcbi1cdFx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrKVxuLVx0XHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgKz0gYmktXHUwMDNlaV9lYmxvY2sgKyAxIC0gYmktXHUwMDNlaV9zYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWkrKztcbi1cdFx0Y2xlYXJfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdFx0YmZzX2R1bXBfaW1hcChcImV2aWN0X2lub2RlXCIsIHMpO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZpbGUsIG1ha2UgdGhlIHByZXZpb3VzIGJsb2NrXG4tXHQgKiBcImxhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZVwiIGV2ZW4gaWYgdGhlcmUgaXMgbm9cbi1cdCAqIHJlYWwgZmlsZSB0aGVyZSwgc2F2ZXMgdXMgMSBnYXAuXG4tXHQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZXNpX2xmX2VibGsgPT0gYmktXHUwMDNlaV9lYmxvY2spXG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfc2Jsb2NrIC0gMTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4te1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpO1xuLVxuLVx0aWYgKCFpbmZvKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0a2ZyZWUoaW5mbyk7XG4tXHRzLVx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LVx1MDAzZWRfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYocy1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfZGV2KTtcbi1cdGJ1Zi1cdTAwM2VmX3R5cGUgPSBCRlNfTUFHSUM7XG4tXHRidWYtXHUwMDNlZl9ic2l6ZSA9IHMtXHUwMDNlc19ibG9ja3NpemU7XG4tXHRidWYtXHUwMDNlZl9ibG9ja3MgPSBpbmZvLVx1MDAzZXNpX2Jsb2Nrcztcbi1cdGJ1Zi1cdTAwM2VmX2JmcmVlID0gYnVmLVx1MDAzZWZfYmF2YWlsID0gaW5mby1cdTAwM2VzaV9mcmVlYjtcbi1cdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gaW5mby1cdTAwM2VzaV9sYXN0aSArIDEgLSBCRlNfUk9PVF9JTk87XG4tXHRidWYtXHUwMDNlZl9mZnJlZSA9IGluZm8tXHUwMDNlc2lfZnJlZWk7XG4tXHRidWYtXHUwMDNlZl9mc2lkID0gdTY0X3RvX2ZzaWQoaWQpO1xuLVx0YnVmLVx1MDAzZWZfbmFtZWxlbiA9IEJGU19OQU1FTEVOO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmZzX2lub2RlX2NhY2hlcDtcbi1cbi1zdGF0aWMgc3RydWN0IGlub2RlICpiZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpO1xuLVx0YmkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdG1tYl9pbml0KFx1MDAyNmJpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbi1cbi1cdHJldHVybiBcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0a21lbV9jYWNoZV9mcmVlKGJmc19pbm9kZV9jYWNoZXAsIEJGU19JKGlub2RlKSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IGZvbztcbi1cbi1cdGlub2RlX2luaXRfb25jZShcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2lub2RlY2FjaGUodm9pZClcbi17XG4tXHRiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCJiZnNfaW5vZGVfY2FjaGVcIixcbi1cdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGJmc19pbm9kZV9pbmZvKSxcbi1cdFx0XHRcdFx0ICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8XG4tXHRcdFx0XHRcdFx0U0xBQl9BQ0NPVU5UKSxcbi1cdFx0XHRcdFx0ICAgICBpbml0X29uY2UpO1xuLVx0aWYgKGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSBhbGwgZGVsYXllZCByY3UgZnJlZSBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlXG4tXHQgKiBkZXN0cm95IGNhY2hlLlxuLVx0ICovXG4tXHRyY3VfYmFycmllcigpO1xuLVx0a21lbV9jYWNoZV9kZXN0cm95KGJmc19pbm9kZV9jYWNoZXApO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7XG4tXHQuYWxsb2NfaW5vZGVcdD0gYmZzX2FsbG9jX2lub2RlLFxuLVx0LmZyZWVfaW5vZGVcdD0gYmZzX2ZyZWVfaW5vZGUsXG4tXHQud3JpdGVfaW5vZGVcdD0gYmZzX3dyaXRlX2lub2RlLFxuLVx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbi1cdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4tXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4tXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbi19O1xuLVxuLXZvaWQgYmZzX2R1bXBfaW1hcChjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi17XG4tI2lmZGVmIERFQlVHXG4tXHRpbnQgaTtcbi1cdGNoYXIgKnRtcGJ1ZiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cbi1cdGlmICghdG1wYnVmKVxuLVx0XHRyZXR1cm47XG4tXHRmb3IgKGkgPSBCRlNfU0IocyktXHUwMDNlc2lfbGFzdGk7IGkgXHUwMDNlPSAwOyBpLS0pIHtcbi1cdFx0aWYgKGkgXHUwMDNlIFBBR0VfU0laRSAtIDEwMCkgYnJlYWs7XG4tXHRcdGlmICh0ZXN0X2JpdChpLCBCRlNfU0IocyktXHUwMDNlc2lfaW1hcCkpXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCIxXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCIwXCIpO1xuLVx0fVxuLVx0cHJpbnRmKFwiJXM6IGxhc3RpPSUwOGx4IFx1MDAzYyVzXHUwMDNlXFxuXCIsIHByZWZpeCwgQkZTX1NCKHMpLVx1MDAzZXNpX2xhc3RpLCB0bXBidWYpO1xuLVx0a2ZyZWUodG1wYnVmKTtcbi0jZW5kaWZcbi19XG4tXG4tc3RhdGljIGludCBiZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi17XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqc2JoO1xuLVx0c3RydWN0IGJmc19zdXBlcl9ibG9jayAqYmZzX3NiO1xuLVx0c3RydWN0IGlub2RlICppbm9kZTtcbi1cdHVuc2lnbmVkIGk7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2ssIGlfZWJsb2NrLCBpX2VvZmYsIHNfc2l6ZTtcbi1cdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuLVxuLVx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbi1cdGlmICghaW5mbylcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBpbmZvO1xuLVx0cy1cdTAwM2VzX3RpbWVfbWluID0gMDtcbi1cdHMtXHUwMDNlc190aW1lX21heCA9IFUzMl9NQVg7XG4tXG4tXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgQkZTX0JTSVpFKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRzYmggPSBzYl9icmVhZChzLCAwKTtcbi1cdGlmICghc2JoKVxuLVx0XHRnb3RvIG91dDtcbi1cdGJmc19zYiA9IChzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICopc2JoLVx1MDAzZWJfZGF0YTtcbi1cdGlmIChsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykgIT0gQkZTX01BR0lDKSB7XG4tXHRcdGlmICghc2lsZW50KVxuLVx0XHRcdHByaW50ZihcIk5vIEJGUyBmaWxlc3lzdGVtIG9uICVzIChtYWdpYz0lMDh4KVxcblwiLCBzLVx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRpZiAoQkZTX1VOQ0xFQU4oYmZzX3NiLCBzKSBcdTAwMjZcdTAwMjYgIXNpbGVudClcbi1cdFx0cHJpbnRmKFwiJXMgaXMgdW5jbGVhbiwgY29udGludWluZ1xcblwiLCBzLVx1MDAzZXNfaWQpO1xuLVxuLVx0cy1cdTAwM2VzX21hZ2ljID0gQkZTX01BR0lDO1xuLVxuLVx0aWYgKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSBcdTAwM2UgbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSB8fFxuLVx0ICAgIGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2spICsgc2l6ZW9mKHN0cnVjdCBiZnNfZGlyZW50KSkge1xuLVx0XHRwcmludGYoXCJTdXBlcmJsb2NrIGlzIGNvcnJ1cHRlZCBvbiAlc1xcblwiLCBzLVx1MDAzZXNfaWQpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXG4tXHRpbmZvLVx1MDAzZXNpX2xhc3RpID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkgKyBCRlNfUk9PVF9JTk8gLSAxO1xuLVx0aWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcbi1cdFx0cHJpbnRmKFwiTk9URTogZmlsZXN5c3RlbSAlcyB3YXMgY3JlYXRlZCB3aXRoIDUxMiBpbm9kZXMsIHRoZSByZWFsIG1heGltdW0gaXMgNTExLCBtb3VudGluZyBhbnl3YXlcXG5cIiwgcy1cdTAwM2VzX2lkKTtcbi1cdGVsc2UgaWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgXHUwMDNlIEJGU19NQVhfTEFTVEkpIHtcbi1cdFx0cHJpbnRmKFwiSW1wb3NzaWJsZSBsYXN0IGlub2RlIG51bWJlciAlbHUgXHUwMDNlICVkIG9uICVzXFxuXCIsIGluZm8tXHUwMDNlc2lfbGFzdGksIEJGU19NQVhfTEFTVEksIHMtXHUwMDNlc19pZCk7XG4tXHRcdGdvdG8gb3V0MTtcbi1cdH1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJGU19ST09UX0lOTzsgaSsrKVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXG4tXHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZiZnNfc29wcztcbi1cdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcbi1cdGlmIChJU19FUlIoaW5vZGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaW5vZGUpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbi1cdGlmICghcy1cdTAwM2VzX3Jvb3QpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXQxO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSArIDEpIFx1MDAzZVx1MDAzZSBCRlNfQlNJWkVfQklUUztcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWIgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSArIDEgLSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19zdGFydCkpIFx1MDAzZVx1MDAzZSBCRlNfQlNJWkVfQklUUztcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWkgPSAwO1xuLVx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gMDtcbi1cbi1cdC8qIGNhbiB3ZSByZWFkIHRoZSBsYXN0IGJsb2NrPyAqL1xuLVx0YmggPSBzYl9icmVhZChzLCBpbmZvLVx1MDAzZXNpX2Jsb2NrcyAtIDEpO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCJMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcblwiLCBzLVx1MDAzZXNfaWQsIGluZm8tXHUwMDNlc2lfYmxvY2tzIC0gMSk7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0Mjtcbi1cdH1cbi1cdGJyZWxzZShiaCk7XG4tXG4tXHRiaCA9IE5VTEw7XG4tXHRmb3IgKGkgPSBCRlNfUk9PVF9JTk87IGkgXHUwMDNjPSBpbmZvLVx1MDAzZXNpX2xhc3RpOyBpKyspIHtcbi1cdFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRcdGludCBibG9jayA9IChpIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICsgMTtcbi1cdFx0aW50IG9mZiA9IChpIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLO1xuLVx0XHR1bnNpZ25lZCBsb25nIGVibG9jaztcbi1cbi1cdFx0aWYgKCFvZmYpIHtcbi1cdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdGJoID0gc2JfYnJlYWQocywgYmxvY2spO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghYmgpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cdTAwM2ViX2RhdGEgKyBvZmY7XG4tXG4tXHRcdC8qIHRlc3QgaWYgZmlsZXN5c3RlbSBpcyBub3QgY29ycnVwdGVkICovXG4tXG4tXHRcdGlfZW9mZiA9IGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZW9mZnNldCk7XG4tXHRcdGlfc2Jsb2NrID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9zYmxvY2spO1xuLVx0XHRpX2VibG9jayA9IGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZWJsb2NrKTtcbi1cdFx0c19zaXplID0gbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKTtcbi1cbi1cdFx0aWYgKGlfc2Jsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2Jsb2NrcyB8fFxuLVx0XHRcdGlfZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2Jsb2NrcyB8fFxuLVx0XHRcdGlfc2Jsb2NrIFx1MDAzZSBpX2VibG9jayB8fFxuLVx0XHRcdChpX2VvZmYgIT0gbGUzMl90b19jcHUoLTEpIFx1MDAyNlx1MDAyNiBpX2VvZmYgXHUwMDNlIHNfc2l6ZSkgfHxcbi1cdFx0XHRpX3NibG9jayAqIEJGU19CU0laRSBcdTAwM2UgaV9lb2ZmKSB7XG4tXG4tXHRcdFx0cHJpbnRmKFwiSW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcblwiLCBpLCBzLVx1MDAzZXNfaWQpO1xuLVxuLVx0XHRcdGJyZWxzZShiaCk7XG4tXHRcdFx0cmV0ID0gLUVJTztcbi1cdFx0XHRnb3RvIG91dDI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFkaS1cdTAwM2VpX2lubykge1xuLVx0XHRcdGluZm8tXHUwMDNlc2lfZnJlZWkrKztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gQkZTX0ZJTEVCTE9DS1MoZGkpO1xuLVxuLVx0XHRlYmxvY2sgPSAgbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRpZiAoZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xmX2VibGspXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gZWJsb2NrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdGJyZWxzZShzYmgpO1xuLVx0YmZzX2R1bXBfaW1hcChcImZpbGxfc3VwZXJcIiwgcyk7XG4tXHRyZXR1cm4gMDtcbi1cbi1vdXQyOlxuLVx0ZHB1dChzLVx1MDAzZXNfcm9vdCk7XG4tXHRzLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG4tb3V0MTpcbi1cdGJyZWxzZShzYmgpO1xuLW91dDpcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRrZnJlZShpbmZvKTtcbi1cdHMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi17XG4tXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgYmZzX2ZpbGxfc3VwZXIpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBiZnNfY29udGV4dF9vcHMgPSB7XG4tXHQuZ2V0X3RyZWUgPSBiZnNfZ2V0X3RyZWUsXG4tfTtcbi1cbi1zdGF0aWMgaW50IGJmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLXtcbi1cdGZjLVx1MDAzZW9wcyA9IFx1MDAyNmJmc19jb250ZXh0X29wcztcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7XG4tXHQub3duZXJcdFx0XHQ9IFRISVNfTU9EVUxFLFxuLVx0Lm5hbWVcdFx0XHQ9IFwiYmZzXCIsXG4tXHQuaW5pdF9mc19jb250ZXh0XHQ9IGJmc19pbml0X2ZzX2NvbnRleHQsXG4tXHQua2lsbF9zYlx0XHQ9IGtpbGxfYmxvY2tfc3VwZXIsXG4tXHQuZnNfZmxhZ3NcdFx0PSBGU19SRVFVSVJFU19ERVYsXG4tfTtcbi1NT0RVTEVfQUxJQVNfRlMoXCJiZnNcIik7XG4tXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcbi17XG4tXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDE7XG4tXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmJmc19mc190eXBlKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuLVx0cmV0dXJuIDA7XG4tb3V0OlxuLVx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XG4tb3V0MTpcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxuLXtcbi1cdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZiZnNfZnNfdHlwZSk7XG4tXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXG4tbW9kdWxlX2V4aXQoZXhpdF9iZnNfZnMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuQEAgLTE3LDcgKzE3LDcgQEBcbiBcbiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga25vd25fZnNbXSA9IHtcbiBcdFwiOXBcIiwgXCJhZGZzXCIsIFwiYWZmc1wiLCBcImFmc1wiLCBcImFpb1wiLCBcImFub25faW5vZGVmc1wiLCBcImFwcGFybW9yZnNcIixcbi1cdFwiYXV0b2ZzXCIsIFwiYmNhY2hlZnNcIiwgXCJiZGV2XCIsIFwiYmVmc1wiLCBcImJmc1wiLCBcImJpbmRlclwiLCBcImJpbmZtdF9taXNjXCIsXG4rXHRcImF1dG9mc1wiLCBcImJjYWNoZWZzXCIsIFwiYmRldlwiLCBcImJlZnNcIiwgXCJiaW5kZXJcIiwgXCJiaW5mbXRfbWlzY1wiLFxuIFx0XCJicGZcIiwgXCJidHJmc1wiLCBcImJ0cmZzX3Rlc3RfZnNcIiwgXCJjZXBoXCIsIFwiY2dyb3VwXCIsIFwiY2dyb3VwMlwiLCBcImNpZnNcIixcbiBcdFwiY29kYVwiLCBcImNvbmZpZ2ZzXCIsIFwiY3B1c2V0XCIsIFwiY3JhbWZzXCIsIFwiY3hsXCIsIFwiZGF4XCIsIFwiZGVidWdmc1wiLFxuIFx0XCJkZXZwdHNcIiwgXCJkZXZ0bXBmc1wiLCBcImRtYWJ1ZlwiLCBcImRybVwiLCBcImVjcnlwdGZzXCIsIFwiZWZpdmFyZnNcIiwgXCJlZnNcIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjY3MTMyMjE3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTk3NDU3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQkZTIEZpbGVzeXN0ZW0gUmVtb3ZhbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uZS4gVGhleSdyZSByaXBwaW5nIG91dCB0aGUgQkZTIGZpbGVzeXN0ZW0gZnJvbSB0aGUgTGludXgga2VybmVsIGNvbXBsZXRlbHkuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCdzIHByZXR0eSB0aG9yb3VnaC4gV2UndmUgZ290OlxuXG4qICAgYENSRURJVFNgIHVwZGF0ZWQgd2l0aCBhdXRob3IgZW1haWwuIEZpbmUuXG4qICAgRG9jdW1lbnRhdGlvbiB1cGRhdGVkIGFuZCwgaW4gc29tZSBjYXNlcywgZGVsZXRlZC4gVGhhdCdzIGV4cGVjdGVkIGZvciBhIGRlcHJlY2F0ZWQgZmlsZXN5c3RlbS5cbiogICBgTUFJTlRBSU5FUlNgIHVwZGF0ZWQg4oCTIEJGUyBzZWN0aW9uIGdvbmUuIE1ha2VzIHNlbnNlLlxuKiAgIEFyY2gtc3BlY2lmaWMgY29uZmlncyBnZXR0aW5nIHRoZSBgQ09ORklHX0JGU19GU2Agb3B0aW9uIHJlbW92ZWQuIFN0YW5kYXJkLlxuKiAgIFRoZSBgZnMvS2NvbmZpZ2AgYW5kIGBmcy9NYWtlZmlsZWAgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcmVtb3ZlIGFueSB0cmFjZSBvZiBCRlMuIEVzc2VudGlhbCBmb3IgYSBjbGVhbiByZW1vdmFsLlxuKiAgIFRoZSBgZnMvYmZzL2AgZGlyZWN0b3J5IGl0c2VsZiwgdGhlICphY3R1YWwgZmlsZXN5c3RlbSBjb2RlKiwgaXMgZ29uZS4gRXZlcnl0aGluZy4gYEtjb25maWdgLCBgTWFrZWZpbGVgLCB0aGUgYC5jYCBmaWxlcywgdGhlIGAuaGAuLi4gaXQncyBhbGwgZGVsZXRlZC4gR29vZC5cbiogICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jYCBmaWxlIGlzIHJlbW92aW5nIHJlZmVyZW5jZXMgdG8gXCJiZnNcIi4gUmlnaHQuXG5cblNvLCB0aGUgY29yZSBvZiB0aGUgY2hlY2sgaXM6IGlzIHRoZXJlIGFueSBleGVjdXRhYmxlIGNvZGUgKmxlZnQqPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBuby4gQWxsIHRoZSBmaWxlc3lzdGVtIGNvZGUgaXMgZGVsZXRlZC4gVGhlIG90aGVyIGNoYW5nZXMgYXJlIGNvbmZpZ3VyYXRpb24gdHdlYWtzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGFuZCBzZWxmdGVzdCBjbGVhbnVwLiBOb25lIG9mIHRoYXQgaXMgKmV4ZWN1dGFibGUqIGtlcm5lbCBjb2RlLiBUaGUgcGF0Y2ggaXMgcHVyZWx5IGRlc3RydWN0aXZlIGluIHRlcm1zIG9mIGNvZGUgcHJlc2VuY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgZm9sbG93aW5nIHRoZSBydWxlcyBjb3JyZWN0bHkuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNheXM6XG5cbiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXG4qICAgU2VsZi10ZXN0cyB0aGF0IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlxuKiAgIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBjb21waWxlZCBDIGxvZ2ljXG5cbldlbGwsIHRoaXMgcGF0Y2ggbmFpbHMgYWxsIG9mIHRob3NlLiBUaGUgQkZTIGZpbGVzeXN0ZW0gY29kZSBpcyAqZ29uZSouIEl0J3MgYSBjb21wbGV0ZSByZW1vdmFsLCBzbyBubyBjb2RlIGlzIGJlaW5nIGFkZGVkIG9yIG1vZGlmaWVkIHRoYXQgbmVlZHMgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIFdlIGNhbiBlbmFibGUgemVybyBjb25maWdzLCBhbmQgdGhlcmUgYXJlIHplcm8gZm9jdXMgc3ltYm9scy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoICpyZW1vdmVzKiB0aGUgbGVnYWN5IEJGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQ6IGNvZGUsIGRvY3VtZW50YXRpb24sIGNvbmZpZyBlbnRyaWVzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gTm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcmVtYWlucy4gVGhpcyBpcyBhIGNsZWFuIHN3ZWVwLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTMsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0MTo0Ny40NzEwNzA5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgbGVnYWN5IEJGUyAoQm9vdCBGaWxlIFN5c3RlbSkgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBrZXJuZWwsIGFsb25nIHdpdGggaXRzIGRvY3VtZW50YXRpb24sIEtjb25maWcgZW50cmllcywgZGVmY29uZmlncywgYW5kIHNlbGZ0ZXN0IHJlZmVyZW5jZXMuIEFzIG9ubHkgY29kZSByZW1vdmFsLCBkb2N1bWVudGF0aW9uLCBhbmQgY29uZmlnL3NlbGZ0ZXN0IGNsZWFudXAgYXJlIHBlcmZvcm1lZCwgdGhlcmUgaXMgbm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29kZSB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0MTo0Ny40NzEwOTI3MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8cc4l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 17:23:06 +0000 UTC FinishedAt: 2026-09-05 17:41:49 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDA5NDVkMTFmMzk2OWYwNGI0NmQwNjEyYTFiY2VjYTc5NTg1NWY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFNcbmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0XG4tLS0gYS9DUkVESVRTXG4mIzQzOyYjNDM7JiM0MzsgYi9DUkVESVRTXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgUzogTG9uZ2ZvcmQsIElyZWxhbmRcbiBTOiBTeWRuZXksIEF1c3RyYWxpYVxuIFxuIE46IFRpZ3JhbiBBLiBBaXZhemlhblxuLUU6IHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51a1xuJiM0MztFOiBhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXG4gVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzXG4gRDogQkZTIGZpbGVzeXN0ZW1cbiBEOiBJbnRlbCBJQTMyIENQVSBtaWNyb2NvZGUgdXBkYXRlIHN1cHBvcnRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxuaW5kZXggYTIyZjYwM2IyOTM4ZS4uYzFkYmZlOWM5NWQyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbkBAIC00NCw4ICYjNDM7NDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cbiBXaGljaCBpcyBpdCwgQkZTIG9yIEJFRlM/XG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuIEJlLCBJbmMgc2FpZCwgXCYjMzQ7QmVPUyBGaWxlc3lzdGVtIGlzIG9mZmljaWFsbHkgY2FsbGVkIEJGUywgbm90IEJlRlNcJiMzNDsuXG4tQnV0IFVuaXh3YXJlIEJvb3QgRmlsZXN5c3RlbSBpcyBjYWxsZWQgYmZzLCB0b28uIEFuZCB0aGV5IGFyZSBhbHJlYWR5IGluXG4tdGhlIGtlcm5lbC4gQmVjYXVzZSBvZiB0aGlzIG5hbWluZyBjb25mbGljdCwgb24gTGludXggdGhlIEJlT1NcbiYjNDM7QnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHlcbiYjNDM7aW4gdGhlIGtlcm5lbC4gQmVjYXVzZSBvZiB0aGlzIG5hbWluZyBjb25mbGljdCwgb24gTGludXggdGhlIEJlT1NcbiBmaWxlc3lzdGVtIGlzIGNhbGxlZCBiZWZzLlxuIFxuIEhvdyB0byBJbnN0YWxsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNlMTRiOTAxODgwNzIuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNjAgJiM0MzswLDAgQEBcbi0uLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLVxuLT09PT09PT09PT09PT09PT09PT09PT09PVxuLUJGUyBGaWxlc3lzdGVtIGZvciBMaW51eFxuLT09PT09PT09PT09PT09PT09PT09PT09PVxuLVxuLVRoZSBCRlMgZmlsZXN5c3RlbSBpcyB1c2VkIGJ5IFNDTyBVbml4V2FyZSBPUyBmb3IgdGhlIC9zdGFuZCBzbGljZSwgd2hpY2hcbi11c3VhbGx5IGNvbnRhaW5zIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIGEgZmV3IG90aGVyIGZpbGVzIHJlcXVpcmVkIGZvciB0aGVcbi1ib290IHByb2Nlc3MuXG4tXG4tSW4gb3JkZXIgdG8gYWNjZXNzIC9zdGFuZCBwYXJ0aXRpb24gdW5kZXIgTGludXggeW91IG9idmlvdXNseSBuZWVkIHRvXG4ta25vdyB0aGUgcGFydGl0aW9uIG51bWJlciBhbmQgdGhlIGtlcm5lbCBtdXN0IHN1cHBvcnQgVW5peFdhcmUgZGlzayBzbGljZXNcbi0oQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBjb25maWcgb3B0aW9uKS4gSG93ZXZlciBCRlMgc3VwcG9ydCBkb2VzIG5vdFxuLWRlcGVuZCBvbiBoYXZpbmcgVW5peFdhcmUgZGlza2xhYmVsIHN1cHBvcnQgYmVjYXVzZSBvbmUgY2FuIGFsc28gbW91bnRcbi1CRlMgZmlsZXN5c3RlbSB2aWEgbG9vcGJhY2s6OlxuLVxuLSAgICAjIGxvc2V0dXAgL2Rldi9sb29wMCBzdGFuZC5pbWdcbi0gICAgIyBtb3VudCAtdCBiZnMgL2Rldi9sb29wMCAvbW50L3N0YW5kXG4tXG4td2hlcmUgc3RhbmQuaW1nIGlzIGEgZmlsZSBjb250YWluaW5nIHRoZSBpbWFnZSBvZiBCRlMgZmlsZXN5c3RlbS5cbi1XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHVzaW5nIGl0IGFuZCB1bW91bnRlZCB5b3UgbmVlZCB0byBhbHNvIGRlYWxsb2NhdGVcbi0vZGV2L2xvb3AwIGRldmljZSBieTo6XG4tXG4tICAgICMgbG9zZXR1cCAtZCAvZGV2L2xvb3AwXG4tXG4tWW91IGNhbiBzaW1wbGlmeSBtb3VudGluZyBieSBqdXN0IHR5cGluZzo6XG4tXG4tICAgICMgbW91bnQgLXQgYmZzIC1vIGxvb3Agc3RhbmQuaW1nIC9tbnQvc3RhbmRcbi1cbi10aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3Aub1xuLWtlcm5lbCBtb2R1bGUgaWYgbmVjZXNzYXJ5KSBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgbG9vcGJhY2sgZHJpdmVyIGlzIG5vdFxuLWxvYWRlZCBhdXRvbWF0aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjb21waWxlZCB0aGUgbW9kdWxlIGFuZFxuLXRoYXQgbW9kcHJvYmUgaXMgZnVuY3Rpb25pbmcuIEJld2FyZSB0aGF0IHVtb3VudCB3aWxsIG5vdCBkZWFsbG9jYXRlXG4tL2Rldi9sb29wTiBkZXZpY2UgaWYgL2V0Yy9tdGFiIGZpbGUgb24geW91ciBzeXN0ZW0gaXMgYSBzeW1ib2xpYyBsaW5rIHRvXG4tL3Byb2MvbW91bnRzLiBZb3Ugd2lsbCBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IHVzaW5nIFwmIzM0Oy1kXCYjMzQ7IHN3aXRjaCBvZlxuLWxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uXG4tXG4tVG8gY3JlYXRlIHRoZSBCRlMgaW1hZ2UgdW5kZXIgVW5peFdhcmUgeW91IG5lZWQgdG8gZmluZCBvdXQgZmlyc3Qgd2hpY2hcbi1zbGljZSBjb250YWlucyBpdC4gVGhlIGNvbW1hbmQgcHJ0dnRvYygxTSkgaXMgeW91ciBmcmllbmQ6OlxuLVxuLSAgICAjIHBydHZ0b2MgL2Rldi9yZHNrL2MwYjB0MGQwczBcbi1cbi0oYXNzdW1pbmcgeW91ciByb290IGRpc2sgaXMgb24gdGFyZ2V0PTAsIGx1bj0wLCBidXM9MCwgY29udHJvbGxlcj0wKS4gVGhlbiB5b3Vcbi1sb29rIGZvciB0aGUgc2xpY2Ugd2l0aCB0YWcgXCYjMzQ7U1RBTkRcJiMzNDssIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xuLWluZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGRkKDEpIHRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlOjpcbi1cbi0gICAgIyB1bW91bnQgL3N0YW5kXG4tICAgICMgZGQgaWY9L2Rldi9yZHNrL2MwYjB0MGQwc2Egb2Y9c3RhbmQuaW1nIGJzPTUxMlxuLVxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xuLXRoZSBtYWdpYyBudW1iZXI6OlxuLVxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcbi1cbi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS5cbi1cbi1JZiB5b3UgaGF2ZSBhbnkgcGF0Y2hlcywgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIEJGU1xuLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6XG4tXG4tVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCA3MzRhNDVlNTE2Njc1Li43Y2NlN2NjMjhkMTI2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtNzUsNyAmIzQzOzc1LDYgQEAgRG9jdW1lbnRhdGlvbiBmb3IgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuXG4gICAgYXV0b2ZzXG4gICAgYXV0b2ZzLW1vdW50LWNvbnRyb2xcbiAgICBiZWZzXG4tICAgYmZzXG4gICAgYnRyZnNcbiAgICBjZXBoXG4gICAgY29kYVxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLjM4NTMwOTU1NjcwNWUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC00NjI3LDEzICYjNDM7NDYyNyw2IEBAIFM6XHRPZGQgRml4ZXNcbiBGOlx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcbiBGOlx0YmxvY2svYmZxLSpcbiBcbi1CRlMgRklMRSBTWVNURU1cbi1NOlx0XCYjMzQ7VGlncmFuIEEuIEFpdmF6aWFuXCYjMzQ7IFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi1TOlx0TWFpbnRhaW5lZFxuLUY6XHREb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3Rcbi1GOlx0ZnMvYmZzL1xuLUY6XHRpbmNsdWRlL3VhcGkvbGludXgvYmZzX2ZzLmhcbi1cbiBCSVRNQVAgQVBJXG4gTTpcdFl1cnkgTm9yb3YgXHUwMDNjeXVyeS5ub3JvdkBnbWFpbC5jb21cdTAwM2VcbiBSOlx0UmFzbXVzIFZpbGxlbW9lcyBcdTAwM2NsaW51eEByYXNtdXN2aWxsZW1vZXMuZGtcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWdcbmluZGV4IDU2YThmNzZkYWI0MTQuLjRmYjRkNDVmM2NkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuQEAgLTMzMyw3ICYjNDM7MzMzLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnXG5pbmRleCA4NWU5NWMwYWU0MTA3Li4zZDFjMzJkMzQ3NWU3IDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuQEAgLTM0MCw3ICYjNDM7MzQwLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuaW5kZXggMDQ5OGEwMTE1MzQ5MC4uMjU0NTE2OGI3NWJiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXG5AQCAtMzM5LDcgJiM0MzszMzksNiBAQCBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlM9bVxuIENPTkZJR19KRkZTMl9GU19YQVRUUj15XG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnXG5pbmRleCAwOWUwMDZjN2NkN2M2Li5jZDJhODMxNjE0Yzg5IDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbkBAIC0zMTgsNyAmIzQzOzMxOCw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19DUkFNRlM9bVxuIENPTkZJR19WWEZTX0ZTPW1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG5pbmRleCAzOTFjOTkxMTdlZTA2Li42ODgwNTFiMTFjZTE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0FVRElUPXlcbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cbiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG4gQ09ORklHX0JMS19ERVZfSU5JVFJEPXlcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xuaW5kZXggYWNmZmM1YzE3ZjkyZC4uOGFhYjIyOWZiOTA5NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbkBAIC05NDUsNyAmIzQzOzk0NSw2IEBAIENPTkZJR19FQ1JZUFRfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0NSQU1GUz1tXG4gQ09ORklHX1ZYRlNfRlM9bVxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBlMDU5MTdhZGNkNjA4Li4xY2IwYjNhOGIxMmNhIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvS2NvbmZpZ1xuQEAgLTMxNCw3ICYjNDM7MzE0LDYgQEAgc291cmNlIFwmIzM0O2ZzL2VjcnlwdGZzL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZnMvaGZzL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2ZzL2JlZnMvS2NvbmZpZ1wmIzM0O1xuLXNvdXJjZSBcJiMzNDtmcy9iZnMvS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtmcy9qZmZzMi9LY29uZmlnXCYjMzQ7XG4gIyBVQklGUyBGaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uXG4gc291cmNlIFwmIzM0O2ZzL3ViaWZzL0tjb25maWdcJiMzNDtcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCAwNTVkZmMyM2Q4MmI2Li4xNmYxMTA4YjY0ZTFhIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtNzYsNyAmIzQzOzc2LDYgQEAgb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuIG9iai0kKENPTkZJR19NSU5JWF9GUylcdFx0JiM0Mzs9IG1pbml4L1xuIG9iai0kKENPTkZJR19GQVRfRlMpXHRcdCYjNDM7PSBmYXQvXG4gb2JqLSQoQ09ORklHX0VYRkFUX0ZTKVx0XHQmIzQzOz0gZXhmYXQvXG4tb2JqLSQoQ09ORklHX0JGU19GUylcdFx0JiM0Mzs9IGJmcy9cbiBvYmotJChDT05GSUdfSVNPOTY2MF9GUylcdCYjNDM7PSBpc29mcy9cbiBvYmotJChDT05GSUdfSEZTUExVU19GUylcdCYjNDM7PSBoZnNwbHVzLyAjIEJlZm9yZSBoZnMgdG8gZmluZCB3cmFwcGVkIEhGUyYjNDM7XG4gb2JqLSQoQ09ORklHX0hGU19GUylcdFx0JiM0Mzs9IGhmcy9cbmRpZmYgLS1naXQgYS9mcy9iZnMvS2NvbmZpZyBiL2ZzL2Jmcy9LY29uZmlnXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDhlN2VmODY2YjYyYTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwyMSAmIzQzOzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLWNvbmZpZyBCRlNfRlNcbi1cdHRyaXN0YXRlIFwmIzM0O0JGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEJMT0NLXG4tXHRzZWxlY3QgQlVGRkVSX0hFQURcbi1cdGhlbHBcbi1cdCAgQm9vdCBGaWxlIFN5c3RlbSAoQkZTKSBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgdW5kZXIgU0NPIFVuaXhXYXJlIHRvXG4tXHQgIGFsbG93IHRoZSBib290bG9hZGVyIGFjY2VzcyB0byB0aGUga2VybmVsIGltYWdlIGFuZCBvdGhlciBpbXBvcnRhbnRcbi1cdCAgZmlsZXMgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuICBJdCBpcyB1c3VhbGx5IG1vdW50ZWQgdW5kZXIgL3N0YW5kXG4tXHQgIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgc2xpY2UgbWFya2VkIGFzIFwmIzM0O1NUQU5EXCYjMzQ7IGluIHRoZSBVbml4V2FyZVxuLVx0ICBwYXJ0aXRpb24uICBZb3Ugc2hvdWxkIHNheSBZIGlmIHlvdSB3YW50IHRvIHJlYWQgb3Igd3JpdGUgdGhlIGZpbGVzXG4tXHQgIG9uIHlvdXIgL3N0YW5kIHNsaWNlIGZyb20gd2l0aGluIExpbnV4LiAgWW91IHRoZW4gYWxzbyBuZWVkIHRvIHNheSBZXG4tXHQgIHRvIFwmIzM0O1VuaXhXYXJlIHNsaWNlcyBzdXBwb3J0XCYjMzQ7LCBiZWxvdy4gIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJGU1xuLVx0ICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGVcbi1cdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcdTAwM2UuXG4tXG4tXHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRoaXMgaXMgYWJvdXQsIHNheSBOLlxuLVxuLVx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbi1cdCAgYmZzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBvZiB5b3VyIHJvb3QgcGFydGl0aW9uICh0aGUgb25lXG4tXHQgIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeSAvKSBjYW5ub3QgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL01ha2VmaWxlIGIvZnMvYmZzL01ha2VmaWxlXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDJiNmJjNWViNGRlOWMuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsOCAmIzQzOzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLSNcbi0jIE1ha2VmaWxlIGZvciBCRlMgZmlsZXN5c3RlbS5cbi0jXG4tXG4tb2JqLSQoQ09ORklHX0JGU19GUykgJiM0Mzs9IGJmcy5vXG4tXG4tYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm9cbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Jmcy5oXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw2OSAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tLypcbi0gKlx0ZnMvYmZzL2Jmcy5oXG4tICpcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICovXG4tI2lmbmRlZiBfRlNfQkZTX0JGU19IXG4tI2RlZmluZSBfRlNfQkZTX0JGU19IXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYmZzX2ZzLmhcdTAwM2Vcbi1cbi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuXG4tICAgSW4gYWN0dWFsIGZhY3QsIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSA1MTJ0aCBpbm9kZSAoaS5lLiBpbm9kZSBOby4gNTEzIG9yIGZpbGUgTm8uIDUxMSlcbi0gICB3aWxsIGZhaWwgd2l0aCBFTk9TUEMgaW4gYmZzX2FkZF9lbnRyeSgpOiB0aGUgcm9vdCBkaXJlY3RvcnkgY2Fubm90IGNvbnRhaW4gc28gbWFueSBlbnRyaWVzLCBjb3VudGluZyAmIzM5Oy4uJiMzOTsuXG4tICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nXG4tICAgaWYgYSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBzdWNoIFwmIzM0O2ltcG9zc2libGUgdG8gZmlsbCB1cFwmIzM0OyBudW1iZXIgb2YgaW5vZGVzICovXG4tI2RlZmluZSBCRlNfTUFYX0xBU1RJXHQ1MTNcbi1cbi0vKlxuLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIHN1cGVyYmxvY2sgaW5mb1xuLSAqL1xuLXN0cnVjdCBiZnNfc2JfaW5mbyB7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2Jsb2Nrcztcbi1cdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWI7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2ZyZWVpO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9sZl9lYmxrO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9sYXN0aTtcbi1cdERFQ0xBUkVfQklUTUFQKHNpX2ltYXAsIEJGU19NQVhfTEFTVEkmIzQzOzEpO1xuLVx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xuLX07XG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBpbm9kZSBpbmZvXG4tICovXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcbi1cdHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAvKiBpbm9kZSBudW1iZXIgZnJvbSB0aGUgZGlzaywgY2FuIGJlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4tXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuLVx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbi19O1xuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19zYl9pbmZvICpCRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4tfVxuLVxuLVxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcbi1cdHByaW50ayhLRVJOX0VSUiBcJiMzNDtCRlMtZnM6ICVzKCk6IFwmIzM0OyBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKVxuLVxuLS8qIGlub2RlLmMgKi9cbi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7XG4tZXh0ZXJuIHZvaWQgYmZzX2R1bXBfaW1hcChjb25zdCBjaGFyICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbi1cbi0vKiBmaWxlLmMgKi9cbi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmZzX2ZpbGVfaW5vcHM7XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucztcbi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcztcbi1cbi0vKiBkaXIuYyAqL1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucztcbi1cbi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDM1NiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2Rpci5jXG4tICpcdEJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggIFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICogIE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlIDIwMDVcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2Jmcy5oXCYjMzQ7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKTtcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRcdHN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7XG4tXG4tc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4te1xuLVx0c3RydWN0IGlub2RlICpkaXIgPSBmaWxlX2lub2RlKGYpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRpbnQgYmxvY2s7XG4tXG4tXHRpZiAoY3R4LVx1MDAzZXBvcyBcdTAwMjYgKEJGU19ESVJFTlRfU0laRSAtIDEpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgZl9wb3M9JTA4bHggZm9yICVzOiUwOGxseFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY3R4LVx1MDAzZXBvcyxcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHR3aGlsZSAoY3R4LVx1MDAzZXBvcyBcdTAwM2MgZGlyLVx1MDAzZWlfc2l6ZSkge1xuLVx0XHRvZmZzZXQgPSBjdHgtXHUwMDNlcG9zIFx1MDAyNiAoQkZTX0JTSVpFIC0gMSk7XG4tXHRcdGJsb2NrID0gQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jayAmIzQzOyAoY3R4LVx1MDAzZXBvcyBcdTAwM2VcdTAwM2UgQkZTX0JTSVpFX0JJVFMpO1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpIHtcbi1cdFx0XHRjdHgtXHUwMDNlcG9zICYjNDM7PSBCRlNfQlNJWkUgLSBvZmZzZXQ7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0ZG8ge1xuLVx0XHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRcdGlmIChkZS1cdTAwM2Vpbm8pIHtcbi1cdFx0XHRcdGludCBzaXplID0gc3RybmxlbihkZS1cdTAwM2VuYW1lLCBCRlNfTkFNRUxFTik7XG4tXHRcdFx0XHRpZiAoIWRpcl9lbWl0KGN0eCwgZGUtXHUwMDNlbmFtZSwgc2l6ZSxcbi1cdFx0XHRcdFx0XHRsZTE2X3RvX2NwdShkZS1cdTAwM2Vpbm8pLFxuLVx0XHRcdFx0XHRcdERUX1VOS05PV04pKSB7XG4tXHRcdFx0XHRcdGJyZWxzZShiaCk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0XHRjdHgtXHUwMDNlcG9zICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdH0gd2hpbGUgKChvZmZzZXQgXHUwMDNjIEJGU19CU0laRSkgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4tXHQuaXRlcmF0ZV9zaGFyZWRcdD0gYmZzX3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLXtcbi1cdGludCBlcnI7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1bnNpZ25lZCBsb25nIGlubztcbi1cbi1cdGlub2RlID0gbmV3X2lub2RlKHMpO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0aW5vID0gZmluZF9maXJzdF96ZXJvX2JpdChpbmZvLVx1MDAzZXNpX2ltYXAsIGluZm8tXHUwMDNlc2lfbGFzdGkgJiM0MzsgMSk7XG4tXHRpZiAoaW5vIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xhc3RpKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdFx0aXB1dChpbm9kZSk7XG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVx0fVxuLVx0c2V0X2JpdChpbm8sIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRpbmZvLVx1MDAzZXNpX2ZyZWVpLS07XG4tXHRpbm9kZV9pbml0X293bmVyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBkaXIsIG1vZGUpO1xuLVx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xuLVx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuLVx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19maWxlX2lub3BzO1xuLVx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZiZnNfZmlsZV9vcGVyYXRpb25zO1xuLVx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2YmZzX2FvcHM7XG4tXHRpbm9kZS1cdTAwM2VpX2lubyA9IGlubztcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2Rza19pbm8gPSBpbm87XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9zYmxvY2sgPSAwO1xuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfZWJsb2NrID0gMDtcbi1cdGluc2VydF9pbm9kZV9oYXNoKGlub2RlKTtcbi0gICAgICAgIG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0YmZzX2R1bXBfaW1hcChcJiMzNDtjcmVhdGVcJiMzNDssIHMpO1xuLVxuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRcdGlwdXQoaW5vZGUpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuLVxuLVx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBCRlNfTkFNRUxFTilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmIChiaCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGlubyA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlub2RlID0gYmZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIGlubyk7XG4tXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkKTtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGludCBlcnI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNm5ldy1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0aW5jX25saW5rKGlub2RlKTtcbi1cdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0aWhvbGQoaW5vZGUpO1xuLVx0ZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi17XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmICghYmggfHwgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgIT0gaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIG91dF9icmVsc2U7XG4tXG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbi1cdFx0cHJpbnRmKFwmIzM0O3VubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcXG5cJiMzNDssXG4tXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8sXG4tXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfbmxpbmspO1xuLVx0XHRzZXRfbmxpbmsoaW5vZGUsIDEpO1xuLVx0fVxuLVx0ZGUtXHUwMDNlaW5vID0gMDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbi1cdGlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgaW5vZGVfZ2V0X2N0aW1lKGRpcikpO1xuLVx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0ZXJyb3IgPSAwO1xuLVxuLW91dF9icmVsc2U6XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwgKm5ld19iaDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpvbGRfZGUsICpuZXdfZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+UkVOQU1FX05PUkVQTEFDRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRvbGRfYmggPSBuZXdfYmggPSBOVUxMO1xuLVx0b2xkX2lub2RlID0gZF9pbm9kZShvbGRfZGVudHJ5KTtcbi1cdGlmIChTX0lTRElSKG9sZF9pbm9kZS1cdTAwM2VpX21vZGUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGluZm8gPSBCRlNfU0Iob2xkX2lub2RlLVx1MDAzZWlfc2IpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdG9sZF9iaCA9IGJmc19maW5kX2VudHJ5KG9sZF9kaXIsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLCBcdTAwMjZvbGRfZGUpO1xuLVxuLVx0aWYgKCFvbGRfYmggfHwgKGxlMTZfdG9fY3B1KG9sZF9kZS1cdTAwM2Vpbm8pICE9IG9sZF9pbm9kZS1cdTAwM2VpX2lubykpXG4tXHRcdGdvdG8gZW5kX3JlbmFtZTtcbi1cbi1cdGVycm9yID0gLUVQRVJNO1xuLVx0bmV3X2lub2RlID0gZF9pbm9kZShuZXdfZGVudHJ5KTtcbi1cdG5ld19iaCA9IGJmc19maW5kX2VudHJ5KG5ld19kaXIsIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lLCBcdTAwMjZuZXdfZGUpO1xuLVxuLVx0aWYgKG5ld19iaCBcdTAwMjZcdTAwMjYgIW5ld19pbm9kZSkge1xuLVx0XHRicmVsc2UobmV3X2JoKTtcbi1cdFx0bmV3X2JoID0gTlVMTDtcbi1cdH1cbi1cdGlmICghbmV3X2JoKSB7XG4tXHRcdGVycm9yID0gYmZzX2FkZF9lbnRyeShuZXdfZGlyLCBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSxcbi1cdFx0XHRcdFx0b2xkX2lub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gZW5kX3JlbmFtZTtcbi1cdH1cbi1cdG9sZF9kZS1cdTAwM2Vpbm8gPSAwO1xuLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKG9sZF9kaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KG9sZF9kaXIpKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4tXHRpZiAobmV3X2lub2RlKSB7XG4tXHRcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KG5ld19pbm9kZSk7XG4tXHRcdGlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7XG4tXHR9XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkob2xkX2JoLCBcdTAwMjZCRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRlcnJvciA9IDA7XG4tXG4tZW5kX3JlbmFtZTpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGJyZWxzZShvbGRfYmgpO1xuLVx0YnJlbHNlKG5ld19iaCk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7XG4tXHQuY3JlYXRlXHRcdFx0PSBiZnNfY3JlYXRlLFxuLVx0Lmxvb2t1cFx0XHRcdD0gYmZzX2xvb2t1cCxcbi1cdC5saW5rXHRcdFx0PSBiZnNfbGluayxcbi1cdC51bmxpbmtcdFx0XHQ9IGJmc191bmxpbmssXG4tXHQucmVuYW1lXHRcdFx0PSBiZnNfcmVuYW1lLFxuLX07XG4tXG4tc3RhdGljIGludCBiZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsIGludCBpbm8pXG4te1xuLVx0Y29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGNoaWxkLVx1MDAzZW5hbWU7XG4tXHRpbnQgbmFtZWxlbiA9IGNoaWxkLVx1MDAzZWxlbjtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRpbnQgYmxvY2ssIHNibG9jaywgZWJsb2NrLCBvZmYsIHBvcztcbi1cdGludCBpO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtuYW1lPSVzLCBuYW1lbGVuPSVkXFxuXCYjMzQ7LCBuYW1lLCBuYW1lbGVuKTtcbi1cbi1cdHNibG9jayA9IEJGU19JKGRpciktXHUwMDNlaV9zYmxvY2s7XG4tXHRlYmxvY2sgPSBCRlNfSShkaXIpLVx1MDAzZWlfZWJsb2NrO1xuLVx0Zm9yIChibG9jayA9IHNibG9jazsgYmxvY2sgXHUwMDNjPSBlYmxvY2s7IGJsb2NrJiM0MzsmIzQzOykge1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBCRlNfQlNJWkU7IG9mZiAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFKSB7XG4tXHRcdFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZik7XG4tXHRcdFx0aWYgKCFkZS1cdTAwM2Vpbm8pIHtcbi1cdFx0XHRcdHBvcyA9IChibG9jayAtIHNibG9jaykgKiBCRlNfQlNJWkUgJiM0Mzsgb2ZmO1xuLVx0XHRcdFx0aWYgKHBvcyBcdTAwM2U9IGRpci1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2l6ZSAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFO1xuLVx0XHRcdFx0XHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpcixcbi1cdFx0XHRcdFx0XHQgICAgICBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbi1cdFx0XHRcdGRlLVx1MDAzZWlubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTtcbi1cdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJGU19OQU1FTEVOOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0ZGUtXHUwMDNlbmFtZVtpXSA9XG4tXHRcdFx0XHRcdFx0KGkgXHUwMDNjIG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXG4tXHRcdFx0XHRcdFx0XHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gLUVOT1NQQztcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbi1cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1ZmZlcilcbi17XG4tXHRpZiAoKGxlbiBcdTAwM2MgQkZTX05BTUVMRU4pIFx1MDAyNlx1MDAyNiBidWZmZXJbbGVuXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gIW1lbWNtcChuYW1lLCBidWZmZXIsIGxlbik7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXG4tXHQqcmVzX2RpciA9IE5VTEw7XG4tXHRpZiAobmFtZWxlbiBcdTAwM2UgQkZTX05BTUVMRU4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0d2hpbGUgKGJsb2NrICogQkZTX0JTSVpFICYjNDM7IG9mZnNldCBcdTAwM2MgZGlyLVx1MDAzZWlfc2l6ZSkge1xuLVx0XHRpZiAoIWJoKSB7XG4tXHRcdFx0YmggPSBzYl9icmVhZChkaXItXHUwMDNlaV9zYiwgQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jayAmIzQzOyBibG9jayk7XG4tXHRcdFx0aWYgKCFiaCkge1xuLVx0XHRcdFx0YmxvY2smIzQzOyYjNDM7O1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBvZmZzZXQpO1xuLVx0XHRvZmZzZXQgJiM0Mzs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0aWYgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cdTAwM2VuYW1lKSkge1xuLVx0XHRcdCpyZXNfZGlyID0gZGU7XG4tXHRcdFx0cmV0dXJuIGJoO1xuLVx0XHR9XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNjIGJoLVx1MDAzZWJfc2l6ZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0YmggPSBOVUxMO1xuLVx0XHRvZmZzZXQgPSAwO1xuLVx0XHRibG9jayYjNDM7JiM0Mzs7XG4tXHR9XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGQzM2Q2YmRlOTkyYjguLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2ZzL2Jmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDIwMyAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2ZpbGUuY1xuLSAqXHRCRlMgZmlsZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICpcdE1ha2UgdGhlIGZpbGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gdW5kZXJzdGFuZCB0aGUgc2l6ZVxuLSAqXHRvZiB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuXG4tICpcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXHUwMDNjZG1pdHJpLnZvcm9iaWV2QGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21wYWdlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7YmZzLmhcJiMzNDtcbi1cbi0jdW5kZWYgREVCVUdcbi1cbi0jaWZkZWYgREVCVUdcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcdHByaW50Zih4KVxuLSNlbHNlXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXG4tI2VuZGlmXG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2VlayBcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuLVx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4tfTtcbi1cbi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0byxcbi1cdFx0XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqbmV3O1xuLVxuLVx0YmggPSBzYl9icmVhZChzYiwgZnJvbSk7XG4tXHRpZiAoIWJoKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdG5ldyA9IHNiX2dldGJsayhzYiwgdG8pO1xuLVx0bWVtY3B5KG5ldy1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfZGF0YSwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdG1hcmtfYnVmZmVyX2RpcnR5KG5ldyk7XG4tXHRiZm9yZ2V0KGJoKTtcbi1cdGJyZWxzZShuZXcpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX21vdmVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyB3aGVyZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRkcHJpbnRmKFwmIzM0OyUwOGx4LSUwOGx4LVx1MDAzZSUwOGx4XFxuXCYjMzQ7LCBzdGFydCwgZW5kLCB3aGVyZSk7XG4tXHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2M9IGVuZDsgaSYjNDM7JiM0MzspXG4tXHRcdGlmKGJmc19tb3ZlX2Jsb2NrKGksIHdoZXJlICYjNDM7IGksIHNiKSkge1xuLVx0XHRcdGRwcmludGYoXCYjMzQ7ZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLVx1MDAzZSAlMDhseFxcblwmIzM0OywgaSxcbi1cdFx0XHRcdFx0XHRcdFx0d2hlcmUgJiM0MzsgaSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4tXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwaHlzO1xuLVx0aW50IGVycjtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHNiKTtcbi1cdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7XG4tXG4tXHRwaHlzID0gYmktXHUwMDNlaV9zYmxvY2sgJiM0MzsgYmxvY2s7XG4tXHRpZiAoIWNyZWF0ZSkge1xuLVx0XHRpZiAocGh5cyBcdTAwM2M9IGJpLVx1MDAzZWlfZWJsb2NrKSB7XG4tXHRcdFx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOWx4IChncmFudGVkKVxcblwmIzM0Oyxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgZmlsZSBpcyBub3QgZW1wdHkgYW5kIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgd2l0aGluIHRoZVxuLVx0ICogcmFuZ2Ugb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBmaWxlLCB3ZSBjYW4gZ3JhbnQgaXQuXG4tXHQgKi9cbi1cdGlmIChiaS1cdTAwM2VpX3NibG9jayBcdTAwMjZcdTAwMjYgKHBoeXMgXHUwMDNjPSBiaS1cdTAwM2VpX2VibG9jaykpIHtcbi1cdFx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChpbnRlcmltIGJsb2NrIGdyYW50ZWQpXFxuXCYjMzQ7LCBcbi1cdFx0XHRcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0LyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuICovXG4tXHRpZiAocGh5cyBcdTAwM2U9IGluZm8tXHUwMDNlc2lfYmxvY2tzKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbi1cbi1cdC8qIFRoZSByZXN0IGhhcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpdHNlbGYuICovXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVxuLVx0Lypcbi1cdCAqIElmIHRoZSBsYXN0IGRhdGEgYmxvY2sgZm9yIHRoaXMgZmlsZSBpcyB0aGUgbGFzdCBhbGxvY2F0ZWRcbi1cdCAqIGJsb2NrLCB3ZSBjYW4gZXh0ZW5kIHRoZSBmaWxlIHRyaXZpYWxseSwgd2l0aG91dCBtb3ZpbmcgaXRcbi1cdCAqIGFueXdoZXJlLlxuLVx0ICovXG4tXHRpZiAoYmktXHUwMDNlaV9lYmxvY2sgPT0gaW5mby1cdTAwM2VzaV9sZl9lYmxrKSB7XG4tXHRcdGRwcmludGYoXCYjMzQ7Yz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoc2ltcGxlIGV4dGVuc2lvbilcXG5cJiMzNDssIFxuLVx0XHRcdFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBwaHlzIC0gYmktXHUwMDNlaV9lYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdGVyciA9IDA7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXG4tXHRwaHlzID0gaW5mby1cdTAwM2VzaV9sZl9lYmxrICYjNDM7IDE7XG4tXHRpZiAocGh5cyAmIzQzOyBibG9jayBcdTAwM2U9IGluZm8tXHUwMDNlc2lfYmxvY2tzKSB7XG4tXHRcdGVyciA9IC1FTk9TUEM7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrKSB7XG4tXHRcdGVyciA9IGJmc19tb3ZlX2Jsb2Nrcyhpbm9kZS1cdTAwM2VpX3NiLCBiaS1cdTAwM2VpX3NibG9jaywgXG4tXHRcdFx0XHRcdFx0YmktXHUwMDNlaV9lYmxvY2ssIHBoeXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZHByaW50ZihcJiMzNDtmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLVx1MDAzZSBmcyBjb3JydXB0aW9uXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRlcnIgPSAwO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChtb3ZlZClcXG5cJiMzNDssXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0YmktXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xuLVx0cGh5cyAmIzQzOz0gYmxvY2s7XG4tXHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSBiaS1cdTAwM2VpX2VibG9jayA9IHBoeXM7XG4tXG4tXHQvKlxuLVx0ICogVGhpcyBhc3N1bWVzIG5vdGhpbmcgY2FuIHdyaXRlIHRoZSBpbm9kZSBiYWNrIHdoaWxlIHdlIGFyZSBoZXJlXG4tXHQgKiBhbmQgdGh1cyB1cGRhdGUgaW5vZGUtXHUwMDNlaV9ibG9ja3MhIChYWFgpXG4tXHQgKi9cbi1cdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gYmktXHUwMDNlaV9lYmxvY2sgLSBiaS1cdTAwM2VpX3NibG9jayAmIzQzOyAxIC0gaW5vZGUtXHUwMDNlaV9ibG9ja3M7XG4tXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi17XG4tXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGJmc19nZXRfYmxvY2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGJmc19nZXRfYmxvY2spO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBiZnNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cbi1cdGlmICh0byBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuLVx0XHR0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi1cdFx0XHQgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHQgICBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG4tXHRcdFx0ICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCB2b2lkICoqZnNkYXRhKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBiZnNfZ2V0X2Jsb2NrKTtcbi1cdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRiZnNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIHBvcyAmIzQzOyBsZW4pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGJmc19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gYmZzX3dyaXRlcGFnZXMsXG4tXHQud3JpdGVfYmVnaW5cdD0gYmZzX3dyaXRlX2JlZ2luLFxuLVx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbi1cdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXBcdFx0PSBiZnNfYm1hcCxcbi19O1xuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDUzOCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi0vKlxuLSAqXHRmcy9iZnMvaW5vZGUuY1xuLSAqXHRCRlMgc3VwZXJibG9jayBhbmQgaW5vZGUgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi0gKlx0RnJvbSBmcy9taW5peCwgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzLlxuLSAqXHRNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCBcdTAwM2NhZHNAd29tcG9tLm9yZ1x1MDAzZSwgMjAwNS5cbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2Jmcy5oXCYjMzQ7XG4tXG4tTU9EVUxFX0FVVEhPUihcJiMzNDtUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NDTyBVbml4V2FyZSBCRlMgZmlsZXN5c3RlbSBmb3IgTGludXhcJiMzNDspO1xuLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdGludCBibG9jaywgb2ZmO1xuLVxuLVx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcbi1cdGlmICghaW5vZGUpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKVxuLVx0XHRyZXR1cm4gaW5vZGU7XG4tXG4tXHRpZiAoKGlubyBcdTAwM2MgQkZTX1JPT1RfSU5PKSB8fCAoaW5vIFx1MDAzZSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgaW5vZGUgbnVtYmVyICVzOiUwOGx4XFxuXCYjMzQ7LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4tXHRibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTtcbi1cdGJoID0gc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCYjMzQ7VW5hYmxlIHRvIHJlYWQgaW5vZGUgJXM6JTA4bHhcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCxcbi1cdFx0XHRcdFx0XHRcdFx0XHRpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0b2ZmID0gKGlubyAtIEJGU19ST09UX0lOTykgJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcbi1cdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cdTAwM2ViX2RhdGEgJiM0Mzsgb2ZmO1xuLVxuLVx0Lypcbi1cdCAqIGh0dHBzOi8vbWFydGluLmhpbm5lci5pbmZvL2ZzL2Jmcy9iZnMtc3RydWN0dXJlLmh0bWwgZXhwbGFpbnMgdGhhdFxuLVx0ICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLVx1MDAzZWlfbW9kZVxuLVx0ICogdmFsdWUuIFRoaXMgbWVhbnMgdGhhdCwgYWx0aG91Z2ggYmZzX3dyaXRlX2lub2RlKCkgc2F2ZXMgd2hvbGVcbi1cdCAqIGlub2RlLVx1MDAzZWlfbW9kZSBiaXRzICh3aGljaCBpbmNsdWRlIFNfSUZNVCBiaXRzIGFuZCBTX0lTe1VJRCxHSUQsVlRYfVxuLVx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXHUwMDNlaV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2Vcbi1cdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXG4tXHQgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgdGVsbCB3aGV0aGVyIG1pZGRsZSA3IGJpdHMgYXJlIGdhcmJhZ2UsIHVzZSBvbmx5XG4tXHQgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmdcbi1cdCAqIGdhcmJhZ2UpIGFuZCByZWNvbnN0cnVjdCBTX0lGTVQgYml0cyBmb3IgTGludXggZW52aXJvbm1lbnQgZnJvbVxuLVx0ICogZGktXHUwMDNlaV92dHlwZSB2YWx1ZS5cbi1cdCAqL1xuLVx0aW5vZGUtXHUwMDNlaV9tb2RlID0gMHgwMDAwMEZGRiBcdTAwMjYgbGUzMl90b19jcHUoZGktXHUwMDNlaV9tb2RlKTtcbi1cdGlmIChsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVkRJUikge1xuLVx0XHRpbm9kZS1cdTAwM2VpX21vZGUgfD0gU19JRkRJUjtcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19kaXJfaW5vcHM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2YmZzX2Rpcl9vcGVyYXRpb25zO1xuLVx0fSBlbHNlIGlmIChsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVlJFRykge1xuLVx0XHRpbm9kZS1cdTAwM2VpX21vZGUgfD0gU19JRlJFRztcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmJmc19maWxlX2lub3BzO1xuLVx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmJmc19hb3BzO1xuLVx0fSBlbHNlIHtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0cHJpbnRmKFwmIzM0O1Vua25vd24gdnR5cGU9JXUgJXM6JTA4bHhcXG5cJiMzNDssXG4tXHRcdCAgICAgICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfc2Jsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfc2Jsb2NrKTtcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2VibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX2VibG9jayk7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXHUwMDNlaV9pbm8pO1xuLVx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdWlkKSk7XG4tXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZ2lkKSk7XG4tXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfbmxpbmspKTtcbi1cdGlub2RlLVx1MDAzZWlfc2l6ZSA9IEJGU19GSUxFU0laRShkaSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTtcbi1cdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXHUwMDNlaV9hdGltZSksIDApO1xuLVx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX210aW1lKSwgMCk7XG4tXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfY3RpbWUpLCAwKTtcbi1cbi1cdGJyZWxzZShiaCk7XG4tXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcbi1cdHJldHVybiBpbm9kZTtcbi1cbi1lcnJvcjpcbi1cdGlnZXRfZmFpbGVkKGlub2RlKTtcbi1cdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGJmc19pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwKVxuLXtcbi1cdGlmICgoaW5vIFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXHUwMDNlIEJGU19TQihzYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtCYWQgaW5vZGUgbnVtYmVyICVzOiUwOHhcXG5cJiMzNDssIHNiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLVx0fVxuLVxuLVx0aW5vIC09IEJGU19ST09UX0lOTztcbi1cbi1cdCpwID0gc2JfYnJlYWQoc2IsIDEgJiM0MzsgaW5vIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0spO1xuLVx0aWYgKCEqcCkge1xuLVx0XHRwcmludGYoXCYjMzQ7VW5hYmxlIHRvIHJlYWQgaW5vZGUgJXM6JTA4eFxcblwmIzM0Oywgc2ItXHUwMDNlc19pZCwgaW5vKTtcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gKHN0cnVjdCBiZnNfaW5vZGUgKikoKnApLVx1MDAzZWJfZGF0YSAmIzQzOyAgaW5vICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHVuc2lnbmVkIGludCBpbm8gPSAodTE2KWlub2RlLVx1MDAzZWlfaW5vO1xuLVx0dW5zaWduZWQgbG9uZyBpX3NibG9jaztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cbi1cdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vLCBcdTAwMjZiaCk7XG4tXHRpZiAoSVNfRVJSKGRpKSlcbi1cdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cbi1cdGlmIChpbm8gPT0gQkZTX1JPT1RfSU5PKVxuLVx0XHRkaS1cdTAwM2VpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZESVIpO1xuLVx0ZWxzZVxuLVx0XHRkaS1cdTAwM2VpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZSRUcpO1xuLVxuLVx0ZGktXHUwMDNlaV9pbm8gPSBjcHVfdG9fbGUxNihpbm8pO1xuLVx0ZGktXHUwMDNlaV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtXHUwMDNlaV9tb2RlKTtcbi1cdGRpLVx1MDAzZWlfdWlkID0gY3B1X3RvX2xlMzIoaV91aWRfcmVhZChpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9naWQgPSBjcHVfdG9fbGUzMihpX2dpZF9yZWFkKGlub2RlKSk7XG4tXHRkaS1cdTAwM2VpX25saW5rID0gY3B1X3RvX2xlMzIoaW5vZGUtXHUwMDNlaV9ubGluayk7XG4tXHRkaS1cdTAwM2VpX2F0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X2F0aW1lX3NlYyhpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9tdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9tdGltZV9zZWMoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfY3RpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfY3RpbWVfc2VjKGlub2RlKSk7XG4tXHRpX3NibG9jayA9IEJGU19JKGlub2RlKS1cdTAwM2VpX3NibG9jaztcbi1cdGRpLVx1MDAzZWlfc2Jsb2NrID0gY3B1X3RvX2xlMzIoaV9zYmxvY2spO1xuLVx0ZGktXHUwMDNlaV9lYmxvY2sgPSBjcHVfdG9fbGUzMihCRlNfSShpbm9kZSktXHUwMDNlaV9lYmxvY2spO1xuLVx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4tXG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0aW50IGVyciA9IDA7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdGVyciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1vdXQ6XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xuLVxuLVx0ZHByaW50ZihcJiMzNDtpbm89JTA4bHhcXG5cJiMzNDssIGlubyk7XG4tXG4tXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLVx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdG1tYl9zeW5jKFx1MDAyNkJGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZCRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuLVxuLVx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdHJldHVybjtcbi1cbi1cdGRpID0gZmluZF9pbm9kZShzLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHQvKiBjbGVhciBvbi1kaXNrIGlub2RlICovXG4tXHRtZW1zZXQoZGksIDAsIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlKSk7XG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVxuLVx0aWYgKGJpLVx1MDAzZWlfZHNrX2lubykge1xuLVx0XHRpZiAoYmktXHUwMDNlaV9zYmxvY2spXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAmIzQzOz0gYmktXHUwMDNlaV9lYmxvY2sgJiM0MzsgMSAtIGJpLVx1MDAzZWlfc2Jsb2NrO1xuLVx0XHRpbmZvLVx1MDAzZXNpX2ZyZWVpJiM0MzsmIzQzOztcbi1cdFx0Y2xlYXJfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdFx0YmZzX2R1bXBfaW1hcChcJiMzNDtldmljdF9pbm9kZVwmIzM0Oywgcyk7XG4tXHR9XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgZmlsZSwgbWFrZSB0aGUgcHJldmlvdXMgYmxvY2tcbi1cdCAqIFwmIzM0O2xhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZVwmIzM0OyBldmVuIGlmIHRoZXJlIGlzIG5vXG4tXHQgKiByZWFsIGZpbGUgdGhlcmUsIHNhdmVzIHVzIDEgZ2FwLlxuLVx0ICovXG4tXHRpZiAoaW5mby1cdTAwM2VzaV9sZl9lYmxrID09IGJpLVx1MDAzZWlfZWJsb2NrKVxuLVx0XHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSBiaS1cdTAwM2VpX3NibG9jayAtIDE7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihzKTtcbi1cbi1cdGlmICghaW5mbylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGtmcmVlKGluZm8pO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpO1xuLVx0dTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHMtXHUwMDNlc19iZGV2LVx1MDAzZWJkX2Rldik7XG4tXHRidWYtXHUwMDNlZl90eXBlID0gQkZTX01BR0lDO1xuLVx0YnVmLVx1MDAzZWZfYnNpemUgPSBzLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0YnVmLVx1MDAzZWZfYmxvY2tzID0gaW5mby1cdTAwM2VzaV9ibG9ja3M7XG4tXHRidWYtXHUwMDNlZl9iZnJlZSA9IGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGluZm8tXHUwMDNlc2lfZnJlZWI7XG4tXHRidWYtXHUwMDNlZl9maWxlcyA9IGluZm8tXHUwMDNlc2lfbGFzdGkgJiM0MzsgMSAtIEJGU19ST09UX0lOTztcbi1cdGJ1Zi1cdTAwM2VmX2ZmcmVlID0gaW5mby1cdTAwM2VzaV9mcmVlaTtcbi1cdGJ1Zi1cdTAwM2VmX2ZzaWQgPSB1NjRfdG9fZnNpZChpZCk7XG4tXHRidWYtXHUwMDNlZl9uYW1lbGVuID0gQkZTX05BTUVMRU47XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiZnNfaW5vZGVfY2FjaGVwO1xuLVxuLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLXtcbi1cdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7XG4tXHRiaSA9IGFsbG9jX2lub2RlX3NiKHNiLCBiZnNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghYmkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0bW1iX2luaXQoXHUwMDI2YmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuLVxuLVx0cmV0dXJuIFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbi17XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vO1xuLVxuLVx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmJpLVx1MDAzZXZmc19pbm9kZSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5vZGVjYWNoZSh2b2lkKVxuLXtcbi1cdGJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtiZnNfaW5vZGVfY2FjaGVcJiMzNDssXG4tXHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGVfaW5mbyksXG4tXHRcdFx0XHRcdCAgICAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFxuLVx0XHRcdFx0XHRcdFNMQUJfQUNDT1VOVCksXG4tXHRcdFx0XHRcdCAgICAgaW5pdF9vbmNlKTtcbi1cdGlmIChiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKVxuLXtcbi1cdC8qXG4tXHQgKiBNYWtlIHN1cmUgYWxsIGRlbGF5ZWQgcmN1IGZyZWUgaW5vZGVzIGFyZSBmbHVzaGVkIGJlZm9yZSB3ZVxuLVx0ICogZGVzdHJveSBjYWNoZS5cbi1cdCAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cdGttZW1fY2FjaGVfZGVzdHJveShiZnNfaW5vZGVfY2FjaGVwKTtcbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJmc19zb3BzID0ge1xuLVx0LmFsbG9jX2lub2RlXHQ9IGJmc19hbGxvY19pbm9kZSxcbi1cdC5mcmVlX2lub2RlXHQ9IGJmc19mcmVlX2lub2RlLFxuLVx0LndyaXRlX2lub2RlXHQ9IGJmc193cml0ZV9pbm9kZSxcbi1cdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4tXHQuZXZpY3RfaW5vZGVcdD0gYmZzX2V2aWN0X2lub2RlLFxuLVx0LnB1dF9zdXBlclx0PSBiZnNfcHV0X3N1cGVyLFxuLVx0LnN0YXRmc1x0XHQ9IGJmc19zdGF0ZnMsXG4tfTtcbi1cbi12b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4te1xuLSNpZmRlZiBERUJVR1xuLVx0aW50IGk7XG4tXHRjaGFyICp0bXBidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4tXG4tXHRpZiAoIXRtcGJ1Zilcbi1cdFx0cmV0dXJuO1xuLVx0Zm9yIChpID0gQkZTX1NCKHMpLVx1MDAzZXNpX2xhc3RpOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4tXHRcdGlmIChpIFx1MDAzZSBQQUdFX1NJWkUgLSAxMDApIGJyZWFrO1xuLVx0XHRpZiAodGVzdF9iaXQoaSwgQkZTX1NCKHMpLVx1MDAzZXNpX2ltYXApKVxuLVx0XHRcdHN0cmNhdCh0bXBidWYsIFwmIzM0OzFcJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCYjMzQ7MFwmIzM0Oyk7XG4tXHR9XG4tXHRwcmludGYoXCYjMzQ7JXM6IGxhc3RpPSUwOGx4IFx1MDAzYyVzXHUwMDNlXFxuXCYjMzQ7LCBwcmVmaXgsIEJGU19TQihzKS1cdTAwM2VzaV9sYXN0aSwgdG1wYnVmKTtcbi1cdGtmcmVlKHRtcGJ1Zik7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4te1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKnNiaDtcbi1cdHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKmJmc19zYjtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tXHR1bnNpZ25lZCBpO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrLCBpX2VibG9jaywgaV9lb2ZmLCBzX3NpemU7XG4tXHRpbnQgc2lsZW50ID0gZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1NJTEVOVDtcbi1cbi1cdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG4tXHRpZiAoIWluZm8pXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHMtXHUwMDNlc19mc19pbmZvID0gaW5mbztcbi1cdHMtXHUwMDNlc190aW1lX21pbiA9IDA7XG4tXHRzLVx1MDAzZXNfdGltZV9tYXggPSBVMzJfTUFYO1xuLVxuLVx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIEJGU19CU0laRSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0c2JoID0gc2JfYnJlYWQocywgMCk7XG4tXHRpZiAoIXNiaClcbi1cdFx0Z290byBvdXQ7XG4tXHRiZnNfc2IgPSAoc3RydWN0IGJmc19zdXBlcl9ibG9jayAqKXNiaC1cdTAwM2ViX2RhdGE7XG4tXHRpZiAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfbWFnaWMpICE9IEJGU19NQUdJQykge1xuLVx0XHRpZiAoIXNpbGVudClcbi1cdFx0XHRwcmludGYoXCYjMzQ7Tm8gQkZTIGZpbGVzeXN0ZW0gb24gJXMgKG1hZ2ljPSUwOHgpXFxuXCYjMzQ7LCBzLVx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRpZiAoQkZTX1VOQ0xFQU4oYmZzX3NiLCBzKSBcdTAwMjZcdTAwMjYgIXNpbGVudClcbi1cdFx0cHJpbnRmKFwmIzM0OyVzIGlzIHVuY2xlYW4sIGNvbnRpbnVpbmdcXG5cJiMzNDssIHMtXHUwMDNlc19pZCk7XG4tXG4tXHRzLVx1MDAzZXNfbWFnaWMgPSBCRlNfTUFHSUM7XG4tXG4tXHRpZiAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIFx1MDAzZSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19lbmQpIHx8XG4tXHQgICAgbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGJmc19zdXBlcl9ibG9jaykgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBiZnNfZGlyZW50KSkge1xuLVx0XHRwcmludGYoXCYjMzQ7U3VwZXJibG9jayBpcyBjb3JydXB0ZWQgb24gJXNcXG5cJiMzNDssIHMtXHUwMDNlc19pZCk7XG4tXHRcdGdvdG8gb3V0MTtcbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlc2lfbGFzdGkgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfc3RhcnQpIC0gQkZTX0JTSVpFKSAvIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlKSAmIzQzOyBCRlNfUk9PVF9JTk8gLSAxO1xuLVx0aWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcbi1cdFx0cHJpbnRmKFwmIzM0O05PVEU6IGZpbGVzeXN0ZW0gJXMgd2FzIGNyZWF0ZWQgd2l0aCA1MTIgaW5vZGVzLCB0aGUgcmVhbCBtYXhpbXVtIGlzIDUxMSwgbW91bnRpbmcgYW55d2F5XFxuXCYjMzQ7LCBzLVx1MDAzZXNfaWQpO1xuLVx0ZWxzZSBpZiAoaW5mby1cdTAwM2VzaV9sYXN0aSBcdTAwM2UgQkZTX01BWF9MQVNUSSkge1xuLVx0XHRwcmludGYoXCYjMzQ7SW1wb3NzaWJsZSBsYXN0IGlub2RlIG51bWJlciAlbHUgXHUwMDNlICVkIG9uICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZXNpX2xhc3RpLCBCRlNfTUFYX0xBU1RJLCBzLVx1MDAzZXNfaWQpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCRlNfUk9PVF9JTk87IGkmIzQzOyYjNDM7KVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXG4tXHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZiZnNfc29wcztcbi1cdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcbi1cdGlmIChJU19FUlIoaW5vZGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaW5vZGUpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbi1cdGlmICghcy1cdTAwM2VzX3Jvb3QpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXQxO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgQkZTX0JTSVpFX0JJVFM7XG4tXHRpbmZvLVx1MDAzZXNpX2ZyZWViID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX2VuZCkgJiM0MzsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSkgXHUwMDNlXHUwMDNlIEJGU19CU0laRV9CSVRTO1xuLVx0aW5mby1cdTAwM2VzaV9mcmVlaSA9IDA7XG4tXHRpbmZvLVx1MDAzZXNpX2xmX2VibGsgPSAwO1xuLVxuLVx0LyogY2FuIHdlIHJlYWQgdGhlIGxhc3QgYmxvY2s/ICovXG4tXHRiaCA9IHNiX2JyZWFkKHMsIGluZm8tXHUwMDNlc2lfYmxvY2tzIC0gMSk7XG4tXHRpZiAoIWJoKSB7XG4tXHRcdHByaW50ZihcJiMzNDtMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcblwmIzM0Oywgcy1cdTAwM2VzX2lkLCBpbmZvLVx1MDAzZXNpX2Jsb2NrcyAtIDEpO1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dDI7XG4tXHR9XG4tXHRicmVsc2UoYmgpO1xuLVxuLVx0YmggPSBOVUxMO1xuLVx0Zm9yIChpID0gQkZTX1JPT1RfSU5POyBpIFx1MDAzYz0gaW5mby1cdTAwM2VzaV9sYXN0aTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRcdGludCBibG9jayA9IChpIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICYjNDM7IDE7XG4tXHRcdGludCBvZmYgPSAoaSAtIEJGU19ST09UX0lOTykgJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcbi1cdFx0dW5zaWduZWQgbG9uZyBlYmxvY2s7XG4tXG4tXHRcdGlmICghb2ZmKSB7XG4tXHRcdFx0YnJlbHNlKGJoKTtcbi1cdFx0XHRiaCA9IHNiX2JyZWFkKHMsIGJsb2NrKTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoIWJoKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRkaSA9IChzdHJ1Y3QgYmZzX2lub2RlICopYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZjtcbi1cbi1cdFx0LyogdGVzdCBpZiBmaWxlc3lzdGVtIGlzIG5vdCBjb3JydXB0ZWQgKi9cbi1cbi1cdFx0aV9lb2ZmID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9lb2Zmc2V0KTtcbi1cdFx0aV9zYmxvY2sgPSBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3NibG9jayk7XG4tXHRcdGlfZWJsb2NrID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRzX3NpemUgPSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19lbmQpO1xuLVxuLVx0XHRpZiAoaV9zYmxvY2sgXHUwMDNlIGluZm8tXHUwMDNlc2lfYmxvY2tzIHx8XG4tXHRcdFx0aV9lYmxvY2sgXHUwMDNlIGluZm8tXHUwMDNlc2lfYmxvY2tzIHx8XG4tXHRcdFx0aV9zYmxvY2sgXHUwMDNlIGlfZWJsb2NrIHx8XG4tXHRcdFx0KGlfZW9mZiAhPSBsZTMyX3RvX2NwdSgtMSkgXHUwMDI2XHUwMDI2IGlfZW9mZiBcdTAwM2Ugc19zaXplKSB8fFxuLVx0XHRcdGlfc2Jsb2NrICogQkZTX0JTSVpFIFx1MDAzZSBpX2VvZmYpIHtcbi1cbi1cdFx0XHRwcmludGYoXCYjMzQ7SW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcblwmIzM0OywgaSwgcy1cdTAwM2VzX2lkKTtcbi1cbi1cdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdHJldCA9IC1FSU87XG4tXHRcdFx0Z290byBvdXQyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghZGktXHUwMDNlaV9pbm8pIHtcbi1cdFx0XHRpbmZvLVx1MDAzZXNpX2ZyZWVpJiM0MzsmIzQzOztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gQkZTX0ZJTEVCTE9DS1MoZGkpO1xuLVxuLVx0XHRlYmxvY2sgPSAgbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRpZiAoZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xmX2VibGspXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gZWJsb2NrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdGJyZWxzZShzYmgpO1xuLVx0YmZzX2R1bXBfaW1hcChcJiMzNDtmaWxsX3N1cGVyXCYjMzQ7LCBzKTtcbi1cdHJldHVybiAwO1xuLVxuLW91dDI6XG4tXHRkcHV0KHMtXHUwMDNlc19yb290KTtcbi1cdHMtXHUwMDNlc19yb290ID0gTlVMTDtcbi1vdXQxOlxuLVx0YnJlbHNlKHNiaCk7XG4tb3V0OlxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdGtmcmVlKGluZm8pO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLXtcbi1cdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHtcbi1cdC5nZXRfdHJlZSA9IGJmc19nZXRfdHJlZSxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4te1xuLVx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2YmZzX2NvbnRleHRfb3BzO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBiZnNfZnNfdHlwZSA9IHtcbi1cdC5vd25lclx0XHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHRcdD0gXCYjMzQ7YmZzXCYjMzQ7LFxuLVx0LmluaXRfZnNfY29udGV4dFx0PSBiZnNfaW5pdF9mc19jb250ZXh0LFxuLVx0LmtpbGxfc2JcdFx0PSBraWxsX2Jsb2NrX3N1cGVyLFxuLVx0LmZzX2ZsYWdzXHRcdD0gRlNfUkVRVUlSRVNfREVWLFxuLX07XG4tTU9EVUxFX0FMSUFTX0ZTKFwmIzM0O2Jmc1wmIzM0Oyk7XG4tXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcbi17XG4tXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDE7XG4tXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmJmc19mc190eXBlKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuLVx0cmV0dXJuIDA7XG4tb3V0OlxuLVx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XG4tb3V0MTpcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxuLXtcbi1cdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZiZnNfZnNfdHlwZSk7XG4tXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXG4tbW9kdWxlX2V4aXQoZXhpdF9iZnNfZnMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuQEAgLTE3LDcgJiM0MzsxNyw3IEBAXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtub3duX2ZzW10gPSB7XG4gXHRcJiMzNDs5cFwmIzM0OywgXCYjMzQ7YWRmc1wmIzM0OywgXCYjMzQ7YWZmc1wmIzM0OywgXCYjMzQ7YWZzXCYjMzQ7LCBcJiMzNDthaW9cJiMzNDssIFwmIzM0O2Fub25faW5vZGVmc1wmIzM0OywgXCYjMzQ7YXBwYXJtb3Jmc1wmIzM0Oyxcbi1cdFwmIzM0O2F1dG9mc1wmIzM0OywgXCYjMzQ7YmNhY2hlZnNcJiMzNDssIFwmIzM0O2JkZXZcJiMzNDssIFwmIzM0O2JlZnNcJiMzNDssIFwmIzM0O2Jmc1wmIzM0OywgXCYjMzQ7YmluZGVyXCYjMzQ7LCBcJiMzNDtiaW5mbXRfbWlzY1wmIzM0OyxcbiYjNDM7XHRcJiMzNDthdXRvZnNcJiMzNDssIFwmIzM0O2JjYWNoZWZzXCYjMzQ7LCBcJiMzNDtiZGV2XCYjMzQ7LCBcJiMzNDtiZWZzXCYjMzQ7LCBcJiMzNDtiaW5kZXJcJiMzNDssIFwmIzM0O2JpbmZtdF9taXNjXCYjMzQ7LFxuIFx0XCYjMzQ7YnBmXCYjMzQ7LCBcJiMzNDtidHJmc1wmIzM0OywgXCYjMzQ7YnRyZnNfdGVzdF9mc1wmIzM0OywgXCYjMzQ7Y2VwaFwmIzM0OywgXCYjMzQ7Y2dyb3VwXCYjMzQ7LCBcJiMzNDtjZ3JvdXAyXCYjMzQ7LCBcJiMzNDtjaWZzXCYjMzQ7LFxuIFx0XCYjMzQ7Y29kYVwmIzM0OywgXCYjMzQ7Y29uZmlnZnNcJiMzNDssIFwmIzM0O2NwdXNldFwmIzM0OywgXCYjMzQ7Y3JhbWZzXCYjMzQ7LCBcJiMzNDtjeGxcJiMzNDssIFwmIzM0O2RheFwmIzM0OywgXCYjMzQ7ZGVidWdmc1wmIzM0OyxcbiBcdFwmIzM0O2RldnB0c1wmIzM0OywgXCYjMzQ7ZGV2dG1wZnNcJiMzNDssIFwmIzM0O2RtYWJ1ZlwmIzM0OywgXCYjMzQ7ZHJtXCYjMzQ7LCBcJiMzNDtlY3J5cHRmc1wmIzM0OywgXCYjMzQ7ZWZpdmFyZnNcJiMzNDssIFwmIzM0O2Vmc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDk0NWQxMWYzOTY5ZjA0YjQ2ZDA2MTJhMWJjZWNhNzk1ODU1ZjgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzo0MTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKJiM0MzsmIzQzOyYjNDM7IGIvQ1JFRElUUwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgUzogTG9uZ2ZvcmQsIElyZWxhbmQKIFM6IFN5ZG5leSwgQXVzdHJhbGlhCiAKIE46IFRpZ3JhbiBBLiBBaXZhemlhbgotRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrCiYjNDM7RTogYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbQogVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzCiBEOiBCRlMgZmlsZXN5c3RlbQogRDogSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHVwZGF0ZSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdAppbmRleCBhMjJmNjAzYjI5MzhlLi5jMWRiZmU5Yzk1ZDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3QKQEAgLTQ0LDggJiM0Mzs0NCw4IEBAIGltcGxlbWVudGF0aW9uLgogV2hpY2ggaXMgaXQsIEJGUyBvciBCRUZTPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogQmUsIEluYyBzYWlkLCAmIzM0O0JlT1MgRmlsZXN5c3RlbSBpcyBvZmZpY2lhbGx5IGNhbGxlZCBCRlMsIG5vdCBCZUZTJiMzNDsuCi1CdXQgVW5peHdhcmUgQm9vdCBGaWxlc3lzdGVtIGlzIGNhbGxlZCBiZnMsIHRvby4gQW5kIHRoZXkgYXJlIGFscmVhZHkgaW4KLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TCiYjNDM7QnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHkKJiM0MztpbiB0aGUga2VybmVsLiBCZWNhdXNlIG9mIHRoaXMgbmFtaW5nIGNvbmZsaWN0LCBvbiBMaW51eCB0aGUgQmVPUwogZmlsZXN5c3RlbSBpcyBjYWxsZWQgYmVmcy4KIAogSG93IHRvIEluc3RhbGwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNGI5MDE4ODA3Mi4uMDAwMDAwMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw2MCAmIzQzOzAsMCBAQAotLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotPT09PT09PT09PT09PT09PT09PT09PT09Ci1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXgKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoCi11c3VhbGx5IGNvbnRhaW5zIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIGEgZmV3IG90aGVyIGZpbGVzIHJlcXVpcmVkIGZvciB0aGUKLWJvb3QgcHJvY2Vzcy4KLQotSW4gb3JkZXIgdG8gYWNjZXNzIC9zdGFuZCBwYXJ0aXRpb24gdW5kZXIgTGludXggeW91IG9idmlvdXNseSBuZWVkIHRvCi1rbm93IHRoZSBwYXJ0aXRpb24gbnVtYmVyIGFuZCB0aGUga2VybmVsIG11c3Qgc3VwcG9ydCBVbml4V2FyZSBkaXNrIHNsaWNlcwotKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3QKLWRlcGVuZCBvbiBoYXZpbmcgVW5peFdhcmUgZGlza2xhYmVsIHN1cHBvcnQgYmVjYXVzZSBvbmUgY2FuIGFsc28gbW91bnQKLUJGUyBmaWxlc3lzdGVtIHZpYSBsb29wYmFjazo6Ci0KLSAgICAjIGxvc2V0dXAgL2Rldi9sb29wMCBzdGFuZC5pbWcKLSAgICAjIG1vdW50IC10IGJmcyAvZGV2L2xvb3AwIC9tbnQvc3RhbmQKLQotd2hlcmUgc3RhbmQuaW1nIGlzIGEgZmlsZSBjb250YWluaW5nIHRoZSBpbWFnZSBvZiBCRlMgZmlsZXN5c3RlbS4KLVdoZW4geW91IGhhdmUgZmluaXNoZWQgdXNpbmcgaXQgYW5kIHVtb3VudGVkIHlvdSBuZWVkIHRvIGFsc28gZGVhbGxvY2F0ZQotL2Rldi9sb29wMCBkZXZpY2UgYnk6OgotCi0gICAgIyBsb3NldHVwIC1kIC9kZXYvbG9vcDAKLQotWW91IGNhbiBzaW1wbGlmeSBtb3VudGluZyBieSBqdXN0IHR5cGluZzo6Ci0KLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kCi0KLXRoaXMgd2lsbCBhbGxvY2F0ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIGxvb3BiYWNrIGRldmljZSAoYW5kIGxvYWQgbG9vcC5vCi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3QKLWxvYWRlZCBhdXRvbWF0aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjb21waWxlZCB0aGUgbW9kdWxlIGFuZAotdGhhdCBtb2Rwcm9iZSBpcyBmdW5jdGlvbmluZy4gQmV3YXJlIHRoYXQgdW1vdW50IHdpbGwgbm90IGRlYWxsb2NhdGUKLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0bwotL3Byb2MvbW91bnRzLiBZb3Ugd2lsbCBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IHVzaW5nICYjMzQ7LWQmIzM0OyBzd2l0Y2ggb2YKLWxvc2V0dXAoOCkuIFJlYWQgbG9zZXR1cCg4KSBtYW5wYWdlIGZvciBtb3JlIGluZm8uCi0KLVRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlIHVuZGVyIFVuaXhXYXJlIHlvdSBuZWVkIHRvIGZpbmQgb3V0IGZpcnN0IHdoaWNoCi1zbGljZSBjb250YWlucyBpdC4gVGhlIGNvbW1hbmQgcHJ0dnRvYygxTSkgaXMgeW91ciBmcmllbmQ6OgotCi0gICAgIyBwcnR2dG9jIC9kZXYvcmRzay9jMGIwdDBkMHMwCi0KLShhc3N1bWluZyB5b3VyIHJvb3QgZGlzayBpcyBvbiB0YXJnZXQ9MCwgbHVuPTAsIGJ1cz0wLCBjb250cm9sbGVyPTApLiBUaGVuIHlvdQotbG9vayBmb3IgdGhlIHNsaWNlIHdpdGggdGFnICYjMzQ7U1RBTkQmIzM0Oywgd2hpY2ggaXMgdXN1YWxseSBzbGljZSAxMC4gV2l0aCB0aGlzCi1pbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSBkZCgxKSB0byBjcmVhdGUgdGhlIEJGUyBpbWFnZTo6Ci0KLSAgICAjIHVtb3VudCAvc3RhbmQKLSAgICAjIGRkIGlmPS9kZXYvcmRzay9jMGIwdDBkMHNhIG9mPXN0YW5kLmltZyBicz01MTIKLQotSnVzdCBpbiBjYXNlLCB5b3UgY2FuIHZlcmlmeSB0aGF0IHlvdSBoYXZlIGRvbmUgdGhlIHJpZ2h0IHRoaW5nIGJ5IGNoZWNraW5nCi10aGUgbWFnaWMgbnVtYmVyOjoKLQotICAgICMgb2QgLUFkIC10eDQgc3RhbmQuaW1nIHwgbW9yZQotCi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS4KLQotSWYgeW91IGhhdmUgYW55IHBhdGNoZXMsIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBCRlMKLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6Ci0KLVRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKaW5kZXggNzM0YTQ1ZTUxNjY3NS4uN2NjZTdjYzI4ZDEyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QKQEAgLTc1LDcgJiM0Mzs3NSw2IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLgogICAgYXV0b2ZzCiAgICBhdXRvZnMtbW91bnQtY29udHJvbAogICAgYmVmcwotICAgYmZzCiAgICBidHJmcwogICAgY2VwaAogICAgY29kYQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmYzMyMGIzNzM2NTZmLi4zODUzMDk1NTY3MDVlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtNDYyNywxMyAmIzQzOzQ2MjcsNiBAQCBTOglPZGQgRml4ZXMKIEY6CURvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0CiBGOglibG9jay9iZnEtKgogCi1CRlMgRklMRSBTWVNURU0KLU06CSYjMzQ7VGlncmFuIEEuIEFpdmF6aWFuJiMzNDsgJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QKLUY6CWZzL2Jmcy8KLUY6CWluY2x1ZGUvdWFwaS9saW51eC9iZnNfZnMuaAotCiBCSVRNQVAgQVBJCiBNOglZdXJ5IE5vcm92ICZsdDt5dXJ5Lm5vcm92QGdtYWlsLmNvbSZndDsKIFI6CVJhc211cyBWaWxsZW1vZXMgJmx0O2xpbnV4QHJhc211c3ZpbGxlbW9lcy5kayZndDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwppbmRleCA1NmE4Zjc2ZGFiNDE0Li40ZmI0ZDQ1ZjNjZGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCkBAIC0zMzMsNyAmIzQzOzMzMyw2IEBAIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19KRkZTMl9GUz1tCiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWcKaW5kZXggODVlOTVjMGFlNDEwNy4uM2QxYzMyZDM0NzVlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnCkBAIC0zNDAsNyAmIzQzOzM0MCw2IEBAIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19KRkZTMl9GUz1tCiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnCmluZGV4IDA0OThhMDExNTM0OTAuLjI1NDUxNjhiNzViYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWcKQEAgLTMzOSw3ICYjNDM7MzM5LDYgQEAgQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi1DT05GSUdfQkZTX0ZTPW0KIENPTkZJR19FRlNfRlM9bQogQ09ORklHX0pGRlMyX0ZTPW0KIENPTkZJR19KRkZTMl9GU19YQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggMDllMDA2YzdjZDdjNi4uY2QyYTgzMTYxNGM4OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMzE4LDcgJiM0MzszMTgsNiBAQCBDT05GSUdfQURGU19GUz1tCiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19CRUZTX0ZTPW0KLUNPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19WWEZTX0ZTPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKaW5kZXggMzkxYzk5MTE3ZWUwNi4uNjg4MDUxYjExY2UxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcKQEAgLTIsNyAmIzQzOzIsNiBAQCBDT05GSUdfQURGU19GUz1tCiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfQklORk1UX01JU0M9bQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCmluZGV4IGFjZmZjNWMxN2Y5MmQuLjhhYWIyMjlmYjkwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZwpAQCAtOTQ1LDcgJiM0Mzs5NDUsNiBAQCBDT05GSUdfRUNSWVBUX0ZTPW0KIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0JFRlNfRlM9bQotQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1ZYRlNfRlM9bQpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZTA1OTE3YWRjZDYwOC4uMWNiMGIzYThiMTJjYSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnCkBAIC0zMTQsNyAmIzQzOzMxNCw2IEBAIHNvdXJjZSAmIzM0O2ZzL2VjcnlwdGZzL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZnMvaGZzL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2ZzL2JlZnMvS2NvbmZpZyYjMzQ7Ci1zb3VyY2UgJiMzNDtmcy9iZnMvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtmcy9qZmZzMi9LY29uZmlnJiMzNDsKICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbgogc291cmNlICYjMzQ7ZnMvdWJpZnMvS2NvbmZpZyYjMzQ7CmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDA1NWRmYzIzZDgyYjYuLjE2ZjExMDhiNjRlMWEgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlCkBAIC03Niw3ICYjNDM7NzYsNiBAQCBvYmotJChDT05GSUdfQ09EQV9GUykJCSYjNDM7PSBjb2RhLwogb2JqLSQoQ09ORklHX01JTklYX0ZTKQkJJiM0Mzs9IG1pbml4Lwogb2JqLSQoQ09ORklHX0ZBVF9GUykJCSYjNDM7PSBmYXQvCiBvYmotJChDT05GSUdfRVhGQVRfRlMpCQkmIzQzOz0gZXhmYXQvCi1vYmotJChDT05GSUdfQkZTX0ZTKQkJJiM0Mzs9IGJmcy8KIG9iai0kKENPTkZJR19JU085NjYwX0ZTKQkmIzQzOz0gaXNvZnMvCiBvYmotJChDT05GSUdfSEZTUExVU19GUykJJiM0Mzs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTJiM0MzsKIG9iai0kKENPTkZJR19IRlNfRlMpCQkmIzQzOz0gaGZzLwpkaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3ZWY4NjZiNjJhNi4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDIxICYjNDM7MCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLWNvbmZpZyBCRlNfRlMKLQl0cmlzdGF0ZSAmIzM0O0JGUyBmaWxlIHN5c3RlbSBzdXBwb3J0JiMzNDsKLQlkZXBlbmRzIG9uIEJMT0NLCi0Jc2VsZWN0IEJVRkZFUl9IRUFECi0JaGVscAotCSAgQm9vdCBGaWxlIFN5c3RlbSAoQkZTKSBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgdW5kZXIgU0NPIFVuaXhXYXJlIHRvCi0JICBhbGxvdyB0aGUgYm9vdGxvYWRlciBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBpbWFnZSBhbmQgb3RoZXIgaW1wb3J0YW50Ci0JICBmaWxlcyBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gIEl0IGlzIHVzdWFsbHkgbW91bnRlZCB1bmRlciAvc3RhbmQKLQkgIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgc2xpY2UgbWFya2VkIGFzICYjMzQ7U1RBTkQmIzM0OyBpbiB0aGUgVW5peFdhcmUKLQkgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXMKLQkgIG9uIHlvdXIgL3N0YW5kIHNsaWNlIGZyb20gd2l0aGluIExpbnV4LiAgWW91IHRoZW4gYWxzbyBuZWVkIHRvIHNheSBZCi0JICB0byAmIzM0O1VuaXhXYXJlIHNsaWNlcyBzdXBwb3J0JiMzNDssIGJlbG93LiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQkZTCi0JICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGUKLQkgICZsdDtmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdCZndDsuCi0KLQkgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRoaXMgaXMgYWJvdXQsIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKLQkgIGJmcy4gIE5vdGUgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiAodGhlIG9uZQotCSAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9NYWtlZmlsZSBiL2ZzL2Jmcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw4ICYjNDM7MCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLSMKLSMgTWFrZWZpbGUgZm9yIEJGUyBmaWxlc3lzdGVtLgotIwotCi1vYmotJChDT05GSUdfQkZTX0ZTKSAmIzQzOz0gYmZzLm8KLQotYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm8KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9iZnMuaCBiL2ZzL2Jmcy9iZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMAotLS0gYS9mcy9iZnMvYmZzLmgKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw2OSAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qCi0gKglmcy9iZnMvYmZzLmgKLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKLSAqLwotI2lmbmRlZiBfRlNfQkZTX0JGU19ICi0jZGVmaW5lIF9GU19CRlNfQkZTX0gKLQotI2luY2x1ZGUgJmx0O2xpbnV4L2Jmc19mcy5oJmd0OwotCi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuCi0gICBJbiBhY3R1YWwgZmFjdCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIDUxMnRoIGlub2RlIChpLmUuIGlub2RlIE5vLiA1MTMgb3IgZmlsZSBOby4gNTExKQotICAgd2lsbCBmYWlsIHdpdGggRU5PU1BDIGluIGJmc19hZGRfZW50cnkoKTogdGhlIHJvb3QgZGlyZWN0b3J5IGNhbm5vdCBjb250YWluIHNvIG1hbnkgZW50cmllcywgY291bnRpbmcgJiMzOTsuLiYjMzk7LgotICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nCi0gICBpZiBhIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHN1Y2ggJiMzNDtpbXBvc3NpYmxlIHRvIGZpbGwgdXAmIzM0OyBudW1iZXIgb2YgaW5vZGVzICovCi0jZGVmaW5lIEJGU19NQVhfTEFTVEkJNTEzCi0KLS8qCi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBzdXBlcmJsb2NrIGluZm8KLSAqLwotc3RydWN0IGJmc19zYl9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIHNpX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nIHNpX2ZyZWViOwotCXVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7Ci0JdW5zaWduZWQgbG9uZyBzaV9sZl9lYmxrOwotCXVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7Ci0JREVDTEFSRV9CSVRNQVAoc2lfaW1hcCwgQkZTX01BWF9MQVNUSSYjNDM7MSk7Ci0Jc3RydWN0IG11dGV4IGJmc19sb2NrOwotfTsKLQotLyoKLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIGlub2RlIGluZm8KLSAqLwotc3RydWN0IGJmc19pbm9kZV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGlfZHNrX2lubzsgLyogaW5vZGUgbnVtYmVyIGZyb20gdGhlIGRpc2ssIGNhbiBiZSAwICovCi0JdW5zaWduZWQgbG9uZyBpX3NibG9jazsKLQl1bnNpZ25lZCBsb25nIGlfZWJsb2NrOwotCXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyBpX21ldGFkYXRhX2JoczsKLQlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZzX3NiX2luZm8gKkJGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Ci19Ci0KLQotI2RlZmluZSBwcmludGYoZm9ybWF0LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSICYjMzQ7QkZTLWZzOiAlcygpOiAmIzM0OyBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKQotCi0vKiBpbm9kZS5jICovCi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7Ci1leHRlcm4gdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwotCi0vKiBmaWxlLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9pbm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wczsKLQotLyogZGlyLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zOwotCi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2ZzL2Jmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM1NiAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8qCi0gKglmcy9iZnMvZGlyLmMKLSAqCUJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4KLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4ICBUaWdyYW4gQWl2YXppYW4gJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci0gKiAgTWFkZSBlbmRpYW5uZXNzLWNsZWFuIGJ5IEFuZHJldyBTdHJpYmJsZWhpbGwgJmx0O2Fkc0B3b21wb20ub3JnJmd0OyAyMDA1Ci0gKi8KLQotI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2J1ZmZlcl9oZWFkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLSNpbmNsdWRlICYjMzQ7YmZzLmgmIzM0OwotCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGRwcmludGYoeC4uLikJcHJpbnRmKHgpCi0jZWxzZQotI2RlZmluZSBkcHJpbnRmKHguLi4pCi0jZW5kaWYKLQotc3RhdGljIGludCBiZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsIGludCBpbm8pOwotc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqYmZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLAotCQkJCXN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7Ci0KLXN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShmKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBiZnNfZGlyZW50ICpkZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCBibG9jazsKLQotCWlmIChjdHgtJmd0O3BvcyAmYW1wOyAoQkZTX0RJUkVOVF9TSVpFIC0gMSkpIHsKLQkJcHJpbnRmKCYjMzQ7QmFkIGZfcG9zPSUwOGx4IGZvciAlczolMDhsbHhcbiYjMzQ7LAotCQkJCQkodW5zaWduZWQgbG9uZyljdHgtJmd0O3BvcywKLQkJCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd2hpbGUgKGN0eC0mZ3Q7cG9zICZsdDsgZGlyLSZndDtpX3NpemUpIHsKLQkJb2Zmc2V0ID0gY3R4LSZndDtwb3MgJmFtcDsgKEJGU19CU0laRSAtIDEpOwotCQlibG9jayA9IEJGU19JKGRpciktJmd0O2lfc2Jsb2NrICYjNDM7IChjdHgtJmd0O3BvcyAmZ3Q7Jmd0OyBCRlNfQlNJWkVfQklUUyk7Ci0JCWJoID0gc2JfYnJlYWQoZGlyLSZndDtpX3NiLCBibG9jayk7Ci0JCWlmICghYmgpIHsKLQkJCWN0eC0mZ3Q7cG9zICYjNDM7PSBCRlNfQlNJWkUgLSBvZmZzZXQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkbyB7Ci0JCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZnNldCk7Ci0JCQlpZiAoZGUtJmd0O2lubykgewotCQkJCWludCBzaXplID0gc3RybmxlbihkZS0mZ3Q7bmFtZSwgQkZTX05BTUVMRU4pOwotCQkJCWlmICghZGlyX2VtaXQoY3R4LCBkZS0mZ3Q7bmFtZSwgc2l6ZSwKLQkJCQkJCWxlMTZfdG9fY3B1KGRlLSZndDtpbm8pLAotCQkJCQkJRFRfVU5LTk9XTikpIHsKLQkJCQkJYnJlbHNlKGJoKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQkJb2Zmc2V0ICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7Ci0JCQljdHgtJmd0O3BvcyAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFOwotCQl9IHdoaWxlICgob2Zmc2V0ICZsdDsgQkZTX0JTSVpFKSAmYW1wOyZhbXA7IChjdHgtJmd0O3BvcyAmbHQ7IGRpci0mZ3Q7aV9zaXplKSk7Ci0JCWJyZWxzZShiaCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHsKLQkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAotCS5pdGVyYXRlX3NoYXJlZAk9IGJmc19yZWFkZGlyLAotCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCi0JLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotfTsKLQotc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRpci0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7Ci0JdW5zaWduZWQgbG9uZyBpbm87Ci0KLQlpbm9kZSA9IG5ld19pbm9kZShzKTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gLUVOT01FTTsKLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby0mZ3Q7c2lfaW1hcCwgaW5mby0mZ3Q7c2lfbGFzdGkgJiM0MzsgMSk7Ci0JaWYgKGlubyAmZ3Q7IGluZm8tJmd0O3NpX2xhc3RpKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQlzZXRfYml0KGlubywgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0JaW5mby0mZ3Q7c2lfZnJlZWktLTsKLQlpbm9kZV9pbml0X293bmVyKCZhbXA7bm9wX21udF9pZG1hcCwgaW5vZGUsIGRpciwgbW9kZSk7Ci0Jc2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpOwotCWlub2RlLSZndDtpX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19maWxlX2lub3BzOwotCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7YmZzX2ZpbGVfb3BlcmF0aW9uczsKLQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7YmZzX2FvcHM7Ci0JaW5vZGUtJmd0O2lfaW5vID0gaW5vOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9kc2tfaW5vID0gaW5vOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9zYmxvY2sgPSAwOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2sgPSAwOwotCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKLSAgICAgICAgbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JYmZzX2R1bXBfaW1hcCgmIzM0O2NyZWF0ZSYjMzQ7LCBzKTsKLQotCWVyciA9IGJmc19hZGRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCBpbm9kZS0mZ3Q7aV9pbm8pOwotCWlmIChlcnIpIHsKLQkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwotCQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJCXVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBiZnNfZGlyZW50ICpkZTsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLSZndDtpX3NiKTsKLQotCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBCRlNfTkFNRUxFTikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7Ci0KLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWJoID0gYmZzX2ZpbmRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCAmYW1wO2RlKTsKLQlpZiAoYmgpIHsKLQkJdW5zaWduZWQgbG9uZyBpbm8gPSAodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdShkZS0mZ3Q7aW5vKTsKLQkJYnJlbHNlKGJoKTsKLQkJaW5vZGUgPSBiZnNfaWdldChkaXItJmd0O2lfc2IsIGlubyk7Ci0JfQotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJCXN0cnVjdCBkZW50cnkgKm5ldykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShvbGQpOwotCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS0mZ3Q7aV9zYik7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsICZhbXA7bmV3LSZndDtkX25hbWUsIGlub2RlLSZndDtpX2lubyk7Ci0JaWYgKGVycikgewotCQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWluY19ubGluayhpbm9kZSk7Ci0JaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWlob2xkKGlub2RlKTsKLQlkX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpOwotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IGVycm9yID0gLUVOT0VOVDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKmRlOwotCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS0mZ3Q7aV9zYik7Ci0KLQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWJoID0gYmZzX2ZpbmRfZW50cnkoZGlyLCAmYW1wO2RlbnRyeS0mZ3Q7ZF9uYW1lLCAmYW1wO2RlKTsKLQlpZiAoIWJoIHx8IChsZTE2X3RvX2NwdShkZS0mZ3Q7aW5vKSAhPSBpbm9kZS0mZ3Q7aV9pbm8pKQotCQlnb3RvIG91dF9icmVsc2U7Ci0KLQlpZiAoIWlub2RlLSZndDtpX25saW5rKSB7Ci0JCXByaW50ZigmIzM0O3VubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcbiYjMzQ7LAotCQkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vZGUtJmd0O2lfaW5vLAotCQkJCQlpbm9kZS0mZ3Q7aV9ubGluayk7Ci0JCXNldF9ubGluayhpbm9kZSwgMSk7Ci0JfQotCWRlLSZndDtpbm8gPSAwOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtCRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JaW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7Ci0JbWFya19pbm9kZV9kaXJ0eShkaXIpOwotCWlub2RlX3NldF9jdGltZV90b190cyhpbm9kZSwgaW5vZGVfZ2V0X2N0aW1lKGRpcikpOwotCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKLQllcnJvciA9IDA7Ci0KLW91dF9icmVsc2U6Ci0JYnJlbHNlKGJoKTsKLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsICpuZXdfYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKm9sZF9kZSwgKm5ld19kZTsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87Ci0JaW50IGVycm9yID0gLUVOT0VOVDsKLQotCWlmIChmbGFncyAmYW1wOyB+UkVOQU1FX05PUkVQTEFDRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvbGRfYmggPSBuZXdfYmggPSBOVUxMOwotCW9sZF9pbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7Ci0JaWYgKFNfSVNESVIob2xkX2lub2RlLSZndDtpX21vZGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZm8gPSBCRlNfU0Iob2xkX2lub2RlLSZndDtpX3NiKTsKLQotCW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Jb2xkX2JoID0gYmZzX2ZpbmRfZW50cnkob2xkX2RpciwgJmFtcDtvbGRfZGVudHJ5LSZndDtkX25hbWUsICZhbXA7b2xkX2RlKTsKLQotCWlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtJmd0O2lubykgIT0gb2xkX2lub2RlLSZndDtpX2lubykpCi0JCWdvdG8gZW5kX3JlbmFtZTsKLQotCWVycm9yID0gLUVQRVJNOwotCW5ld19pbm9kZSA9IGRfaW5vZGUobmV3X2RlbnRyeSk7Ci0JbmV3X2JoID0gYmZzX2ZpbmRfZW50cnkobmV3X2RpciwgJmFtcDtuZXdfZGVudHJ5LSZndDtkX25hbWUsICZhbXA7bmV3X2RlKTsKLQotCWlmIChuZXdfYmggJmFtcDsmYW1wOyAhbmV3X2lub2RlKSB7Ci0JCWJyZWxzZShuZXdfYmgpOwotCQluZXdfYmggPSBOVUxMOwotCX0KLQlpZiAoIW5ld19iaCkgewotCQllcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgJmFtcDtuZXdfZGVudHJ5LSZndDtkX25hbWUsCi0JCQkJCW9sZF9pbm9kZS0mZ3Q7aV9pbm8pOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVuZF9yZW5hbWU7Ci0JfQotCW9sZF9kZS0mZ3Q7aW5vID0gMDsKLQlpbm9kZV9zZXRfbXRpbWVfdG9fdHMob2xkX2RpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQob2xkX2RpcikpOwotCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7Ci0JaWYgKG5ld19pbm9kZSkgewotCQlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpOwotCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwotCX0KLQltbWJfbWFya19idWZmZXJfZGlydHkob2xkX2JoLCAmYW1wO0JGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JZXJyb3IgPSAwOwotCi1lbmRfcmVuYW1lOgotCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQlicmVsc2Uob2xkX2JoKTsKLQlicmVsc2UobmV3X2JoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7Ci0JLmNyZWF0ZQkJCT0gYmZzX2NyZWF0ZSwKLQkubG9va3VwCQkJPSBiZnNfbG9va3VwLAotCS5saW5rCQkJPSBiZnNfbGluaywKLQkudW5saW5rCQkJPSBiZnNfdW5saW5rLAotCS5yZW5hbWUJCQk9IGJmc19yZW5hbWUsCi19OwotCi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubykKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gY2hpbGQtJmd0O25hbWU7Ci0JaW50IG5hbWVsZW4gPSBjaGlsZC0mZ3Q7bGVuOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGJmc19kaXJlbnQgKmRlOwotCWludCBibG9jaywgc2Jsb2NrLCBlYmxvY2ssIG9mZiwgcG9zOwotCWludCBpOwotCi0JZHByaW50ZigmIzM0O25hbWU9JXMsIG5hbWVsZW49JWRcbiYjMzQ7LCBuYW1lLCBuYW1lbGVuKTsKLQotCXNibG9jayA9IEJGU19JKGRpciktJmd0O2lfc2Jsb2NrOwotCWVibG9jayA9IEJGU19JKGRpciktJmd0O2lfZWJsb2NrOwotCWZvciAoYmxvY2sgPSBzYmxvY2s7IGJsb2NrICZsdDs9IGVibG9jazsgYmxvY2smIzQzOyYjNDM7KSB7Ci0JCWJoID0gc2JfYnJlYWQoZGlyLSZndDtpX3NiLCBibG9jayk7Ci0JCWlmICghYmgpCi0JCQlyZXR1cm4gLUVJTzsKLQkJZm9yIChvZmYgPSAwOyBvZmYgJmx0OyBCRlNfQlNJWkU7IG9mZiAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFKSB7Ci0JCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZik7Ci0JCQlpZiAoIWRlLSZndDtpbm8pIHsKLQkJCQlwb3MgPSAoYmxvY2sgLSBzYmxvY2spICogQkZTX0JTSVpFICYjNDM7IG9mZjsKLQkJCQlpZiAocG9zICZndDs9IGRpci0mZ3Q7aV9zaXplKSB7Ci0JCQkJCWRpci0mZ3Q7aV9zaXplICYjNDM7PSBCRlNfRElSRU5UX1NJWkU7Ci0JCQkJCWlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7Ci0JCQkJfQotCQkJCWlub2RlX3NldF9tdGltZV90b190cyhkaXIsCi0JCQkJCQkgICAgICBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTsKLQkJCQltYXJrX2lub2RlX2RpcnR5KGRpcik7Ci0JCQkJZGUtJmd0O2lubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTsKLQkJCQlmb3IgKGkgPSAwOyBpICZsdDsgQkZTX05BTUVMRU47IGkmIzQzOyYjNDM7KQotCQkJCQlkZS0mZ3Q7bmFtZVtpXSA9Ci0JCQkJCQkoaSAmbHQ7IG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJCQkJJmFtcDtCRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCQkJYnJlbHNlKGJoKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQlicmVsc2UoYmgpOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKLQkJCQkJCQljb25zdCBjaGFyICpidWZmZXIpCi17Ci0JaWYgKChsZW4gJmx0OyBCRlNfTkFNRUxFTikgJmFtcDsmYW1wOyBidWZmZXJbbGVuXSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuICFtZW1jbXAobmFtZSwgYnVmZmVyLCBsZW4pOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCWNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwKLQkJCXN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2RpcikKLXsKLQl1bnNpZ25lZCBsb25nIGJsb2NrID0gMCwgb2Zmc2V0ID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKLQlzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGNoaWxkLSZndDtuYW1lOwotCWludCBuYW1lbGVuID0gY2hpbGQtJmd0O2xlbjsKLQotCSpyZXNfZGlyID0gTlVMTDsKLQlpZiAobmFtZWxlbiAmZ3Q7IEJGU19OQU1FTEVOKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlIChibG9jayAqIEJGU19CU0laRSAmIzQzOyBvZmZzZXQgJmx0OyBkaXItJmd0O2lfc2l6ZSkgewotCQlpZiAoIWJoKSB7Ci0JCQliaCA9IHNiX2JyZWFkKGRpci0mZ3Q7aV9zYiwgQkZTX0koZGlyKS0mZ3Q7aV9zYmxvY2sgJiM0MzsgYmxvY2spOwotCQkJaWYgKCFiaCkgewotCQkJCWJsb2NrJiM0MzsmIzQzOzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZnNldCk7Ci0JCW9mZnNldCAmIzQzOz0gQkZTX0RJUkVOVF9TSVpFOwotCQlpZiAobGUxNl90b19jcHUoZGUtJmd0O2lubykgJmFtcDsmYW1wOwotCQkJCWJmc19uYW1lY21wKG5hbWVsZW4sIG5hbWUsIGRlLSZndDtuYW1lKSkgewotCQkJKnJlc19kaXIgPSBkZTsKLQkJCXJldHVybiBiaDsKLQkJfQotCQlpZiAob2Zmc2V0ICZsdDsgYmgtJmd0O2Jfc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlicmVsc2UoYmgpOwotCQliaCA9IE5VTEw7Ci0JCW9mZnNldCA9IDA7Ci0JCWJsb2NrJiM0MzsmIzQzOzsKLQl9Ci0JYnJlbHNlKGJoKTsKLQlyZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzNkNmJkZTk5MmI4Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2ZzL2Jmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyMDMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICoJZnMvYmZzL2ZpbGUuYwotICoJQkZTIGZpbGUgb3BlcmF0aW9ucy4KLSAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsKLSAqCi0gKglNYWtlIHRoZSBmaWxlIGJsb2NrIGFsbG9jYXRpb24gYWxnb3JpdGhtIHVuZGVyc3RhbmQgdGhlIHNpemUKLSAqCW9mIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4KLSAqCUNvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgJmx0O2RtaXRyaS52b3JvYmlldkBnbWFpbC5jb20mZ3Q7Ci0gKgotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L21wYWdlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnVmZmVyX2hlYWQuaCZndDsKLSNpbmNsdWRlICYjMzQ7YmZzLmgmIzM0OwotCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGRwcmludGYoeC4uLikJcHJpbnRmKHgpCi0jZWxzZQotI2RlZmluZSBkcHJpbnRmKHguLi4pCi0jZW5kaWYKLQotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsgCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi19OwotCi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqbmV3OwotCi0JYmggPSBzYl9icmVhZChzYiwgZnJvbSk7Ci0JaWYgKCFiaCkKLQkJcmV0dXJuIC1FSU87Ci0JbmV3ID0gc2JfZ2V0YmxrKHNiLCB0byk7Ci0JbWVtY3B5KG5ldy0mZ3Q7Yl9kYXRhLCBiaC0mZ3Q7Yl9kYXRhLCBiaC0mZ3Q7Yl9zaXplKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShuZXcpOwotCWJmb3JnZXQoYmgpOwotCWJyZWxzZShuZXcpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHdoZXJlKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWRwcmludGYoJiMzNDslMDhseC0lMDhseC0mZ3Q7JTA4bHhcbiYjMzQ7LCBzdGFydCwgZW5kLCB3aGVyZSk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgJmx0Oz0gZW5kOyBpJiM0MzsmIzQzOykKLQkJaWYoYmZzX21vdmVfYmxvY2soaSwgd2hlcmUgJiM0MzsgaSwgc2IpKSB7Ci0JCQlkcHJpbnRmKCYjMzQ7ZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLSZndDsgJTA4bHhcbiYjMzQ7LCBpLAotCQkJCQkJCQl3aGVyZSAmIzQzOyBpKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGh5czsKLQlpbnQgZXJyOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpOwotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7Ci0KLQlwaHlzID0gYmktJmd0O2lfc2Jsb2NrICYjNDM7IGJsb2NrOwotCWlmICghY3JlYXRlKSB7Ci0JCWlmIChwaHlzICZsdDs9IGJpLSZndDtpX2VibG9jaykgewotCQkJZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA5bHggKGdyYW50ZWQpXG4mIzM0OywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCQltYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGUgZmlsZSBpcyBub3QgZW1wdHkgYW5kIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgd2l0aGluIHRoZQotCSAqIHJhbmdlIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZmlsZSwgd2UgY2FuIGdyYW50IGl0LgotCSAqLwotCWlmIChiaS0mZ3Q7aV9zYmxvY2sgJmFtcDsmYW1wOyAocGh5cyAmbHQ7PSBiaS0mZ3Q7aV9lYmxvY2spKSB7Ci0JCWRwcmludGYoJiMzNDtjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOGx4IChpbnRlcmltIGJsb2NrIGdyYW50ZWQpXG4mIzM0OywgCi0JCQkJY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCW1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuICovCi0JaWYgKHBoeXMgJmd0Oz0gaW5mby0mZ3Q7c2lfYmxvY2tzKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCS8qIFRoZSByZXN0IGhhcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpdHNlbGYuICovCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQotCS8qCi0JICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZAotCSAqIGJsb2NrLCB3ZSBjYW4gZXh0ZW5kIHRoZSBmaWxlIHRyaXZpYWxseSwgd2l0aG91dCBtb3ZpbmcgaXQKLQkgKiBhbnl3aGVyZS4KLQkgKi8KLQlpZiAoYmktJmd0O2lfZWJsb2NrID09IGluZm8tJmd0O3NpX2xmX2VibGspIHsKLQkJZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXG4mIzM0OywgCi0JCQkJY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JCW1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTsKLQkJaW5mby0mZ3Q7c2lfZnJlZWIgLT0gcGh5cyAtIGJpLSZndDtpX2VibG9jazsKLQkJaW5mby0mZ3Q7c2lfbGZfZWJsayA9IGJpLSZndDtpX2VibG9jayA9IHBoeXM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQllcnIgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBPaywgd2UgaGF2ZSB0byBtb3ZlIHRoaXMgZW50aXJlIGZpbGUgdG8gdGhlIG5leHQgZnJlZSBibG9jay4gKi8KLQlwaHlzID0gaW5mby0mZ3Q7c2lfbGZfZWJsayAmIzQzOyAxOwotCWlmIChwaHlzICYjNDM7IGJsb2NrICZndDs9IGluZm8tJmd0O3NpX2Jsb2NrcykgewotCQllcnIgPSAtRU5PU1BDOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYmktJmd0O2lfc2Jsb2NrKSB7Ci0JCWVyciA9IGJmc19tb3ZlX2Jsb2Nrcyhpbm9kZS0mZ3Q7aV9zYiwgYmktJmd0O2lfc2Jsb2NrLCAKLQkJCQkJCWJpLSZndDtpX2VibG9jaywgcGh5cyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGYoJiMzNDtmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLSZndDsgZnMgY29ycnVwdGlvblxuJiMzNDssCi0JCQkJCQkJCWlub2RlLSZndDtpX2lubyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZQotCQllcnIgPSAwOwotCi0JZHByaW50ZigmIzM0O2M9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKG1vdmVkKVxuJiMzNDssCi0gICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7Ci0JYmktJmd0O2lfc2Jsb2NrID0gcGh5czsKLQlwaHlzICYjNDM7PSBibG9jazsKLQlpbmZvLSZndDtzaV9sZl9lYmxrID0gYmktJmd0O2lfZWJsb2NrID0gcGh5czsKLQotCS8qCi0JICogVGhpcyBhc3N1bWVzIG5vdGhpbmcgY2FuIHdyaXRlIHRoZSBpbm9kZSBiYWNrIHdoaWxlIHdlIGFyZSBoZXJlCi0JICogYW5kIHRodXMgdXBkYXRlIGlub2RlLSZndDtpX2Jsb2NrcyEgKFhYWCkKLQkgKi8KLQlpbmZvLSZndDtzaV9mcmVlYiAtPSBiaS0mZ3Q7aV9lYmxvY2sgLSBiaS0mZ3Q7aV9zYmxvY2sgJiM0MzsgMSAtIGlub2RlLSZndDtpX2Jsb2NrczsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQltYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQotewotCXJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJmc193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKLQotCWlmICh0byAmZ3Q7IGlub2RlLSZndDtpX3NpemUpCi0JCXRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKLQkJCSAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJICAgc3RydWN0IGZvbGlvICoqZm9saW9wLCB2b2lkICoqZnNkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBiZnNfZ2V0X2Jsb2NrKTsKLQlpZiAodW5saWtlbHkocmV0KSkKLQkJYmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgJiM0MzsgbGVuKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzZWN0b3JfdCBiZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgYmZzX2dldF9ibG9jayk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHMgPSB7Ci0JLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCi0JLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gYmZzX3JlYWRfZm9saW8sCi0JLndyaXRlcGFnZXMJPSBiZnNfd3JpdGVwYWdlcywKLQkud3JpdGVfYmVnaW4JPSBiZnNfd3JpdGVfYmVnaW4sCi0JLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAotCS5taWdyYXRlX2ZvbGlvCT0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCi0JLmJtYXAJCT0gYmZzX2JtYXAsCi19OwotCi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9pbm9wczsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZTNhODQ4YjRlZmQuLjAwMDAwMDAwMDAwMDAKLS0tIGEvZnMvYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw1MzggJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKglmcy9iZnMvaW5vZGUuYwotICoJQkZTIHN1cGVyYmxvY2sgYW5kIGlub2RlIG9wZXJhdGlvbnMuCi0gKglDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gJmx0O2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb20mZ3Q7Ci0gKglGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuCi0gKglNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCAmbHQ7YWRzQHdvbXBvbS5vcmcmZ3Q7LCAyMDA1LgotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3Zmcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mc19jb250ZXh0LmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2Jmcy5oJiMzNDsKLQotTU9EVUxFX0FVVEhPUigmIzM0O1RpZ3JhbiBBaXZhemlhbiAmbHQ7YWl2YXppYW4udGlncmFuQGdtYWlsLmNvbSZndDsmIzM0Oyk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtTQ08gVW5peFdhcmUgQkZTIGZpbGVzeXN0ZW0gZm9yIExpbnV4JiMzNDspOwotTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KLSN1bmRlZiBERUJVRwotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgZHByaW50Zih4Li4uKQlwcmludGYoeCkKLSNlbHNlCi0jZGVmaW5lIGRwcmludGYoeC4uLikKLSNlbmRpZgotCi1zdHJ1Y3QgaW5vZGUgKmJmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQotewotCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgYmxvY2ssIG9mZjsKLQotCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX05FVykpCi0JCXJldHVybiBpbm9kZTsKLQotCWlmICgoaW5vICZsdDsgQkZTX1JPT1RfSU5PKSB8fCAoaW5vICZndDsgQkZTX1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c2lfbGFzdGkpKSB7Ci0JCXByaW50ZigmIzM0O0JhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcbiYjMzQ7LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTsKLQliaCA9IHNiX2JyZWFkKGlub2RlLSZndDtpX3NiLCBibG9jayk7Ci0JaWYgKCFiaCkgewotCQlwcmludGYoJiMzNDtVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxuJiMzNDssIGlub2RlLSZndDtpX3NiLSZndDtzX2lkLAotCQkJCQkJCQkJaW5vKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlvZmYgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOwotCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZjsKLQotCS8qCi0JICogaHR0cHM6Ly9tYXJ0aW4uaGlubmVyLmluZm8vZnMvYmZzL2Jmcy1zdHJ1Y3R1cmUuaHRtbCBleHBsYWlucyB0aGF0Ci0JICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLSZndDtpX21vZGUKLQkgKiB2YWx1ZS4gVGhpcyBtZWFucyB0aGF0LCBhbHRob3VnaCBiZnNfd3JpdGVfaW5vZGUoKSBzYXZlcyB3aG9sZQotCSAqIGlub2RlLSZndDtpX21vZGUgYml0cyAod2hpY2ggaW5jbHVkZSBTX0lGTVQgYml0cyBhbmQgU19JU3tVSUQsR0lELFZUWH0KLQkgKiBiaXRzKSwgbWlkZGxlIDcgYml0cyBvZiBkaS0mZ3Q7aV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2UKLQkgKiBiaXRzIHdlcmUgbm90IHNhdmVkIGJ5IGJmc193cml0ZV9pbm9kZSgpLgotCSAqIFNpbmNlIHdlIGNhbiYjMzk7dCB0ZWxsIHdoZXRoZXIgbWlkZGxlIDcgYml0cyBhcmUgZ2FyYmFnZSwgdXNlIG9ubHkKLQkgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmcKLQkgKiBnYXJiYWdlKSBhbmQgcmVjb25zdHJ1Y3QgU19JRk1UIGJpdHMgZm9yIExpbnV4IGVudmlyb25tZW50IGZyb20KLQkgKiBkaS0mZ3Q7aV92dHlwZSB2YWx1ZS4KLQkgKi8KLQlpbm9kZS0mZ3Q7aV9tb2RlID0gMHgwMDAwMEZGRiAmYW1wOyBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9tb2RlKTsKLQlpZiAobGUzMl90b19jcHUoZGktJmd0O2lfdnR5cGUpID09IEJGU19WRElSKSB7Ci0JCWlub2RlLSZndDtpX21vZGUgfD0gU19JRkRJUjsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19kaXJfaW5vcHM7Ci0JCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7YmZzX2Rpcl9vcGVyYXRpb25zOwotCX0gZWxzZSBpZiAobGUzMl90b19jcHUoZGktJmd0O2lfdnR5cGUpID09IEJGU19WUkVHKSB7Ci0JCWlub2RlLSZndDtpX21vZGUgfD0gU19JRlJFRzsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2Jmc19maWxlX2lub3BzOwotCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2Jmc19maWxlX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtiZnNfYW9wczsKLQl9IGVsc2UgewotCQlicmVsc2UoYmgpOwotCQlwcmludGYoJiMzNDtVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XG4mIzM0OywKLQkJICAgICAgIGxlMzJfdG9fY3B1KGRpLSZndDtpX3Z0eXBlKSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlubyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JQkZTX0koaW5vZGUpLSZndDtpX3NibG9jayA9ICBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9zYmxvY2spOwotCUJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2sgPSAgbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQlCRlNfSShpbm9kZSktJmd0O2lfZHNrX2lubyA9IGxlMTZfdG9fY3B1KGRpLSZndDtpX2lubyk7Ci0JaV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLSZndDtpX3VpZCkpOwotCWlfZ2lkX3dyaXRlKGlub2RlLCAgbGUzMl90b19jcHUoZGktJmd0O2lfZ2lkKSk7Ci0Jc2V0X25saW5rKGlub2RlLCBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9ubGluaykpOwotCWlub2RlLSZndDtpX3NpemUgPSBCRlNfRklMRVNJWkUoZGkpOwotCWlub2RlLSZndDtpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTsKLQlpbm9kZV9zZXRfYXRpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLSZndDtpX2F0aW1lKSwgMCk7Ci0JaW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS0mZ3Q7aV9tdGltZSksIDApOwotCWlub2RlX3NldF9jdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktJmd0O2lfY3RpbWUpLCAwKTsKLQotCWJyZWxzZShiaCk7Ci0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JcmV0dXJuIGlub2RlOwotCi1lcnJvcjoKLQlpZ2V0X2ZhaWxlZChpbm9kZSk7Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmZzX2lub2RlICpmaW5kX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKnApCi17Ci0JaWYgKChpbm8gJmx0OyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gJmd0OyBCRlNfU0Ioc2IpLSZndDtzaV9sYXN0aSkpIHsKLQkJcHJpbnRmKCYjMzQ7QmFkIGlub2RlIG51bWJlciAlczolMDh4XG4mIzM0Oywgc2ItJmd0O3NfaWQsIGlubyk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCX0KLQotCWlubyAtPSBCRlNfUk9PVF9JTk87Ci0KLQkqcCA9IHNiX2JyZWFkKHNiLCAxICYjNDM7IGlubyAvIEJGU19JTk9ERVNfUEVSX0JMT0NLKTsKLQlpZiAoISpwKSB7Ci0JCXByaW50ZigmIzM0O1VuYWJsZSB0byByZWFkIGlub2RlICVzOiUwOHhcbiYjMzQ7LCBzYi0mZ3Q7c19pZCwgaW5vKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci0JfQotCi0JcmV0dXJuIChzdHJ1Y3QgYmZzX2lub2RlICopKCpwKS0mZ3Q7Yl9kYXRhICYjNDM7ICBpbm8gJSBCRlNfSU5PREVTX1BFUl9CTE9DSzsKLX0KLQotc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCi17Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLSZndDtpX3NiKTsKLQl1bnNpZ25lZCBpbnQgaW5vID0gKHUxNilpbm9kZS0mZ3Q7aV9pbm87Ci0JdW5zaWduZWQgbG9uZyBpX3NibG9jazsKLQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JZHByaW50ZigmIzM0O2lubz0lMDh4XG4mIzM0OywgaW5vKTsKLQotCWRpID0gZmluZF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vLCAmYW1wO2JoKTsKLQlpZiAoSVNfRVJSKGRpKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGkpOwotCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQotCWlmIChpbm8gPT0gQkZTX1JPT1RfSU5PKQotCQlkaS0mZ3Q7aV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WRElSKTsKLQllbHNlCi0JCWRpLSZndDtpX3Z0eXBlID0gY3B1X3RvX2xlMzIoQkZTX1ZSRUcpOwotCi0JZGktJmd0O2lfaW5vID0gY3B1X3RvX2xlMTYoaW5vKTsKLQlkaS0mZ3Q7aV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtJmd0O2lfbW9kZSk7Ci0JZGktJmd0O2lfdWlkID0gY3B1X3RvX2xlMzIoaV91aWRfcmVhZChpbm9kZSkpOwotCWRpLSZndDtpX2dpZCA9IGNwdV90b19sZTMyKGlfZ2lkX3JlYWQoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLSZndDtpX25saW5rKTsKLQlkaS0mZ3Q7aV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9hdGltZV9zZWMoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9tdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9tdGltZV9zZWMoaW5vZGUpKTsKLQlkaS0mZ3Q7aV9jdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9jdGltZV9zZWMoaW5vZGUpKTsKLQlpX3NibG9jayA9IEJGU19JKGlub2RlKS0mZ3Q7aV9zYmxvY2s7Ci0JZGktJmd0O2lfc2Jsb2NrID0gY3B1X3RvX2xlMzIoaV9zYmxvY2spOwotCWRpLSZndDtpX2VibG9jayA9IGNwdV90b19sZTMyKEJGU19JKGlub2RlKS0mZ3Q7aV9lYmxvY2spOwotCWRpLSZndDtpX2VvZmZzZXQgPSBjcHVfdG9fbGUzMihpX3NibG9jayAqIEJGU19CU0laRSAmIzQzOyBpbm9kZS0mZ3Q7aV9zaXplIC0gMSk7Ci0KLQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JYnJlbHNlKGJoKTsKLQltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Jc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKLXsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JZGkgPSBmaW5kX2lub2RlKGlub2RlLSZndDtpX3NiLCAodTE2KWlub2RlLSZndDtpX2lubywgJmFtcDtiaCk7Ci0JaWYgKElTX0VSUihkaSkpCi0JCXJldHVybiBQVFJfRVJSKGRpKTsKLQotCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0JZXJyID0gbW1iX3N5bmMoJmFtcDtCRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLW91dDoKLQlicmVsc2UoYmgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtJmd0O2lfaW5vOwotCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gaW5vZGUtJmd0O2lfc2I7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpOwotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBCRlNfSShpbm9kZSk7Ci0KLQlkcHJpbnRmKCYjMzQ7aW5vPSUwOGx4XG4mIzM0OywgaW5vKTsKLQotCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKCZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7Ci0JaWYgKGlub2RlLSZndDtpX25saW5rKQotCQltbWJfc3luYygmYW1wO0JGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9pbnZhbGlkYXRlKCZhbXA7QkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwotCi0JaWYgKGlub2RlLSZndDtpX25saW5rKQotCQlyZXR1cm47Ci0KLQlkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKLQlpZiAoSVNfRVJSKGRpKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKLQkvKiBjbGVhciBvbi1kaXNrIGlub2RlICovCi0JbWVtc2V0KGRpLCAwLCBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpOwotCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlicmVsc2UoYmgpOwotCi0JaWYgKGJpLSZndDtpX2Rza19pbm8pIHsKLQkJaWYgKGJpLSZndDtpX3NibG9jaykKLQkJCWluZm8tJmd0O3NpX2ZyZWViICYjNDM7PSBiaS0mZ3Q7aV9lYmxvY2sgJiM0MzsgMSAtIGJpLSZndDtpX3NibG9jazsKLQkJaW5mby0mZ3Q7c2lfZnJlZWkmIzQzOyYjNDM7OwotCQljbGVhcl9iaXQoaW5vLCBpbmZvLSZndDtzaV9pbWFwKTsKLQkJYmZzX2R1bXBfaW1hcCgmIzM0O2V2aWN0X2lub2RlJiMzNDssIHMpOwotCX0KLQotCS8qCi0JICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgZmlsZSwgbWFrZSB0aGUgcHJldmlvdXMgYmxvY2sKLQkgKiAmIzM0O2xhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZSYjMzQ7IGV2ZW4gaWYgdGhlcmUgaXMgbm8KLQkgKiByZWFsIGZpbGUgdGhlcmUsIHNhdmVzIHVzIDEgZ2FwLgotCSAqLwotCWlmIChpbmZvLSZndDtzaV9sZl9lYmxrID09IGJpLSZndDtpX2VibG9jaykKLQkJaW5mby0mZ3Q7c2lfbGZfZWJsayA9IGJpLSZndDtpX3NibG9jayAtIDE7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKLXsKLQlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7Ci0KLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQotCW11dGV4X2Rlc3Ryb3koJmFtcDtpbmZvLSZndDtiZnNfbG9jayk7Ci0Ja2ZyZWUoaW5mbyk7Ci0Jcy0mZ3Q7c19mc19pbmZvID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBkZW50cnktJmd0O2Rfc2I7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpOwotCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLSZndDtzX2JkZXYtJmd0O2JkX2Rldik7Ci0JYnVmLSZndDtmX3R5cGUgPSBCRlNfTUFHSUM7Ci0JYnVmLSZndDtmX2JzaXplID0gcy0mZ3Q7c19ibG9ja3NpemU7Ci0JYnVmLSZndDtmX2Jsb2NrcyA9IGluZm8tJmd0O3NpX2Jsb2NrczsKLQlidWYtJmd0O2ZfYmZyZWUgPSBidWYtJmd0O2ZfYmF2YWlsID0gaW5mby0mZ3Q7c2lfZnJlZWI7Ci0JYnVmLSZndDtmX2ZpbGVzID0gaW5mby0mZ3Q7c2lfbGFzdGkgJiM0MzsgMSAtIEJGU19ST09UX0lOTzsKLQlidWYtJmd0O2ZfZmZyZWUgPSBpbmZvLSZndDtzaV9mcmVlaTsKLQlidWYtJmd0O2ZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTsKLQlidWYtJmd0O2ZfbmFtZWxlbiA9IEJGU19OQU1FTEVOOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJmc19pbm9kZV9jYWNoZXA7Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7Ci0JYmkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaSkKLQkJcmV0dXJuIE5VTEw7Ci0JbW1iX2luaXQoJmFtcDtiaS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7YmktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwotCi0JcmV0dXJuICZhbXA7YmktJmd0O3Zmc19pbm9kZTsKLX0KLQotc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKLXsKLQlzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vOwotCi0JaW5vZGVfaW5pdF9vbmNlKCZhbXA7YmktJmd0O3Zmc19pbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5vZGVjYWNoZSh2b2lkKQotewotCWJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgmIzM0O2Jmc19pbm9kZV9jYWNoZSYjMzQ7LAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKLQkJCQkJCVNMQUJfQUNDT1VOVCksCi0JCQkJCSAgICAgaW5pdF9vbmNlKTsKLQlpZiAoYmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCi17Ci0JLyoKLQkgKiBNYWtlIHN1cmUgYWxsIGRlbGF5ZWQgcmN1IGZyZWUgaW5vZGVzIGFyZSBmbHVzaGVkIGJlZm9yZSB3ZQotCSAqIGRlc3Ryb3kgY2FjaGUuCi0JICovCi0JcmN1X2JhcnJpZXIoKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koYmZzX2lub2RlX2NhY2hlcCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHsKLQkuYWxsb2NfaW5vZGUJPSBiZnNfYWxsb2NfaW5vZGUsCi0JLmZyZWVfaW5vZGUJPSBiZnNfZnJlZV9pbm9kZSwKLQkud3JpdGVfaW5vZGUJPSBiZnNfd3JpdGVfaW5vZGUsCi0JLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSwKLQkuZXZpY3RfaW5vZGUJPSBiZnNfZXZpY3RfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IGJmc19wdXRfc3VwZXIsCi0JLnN0YXRmcwkJPSBiZnNfc3RhdGZzLAotfTsKLQotdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotI2lmZGVmIERFQlVHCi0JaW50IGk7Ci0JY2hhciAqdG1wYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCF0bXBidWYpCi0JCXJldHVybjsKLQlmb3IgKGkgPSBCRlNfU0IocyktJmd0O3NpX2xhc3RpOyBpICZndDs9IDA7IGktLSkgewotCQlpZiAoaSAmZ3Q7IFBBR0VfU0laRSAtIDEwMCkgYnJlYWs7Ci0JCWlmICh0ZXN0X2JpdChpLCBCRlNfU0IocyktJmd0O3NpX2ltYXApKQotCQkJc3RyY2F0KHRtcGJ1ZiwgJiMzNDsxJiMzNDspOwotCQllbHNlCi0JCQlzdHJjYXQodG1wYnVmLCAmIzM0OzAmIzM0Oyk7Ci0JfQotCXByaW50ZigmIzM0OyVzOiBsYXN0aT0lMDhseCAmbHQ7JXMmZ3Q7XG4mIzM0OywgcHJlZml4LCBCRlNfU0IocyktJmd0O3NpX2xhc3RpLCB0bXBidWYpOwotCWtmcmVlKHRtcGJ1Zik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBiZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqc2JoOwotCXN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKmJmc19zYjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXVuc2lnbmVkIGk7Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvOwotCWludCByZXQgPSAtRUlOVkFMOwotCXVuc2lnbmVkIGxvbmcgaV9zYmxvY2ssIGlfZWJsb2NrLCBpX2VvZmYsIHNfc2l6ZTsKLQlpbnQgc2lsZW50ID0gZmMtJmd0O3NiX2ZsYWdzICZhbXA7IFNCX1NJTEVOVDsKLQotCWluZm8gPSBremFsbG9jX29iaigqaW5mbyk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQltdXRleF9pbml0KCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCXMtJmd0O3NfZnNfaW5mbyA9IGluZm87Ci0Jcy0mZ3Q7c190aW1lX21pbiA9IDA7Ci0Jcy0mZ3Q7c190aW1lX21heCA9IFUzMl9NQVg7Ci0KLQlpZiAoIXNiX3NldF9ibG9ja3NpemUocywgQkZTX0JTSVpFKSkKLQkJZ290byBvdXQ7Ci0KLQlzYmggPSBzYl9icmVhZChzLCAwKTsKLQlpZiAoIXNiaCkKLQkJZ290byBvdXQ7Ci0JYmZzX3NiID0gKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKilzYmgtJmd0O2JfZGF0YTsKLQlpZiAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX21hZ2ljKSAhPSBCRlNfTUFHSUMpIHsKLQkJaWYgKCFzaWxlbnQpCi0JCQlwcmludGYoJiMzNDtObyBCRlMgZmlsZXN5c3RlbSBvbiAlcyAobWFnaWM9JTA4eClcbiYjMzQ7LCBzLSZndDtzX2lkLCAgbGUzMl90b19jcHUoYmZzX3NiLSZndDtzX21hZ2ljKSk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0JaWYgKEJGU19VTkNMRUFOKGJmc19zYiwgcykgJmFtcDsmYW1wOyAhc2lsZW50KQotCQlwcmludGYoJiMzNDslcyBpcyB1bmNsZWFuLCBjb250aW51aW5nXG4mIzM0Oywgcy0mZ3Q7c19pZCk7Ci0KLQlzLSZndDtzX21hZ2ljID0gQkZTX01BR0lDOwotCi0JaWYgKGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkgJmd0OyBsZTMyX3RvX2NwdShiZnNfc2ItJmd0O3NfZW5kKSB8fAotCSAgICBsZTMyX3RvX2NwdShiZnNfc2ItJmd0O3Nfc3RhcnQpICZsdDsgc2l6ZW9mKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2spICYjNDM7IHNpemVvZihzdHJ1Y3QgYmZzX2RpcmVudCkpIHsKLQkJcHJpbnRmKCYjMzQ7U3VwZXJibG9jayBpcyBjb3JydXB0ZWQgb24gJXNcbiYjMzQ7LCBzLSZndDtzX2lkKTsKLQkJZ290byBvdXQxOwotCX0KLQotCWluZm8tJmd0O3NpX2xhc3RpID0gKGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkgLSBCRlNfQlNJWkUpIC8gc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGUpICYjNDM7IEJGU19ST09UX0lOTyAtIDE7Ci0JaWYgKGluZm8tJmd0O3NpX2xhc3RpID09IEJGU19NQVhfTEFTVEkpCi0JCXByaW50ZigmIzM0O05PVEU6IGZpbGVzeXN0ZW0gJXMgd2FzIGNyZWF0ZWQgd2l0aCA1MTIgaW5vZGVzLCB0aGUgcmVhbCBtYXhpbXVtIGlzIDUxMSwgbW91bnRpbmcgYW55d2F5XG4mIzM0Oywgcy0mZ3Q7c19pZCk7Ci0JZWxzZSBpZiAoaW5mby0mZ3Q7c2lfbGFzdGkgJmd0OyBCRlNfTUFYX0xBU1RJKSB7Ci0JCXByaW50ZigmIzM0O0ltcG9zc2libGUgbGFzdCBpbm9kZSBudW1iZXIgJWx1ICZndDsgJWQgb24gJXNcbiYjMzQ7LCBpbmZvLSZndDtzaV9sYXN0aSwgQkZTX01BWF9MQVNUSSwgcy0mZ3Q7c19pZCk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0JZm9yIChpID0gMDsgaSAmbHQ7IEJGU19ST09UX0lOTzsgaSYjNDM7JiM0MzspCi0JCXNldF9iaXQoaSwgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0KLQlzLSZndDtzX29wID0gJmFtcDtiZnNfc29wczsKLQlpbm9kZSA9IGJmc19pZ2V0KHMsIEJGU19ST09UX0lOTyk7Ci0JaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihpbm9kZSk7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0Jcy0mZ3Q7c19yb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpOwotCWlmICghcy0mZ3Q7c19yb290KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0MTsKLQl9Ci0KLQlpbmZvLSZndDtzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCkgJiM0MzsgMSkgJmd0OyZndDsgQkZTX0JTSVpFX0JJVFM7Ci0JaW5mby0mZ3Q7c2lfZnJlZWIgPSAobGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCkgJiM0MzsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi0mZ3Q7c19zdGFydCkpICZndDsmZ3Q7IEJGU19CU0laRV9CSVRTOwotCWluZm8tJmd0O3NpX2ZyZWVpID0gMDsKLQlpbmZvLSZndDtzaV9sZl9lYmxrID0gMDsKLQotCS8qIGNhbiB3ZSByZWFkIHRoZSBsYXN0IGJsb2NrPyAqLwotCWJoID0gc2JfYnJlYWQocywgaW5mby0mZ3Q7c2lfYmxvY2tzIC0gMSk7Ci0JaWYgKCFiaCkgewotCQlwcmludGYoJiMzNDtMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxuJiMzNDssIHMtJmd0O3NfaWQsIGluZm8tJmd0O3NpX2Jsb2NrcyAtIDEpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDI7Ci0JfQotCWJyZWxzZShiaCk7Ci0KLQliaCA9IE5VTEw7Ci0JZm9yIChpID0gQkZTX1JPT1RfSU5POyBpICZsdDs9IGluZm8tJmd0O3NpX2xhc3RpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKLQkJaW50IGJsb2NrID0gKGkgLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgJiM0MzsgMTsKLQkJaW50IG9mZiA9IChpIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOwotCQl1bnNpZ25lZCBsb25nIGVibG9jazsKLQotCQlpZiAoIW9mZikgewotCQkJYnJlbHNlKGJoKTsKLQkJCWJoID0gc2JfYnJlYWQocywgYmxvY2spOwotCQl9Ci0KLQkJaWYgKCFiaCkKLQkJCWNvbnRpbnVlOwotCi0JCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IG9mZjsKLQotCQkvKiB0ZXN0IGlmIGZpbGVzeXN0ZW0gaXMgbm90IGNvcnJ1cHRlZCAqLwotCi0JCWlfZW9mZiA9IGxlMzJfdG9fY3B1KGRpLSZndDtpX2VvZmZzZXQpOwotCQlpX3NibG9jayA9IGxlMzJfdG9fY3B1KGRpLSZndDtpX3NibG9jayk7Ci0JCWlfZWJsb2NrID0gbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQkJc19zaXplID0gbGUzMl90b19jcHUoYmZzX3NiLSZndDtzX2VuZCk7Ci0KLQkJaWYgKGlfc2Jsb2NrICZndDsgaW5mby0mZ3Q7c2lfYmxvY2tzIHx8Ci0JCQlpX2VibG9jayAmZ3Q7IGluZm8tJmd0O3NpX2Jsb2NrcyB8fAotCQkJaV9zYmxvY2sgJmd0OyBpX2VibG9jayB8fAotCQkJKGlfZW9mZiAhPSBsZTMyX3RvX2NwdSgtMSkgJmFtcDsmYW1wOyBpX2VvZmYgJmd0OyBzX3NpemUpIHx8Ci0JCQlpX3NibG9jayAqIEJGU19CU0laRSAmZ3Q7IGlfZW9mZikgewotCi0JCQlwcmludGYoJiMzNDtJbm9kZSAweCUwOHggY29ycnVwdGVkIG9uICVzXG4mIzM0OywgaSwgcy0mZ3Q7c19pZCk7Ci0KLQkJCWJyZWxzZShiaCk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQyOwotCQl9Ci0KLQkJaWYgKCFkaS0mZ3Q7aV9pbm8pIHsKLQkJCWluZm8tJmd0O3NpX2ZyZWVpJiM0MzsmIzQzOzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNldF9iaXQoaSwgaW5mby0mZ3Q7c2lfaW1hcCk7Ci0JCWluZm8tJmd0O3NpX2ZyZWViIC09IEJGU19GSUxFQkxPQ0tTKGRpKTsKLQotCQllYmxvY2sgPSAgbGUzMl90b19jcHUoZGktJmd0O2lfZWJsb2NrKTsKLQkJaWYgKGVibG9jayAmZ3Q7IGluZm8tJmd0O3NpX2xmX2VibGspCi0JCQlpbmZvLSZndDtzaV9sZl9lYmxrID0gZWJsb2NrOwotCX0KLQlicmVsc2UoYmgpOwotCWJyZWxzZShzYmgpOwotCWJmc19kdW1wX2ltYXAoJiMzNDtmaWxsX3N1cGVyJiMzNDssIHMpOwotCXJldHVybiAwOwotCi1vdXQyOgotCWRwdXQocy0mZ3Q7c19yb290KTsKLQlzLSZndDtzX3Jvb3QgPSBOVUxMOwotb3V0MToKLQlicmVsc2Uoc2JoKTsKLW91dDoKLQltdXRleF9kZXN0cm95KCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwotCWtmcmVlKGluZm8pOwotCXMtJmd0O3NfZnNfaW5mbyA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQotewotCXJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHsKLQkuZ2V0X3RyZWUgPSBiZnNfZ2V0X3RyZWUsCi19OwotCi1zdGF0aWMgaW50IGJmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKQotewotCWZjLSZndDtvcHMgPSAmYW1wO2Jmc19jb250ZXh0X29wczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gJiMzNDtiZnMmIzM0OywKLQkuaW5pdF9mc19jb250ZXh0CT0gYmZzX2luaXRfZnNfY29udGV4dCwKLQkua2lsbF9zYgkJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwkJPSBGU19SRVFVSVJFU19ERVYsCi19OwotTU9EVUxFX0FMSUFTX0ZTKCYjMzQ7YmZzJiMzNDspOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2Jmc19mcyh2b2lkKQotewotCWludCBlcnIgPSBpbml0X2lub2RlY2FjaGUoKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDE7Ci0JZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO2Jmc19mc190eXBlKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLW91dDoKLQlkZXN0cm95X2lub2RlY2FjaGUoKTsKLW91dDE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfYmZzX2ZzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7YmZzX2ZzX3R5cGUpOwotCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2Jmc19mcykKLW1vZHVsZV9leGl0KGV4aXRfYmZzX2ZzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwppbmRleCA2MGMyYzU0NGRiNmE0Li41MjU0NDUxMmVkYzc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYwpAQCAtMTcsNyAmIzQzOzE3LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtub3duX2ZzW10gPSB7CiAJJiMzNDs5cCYjMzQ7LCAmIzM0O2FkZnMmIzM0OywgJiMzNDthZmZzJiMzNDssICYjMzQ7YWZzJiMzNDssICYjMzQ7YWlvJiMzNDssICYjMzQ7YW5vbl9pbm9kZWZzJiMzNDssICYjMzQ7YXBwYXJtb3JmcyYjMzQ7LAotCSYjMzQ7YXV0b2ZzJiMzNDssICYjMzQ7YmNhY2hlZnMmIzM0OywgJiMzNDtiZGV2JiMzNDssICYjMzQ7YmVmcyYjMzQ7LCAmIzM0O2JmcyYjMzQ7LCAmIzM0O2JpbmRlciYjMzQ7LCAmIzM0O2JpbmZtdF9taXNjJiMzNDssCiYjNDM7CSYjMzQ7YXV0b2ZzJiMzNDssICYjMzQ7YmNhY2hlZnMmIzM0OywgJiMzNDtiZGV2JiMzNDssICYjMzQ7YmVmcyYjMzQ7LCAmIzM0O2JpbmRlciYjMzQ7LCAmIzM0O2JpbmZtdF9taXNjJiMzNDssCiAJJiMzNDticGYmIzM0OywgJiMzNDtidHJmcyYjMzQ7LCAmIzM0O2J0cmZzX3Rlc3RfZnMmIzM0OywgJiMzNDtjZXBoJiMzNDssICYjMzQ7Y2dyb3VwJiMzNDssICYjMzQ7Y2dyb3VwMiYjMzQ7LCAmIzM0O2NpZnMmIzM0OywKIAkmIzM0O2NvZGEmIzM0OywgJiMzNDtjb25maWdmcyYjMzQ7LCAmIzM0O2NwdXNldCYjMzQ7LCAmIzM0O2NyYW1mcyYjMzQ7LCAmIzM0O2N4bCYjMzQ7LCAmIzM0O2RheCYjMzQ7LCAmIzM0O2RlYnVnZnMmIzM0OywKIAkmIzM0O2RldnB0cyYjMzQ7LCAmIzM0O2RldnRtcGZzJiMzNDssICYjMzQ7ZG1hYnVmJiMzNDssICYjMzQ7ZHJtJiMzNDssICYjMzQ7ZWNyeXB0ZnMmIzM0OywgJiMzNDtlZml2YXJmcyYjMzQ7LCAmIzM0O2VmcyYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMxMwoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCRlMgRmlsZXN5c3RlbSBSZW1vdmFsIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uZS4gVGhleSYjMzk7cmUgcmlwcGluZyBvdXQgdGhlIEJGUyBmaWxlc3lzdGVtIGZyb20gdGhlIExpbnV4IGtlcm5lbCBjb21wbGV0ZWx5LiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0JiMzOTtzIHByZXR0eSB0aG9yb3VnaC4gV2UmIzM5O3ZlIGdvdDoKCiogICBgQ1JFRElUU2AgdXBkYXRlZCB3aXRoIGF1dGhvciBlbWFpbC4gRmluZS4KKiAgIERvY3VtZW50YXRpb24gdXBkYXRlZCBhbmQsIGluIHNvbWUgY2FzZXMsIGRlbGV0ZWQuIFRoYXQmIzM5O3MgZXhwZWN0ZWQgZm9yIGEgZGVwcmVjYXRlZCBmaWxlc3lzdGVtLgoqICAgYE1BSU5UQUlORVJTYCB1cGRhdGVkIOKAkyBCRlMgc2VjdGlvbiBnb25lLiBNYWtlcyBzZW5zZS4KKiAgIEFyY2gtc3BlY2lmaWMgY29uZmlncyBnZXR0aW5nIHRoZSBgQ09ORklHX0JGU19GU2Agb3B0aW9uIHJlbW92ZWQuIFN0YW5kYXJkLgoqICAgVGhlIGBmcy9LY29uZmlnYCBhbmQgYGZzL01ha2VmaWxlYCBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byByZW1vdmUgYW55IHRyYWNlIG9mIEJGUy4gRXNzZW50aWFsIGZvciBhIGNsZWFuIHJlbW92YWwuCiogICBUaGUgYGZzL2Jmcy9gIGRpcmVjdG9yeSBpdHNlbGYsIHRoZSAqYWN0dWFsIGZpbGVzeXN0ZW0gY29kZSosIGlzIGdvbmUuIEV2ZXJ5dGhpbmcuIGBLY29uZmlnYCwgYE1ha2VmaWxlYCwgdGhlIGAuY2AgZmlsZXMsIHRoZSBgLmhgLi4uIGl0JiMzOTtzIGFsbCBkZWxldGVkLiBHb29kLgoqICAgVGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY2AgZmlsZSBpcyByZW1vdmluZyByZWZlcmVuY2VzIHRvICYjMzQ7YmZzJiMzNDsuIFJpZ2h0LgoKU28sIHRoZSBjb3JlIG9mIHRoZSBjaGVjayBpczogaXMgdGhlcmUgYW55IGV4ZWN1dGFibGUgY29kZSAqbGVmdCo/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIG5vLiBBbGwgdGhlIGZpbGVzeXN0ZW0gY29kZSBpcyBkZWxldGVkLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgY29uZmlndXJhdGlvbiB0d2Vha3MsIGRvY3VtZW50YXRpb24gdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IGNsZWFudXAuIE5vbmUgb2YgdGhhdCBpcyAqZXhlY3V0YWJsZSoga2VybmVsIGNvZGUuIFRoZSBwYXRjaCBpcyBwdXJlbHkgZGVzdHJ1Y3RpdmUgaW4gdGVybXMgb2YgY29kZSBwcmVzZW5jZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGNvcnJlY3RseS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgc2F5czoKCiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzCiogICBTZWxmLXRlc3RzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLgoqICAgQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBjb21waWxlZCBDIGxvZ2ljCgpXZWxsLCB0aGlzIHBhdGNoIG5haWxzIGFsbCBvZiB0aG9zZS4gVGhlIEJGUyBmaWxlc3lzdGVtIGNvZGUgaXMgKmdvbmUqLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHJlbW92YWwsIHNvIG5vIGNvZGUgaXMgYmVpbmcgYWRkZWQgb3IgbW9kaWZpZWQgdGhhdCBuZWVkcyBmdXp6aW5nLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIFdlIGNhbiBlbmFibGUgemVybyBjb25maWdzLCBhbmQgdGhlcmUgYXJlIHplcm8gZm9jdXMgc3ltYm9scy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoICpyZW1vdmVzKiB0aGUgbGVnYWN5IEJGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQ6IGNvZGUsIGRvY3VtZW50YXRpb24sIGNvbmZpZyBlbnRyaWVzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gTm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcmVtYWlucy4gVGhpcyBpcyBhIGNsZWFuIHN3ZWVwLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjIwMzE1NDUxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjc5NDcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIGxlZ2FjeSBCRlMgKEJvb3QgRmlsZSBTeXN0ZW0pIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZnJvbSB0aGUga2VybmVsLCBhbG9uZyB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGVudHJpZXMsIGRlZmNvbmZpZ3MsIGFuZCBzZWxmdGVzdCByZWZlcmVuY2VzLiBBcyBvbmx5IGNvZGUgcmVtb3ZhbCwgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbmZpZy9zZWxmdGVzdCBjbGVhbnVwIGFyZSBwZXJmb3JtZWQsIHRoZXJlIGlzIG5vIG5ldyBvciBtb2RpZmllZCBleGVjdXRhYmxlIGNvZGUgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjIwMzE2MTg1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDI0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDA5NDVkMTFmMzk2OWYwNGI0NmQwNjEyYTFiY2VjYTc5NTg1NWY4M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQxOjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTXFxuaW5kZXggYmJhNTA3MWMyOWE1ZC4uYzU3MGRkN2VlYmJkZSAxMDA2NDRcXG4tLS0gYS9DUkVESVRTXFxuKysrIGIvQ1JFRElUU1xcbkBAIC01Nyw3ICs1Nyw3IEBAIFM6IExvbmdmb3JkLCBJcmVsYW5kXFxuIFM6IFN5ZG5leSwgQXVzdHJhbGlhXFxuIFxcbiBOOiBUaWdyYW4gQS4gQWl2YXppYW5cXG4tRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrXFxuK0U6IGFpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXG4gVzogaHR0cDovL3d3dy5tb3Nlcy51a2xpbnV4Lm5ldC9wYXRjaGVzXFxuIEQ6IEJGUyBmaWxlc3lzdGVtXFxuIEQ6IEludGVsIElBMzIgQ1BVIG1pY3JvY29kZSB1cGRhdGUgc3VwcG9ydFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxcbmluZGV4IGEyMmY2MDNiMjkzOGUuLmMxZGJmZTljOTVkMjkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcXG5AQCAtNDQsOCArNDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cXG4gV2hpY2ggaXMgaXQsIEJGUyBvciBCRUZTP1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09XFxuIEJlLCBJbmMgc2FpZCwgXFxcIkJlT1MgRmlsZXN5c3RlbSBpcyBvZmZpY2lhbGx5IGNhbGxlZCBCRlMsIG5vdCBCZUZTXFxcIi5cXG4tQnV0IFVuaXh3YXJlIEJvb3QgRmlsZXN5c3RlbSBpcyBjYWxsZWQgYmZzLCB0b28uIEFuZCB0aGV5IGFyZSBhbHJlYWR5IGluXFxuLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXFxuK0J1dCB0aGUgVW5peFdhcmUgQm9vdCBGaWxlc3lzdGVtIGlzIGNhbGxlZCBiZnMsIHRvbywgYW5kIGl0IHdhcyBhbHJlYWR5XFxuK2luIHRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXFxuIGZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJlZnMuXFxuIFxcbiBIb3cgdG8gSW5zdGFsbFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjZTE0YjkwMTg4MDcyLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDYwICswLDAgQEBcXG4tLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tXFxuLT09PT09PT09PT09PT09PT09PT09PT09PVxcbi1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXhcXG4tPT09PT09PT09PT09PT09PT09PT09PT09XFxuLVxcbi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoXFxuLXVzdWFsbHkgY29udGFpbnMgdGhlIGtlcm5lbCBpbWFnZSBhbmQgYSBmZXcgb3RoZXIgZmlsZXMgcmVxdWlyZWQgZm9yIHRoZVxcbi1ib290IHByb2Nlc3MuXFxuLVxcbi1JbiBvcmRlciB0byBhY2Nlc3MgL3N0YW5kIHBhcnRpdGlvbiB1bmRlciBMaW51eCB5b3Ugb2J2aW91c2x5IG5lZWQgdG9cXG4ta25vdyB0aGUgcGFydGl0aW9uIG51bWJlciBhbmQgdGhlIGtlcm5lbCBtdXN0IHN1cHBvcnQgVW5peFdhcmUgZGlzayBzbGljZXNcXG4tKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3RcXG4tZGVwZW5kIG9uIGhhdmluZyBVbml4V2FyZSBkaXNrbGFiZWwgc3VwcG9ydCBiZWNhdXNlIG9uZSBjYW4gYWxzbyBtb3VudFxcbi1CRlMgZmlsZXN5c3RlbSB2aWEgbG9vcGJhY2s6Olxcbi1cXG4tICAgICMgbG9zZXR1cCAvZGV2L2xvb3AwIHN0YW5kLmltZ1xcbi0gICAgIyBtb3VudCAtdCBiZnMgL2Rldi9sb29wMCAvbW50L3N0YW5kXFxuLVxcbi13aGVyZSBzdGFuZC5pbWcgaXMgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGltYWdlIG9mIEJGUyBmaWxlc3lzdGVtLlxcbi1XaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHVzaW5nIGl0IGFuZCB1bW91bnRlZCB5b3UgbmVlZCB0byBhbHNvIGRlYWxsb2NhdGVcXG4tL2Rldi9sb29wMCBkZXZpY2UgYnk6Olxcbi1cXG4tICAgICMgbG9zZXR1cCAtZCAvZGV2L2xvb3AwXFxuLVxcbi1Zb3UgY2FuIHNpbXBsaWZ5IG1vdW50aW5nIGJ5IGp1c3QgdHlwaW5nOjpcXG4tXFxuLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kXFxuLVxcbi10aGlzIHdpbGwgYWxsb2NhdGUgdGhlIGZpcnN0IGF2YWlsYWJsZSBsb29wYmFjayBkZXZpY2UgKGFuZCBsb2FkIGxvb3Aub1xcbi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3RcXG4tbG9hZGVkIGF1dG9tYXRpY2FsbHksIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGNvbXBpbGVkIHRoZSBtb2R1bGUgYW5kXFxuLXRoYXQgbW9kcHJvYmUgaXMgZnVuY3Rpb25pbmcuIEJld2FyZSB0aGF0IHVtb3VudCB3aWxsIG5vdCBkZWFsbG9jYXRlXFxuLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0b1xcbi0vcHJvYy9tb3VudHMuIFlvdSB3aWxsIG5lZWQgdG8gZG8gaXQgbWFudWFsbHkgdXNpbmcgXFxcIi1kXFxcIiBzd2l0Y2ggb2ZcXG4tbG9zZXR1cCg4KS4gUmVhZCBsb3NldHVwKDgpIG1hbnBhZ2UgZm9yIG1vcmUgaW5mby5cXG4tXFxuLVRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlIHVuZGVyIFVuaXhXYXJlIHlvdSBuZWVkIHRvIGZpbmQgb3V0IGZpcnN0IHdoaWNoXFxuLXNsaWNlIGNvbnRhaW5zIGl0LiBUaGUgY29tbWFuZCBwcnR2dG9jKDFNKSBpcyB5b3VyIGZyaWVuZDo6XFxuLVxcbi0gICAgIyBwcnR2dG9jIC9kZXYvcmRzay9jMGIwdDBkMHMwXFxuLVxcbi0oYXNzdW1pbmcgeW91ciByb290IGRpc2sgaXMgb24gdGFyZ2V0PTAsIGx1bj0wLCBidXM9MCwgY29udHJvbGxlcj0wKS4gVGhlbiB5b3VcXG4tbG9vayBmb3IgdGhlIHNsaWNlIHdpdGggdGFnIFxcXCJTVEFORFxcXCIsIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xcbi1pbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSBkZCgxKSB0byBjcmVhdGUgdGhlIEJGUyBpbWFnZTo6XFxuLVxcbi0gICAgIyB1bW91bnQgL3N0YW5kXFxuLSAgICAjIGRkIGlmPS9kZXYvcmRzay9jMGIwdDBkMHNhIG9mPXN0YW5kLmltZyBicz01MTJcXG4tXFxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xcbi10aGUgbWFnaWMgbnVtYmVyOjpcXG4tXFxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcXG4tXFxuLVRoZSBmaXJzdCA0IGJ5dGVzIHNob3VsZCBiZSAweDFiYWRmYWNlLlxcbi1cXG4tSWYgeW91IGhhdmUgYW55IHBhdGNoZXMsIHF1ZXN0aW9ucyBvciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBCRlNcXG4taW1wbGVtZW50YXRpb24gcGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvcjpcXG4tXFxuLVRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbmluZGV4IDczNGE0NWU1MTY2NzUuLjdjY2U3Y2MyOGQxMjYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdFxcbkBAIC03NSw3ICs3NSw2IEBAIERvY3VtZW50YXRpb24gZm9yIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLlxcbiAgICBhdXRvZnNcXG4gICAgYXV0b2ZzLW1vdW50LWNvbnRyb2xcXG4gICAgYmVmc1xcbi0gICBiZnNcXG4gICAgYnRyZnNcXG4gICAgY2VwaFxcbiAgICBjb2RhXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBmYzMyMGIzNzM2NTZmLi4zODUzMDk1NTY3MDVlIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNDYyNywxMyArNDYyNyw2IEBAIFM6XFx0T2RkIEZpeGVzXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9ibG9jay9iZnEtaW9zY2hlZC5yc3RcXG4gRjpcXHRibG9jay9iZnEtKlxcbiBcXG4tQkZTIEZJTEUgU1lTVEVNXFxuLU06XFx0XFxcIlRpZ3JhbiBBLiBBaXZhemlhblxcXCIgXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLVM6XFx0TWFpbnRhaW5lZFxcbi1GOlxcdERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxcbi1GOlxcdGZzL2Jmcy9cXG4tRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvYmZzX2ZzLmhcXG4tXFxuIEJJVE1BUCBBUElcXG4gTTpcXHRZdXJ5IE5vcm92IFxcdTAwM2N5dXJ5Lm5vcm92QGdtYWlsLmNvbVxcdTAwM2VcXG4gUjpcXHRSYXNtdXMgVmlsbGVtb2VzIFxcdTAwM2NsaW51eEByYXNtdXN2aWxsZW1vZXMuZGtcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xcbmluZGV4IDU2YThmNzZkYWI0MTQuLjRmYjRkNDVmM2NkY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXFxuQEAgLTMzMyw3ICszMzMsNiBAQCBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfSEZTUExVU19GUz1tXFxuIENPTkZJR19CRUZTX0ZTPW1cXG4tQ09ORklHX0JGU19GUz1tXFxuIENPTkZJR19FRlNfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xcbmluZGV4IDg1ZTk1YzBhZTQxMDcuLjNkMWMzMmQzNDc1ZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcXG5AQCAtMzQwLDcgKzM0MCw2IEBAIENPTkZJR19BRkZTX0ZTPW1cXG4gQ09ORklHX0hGU19GUz1tXFxuIENPTkZJR19IRlNQTFVTX0ZTPW1cXG4gQ09ORklHX0JFRlNfRlM9bVxcbi1DT05GSUdfQkZTX0ZTPW1cXG4gQ09ORklHX0VGU19GUz1tXFxuIENPTkZJR19KRkZTMl9GUz1tXFxuIENPTkZJR19KRkZTMl9GU19YQVRUUj15XFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xcbmluZGV4IDA0OThhMDExNTM0OTAuLjI1NDUxNjhiNzViYmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXFxuQEAgLTMzOSw3ICszMzksNiBAQCBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfSEZTUExVU19GUz1tXFxuIENPTkZJR19CRUZTX0ZTPW1cXG4tQ09ORklHX0JGU19GUz1tXFxuIENPTkZJR19FRlNfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlM9bVxcbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcXG5pbmRleCAwOWUwMDZjN2NkN2M2Li5jZDJhODMxNjE0Yzg5IDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xcbkBAIC0zMTgsNyArMzE4LDYgQEAgQ09ORklHX0FERlNfRlM9bVxcbiBDT05GSUdfQUZGU19GUz1tXFxuIENPTkZJR19IRlNfRlM9bVxcbiBDT05GSUdfQkVGU19GUz1tXFxuLUNPTkZJR19CRlNfRlM9bVxcbiBDT05GSUdfRUZTX0ZTPW1cXG4gQ09ORklHX0NSQU1GUz1tXFxuIENPTkZJR19WWEZTX0ZTPW1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xcbmluZGV4IDM5MWM5OTExN2VlMDYuLjY4ODA1MWIxMWNlMTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xcbkBAIC0yLDcgKzIsNiBAQCBDT05GSUdfQURGU19GUz1tXFxuIENPTkZJR19BRkZTX0ZTPW1cXG4gQ09ORklHX0FVRElUPXlcXG4gQ09ORklHX0JFRlNfRlM9bVxcbi1DT05GSUdfQkZTX0ZTPW1cXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cXG4gIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xcbmluZGV4IGFjZmZjNWMxN2Y5MmQuLjhhYWIyMjlmYjkwOTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcXG5AQCAtOTQ1LDcgKzk0NSw2IEBAIENPTkZJR19FQ1JZUFRfRlM9bVxcbiBDT05GSUdfSEZTX0ZTPW1cXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxcbiBDT05GSUdfQkVGU19GUz1tXFxuLUNPTkZJR19CRlNfRlM9bVxcbiBDT05GSUdfRUZTX0ZTPW1cXG4gQ09ORklHX0NSQU1GUz1tXFxuIENPTkZJR19WWEZTX0ZTPW1cXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcXG5pbmRleCBlMDU5MTdhZGNkNjA4Li4xY2IwYjNhOGIxMmNhIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTMxNCw3ICszMTQsNiBAQCBzb3VyY2UgXFxcImZzL2VjcnlwdGZzL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZnMvaGZzL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZnMvaGZzcGx1cy9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImZzL2JlZnMvS2NvbmZpZ1xcXCJcXG4tc291cmNlIFxcXCJmcy9iZnMvS2NvbmZpZ1xcXCJcXG4gc291cmNlIFxcXCJmcy9qZmZzMi9LY29uZmlnXFxcIlxcbiAjIFVCSUZTIEZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb25cXG4gc291cmNlIFxcXCJmcy91Ymlmcy9LY29uZmlnXFxcIlxcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXFxuaW5kZXggMDU1ZGZjMjNkODJiNi4uMTZmMTEwOGI2NGUxYSAxMDA2NDRcXG4tLS0gYS9mcy9NYWtlZmlsZVxcbisrKyBiL2ZzL01ha2VmaWxlXFxuQEAgLTc2LDcgKzc2LDYgQEAgb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4gb2JqLSQoQ09ORklHX01JTklYX0ZTKVxcdFxcdCs9IG1pbml4L1xcbiBvYmotJChDT05GSUdfRkFUX0ZTKVxcdFxcdCs9IGZhdC9cXG4gb2JqLSQoQ09ORklHX0VYRkFUX0ZTKVxcdFxcdCs9IGV4ZmF0L1xcbi1vYmotJChDT05GSUdfQkZTX0ZTKVxcdFxcdCs9IGJmcy9cXG4gb2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpXFx0Kz0gaXNvZnMvXFxuIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKVxcdCs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTK1xcbiBvYmotJChDT05GSUdfSEZTX0ZTKVxcdFxcdCs9IGhmcy9cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZ1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDhlN2VmODY2YjYyYTYuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS9mcy9iZnMvS2NvbmZpZ1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwyMSArMCwwIEBAXFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbi1jb25maWcgQkZTX0ZTXFxuLVxcdHRyaXN0YXRlIFxcXCJCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tXFx0ZGVwZW5kcyBvbiBCTE9DS1xcbi1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4tXFx0aGVscFxcbi1cXHQgIEJvb3QgRmlsZSBTeXN0ZW0gKEJGUykgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIHVuZGVyIFNDTyBVbml4V2FyZSB0b1xcbi1cXHQgIGFsbG93IHRoZSBib290bG9hZGVyIGFjY2VzcyB0byB0aGUga2VybmVsIGltYWdlIGFuZCBvdGhlciBpbXBvcnRhbnRcXG4tXFx0ICBmaWxlcyBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gIEl0IGlzIHVzdWFsbHkgbW91bnRlZCB1bmRlciAvc3RhbmRcXG4tXFx0ICBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIHNsaWNlIG1hcmtlZCBhcyBcXFwiU1RBTkRcXFwiIGluIHRoZSBVbml4V2FyZVxcbi1cXHQgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXNcXG4tXFx0ICBvbiB5b3VyIC9zdGFuZCBzbGljZSBmcm9tIHdpdGhpbiBMaW51eC4gIFlvdSB0aGVuIGFsc28gbmVlZCB0byBzYXkgWVxcbi1cXHQgIHRvIFxcXCJVbml4V2FyZSBzbGljZXMgc3VwcG9ydFxcXCIsIGJlbG93LiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQkZTXFxuLVxcdCAgZmlsZSBzeXN0ZW0gaXMgY29udGFpbmVkIGluIHRoZSBmaWxlXFxuLVxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XFx1MDAzZS5cXG4tXFxuLVxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGFib3V0LCBzYXkgTi5cXG4tXFxuLVxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuLVxcdCAgYmZzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBvZiB5b3VyIHJvb3QgcGFydGl0aW9uICh0aGUgb25lXFxuLVxcdCAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS5cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL01ha2VmaWxlIGIvZnMvYmZzL01ha2VmaWxlXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9NYWtlZmlsZVxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw4ICswLDAgQEBcXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuLSNcXG4tIyBNYWtlZmlsZSBmb3IgQkZTIGZpbGVzeXN0ZW0uXFxuLSNcXG4tXFxuLW9iai0kKENPTkZJR19CRlNfRlMpICs9IGJmcy5vXFxuLVxcbi1iZnMtb2JqcyA6PSBpbm9kZS5vIGZpbGUubyBkaXIub1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBiMDhhZmU3MzNlNjMyLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvZnMvYmZzL2Jmcy5oXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDY5ICswLDAgQEBcXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4tLypcXG4tICpcXHRmcy9iZnMvYmZzLmhcXG4tICpcXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqL1xcbi0jaWZuZGVmIF9GU19CRlNfQkZTX0hcXG4tI2RlZmluZSBfRlNfQkZTX0JGU19IXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmZzX2ZzLmhcXHUwMDNlXFxuLVxcbi0vKiBJbiB0aGVvcnkgQkZTIHN1cHBvcnRzIHVwIHRvIDUxMiBpbm9kZXMsIG51bWJlcmVkIGZyb20gMiAoZm9yIC8pIHVwIHRvIDUxMyBpbmNsdXNpdmUuXFxuLSAgIEluIGFjdHVhbCBmYWN0LCBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgNTEydGggaW5vZGUgKGkuZS4gaW5vZGUgTm8uIDUxMyBvciBmaWxlIE5vLiA1MTEpXFxuLSAgIHdpbGwgZmFpbCB3aXRoIEVOT1NQQyBpbiBiZnNfYWRkX2VudHJ5KCk6IHRoZSByb290IGRpcmVjdG9yeSBjYW5ub3QgY29udGFpbiBzbyBtYW55IGVudHJpZXMsIGNvdW50aW5nICcuLicuXFxuLSAgIFNvLCBta2ZzLmJmcyg4KSBzaG91bGQgcmVhbGx5IGxpbWl0IGl0cyAtTiBvcHRpb24gdG8gNTExIGFuZCBub3QgNTEyLiBGb3Igbm93LCB3ZSBqdXN0IHByaW50IGEgd2FybmluZ1xcbi0gICBpZiBhIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHN1Y2ggXFxcImltcG9zc2libGUgdG8gZmlsbCB1cFxcXCIgbnVtYmVyIG9mIGlub2RlcyAqL1xcbi0jZGVmaW5lIEJGU19NQVhfTEFTVElcXHQ1MTNcXG4tXFxuLS8qXFxuLSAqIEJGUyBmaWxlIHN5c3RlbSBpbi1jb3JlIHN1cGVyYmxvY2sgaW5mb1xcbi0gKi9cXG4tc3RydWN0IGJmc19zYl9pbmZvIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBzaV9ibG9ja3M7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2lfbGZfZWJsaztcXG4tXFx0dW5zaWduZWQgbG9uZyBzaV9sYXN0aTtcXG4tXFx0REVDTEFSRV9CSVRNQVAoc2lfaW1hcCwgQkZTX01BWF9MQVNUSSsxKTtcXG4tXFx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xcbi19O1xcbi1cXG4tLypcXG4tICogQkZTIGZpbGUgc3lzdGVtIGluLWNvcmUgaW5vZGUgaW5mb1xcbi0gKi9cXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBpX2Rza19pbm87IC8qIGlub2RlIG51bWJlciBmcm9tIHRoZSBkaXNrLCBjYW4gYmUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuLVxcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XFxuLX07XFxuLVxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfc2JfaW5mbyAqQkZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLXtcXG4tXFx0cmV0dXJuIHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19pbm9kZV9pbmZvICpCRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBiZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG4tfVxcbi1cXG4tXFxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcXFxcbi1cXHRwcmludGsoS0VSTl9FUlIgXFxcIkJGUy1mczogJXMoKTogXFxcIiBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmdzKVxcbi1cXG4tLyogaW5vZGUuYyAqL1xcbi1leHRlcm4gc3RydWN0IGlub2RlICpiZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyk7XFxuLWV4dGVybiB2b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuLVxcbi0vKiBmaWxlLmMgKi9cXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcztcXG4tXFxuLS8qIGRpci5jICovXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzO1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnM7XFxuLVxcbi0jZW5kaWYgLyogX0ZTX0JGU19CRlNfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCA5MWE0ODcxZmEwNTE5Li4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvZnMvYmZzL2Rpci5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDM1NiArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8qXFxuLSAqXFx0ZnMvYmZzL2Rpci5jXFxuLSAqXFx0QkZTIGRpcmVjdG9yeSBvcGVyYXRpb25zLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4ICBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqICBNYWRlIGVuZGlhbm5lc3MtY2xlYW4gYnkgQW5kcmV3IFN0cmliYmxlaGlsbCBcXHUwMDNjYWRzQHdvbXBvbS5vcmdcXHUwMDNlIDIwMDVcXG4tICovXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJiZnMuaFxcXCJcXG4tXFxuLSN1bmRlZiBERUJVR1xcbi1cXG4tI2lmZGVmIERFQlVHXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcdHByaW50Zih4KVxcbi0jZWxzZVxcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubyk7XFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBiZnNfZGlyZW50ICoqcmVzX2Rpcik7XFxuLVxcbi1zdGF0aWMgaW50IGJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGZpbGVfaW5vZGUoZik7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuLVxcdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0aW50IGJsb2NrO1xcbi1cXG4tXFx0aWYgKGN0eC1cXHUwMDNlcG9zIFxcdTAwMjYgKEJGU19ESVJFTlRfU0laRSAtIDEpKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiQmFkIGZfcG9zPSUwOGx4IGZvciAlczolMDhsbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKWN0eC1cXHUwMDNlcG9zLFxcbi1cXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0d2hpbGUgKGN0eC1cXHUwMDNlcG9zIFxcdTAwM2MgZGlyLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0b2Zmc2V0ID0gY3R4LVxcdTAwM2Vwb3MgXFx1MDAyNiAoQkZTX0JTSVpFIC0gMSk7XFxuLVxcdFxcdGJsb2NrID0gQkZTX0koZGlyKS1cXHUwMDNlaV9zYmxvY2sgKyAoY3R4LVxcdTAwM2Vwb3MgXFx1MDAzZVxcdTAwM2UgQkZTX0JTSVpFX0JJVFMpO1xcbi1cXHRcXHRiaCA9IHNiX2JyZWFkKGRpci1cXHUwMDNlaV9zYiwgYmxvY2spO1xcbi1cXHRcXHRpZiAoIWJoKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zICs9IEJGU19CU0laRSAtIG9mZnNldDtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFx0XFx0ZG8ge1xcbi1cXHRcXHRcXHRkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC1cXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcXG4tXFx0XFx0XFx0aWYgKGRlLVxcdTAwM2Vpbm8pIHtcXG4tXFx0XFx0XFx0XFx0aW50IHNpemUgPSBzdHJubGVuKGRlLVxcdTAwM2VuYW1lLCBCRlNfTkFNRUxFTik7XFxuLVxcdFxcdFxcdFxcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cXHUwMDNlbmFtZSwgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUoZGUtXFx1MDAzZWlubyksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdERUX1VOS05PV04pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0b2Zmc2V0ICs9IEJGU19ESVJFTlRfU0laRTtcXG4tXFx0XFx0XFx0Y3R4LVxcdTAwM2Vwb3MgKz0gQkZTX0RJUkVOVF9TSVpFO1xcbi1cXHRcXHR9IHdoaWxlICgob2Zmc2V0IFxcdTAwM2MgQkZTX0JTSVpFKSBcXHUwMDI2XFx1MDAyNiAoY3R4LVxcdTAwM2Vwb3MgXFx1MDAzYyBkaXItXFx1MDAzZWlfc2l6ZSkpO1xcbi1cXHRcXHRicmVsc2UoYmgpO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuLVxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gYmZzX3JlYWRkaXIsXFxuLVxcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbi1cXHQubGxzZWVrXFx0XFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLXtcXG4tXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5vO1xcbi1cXG4tXFx0aW5vZGUgPSBuZXdfaW5vZGUocyk7XFxuLVxcdGlmICghaW5vZGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdGlubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW5mby1cXHUwMDNlc2lfaW1hcCwgaW5mby1cXHUwMDNlc2lfbGFzdGkgKyAxKTtcXG4tXFx0aWYgKGlubyBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2xhc3RpKSB7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRcXHRpcHV0KGlub2RlKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLVxcdH1cXG4tXFx0c2V0X2JpdChpbm8sIGluZm8tXFx1MDAzZXNpX2ltYXApO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9mcmVlaS0tO1xcbi1cXHRpbm9kZV9pbml0X293bmVyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgZGlyLCBtb2RlKTtcXG4tXFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSAwO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZiZnNfZmlsZV9pbm9wcztcXG4tXFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XFxuLVxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmJmc19hb3BzO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9pbm8gPSBpbm87XFxuLVxcdEJGU19JKGlub2RlKS1cXHUwMDNlaV9kc2tfaW5vID0gaW5vO1xcbi1cXHRCRlNfSShpbm9kZSktXFx1MDAzZWlfc2Jsb2NrID0gMDtcXG4tXFx0QkZTX0koaW5vZGUpLVxcdTAwM2VpX2VibG9jayA9IDA7XFxuLVxcdGluc2VydF9pbm9kZV9oYXNoKGlub2RlKTtcXG4tICAgICAgICBtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0YmZzX2R1bXBfaW1hcChcXFwiY3JlYXRlXFxcIiwgcyk7XFxuLVxcbi1cXHRlcnIgPSBiZnNfYWRkX2VudHJ5KGRpciwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdFxcdGlwdXQoaW5vZGUpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBkZW50cnkgKmJmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihkaXItXFx1MDAzZWlfc2IpO1xcbi1cXG4tXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIEJGU19OQU1FTEVOKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNmRlKTtcXG4tXFx0aWYgKGJoKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgaW5vID0gKHVuc2lnbmVkIGxvbmcpbGUxNl90b19jcHUoZGUtXFx1MDAzZWlubyk7XFxuLVxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdGlub2RlID0gYmZzX2lnZXQoZGlyLVxcdTAwM2VpX3NiLCBpbm8pO1xcbi1cXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqbmV3KVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKG9sZCk7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdGVyciA9IGJmc19hZGRfZW50cnkoZGlyLCBcXHUwMDI2bmV3LVxcdTAwM2VkX25hbWUsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFx0aW5jX25saW5rKGlub2RlKTtcXG4tXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbi1cXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0aWhvbGQoaW5vZGUpO1xcbi1cXHRkX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi17XFxuLVxcdGludCBlcnJvciA9IC1FTk9FTlQ7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuLVxcdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcXG4tXFx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNmRlKTtcXG4tXFx0aWYgKCFiaCB8fCAobGUxNl90b19jcHUoZGUtXFx1MDAzZWlubykgIT0gaW5vZGUtXFx1MDAzZWlfaW5vKSlcXG4tXFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbi1cXG4tXFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbi1cXHRcXHRwcmludGYoXFxcInVubGlua2luZyBub24tZXhpc3RlbnQgZmlsZSAlczolbGx1IChubGluaz0lZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8sXFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX25saW5rKTtcXG4tXFx0XFx0c2V0X25saW5rKGlub2RlLCAxKTtcXG4tXFx0fVxcbi1cXHRkZS1cXHUwMDNlaW5vID0gMDtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTtcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbi1cXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIGlub2RlX2dldF9jdGltZShkaXIpKTtcXG4tXFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xcbi1cXHRlcnJvciA9IDA7XFxuLVxcbi1vdXRfYnJlbHNlOlxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IGJmc19yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICpvbGRfaW5vZGUsICpuZXdfaW5vZGU7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLCAqbmV3X2JoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqb2xkX2RlLCAqbmV3X2RlO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XFxuLVxcdGludCBlcnJvciA9IC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+UkVOQU1FX05PUkVQTEFDRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRvbGRfYmggPSBuZXdfYmggPSBOVUxMO1xcbi1cXHRvbGRfaW5vZGUgPSBkX2lub2RlKG9sZF9kZW50cnkpO1xcbi1cXHRpZiAoU19JU0RJUihvbGRfaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aW5mbyA9IEJGU19TQihvbGRfaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRvbGRfYmggPSBiZnNfZmluZF9lbnRyeShvbGRfZGlyLCBcXHUwMDI2b2xkX2RlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXHUwMDI2b2xkX2RlKTtcXG4tXFxuLVxcdGlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtXFx1MDAzZWlubykgIT0gb2xkX2lub2RlLVxcdTAwM2VpX2lubykpXFxuLVxcdFxcdGdvdG8gZW5kX3JlbmFtZTtcXG4tXFxuLVxcdGVycm9yID0gLUVQRVJNO1xcbi1cXHRuZXdfaW5vZGUgPSBkX2lub2RlKG5ld19kZW50cnkpO1xcbi1cXHRuZXdfYmggPSBiZnNfZmluZF9lbnRyeShuZXdfZGlyLCBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXHUwMDI2bmV3X2RlKTtcXG4tXFxuLVxcdGlmIChuZXdfYmggXFx1MDAyNlxcdTAwMjYgIW5ld19pbm9kZSkge1xcbi1cXHRcXHRicmVsc2UobmV3X2JoKTtcXG4tXFx0XFx0bmV3X2JoID0gTlVMTDtcXG4tXFx0fVxcbi1cXHRpZiAoIW5ld19iaCkge1xcbi1cXHRcXHRlcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0b2xkX2lub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBlbmRfcmVuYW1lO1xcbi1cXHR9XFxuLVxcdG9sZF9kZS1cXHUwMDNlaW5vID0gMDtcXG4tXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKG9sZF9kaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KG9sZF9kaXIpKTtcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4tXFx0aWYgKG5ld19pbm9kZSkge1xcbi1cXHRcXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpO1xcbi1cXHRcXHRpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpO1xcbi1cXHR9XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShvbGRfYmgsIFxcdTAwMjZCRlNfSShvbGRfZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRlcnJvciA9IDA7XFxuLVxcbi1lbmRfcmVuYW1lOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0YnJlbHNlKG9sZF9iaCk7XFxuLVxcdGJyZWxzZShuZXdfYmgpO1xcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19kaXJfaW5vcHMgPSB7XFxuLVxcdC5jcmVhdGVcXHRcXHRcXHQ9IGJmc19jcmVhdGUsXFxuLVxcdC5sb29rdXBcXHRcXHRcXHQ9IGJmc19sb29rdXAsXFxuLVxcdC5saW5rXFx0XFx0XFx0PSBiZnNfbGluayxcXG4tXFx0LnVubGlua1xcdFxcdFxcdD0gYmZzX3VubGluayxcXG4tXFx0LnJlbmFtZVxcdFxcdFxcdD0gYmZzX3JlbmFtZSxcXG4tfTtcXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKVxcbi17XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cXHUwMDNlbmFtZTtcXG4tXFx0aW50IG5hbWVsZW4gPSBjaGlsZC1cXHUwMDNlbGVuO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdGludCBibG9jaywgc2Jsb2NrLCBlYmxvY2ssIG9mZiwgcG9zO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGRwcmludGYoXFxcIm5hbWU9JXMsIG5hbWVsZW49JWRcXFxcblxcXCIsIG5hbWUsIG5hbWVsZW4pO1xcbi1cXG4tXFx0c2Jsb2NrID0gQkZTX0koZGlyKS1cXHUwMDNlaV9zYmxvY2s7XFxuLVxcdGVibG9jayA9IEJGU19JKGRpciktXFx1MDAzZWlfZWJsb2NrO1xcbi1cXHRmb3IgKGJsb2NrID0gc2Jsb2NrOyBibG9jayBcXHUwMDNjPSBlYmxvY2s7IGJsb2NrKyspIHtcXG4tXFx0XFx0YmggPSBzYl9icmVhZChkaXItXFx1MDAzZWlfc2IsIGJsb2NrKTtcXG4tXFx0XFx0aWYgKCFiaClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdGZvciAob2ZmID0gMDsgb2ZmIFxcdTAwM2MgQkZTX0JTSVpFOyBvZmYgKz0gQkZTX0RJUkVOVF9TSVpFKSB7XFxuLVxcdFxcdFxcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVxcdTAwM2ViX2RhdGEgKyBvZmYpO1xcbi1cXHRcXHRcXHRpZiAoIWRlLVxcdTAwM2Vpbm8pIHtcXG4tXFx0XFx0XFx0XFx0cG9zID0gKGJsb2NrIC0gc2Jsb2NrKSAqIEJGU19CU0laRSArIG9mZjtcXG4tXFx0XFx0XFx0XFx0aWYgKHBvcyBcXHUwMDNlPSBkaXItXFx1MDAzZWlfc2l6ZSkge1xcbi1cXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2l6ZSArPSBCRlNfRElSRU5UX1NJWkU7XFxuLVxcdFxcdFxcdFxcdFxcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuLVxcdFxcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4tXFx0XFx0XFx0XFx0ZGUtXFx1MDAzZWlubyA9IGNwdV90b19sZTE2KCh1MTYpaW5vKTtcXG4tXFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJGU19OQU1FTEVOOyBpKyspXFxuLVxcdFxcdFxcdFxcdFxcdGRlLVxcdTAwM2VuYW1lW2ldID1cXG4tXFx0XFx0XFx0XFx0XFx0XFx0KGkgXFx1MDAzYyBuYW1lbGVuKSA/IG5hbWVbaV0gOiAwO1xcbi1cXHRcXHRcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZCRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdFxcdFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gLUVOT1NQQztcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmZmVyKVxcbi17XFxuLVxcdGlmICgobGVuIFxcdTAwM2MgQkZTX05BTUVMRU4pIFxcdTAwMjZcXHUwMDI2IGJ1ZmZlcltsZW5dKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuICFtZW1jbXAobmFtZSwgYnVmZmVyLCBsZW4pO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpiZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XFxuLVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cXHUwMDNlbmFtZTtcXG4tXFx0aW50IG5hbWVsZW4gPSBjaGlsZC1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0KnJlc19kaXIgPSBOVUxMO1xcbi1cXHRpZiAobmFtZWxlbiBcXHUwMDNlIEJGU19OQU1FTEVOKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHdoaWxlIChibG9jayAqIEJGU19CU0laRSArIG9mZnNldCBcXHUwMDNjIGRpci1cXHUwMDNlaV9zaXplKSB7XFxuLVxcdFxcdGlmICghYmgpIHtcXG4tXFx0XFx0XFx0YmggPSBzYl9icmVhZChkaXItXFx1MDAzZWlfc2IsIEJGU19JKGRpciktXFx1MDAzZWlfc2Jsb2NrICsgYmxvY2spO1xcbi1cXHRcXHRcXHRpZiAoIWJoKSB7XFxuLVxcdFxcdFxcdFxcdGJsb2NrKys7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXFx1MDAzZWJfZGF0YSArIG9mZnNldCk7XFxuLVxcdFxcdG9mZnNldCArPSBCRlNfRElSRU5UX1NJWkU7XFxuLVxcdFxcdGlmIChsZTE2X3RvX2NwdShkZS1cXHUwMDNlaW5vKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cXHUwMDNlbmFtZSkpIHtcXG4tXFx0XFx0XFx0KnJlc19kaXIgPSBkZTtcXG4tXFx0XFx0XFx0cmV0dXJuIGJoO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyBiaC1cXHUwMDNlYl9zaXplKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0YmggPSBOVUxMO1xcbi1cXHRcXHRvZmZzZXQgPSAwO1xcbi1cXHRcXHRibG9jaysrO1xcbi1cXHR9XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZDMzZDZiZGU5OTJiOC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9maWxlLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjAzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLypcXG4tICpcXHRmcy9iZnMvZmlsZS5jXFxuLSAqXFx0QkZTIGZpbGUgb3BlcmF0aW9ucy5cXG4tICpcXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqXFxuLSAqXFx0TWFrZSB0aGUgZmlsZSBibG9jayBhbGxvY2F0aW9uIGFsZ29yaXRobSB1bmRlcnN0YW5kIHRoZSBzaXplXFxuLSAqXFx0b2YgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXFx1MDAzY2RtaXRyaS52b3JvYmlldkBnbWFpbC5jb21cXHUwMDNlXFxuLSAqXFxuLSAqL1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcGFnZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImJmcy5oXFxcIlxcbi1cXG4tI3VuZGVmIERFQlVHXFxuLVxcbi0jaWZkZWYgREVCVUdcXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXFx0cHJpbnRmKHgpXFxuLSNlbHNlXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcbi0jZW5kaWZcXG4tXFxuLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0Lmxsc2VlayBcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4tXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4tXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfbW92ZV9ibG9jayh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLXtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKm5ldztcXG4tXFxuLVxcdGJoID0gc2JfYnJlYWQoc2IsIGZyb20pO1xcbi1cXHRpZiAoIWJoKVxcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0bmV3ID0gc2JfZ2V0YmxrKHNiLCB0byk7XFxuLVxcdG1lbWNweShuZXctXFx1MDAzZWJfZGF0YSwgYmgtXFx1MDAzZWJfZGF0YSwgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuLVxcdG1hcmtfYnVmZmVyX2RpcnR5KG5ldyk7XFxuLVxcdGJmb3JnZXQoYmgpO1xcbi1cXHRicmVsc2UobmV3KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX21vdmVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHdoZXJlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFxuLVxcdGRwcmludGYoXFxcIiUwOGx4LSUwOGx4LVxcdTAwM2UlMDhseFxcXFxuXFxcIiwgc3RhcnQsIGVuZCwgd2hlcmUpO1xcbi1cXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjPSBlbmQ7IGkrKylcXG4tXFx0XFx0aWYoYmZzX21vdmVfYmxvY2soaSwgd2hlcmUgKyBpLCBzYikpIHtcXG4tXFx0XFx0XFx0ZHByaW50ZihcXFwiZmFpbGVkIHRvIG1vdmUgYmxvY2sgJTA4bHggLVxcdTAwM2UgJTA4bHhcXFxcblxcXCIsIGksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHdoZXJlICsgaSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IGJmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuLVxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGh5cztcXG4tXFx0aW50IGVycjtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xcbi1cXG4tXFx0cGh5cyA9IGJpLVxcdTAwM2VpX3NibG9jayArIGJsb2NrO1xcbi1cXHRpZiAoIWNyZWF0ZSkge1xcbi1cXHRcXHRpZiAocGh5cyBcXHUwMDNjPSBiaS1cXHUwMDNlaV9lYmxvY2spIHtcXG4tXFx0XFx0XFx0ZHByaW50ZihcXFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDlseCAoZ3JhbnRlZClcXFxcblxcXCIsXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XFxuLVxcdFxcdFxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgdGhlIGZpbGUgaXMgbm90IGVtcHR5IGFuZCB0aGUgcmVxdWVzdGVkIGJsb2NrIGlzIHdpdGhpbiB0aGVcXG4tXFx0ICogcmFuZ2Ugb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBmaWxlLCB3ZSBjYW4gZ3JhbnQgaXQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYmktXFx1MDAzZWlfc2Jsb2NrIFxcdTAwMjZcXHUwMDI2IChwaHlzIFxcdTAwM2M9IGJpLVxcdTAwM2VpX2VibG9jaykpIHtcXG4tXFx0XFx0ZHByaW50ZihcXFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoaW50ZXJpbSBibG9jayBncmFudGVkKVxcXFxuXFxcIiwgXFxuLVxcdFxcdFxcdFxcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xcbi1cXHRcXHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBUaGUgZmlsZSB3aWxsIGJlIGV4dGVuZGVkLCBzbyBsZXQncyBzZWUgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLiAqL1xcbi1cXHRpZiAocGh5cyBcXHUwMDNlPSBpbmZvLVxcdTAwM2VzaV9ibG9ja3MpXFxuLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi1cXG4tXFx0LyogVGhlIHJlc3QgaGFzIHRvIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGl0c2VsZi4gKi9cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZFxcbi1cXHQgKiBibG9jaywgd2UgY2FuIGV4dGVuZCB0aGUgZmlsZSB0cml2aWFsbHksIHdpdGhvdXQgbW92aW5nIGl0XFxuLVxcdCAqIGFueXdoZXJlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGJpLVxcdTAwM2VpX2VibG9jayA9PSBpbmZvLVxcdTAwM2VzaV9sZl9lYmxrKSB7XFxuLVxcdFxcdGRwcmludGYoXFxcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXFxcXG5cXFwiLCBcXG4tXFx0XFx0XFx0XFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XFxuLVxcdFxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgLT0gcGh5cyAtIGJpLVxcdTAwM2VpX2VibG9jaztcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGJpLVxcdTAwM2VpX2VibG9jayA9IHBoeXM7XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHRcXHRlcnIgPSAwO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXFxuLVxcdHBoeXMgPSBpbmZvLVxcdTAwM2VzaV9sZl9lYmxrICsgMTtcXG4tXFx0aWYgKHBoeXMgKyBibG9jayBcXHUwMDNlPSBpbmZvLVxcdTAwM2VzaV9ibG9ja3MpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChiaS1cXHUwMDNlaV9zYmxvY2spIHtcXG4tXFx0XFx0ZXJyID0gYmZzX21vdmVfYmxvY2tzKGlub2RlLVxcdTAwM2VpX3NiLCBiaS1cXHUwMDNlaV9zYmxvY2ssIFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRiaS1cXHUwMDNlaV9lYmxvY2ssIHBoeXMpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGRwcmludGYoXFxcImZhaWxlZCB0byBtb3ZlIGlubz0lMDhseCAtXFx1MDAzZSBmcyBjb3JydXB0aW9uXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0ZXJyID0gMDtcXG4tXFxuLVxcdGRwcmludGYoXFxcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKG1vdmVkKVxcXFxuXFxcIixcXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xcbi1cXHRiaS1cXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xcbi1cXHRwaHlzICs9IGJsb2NrO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9sZl9lYmxrID0gYmktXFx1MDAzZWlfZWJsb2NrID0gcGh5cztcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoaXMgYXNzdW1lcyBub3RoaW5nIGNhbiB3cml0ZSB0aGUgaW5vZGUgYmFjayB3aGlsZSB3ZSBhcmUgaGVyZVxcbi1cXHQgKiBhbmQgdGh1cyB1cGRhdGUgaW5vZGUtXFx1MDAzZWlfYmxvY2tzISAoWFhYKVxcbi1cXHQgKi9cXG4tXFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgLT0gYmktXFx1MDAzZWlfZWJsb2NrIC0gYmktXFx1MDAzZWlfc2Jsb2NrICsgMSAtIGlub2RlLVxcdTAwM2VpX2Jsb2NrcztcXG4tXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuLVxcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0cmV0dXJuIGVycjtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4te1xcbi1cXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxcbi17XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXG4tXFx0aWYgKHRvIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG4tXFx0XFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0ICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHZvaWQgKipmc2RhdGEpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmb2xpb3AsIGJmc19nZXRfYmxvY2spO1xcbi1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tXFx0XFx0YmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4te1xcbi1cXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcXG4tfVxcbi1cXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcXG4tXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gYmZzX3JlYWRfZm9saW8sXFxuLVxcdC53cml0ZXBhZ2VzXFx0PSBiZnNfd3JpdGVwYWdlcyxcXG4tXFx0LndyaXRlX2JlZ2luXFx0PSBiZnNfd3JpdGVfYmVnaW4sXFxuLVxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbi1cXHQubWlncmF0ZV9mb2xpb1xcdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXFxuLVxcdC5ibWFwXFx0XFx0PSBiZnNfYm1hcCxcXG4tfTtcXG4tXFxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDUzOCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4tLypcXG4tICpcXHRmcy9iZnMvaW5vZGUuY1xcbi0gKlxcdEJGUyBzdXBlcmJsb2NrIGFuZCBpbm9kZSBvcGVyYXRpb25zLlxcbi0gKlxcdENvcHlyaWdodCAoQykgMTk5OS0yMDE4IFRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXG4tICpcXHRGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuXFxuLSAqXFx0TWFkZSBlbmRpYW5uZXNzLWNsZWFuIGJ5IEFuZHJldyBTdHJpYmJsZWhpbGwgXFx1MDAzY2Fkc0B3b21wb20ub3JnXFx1MDAzZSwgMjAwNS5cXG4tICovXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJiZnMuaFxcXCJcXG4tXFxuLU1PRFVMRV9BVVRIT1IoXFxcIlRpZ3JhbiBBaXZhemlhbiBcXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTQ08gVW5peFdhcmUgQkZTIGZpbGVzeXN0ZW0gZm9yIExpbnV4XFxcIik7XFxuLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tXFxuLSN1bmRlZiBERUJVR1xcbi1cXG4tI2lmZGVmIERFQlVHXFxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxcdHByaW50Zih4KVxcbi0jZWxzZVxcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcXG4tI2VuZGlmXFxuLVxcbi1zdHJ1Y3QgaW5vZGUgKmJmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbi17XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRpbnQgYmxvY2ssIG9mZjtcXG4tXFxuLVxcdGlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7XFxuLVxcdGlmICghaW5vZGUpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ORVcpKVxcbi1cXHRcXHRyZXR1cm4gaW5vZGU7XFxuLVxcbi1cXHRpZiAoKGlubyBcXHUwMDNjIEJGU19ST09UX0lOTykgfHwgKGlubyBcXHUwMDNlIEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNpX2xhc3RpKSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm8pO1xcbi1cXHRcXHRnb3RvIGVycm9yO1xcbi1cXHR9XFxuLVxcbi1cXHRibG9jayA9IChpbm8gLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgKyAxO1xcbi1cXHRiaCA9IHNiX2JyZWFkKGlub2RlLVxcdTAwM2VpX3NiLCBibG9jayk7XFxuLVxcdGlmICghYmgpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxcXFxuXFxcIiwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlubyk7XFxuLVxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdH1cXG4tXFxuLVxcdG9mZiA9IChpbm8gLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XFxuLVxcdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cXHUwMDNlYl9kYXRhICsgb2ZmO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogaHR0cHM6Ly9tYXJ0aW4uaGlubmVyLmluZm8vZnMvYmZzL2Jmcy1zdHJ1Y3R1cmUuaHRtbCBleHBsYWlucyB0aGF0XFxuLVxcdCAqIEJGUyBpbiBTQ08gVW5peFdhcmUgZW52aXJvbm1lbnQgdXNlZCBvbmx5IGxvd2VyIDkgYml0cyBvZiBkaS1cXHUwMDNlaV9tb2RlXFxuLVxcdCAqIHZhbHVlLiBUaGlzIG1lYW5zIHRoYXQsIGFsdGhvdWdoIGJmc193cml0ZV9pbm9kZSgpIHNhdmVzIHdob2xlXFxuLVxcdCAqIGlub2RlLVxcdTAwM2VpX21vZGUgYml0cyAod2hpY2ggaW5jbHVkZSBTX0lGTVQgYml0cyBhbmQgU19JU3tVSUQsR0lELFZUWH1cXG4tXFx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXFx1MDAzZWlfbW9kZSB2YWx1ZSBjYW4gYmUgZ2FyYmFnZSB3aGVuIHRoZXNlXFxuLVxcdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXFxuLVxcdCAqIFNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBtaWRkbGUgNyBiaXRzIGFyZSBnYXJiYWdlLCB1c2Ugb25seVxcbi1cXHQgKiBsb3dlciAxMiBiaXRzIChpLmUuIHRvbGVyYXRlIFNfSVN7VUlELEdJRCxWVFh9IGJpdHMgcG9zc2libHkgYmVpbmdcXG4tXFx0ICogZ2FyYmFnZSkgYW5kIHJlY29uc3RydWN0IFNfSUZNVCBiaXRzIGZvciBMaW51eCBlbnZpcm9ubWVudCBmcm9tXFxuLVxcdCAqIGRpLVxcdTAwM2VpX3Z0eXBlIHZhbHVlLlxcbi1cXHQgKi9cXG4tXFx0aW5vZGUtXFx1MDAzZWlfbW9kZSA9IDB4MDAwMDBGRkYgXFx1MDAyNiBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9tb2RlKTtcXG4tXFx0aWYgKGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX3Z0eXBlKSA9PSBCRlNfVkRJUikge1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlIHw9IFNfSUZESVI7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmJmc19kaXJfaW5vcHM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZiZnNfZGlyX29wZXJhdGlvbnM7XFxuLVxcdH0gZWxzZSBpZiAobGUzMl90b19jcHUoZGktXFx1MDAzZWlfdnR5cGUpID09IEJGU19WUkVHKSB7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUgfD0gU19JRlJFRztcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZiZnNfZmlsZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZiZnNfYW9wcztcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgICAgbGUzMl90b19jcHUoZGktXFx1MDAzZWlfdnR5cGUpLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgaW5vKTtcXG4tXFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbi1cXG4tXFx0QkZTX0koaW5vZGUpLVxcdTAwM2VpX3NibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9zYmxvY2spO1xcbi1cXHRCRlNfSShpbm9kZSktXFx1MDAzZWlfZWJsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2VibG9jayk7XFxuLVxcdEJGU19JKGlub2RlKS1cXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXFx1MDAzZWlfaW5vKTtcXG4tXFx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX3VpZCkpO1xcbi1cXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2dpZCkpO1xcbi1cXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX25saW5rKSk7XFxuLVxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBCRlNfRklMRVNJWkUoZGkpO1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSBCRlNfRklMRUJMT0NLUyhkaSk7XFxuLVxcdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXFx1MDAzZWlfYXRpbWUpLCAwKTtcXG4tXFx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9tdGltZSksIDApO1xcbi1cXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVxcdTAwM2VpX2N0aW1lKSwgMCk7XFxuLVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcXG4tXFx0cmV0dXJuIGlub2RlO1xcbi1cXG4tZXJyb3I6XFxuLVxcdGlnZXRfZmFpbGVkKGlub2RlKTtcXG4tXFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgYmZzX2lub2RlICpmaW5kX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBpbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKnApXFxuLXtcXG4tXFx0aWYgKChpbm8gXFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXFx1MDAzZSBCRlNfU0Ioc2IpLVxcdTAwM2VzaV9sYXN0aSkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJCYWQgaW5vZGUgbnVtYmVyICVzOiUwOHhcXFxcblxcXCIsIHNiLVxcdTAwM2VzX2lkLCBpbm8pO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5vIC09IEJGU19ST09UX0lOTztcXG4tXFxuLVxcdCpwID0gc2JfYnJlYWQoc2IsIDEgKyBpbm8gLyBCRlNfSU5PREVTX1BFUl9CTE9DSyk7XFxuLVxcdGlmICghKnApIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDh4XFxcXG5cXFwiLCBzYi1cXHUwMDNlc19pZCwgaW5vKTtcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAoc3RydWN0IGJmc19pbm9kZSAqKSgqcCktXFx1MDAzZWJfZGF0YSArICBpbm8gJSBCRlNfSU5PREVTX1BFUl9CTE9DSztcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0dW5zaWduZWQgaW50IGlubyA9ICh1MTYpaW5vZGUtXFx1MDAzZWlfaW5vO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFxuLVxcdGRwcmludGYoXFxcImlubz0lMDh4XFxcXG5cXFwiLCBpbm8pO1xcbi1cXG4tXFx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm8sIFxcdTAwMjZiaCk7XFxuLVxcdGlmIChJU19FUlIoZGkpKVxcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihkaSk7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcbi1cXHRpZiAoaW5vID09IEJGU19ST09UX0lOTylcXG4tXFx0XFx0ZGktXFx1MDAzZWlfdnR5cGUgPSBjcHVfdG9fbGUzMihCRlNfVkRJUik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZGktXFx1MDAzZWlfdnR5cGUgPSBjcHVfdG9fbGUzMihCRlNfVlJFRyk7XFxuLVxcbi1cXHRkaS1cXHUwMDNlaV9pbm8gPSBjcHVfdG9fbGUxNihpbm8pO1xcbi1cXHRkaS1cXHUwMDNlaV9tb2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtXFx1MDAzZWlfbW9kZSk7XFxuLVxcdGRpLVxcdTAwM2VpX3VpZCA9IGNwdV90b19sZTMyKGlfdWlkX3JlYWQoaW5vZGUpKTtcXG4tXFx0ZGktXFx1MDAzZWlfZ2lkID0gY3B1X3RvX2xlMzIoaV9naWRfcmVhZChpbm9kZSkpO1xcbi1cXHRkaS1cXHUwMDNlaV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLVxcdTAwM2VpX25saW5rKTtcXG4tXFx0ZGktXFx1MDAzZWlfYXRpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfYXRpbWVfc2VjKGlub2RlKSk7XFxuLVxcdGRpLVxcdTAwM2VpX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X210aW1lX3NlYyhpbm9kZSkpO1xcbi1cXHRkaS1cXHUwMDNlaV9jdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9jdGltZV9zZWMoaW5vZGUpKTtcXG4tXFx0aV9zYmxvY2sgPSBCRlNfSShpbm9kZSktXFx1MDAzZWlfc2Jsb2NrO1xcbi1cXHRkaS1cXHUwMDNlaV9zYmxvY2sgPSBjcHVfdG9fbGUzMihpX3NibG9jayk7XFxuLVxcdGRpLVxcdTAwM2VpX2VibG9jayA9IGNwdV90b19sZTMyKEJGU19JKGlub2RlKS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuLVxcbi1cXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLXtcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXG4tXFx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCAodTE2KWlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4tXFx0aWYgKElTX0VSUihkaSkpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKGRpKTtcXG4tXFxuLVxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4tXFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFx0ZXJyID0gbW1iX3N5bmMoXFx1MDAyNkJGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1vdXQ6XFxuLVxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgaW5vID0gaW5vZGUtXFx1MDAzZWlfaW5vO1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihzKTtcXG4tXFx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTtcXG4tXFxuLVxcdGRwcmludGYoXFxcImlubz0lMDhseFxcXFxuXFxcIiwgaW5vKTtcXG4tXFxuLVxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4tXFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9pbnZhbGlkYXRlKFxcdTAwMjZCRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4tXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbi1cXG4tXFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbi1cXHRpZiAoSVNfRVJSKGRpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHQvKiBjbGVhciBvbi1kaXNrIGlub2RlICovXFxuLVxcdG1lbXNldChkaSwgMCwgc2l6ZW9mKHN0cnVjdCBiZnNfaW5vZGUpKTtcXG4tXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRicmVsc2UoYmgpO1xcbi1cXG4tXFx0aWYgKGJpLVxcdTAwM2VpX2Rza19pbm8pIHtcXG4tXFx0XFx0aWYgKGJpLVxcdTAwM2VpX3NibG9jaylcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWIgKz0gYmktXFx1MDAzZWlfZWJsb2NrICsgMSAtIGJpLVxcdTAwM2VpX3NibG9jaztcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfZnJlZWkrKztcXG4tXFx0XFx0Y2xlYXJfYml0KGlubywgaW5mby1cXHUwMDNlc2lfaW1hcCk7XFxuLVxcdFxcdGJmc19kdW1wX2ltYXAoXFxcImV2aWN0X2lub2RlXFxcIiwgcyk7XFxuLVxcdH1cXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZpbGUsIG1ha2UgdGhlIHByZXZpb3VzIGJsb2NrXFxuLVxcdCAqIFxcXCJsYXN0IGJsb2NrIG9mIHRoZSBsYXN0IGZpbGVcXFwiIGV2ZW4gaWYgdGhlcmUgaXMgbm9cXG4tXFx0ICogcmVhbCBmaWxlIHRoZXJlLCBzYXZlcyB1cyAxIGdhcC5cXG4tXFx0ICovXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VzaV9sZl9lYmxrID09IGJpLVxcdTAwM2VpX2VibG9jaylcXG4tXFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGJpLVxcdTAwM2VpX3NibG9jayAtIDE7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4te1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcbi1cXHRpZiAoIWluZm8pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4tXFx0a2ZyZWUoaW5mbyk7XFxuLVxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LVxcdTAwM2VkX3NiO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XFxuLVxcdHU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX2Rldik7XFxuLVxcdGJ1Zi1cXHUwMDNlZl90eXBlID0gQkZTX01BR0lDO1xcbi1cXHRidWYtXFx1MDAzZWZfYnNpemUgPSBzLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IGluZm8tXFx1MDAzZXNpX2Jsb2NrcztcXG4tXFx0YnVmLVxcdTAwM2VmX2JmcmVlID0gYnVmLVxcdTAwM2VmX2JhdmFpbCA9IGluZm8tXFx1MDAzZXNpX2ZyZWViO1xcbi1cXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBpbmZvLVxcdTAwM2VzaV9sYXN0aSArIDEgLSBCRlNfUk9PVF9JTk87XFxuLVxcdGJ1Zi1cXHUwMDNlZl9mZnJlZSA9IGluZm8tXFx1MDAzZXNpX2ZyZWVpO1xcbi1cXHRidWYtXFx1MDAzZWZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTtcXG4tXFx0YnVmLVxcdTAwM2VmX25hbWVsZW4gPSBCRlNfTkFNRUxFTjtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmZzX2lub2RlX2NhY2hlcDtcXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi17XFxuLVxcdHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmk7XFxuLVxcdGJpID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIWJpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0bW1iX2luaXQoXFx1MDAyNmJpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmJpLVxcdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcXG4tXFxuLVxcdHJldHVybiBcXHUwMDI2YmktXFx1MDAzZXZmc19pbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRrbWVtX2NhY2hlX2ZyZWUoYmZzX2lub2RlX2NhY2hlcCwgQkZTX0koaW5vZGUpKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4te1xcbi1cXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gZm9vO1xcbi1cXG4tXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZiaS1cXHUwMDNldmZzX2lub2RlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpXFxuLXtcXG4tXFx0YmZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJiZnNfaW5vZGVfY2FjaGVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlX2luZm8pLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0U0xBQl9BQ0NPVU5UKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBpbml0X29uY2UpO1xcbi1cXHRpZiAoYmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKVxcbi17XFxuLVxcdC8qXFxuLVxcdCAqIE1ha2Ugc3VyZSBhbGwgZGVsYXllZCByY3UgZnJlZSBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlXFxuLVxcdCAqIGRlc3Ryb3kgY2FjaGUuXFxuLVxcdCAqL1xcbi1cXHRyY3VfYmFycmllcigpO1xcbi1cXHRrbWVtX2NhY2hlX2Rlc3Ryb3koYmZzX2lub2RlX2NhY2hlcCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4tXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuLVxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4tXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuLVxcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuLVxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbi1cXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbi1cXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbi19O1xcbi1cXG4tdm9pZCBiZnNfZHVtcF9pbWFwKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbi17XFxuLSNpZmRlZiBERUJVR1xcbi1cXHRpbnQgaTtcXG4tXFx0Y2hhciAqdG1wYnVmID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbi1cXG4tXFx0aWYgKCF0bXBidWYpXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0Zm9yIChpID0gQkZTX1NCKHMpLVxcdTAwM2VzaV9sYXN0aTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4tXFx0XFx0aWYgKGkgXFx1MDAzZSBQQUdFX1NJWkUgLSAxMDApIGJyZWFrO1xcbi1cXHRcXHRpZiAodGVzdF9iaXQoaSwgQkZTX1NCKHMpLVxcdTAwM2VzaV9pbWFwKSlcXG4tXFx0XFx0XFx0c3RyY2F0KHRtcGJ1ZiwgXFxcIjFcXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRzdHJjYXQodG1wYnVmLCBcXFwiMFxcXCIpO1xcbi1cXHR9XFxuLVxcdHByaW50ZihcXFwiJXM6IGxhc3RpPSUwOGx4IFxcdTAwM2Mlc1xcdTAwM2VcXFxcblxcXCIsIHByZWZpeCwgQkZTX1NCKHMpLVxcdTAwM2VzaV9sYXN0aSwgdG1wYnVmKTtcXG4tXFx0a2ZyZWUodG1wYnVmKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLXtcXG4tXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKnNiaDtcXG4tXFx0c3RydWN0IGJmc19zdXBlcl9ibG9jayAqYmZzX3NiO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi1cXHR1bnNpZ25lZCBpO1xcbi1cXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrLCBpX2VibG9jaywgaV9lb2ZmLCBzX3NpemU7XFxuLVxcdGludCBzaWxlbnQgPSBmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9TSUxFTlQ7XFxuLVxcbi1cXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbi1cXHRpZiAoIWluZm8pXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2ViZnNfbG9jayk7XFxuLVxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IGluZm87XFxuLVxcdHMtXFx1MDAzZXNfdGltZV9taW4gPSAwO1xcbi1cXHRzLVxcdTAwM2VzX3RpbWVfbWF4ID0gVTMyX01BWDtcXG4tXFxuLVxcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBCRlNfQlNJWkUpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHNiaCA9IHNiX2JyZWFkKHMsIDApO1xcbi1cXHRpZiAoIXNiaClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdGJmc19zYiA9IChzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICopc2JoLVxcdTAwM2ViX2RhdGE7XFxuLVxcdGlmIChsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfbWFnaWMpICE9IEJGU19NQUdJQykge1xcbi1cXHRcXHRpZiAoIXNpbGVudClcXG4tXFx0XFx0XFx0cHJpbnRmKFxcXCJObyBCRlMgZmlsZXN5c3RlbSBvbiAlcyAobWFnaWM9JTA4eClcXFxcblxcXCIsIHMtXFx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfbWFnaWMpKTtcXG4tXFx0XFx0Z290byBvdXQxO1xcbi1cXHR9XFxuLVxcdGlmIChCRlNfVU5DTEVBTihiZnNfc2IsIHMpIFxcdTAwMjZcXHUwMDI2ICFzaWxlbnQpXFxuLVxcdFxcdHByaW50ZihcXFwiJXMgaXMgdW5jbGVhbiwgY29udGludWluZ1xcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcbi1cXHRzLVxcdTAwM2VzX21hZ2ljID0gQkZTX01BR0lDO1xcbi1cXG4tXFx0aWYgKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19zdGFydCkgXFx1MDAzZSBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfZW5kKSB8fFxcbi1cXHQgICAgbGUzMl90b19jcHUoYmZzX3NiLVxcdTAwM2VzX3N0YXJ0KSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrKSArIHNpemVvZihzdHJ1Y3QgYmZzX2RpcmVudCkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJTdXBlcmJsb2NrIGlzIGNvcnJ1cHRlZCBvbiAlc1xcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5mby1cXHUwMDNlc2lfbGFzdGkgPSAobGUzMl90b19jcHUoYmZzX3NiLVxcdTAwM2VzX3N0YXJ0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkgKyBCRlNfUk9PVF9JTk8gLSAxO1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcXG4tXFx0XFx0cHJpbnRmKFxcXCJOT1RFOiBmaWxlc3lzdGVtICVzIHdhcyBjcmVhdGVkIHdpdGggNTEyIGlub2RlcywgdGhlIHJlYWwgbWF4aW11bSBpcyA1MTEsIG1vdW50aW5nIGFueXdheVxcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCk7XFxuLVxcdGVsc2UgaWYgKGluZm8tXFx1MDAzZXNpX2xhc3RpIFxcdTAwM2UgQkZTX01BWF9MQVNUSSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkltcG9zc2libGUgbGFzdCBpbm9kZSBudW1iZXIgJWx1IFxcdTAwM2UgJWQgb24gJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZXNpX2xhc3RpLCBCRlNfTUFYX0xBU1RJLCBzLVxcdTAwM2VzX2lkKTtcXG4tXFx0XFx0Z290byBvdXQxO1xcbi1cXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCRlNfUk9PVF9JTk87IGkrKylcXG4tXFx0XFx0c2V0X2JpdChpLCBpbmZvLVxcdTAwM2VzaV9pbWFwKTtcXG4tXFxuLVxcdHMtXFx1MDAzZXNfb3AgPSBcXHUwMDI2YmZzX3NvcHM7XFxuLVxcdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcXG4tXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUihpbm9kZSk7XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXHRzLVxcdTAwM2VzX3Jvb3QgPSBkX21ha2Vfcm9vdChpbm9kZSk7XFxuLVxcdGlmICghcy1cXHUwMDNlc19yb290KSB7XFxuLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0fVxcbi1cXG4tXFx0aW5mby1cXHUwMDNlc2lfYmxvY2tzID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19lbmQpICsgMSkgXFx1MDAzZVxcdTAwM2UgQkZTX0JTSVpFX0JJVFM7XFxuLVxcdGluZm8tXFx1MDAzZXNpX2ZyZWViID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19lbmQpICsgMSAtIGxlMzJfdG9fY3B1KGJmc19zYi1cXHUwMDNlc19zdGFydCkpIFxcdTAwM2VcXHUwMDNlIEJGU19CU0laRV9CSVRTO1xcbi1cXHRpbmZvLVxcdTAwM2VzaV9mcmVlaSA9IDA7XFxuLVxcdGluZm8tXFx1MDAzZXNpX2xmX2VibGsgPSAwO1xcbi1cXG4tXFx0LyogY2FuIHdlIHJlYWQgdGhlIGxhc3QgYmxvY2s/ICovXFxuLVxcdGJoID0gc2JfYnJlYWQocywgaW5mby1cXHUwMDNlc2lfYmxvY2tzIC0gMSk7XFxuLVxcdGlmICghYmgpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcXFxuXFxcIiwgcy1cXHUwMDNlc19pZCwgaW5mby1cXHUwMDNlc2lfYmxvY2tzIC0gMSk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0MjtcXG4tXFx0fVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXG4tXFx0YmggPSBOVUxMO1xcbi1cXHRmb3IgKGkgPSBCRlNfUk9PVF9JTk87IGkgXFx1MDAzYz0gaW5mby1cXHUwMDNlc2lfbGFzdGk7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4tXFx0XFx0aW50IGJsb2NrID0gKGkgLSBCRlNfUk9PVF9JTk8pIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0sgKyAxO1xcbi1cXHRcXHRpbnQgb2ZmID0gKGkgLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgZWJsb2NrO1xcbi1cXG4tXFx0XFx0aWYgKCFvZmYpIHtcXG4tXFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4tXFx0XFx0XFx0YmggPSBzYl9icmVhZChzLCBibG9jayk7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghYmgpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0ZGkgPSAoc3RydWN0IGJmc19pbm9kZSAqKWJoLVxcdTAwM2ViX2RhdGEgKyBvZmY7XFxuLVxcbi1cXHRcXHQvKiB0ZXN0IGlmIGZpbGVzeXN0ZW0gaXMgbm90IGNvcnJ1cHRlZCAqL1xcbi1cXG4tXFx0XFx0aV9lb2ZmID0gbGUzMl90b19jcHUoZGktXFx1MDAzZWlfZW9mZnNldCk7XFxuLVxcdFxcdGlfc2Jsb2NrID0gbGUzMl90b19jcHUoZGktXFx1MDAzZWlfc2Jsb2NrKTtcXG4tXFx0XFx0aV9lYmxvY2sgPSBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRcXHRzX3NpemUgPSBsZTMyX3RvX2NwdShiZnNfc2ItXFx1MDAzZXNfZW5kKTtcXG4tXFxuLVxcdFxcdGlmIChpX3NibG9jayBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2Jsb2NrcyB8fFxcbi1cXHRcXHRcXHRpX2VibG9jayBcXHUwMDNlIGluZm8tXFx1MDAzZXNpX2Jsb2NrcyB8fFxcbi1cXHRcXHRcXHRpX3NibG9jayBcXHUwMDNlIGlfZWJsb2NrIHx8XFxuLVxcdFxcdFxcdChpX2VvZmYgIT0gbGUzMl90b19jcHUoLTEpIFxcdTAwMjZcXHUwMDI2IGlfZW9mZiBcXHUwMDNlIHNfc2l6ZSkgfHxcXG4tXFx0XFx0XFx0aV9zYmxvY2sgKiBCRlNfQlNJWkUgXFx1MDAzZSBpX2VvZmYpIHtcXG4tXFxuLVxcdFxcdFxcdHByaW50ZihcXFwiSW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcXFxuXFxcIiwgaSwgcy1cXHUwMDNlc19pZCk7XFxuLVxcbi1cXHRcXHRcXHRicmVsc2UoYmgpO1xcbi1cXHRcXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRcXHRnb3RvIG91dDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghZGktXFx1MDAzZWlfaW5vKSB7XFxuLVxcdFxcdFxcdGluZm8tXFx1MDAzZXNpX2ZyZWVpKys7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNldF9iaXQoaSwgaW5mby1cXHUwMDNlc2lfaW1hcCk7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXNpX2ZyZWViIC09IEJGU19GSUxFQkxPQ0tTKGRpKTtcXG4tXFxuLVxcdFxcdGVibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cXHUwMDNlaV9lYmxvY2spO1xcbi1cXHRcXHRpZiAoZWJsb2NrIFxcdTAwM2UgaW5mby1cXHUwMDNlc2lfbGZfZWJsaylcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlc2lfbGZfZWJsayA9IGVibG9jaztcXG4tXFx0fVxcbi1cXHRicmVsc2UoYmgpO1xcbi1cXHRicmVsc2Uoc2JoKTtcXG4tXFx0YmZzX2R1bXBfaW1hcChcXFwiZmlsbF9zdXBlclxcXCIsIHMpO1xcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLW91dDI6XFxuLVxcdGRwdXQocy1cXHUwMDNlc19yb290KTtcXG4tXFx0cy1cXHUwMDNlc19yb290ID0gTlVMTDtcXG4tb3V0MTpcXG4tXFx0YnJlbHNlKHNiaCk7XFxuLW91dDpcXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2aW5mby1cXHUwMDNlYmZzX2xvY2spO1xcbi1cXHRrZnJlZShpbmZvKTtcXG4tXFx0cy1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBiZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi17XFxuLVxcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBiZnNfZmlsbF9zdXBlcik7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJmc19jb250ZXh0X29wcyA9IHtcXG4tXFx0LmdldF90cmVlID0gYmZzX2dldF90cmVlLFxcbi19O1xcbi1cXG4tc3RhdGljIGludCBiZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4te1xcbi1cXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmJmc19jb250ZXh0X29wcztcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7XFxuLVxcdC5vd25lclxcdFxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiYmZzXFxcIixcXG4tXFx0LmluaXRfZnNfY29udGV4dFxcdD0gYmZzX2luaXRfZnNfY29udGV4dCxcXG4tXFx0LmtpbGxfc2JcXHRcXHQ9IGtpbGxfYmxvY2tfc3VwZXIsXFxuLVxcdC5mc19mbGFnc1xcdFxcdD0gRlNfUkVRVUlSRVNfREVWLFxcbi19O1xcbi1NT0RVTEVfQUxJQVNfRlMoXFxcImJmc1xcXCIpO1xcbi1cXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcXG4te1xcbi1cXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0MTtcXG4tXFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2YmZzX2ZzX3R5cGUpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0cmV0dXJuIDA7XFxuLW91dDpcXG4tXFx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XFxuLW91dDE6XFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxcbi17XFxuLVxcdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2YmZzX2ZzX3R5cGUpO1xcbi1cXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcXG4tfVxcbi1cXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXFxuLW1vZHVsZV9leGl0KGV4aXRfYmZzX2ZzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXFxuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXFxuQEAgLTE3LDcgKzE3LDcgQEBcXG4gXFxuIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBrbm93bl9mc1tdID0ge1xcbiBcXHRcXFwiOXBcXFwiLCBcXFwiYWRmc1xcXCIsIFxcXCJhZmZzXFxcIiwgXFxcImFmc1xcXCIsIFxcXCJhaW9cXFwiLCBcXFwiYW5vbl9pbm9kZWZzXFxcIiwgXFxcImFwcGFybW9yZnNcXFwiLFxcbi1cXHRcXFwiYXV0b2ZzXFxcIiwgXFxcImJjYWNoZWZzXFxcIiwgXFxcImJkZXZcXFwiLCBcXFwiYmVmc1xcXCIsIFxcXCJiZnNcXFwiLCBcXFwiYmluZGVyXFxcIiwgXFxcImJpbmZtdF9taXNjXFxcIixcXG4rXFx0XFxcImF1dG9mc1xcXCIsIFxcXCJiY2FjaGVmc1xcXCIsIFxcXCJiZGV2XFxcIiwgXFxcImJlZnNcXFwiLCBcXFwiYmluZGVyXFxcIiwgXFxcImJpbmZtdF9taXNjXFxcIixcXG4gXFx0XFxcImJwZlxcXCIsIFxcXCJidHJmc1xcXCIsIFxcXCJidHJmc190ZXN0X2ZzXFxcIiwgXFxcImNlcGhcXFwiLCBcXFwiY2dyb3VwXFxcIiwgXFxcImNncm91cDJcXFwiLCBcXFwiY2lmc1xcXCIsXFxuIFxcdFxcXCJjb2RhXFxcIiwgXFxcImNvbmZpZ2ZzXFxcIiwgXFxcImNwdXNldFxcXCIsIFxcXCJjcmFtZnNcXFwiLCBcXFwiY3hsXFxcIiwgXFxcImRheFxcXCIsIFxcXCJkZWJ1Z2ZzXFxcIixcXG4gXFx0XFxcImRldnB0c1xcXCIsIFxcXCJkZXZ0bXBmc1xcXCIsIFxcXCJkbWFidWZcXFwiLCBcXFwiZHJtXFxcIiwgXFxcImVjcnlwdGZzXFxcIiwgXFxcImVmaXZhcmZzXFxcIiwgXFxcImVmc1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjY3MTMyMDIzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc5OTc3MDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQwOTQ1ZDExZjM5NjlmMDRiNDZkMDYxMmExYmNlY2E3OTU4NTVmODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQxOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFNcbmluZGV4IGJiYTUwNzFjMjlhNWQuLmM1NzBkZDdlZWJiZGUgMTAwNjQ0XG4tLS0gYS9DUkVESVRTXG4rKysgYi9DUkVESVRTXG5AQCAtNTcsNyArNTcsNyBAQCBTOiBMb25nZm9yZCwgSXJlbGFuZFxuIFM6IFN5ZG5leSwgQXVzdHJhbGlhXG4gXG4gTjogVGlncmFuIEEuIEFpdmF6aWFuXG4tRTogdGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrXG4rRTogYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVxuIFc6IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlc1xuIEQ6IEJGUyBmaWxlc3lzdGVtXG4gRDogSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHVwZGF0ZSBzdXBwb3J0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy5yc3RcbmluZGV4IGEyMmY2MDNiMjkzOGUuLmMxZGJmZTljOTVkMjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMucnN0XG5AQCAtNDQsOCArNDQsOCBAQCBpbXBsZW1lbnRhdGlvbi5cbiBXaGljaCBpcyBpdCwgQkZTIG9yIEJFRlM/XG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuIEJlLCBJbmMgc2FpZCwgXCJCZU9TIEZpbGVzeXN0ZW0gaXMgb2ZmaWNpYWxseSBjYWxsZWQgQkZTLCBub3QgQmVGU1wiLlxuLUJ1dCBVbml4d2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLiBBbmQgdGhleSBhcmUgYWxyZWFkeSBpblxuLXRoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1pbmcgY29uZmxpY3QsIG9uIExpbnV4IHRoZSBCZU9TXG4rQnV0IHRoZSBVbml4V2FyZSBCb290IEZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJmcywgdG9vLCBhbmQgaXQgd2FzIGFscmVhZHlcbitpbiB0aGUga2VybmVsLiBCZWNhdXNlIG9mIHRoaXMgbmFtaW5nIGNvbmZsaWN0LCBvbiBMaW51eCB0aGUgQmVPU1xuIGZpbGVzeXN0ZW0gaXMgY2FsbGVkIGJlZnMuXG4gXG4gSG93IHRvIEluc3RhbGxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2UxNGI5MDE4ODA3Mi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMucnN0XG4rKysgL2Rldi9udWxsXG5AQCAtMSw2MCArMCwwIEBAXG4tLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi09PT09PT09PT09PT09PT09PT09PT09PT1cbi1CRlMgRmlsZXN5c3RlbSBmb3IgTGludXhcbi09PT09PT09PT09PT09PT09PT09PT09PT1cbi1cbi1UaGUgQkZTIGZpbGVzeXN0ZW0gaXMgdXNlZCBieSBTQ08gVW5peFdhcmUgT1MgZm9yIHRoZSAvc3RhbmQgc2xpY2UsIHdoaWNoXG4tdXN1YWxseSBjb250YWlucyB0aGUga2VybmVsIGltYWdlIGFuZCBhIGZldyBvdGhlciBmaWxlcyByZXF1aXJlZCBmb3IgdGhlXG4tYm9vdCBwcm9jZXNzLlxuLVxuLUluIG9yZGVyIHRvIGFjY2VzcyAvc3RhbmQgcGFydGl0aW9uIHVuZGVyIExpbnV4IHlvdSBvYnZpb3VzbHkgbmVlZCB0b1xuLWtub3cgdGhlIHBhcnRpdGlvbiBudW1iZXIgYW5kIHRoZSBrZXJuZWwgbXVzdCBzdXBwb3J0IFVuaXhXYXJlIGRpc2sgc2xpY2VzXG4tKENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgY29uZmlnIG9wdGlvbikuIEhvd2V2ZXIgQkZTIHN1cHBvcnQgZG9lcyBub3Rcbi1kZXBlbmQgb24gaGF2aW5nIFVuaXhXYXJlIGRpc2tsYWJlbCBzdXBwb3J0IGJlY2F1c2Ugb25lIGNhbiBhbHNvIG1vdW50XG4tQkZTIGZpbGVzeXN0ZW0gdmlhIGxvb3BiYWNrOjpcbi1cbi0gICAgIyBsb3NldHVwIC9kZXYvbG9vcDAgc3RhbmQuaW1nXG4tICAgICMgbW91bnQgLXQgYmZzIC9kZXYvbG9vcDAgL21udC9zdGFuZFxuLVxuLXdoZXJlIHN0YW5kLmltZyBpcyBhIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2Ugb2YgQkZTIGZpbGVzeXN0ZW0uXG4tV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB1c2luZyBpdCBhbmQgdW1vdW50ZWQgeW91IG5lZWQgdG8gYWxzbyBkZWFsbG9jYXRlXG4tL2Rldi9sb29wMCBkZXZpY2UgYnk6OlxuLVxuLSAgICAjIGxvc2V0dXAgLWQgL2Rldi9sb29wMFxuLVxuLVlvdSBjYW4gc2ltcGxpZnkgbW91bnRpbmcgYnkganVzdCB0eXBpbmc6OlxuLVxuLSAgICAjIG1vdW50IC10IGJmcyAtbyBsb29wIHN0YW5kLmltZyAvbW50L3N0YW5kXG4tXG4tdGhpcyB3aWxsIGFsbG9jYXRlIHRoZSBmaXJzdCBhdmFpbGFibGUgbG9vcGJhY2sgZGV2aWNlIChhbmQgbG9hZCBsb29wLm9cbi1rZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3Rcbi1sb2FkZWQgYXV0b21hdGljYWxseSwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgY29tcGlsZWQgdGhlIG1vZHVsZSBhbmRcbi10aGF0IG1vZHByb2JlIGlzIGZ1bmN0aW9uaW5nLiBCZXdhcmUgdGhhdCB1bW91bnQgd2lsbCBub3QgZGVhbGxvY2F0ZVxuLS9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEgc3ltYm9saWMgbGluayB0b1xuLS9wcm9jL21vdW50cy4gWW91IHdpbGwgbmVlZCB0byBkbyBpdCBtYW51YWxseSB1c2luZyBcIi1kXCIgc3dpdGNoIG9mXG4tbG9zZXR1cCg4KS4gUmVhZCBsb3NldHVwKDgpIG1hbnBhZ2UgZm9yIG1vcmUgaW5mby5cbi1cbi1UbyBjcmVhdGUgdGhlIEJGUyBpbWFnZSB1bmRlciBVbml4V2FyZSB5b3UgbmVlZCB0byBmaW5kIG91dCBmaXJzdCB3aGljaFxuLXNsaWNlIGNvbnRhaW5zIGl0LiBUaGUgY29tbWFuZCBwcnR2dG9jKDFNKSBpcyB5b3VyIGZyaWVuZDo6XG4tXG4tICAgICMgcHJ0dnRvYyAvZGV2L3Jkc2svYzBiMHQwZDBzMFxuLVxuLShhc3N1bWluZyB5b3VyIHJvb3QgZGlzayBpcyBvbiB0YXJnZXQ9MCwgbHVuPTAsIGJ1cz0wLCBjb250cm9sbGVyPTApLiBUaGVuIHlvdVxuLWxvb2sgZm9yIHRoZSBzbGljZSB3aXRoIHRhZyBcIlNUQU5EXCIsIHdoaWNoIGlzIHVzdWFsbHkgc2xpY2UgMTAuIFdpdGggdGhpc1xuLWluZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGRkKDEpIHRvIGNyZWF0ZSB0aGUgQkZTIGltYWdlOjpcbi1cbi0gICAgIyB1bW91bnQgL3N0YW5kXG4tICAgICMgZGQgaWY9L2Rldi9yZHNrL2MwYjB0MGQwc2Egb2Y9c3RhbmQuaW1nIGJzPTUxMlxuLVxuLUp1c3QgaW4gY2FzZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBkb25lIHRoZSByaWdodCB0aGluZyBieSBjaGVja2luZ1xuLXRoZSBtYWdpYyBudW1iZXI6OlxuLVxuLSAgICAjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmVcbi1cbi1UaGUgZmlyc3QgNCBieXRlcyBzaG91bGQgYmUgMHgxYmFkZmFjZS5cbi1cbi1JZiB5b3UgaGF2ZSBhbnkgcGF0Y2hlcywgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIEJGU1xuLWltcGxlbWVudGF0aW9uIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6XG4tXG4tVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5pbmRleCA3MzRhNDVlNTE2Njc1Li43Y2NlN2NjMjhkMTI2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5kZXgucnN0XG5AQCAtNzUsNyArNzUsNiBAQCBEb2N1bWVudGF0aW9uIGZvciBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy5cbiAgICBhdXRvZnNcbiAgICBhdXRvZnMtbW91bnQtY29udHJvbFxuICAgIGJlZnNcbi0gICBiZnNcbiAgICBidHJmc1xuICAgIGNlcGhcbiAgICBjb2RhXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZmMzMjBiMzczNjU2Zi4uMzg1MzA5NTU2NzA1ZSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTQ2MjcsMTMgKzQ2MjcsNiBAQCBTOlx0T2RkIEZpeGVzXG4gRjpcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XG4gRjpcdGJsb2NrL2JmcS0qXG4gXG4tQkZTIEZJTEUgU1lTVEVNXG4tTTpcdFwiVGlncmFuIEEuIEFpdmF6aWFuXCIgXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLVM6XHRNYWludGFpbmVkXG4tRjpcdERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnJzdFxuLUY6XHRmcy9iZnMvXG4tRjpcdGluY2x1ZGUvdWFwaS9saW51eC9iZnNfZnMuaFxuLVxuIEJJVE1BUCBBUElcbiBNOlx0WXVyeSBOb3JvdiBcdTAwM2N5dXJ5Lm5vcm92QGdtYWlsLmNvbVx1MDAzZVxuIFI6XHRSYXNtdXMgVmlsbGVtb2VzIFx1MDAzY2xpbnV4QHJhc211c3ZpbGxlbW9lcy5ka1x1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuaW5kZXggNTZhOGY3NmRhYjQxNC4uNGZiNGQ0NWYzY2RjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZ1xuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnXG5AQCAtMzMzLDcgKzMzMyw2IEBAIENPTkZJR19BRkZTX0ZTPW1cbiBDT05GSUdfSEZTX0ZTPW1cbiBDT05GSUdfSEZTUExVU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19KRkZTMl9GUz1tXG4gQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZ1xuaW5kZXggODVlOTVjMGFlNDEwNy4uM2QxYzMyZDM0NzVlNyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWdcbkBAIC0zNDAsNyArMzQwLDYgQEAgQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19IRlNQTFVTX0ZTPW1cbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0VGU19GUz1tXG4gQ09ORklHX0pGRlMyX0ZTPW1cbiBDT05GSUdfSkZGUzJfRlNfWEFUVFI9eVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuaW5kZXggMDQ5OGEwMTE1MzQ5MC4uMjU0NTE2OGI3NWJiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZ1xuKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnXG5AQCAtMzM5LDcgKzMzOSw2IEBAIENPTkZJR19BRkZTX0ZTPW1cbiBDT05GSUdfSEZTX0ZTPW1cbiBDT05GSUdfSEZTUExVU19GUz1tXG4gQ09ORklHX0JFRlNfRlM9bVxuLUNPTkZJR19CRlNfRlM9bVxuIENPTkZJR19FRlNfRlM9bVxuIENPTkZJR19KRkZTMl9GUz1tXG4gQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbmluZGV4IDA5ZTAwNmM3Y2Q3YzYuLmNkMmE4MzE2MTRjODkgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWdcbisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZ1xuQEAgLTMxOCw3ICszMTgsNiBAQCBDT05GSUdfQURGU19GUz1tXG4gQ09ORklHX0FGRlNfRlM9bVxuIENPTkZJR19IRlNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfQ1JBTUZTPW1cbiBDT05GSUdfVlhGU19GUz1tXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xuaW5kZXggMzkxYzk5MTE3ZWUwNi4uNjg4MDUxYjExY2UxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZ1xuQEAgLTIsNyArMiw2IEBAIENPTkZJR19BREZTX0ZTPW1cbiBDT05GSUdfQUZGU19GUz1tXG4gQ09ORklHX0FVRElUPXlcbiBDT05GSUdfQkVGU19GUz1tXG4tQ09ORklHX0JGU19GUz1tXG4gQ09ORklHX0JJTkZNVF9NSVNDPW1cbiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG4gQ09ORklHX0JMS19ERVZfSU5JVFJEPXlcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZ1xuaW5kZXggYWNmZmM1YzE3ZjkyZC4uOGFhYjIyOWZiOTA5NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWdcbkBAIC05NDUsNyArOTQ1LDYgQEAgQ09ORklHX0VDUllQVF9GUz1tXG4gQ09ORklHX0hGU19GUz1tXG4gQ09ORklHX0hGU1BMVVNfRlM9bVxuIENPTkZJR19CRUZTX0ZTPW1cbi1DT05GSUdfQkZTX0ZTPW1cbiBDT05GSUdfRUZTX0ZTPW1cbiBDT05GSUdfQ1JBTUZTPW1cbiBDT05GSUdfVlhGU19GUz1tXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGUwNTkxN2FkY2Q2MDguLjFjYjBiM2E4YjEyY2EgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMzE0LDcgKzMxNCw2IEBAIHNvdXJjZSBcImZzL2VjcnlwdGZzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2hmcy9LY29uZmlnXCJcbiBzb3VyY2UgXCJmcy9oZnNwbHVzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2JlZnMvS2NvbmZpZ1wiXG4tc291cmNlIFwiZnMvYmZzL0tjb25maWdcIlxuIHNvdXJjZSBcImZzL2pmZnMyL0tjb25maWdcIlxuICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvblxuIHNvdXJjZSBcImZzL3ViaWZzL0tjb25maWdcIlxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcbmluZGV4IDA1NWRmYzIzZDgyYjYuLjE2ZjExMDhiNjRlMWEgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC03Niw3ICs3Niw2IEBAIG9iai0kKENPTkZJR19DT0RBX0ZTKVx0XHQrPSBjb2RhL1xuIG9iai0kKENPTkZJR19NSU5JWF9GUylcdFx0Kz0gbWluaXgvXG4gb2JqLSQoQ09ORklHX0ZBVF9GUylcdFx0Kz0gZmF0L1xuIG9iai0kKENPTkZJR19FWEZBVF9GUylcdFx0Kz0gZXhmYXQvXG4tb2JqLSQoQ09ORklHX0JGU19GUylcdFx0Kz0gYmZzL1xuIG9iai0kKENPTkZJR19JU085NjYwX0ZTKVx0Kz0gaXNvZnMvXG4gb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpXHQrPSBoZnNwbHVzLyAjIEJlZm9yZSBoZnMgdG8gZmluZCB3cmFwcGVkIEhGUytcbiBvYmotJChDT05GSUdfSEZTX0ZTKVx0XHQrPSBoZnMvXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL0tjb25maWcgYi9mcy9iZnMvS2NvbmZpZ1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA4ZTdlZjg2NmI2MmE2Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvS2NvbmZpZ1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMjEgKzAsMCBAQFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLWNvbmZpZyBCRlNfRlNcbi1cdHRyaXN0YXRlIFwiQkZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcIlxuLVx0ZGVwZW5kcyBvbiBCTE9DS1xuLVx0c2VsZWN0IEJVRkZFUl9IRUFEXG4tXHRoZWxwXG4tXHQgIEJvb3QgRmlsZSBTeXN0ZW0gKEJGUykgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIHVuZGVyIFNDTyBVbml4V2FyZSB0b1xuLVx0ICBhbGxvdyB0aGUgYm9vdGxvYWRlciBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBpbWFnZSBhbmQgb3RoZXIgaW1wb3J0YW50XG4tXHQgIGZpbGVzIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiAgSXQgaXMgdXN1YWxseSBtb3VudGVkIHVuZGVyIC9zdGFuZFxuLVx0ICBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIHNsaWNlIG1hcmtlZCBhcyBcIlNUQU5EXCIgaW4gdGhlIFVuaXhXYXJlXG4tXHQgIHBhcnRpdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGUgZmlsZXNcbi1cdCAgb24geW91ciAvc3RhbmQgc2xpY2UgZnJvbSB3aXRoaW4gTGludXguICBZb3UgdGhlbiBhbHNvIG5lZWQgdG8gc2F5IFlcbi1cdCAgdG8gXCJVbml4V2FyZSBzbGljZXMgc3VwcG9ydFwiLCBiZWxvdy4gIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJGU1xuLVx0ICBmaWxlIHN5c3RlbSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGVcbi1cdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy5yc3RcdTAwM2UuXG4tXG4tXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBhYm91dCwgc2F5IE4uXG4tXG4tXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuLVx0ICBiZnMuICBOb3RlIHRoYXQgdGhlIGZpbGUgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gKHRoZSBvbmVcbi1cdCAgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdCBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS5cbmRpZmYgLS1naXQgYS9mcy9iZnMvTWFrZWZpbGUgYi9mcy9iZnMvTWFrZWZpbGVcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMmI2YmM1ZWI0ZGU5Yy4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL01ha2VmaWxlXG4rKysgL2Rldi9udWxsXG5AQCAtMSw4ICswLDAgQEBcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi0jXG4tIyBNYWtlZmlsZSBmb3IgQkZTIGZpbGVzeXN0ZW0uXG4tI1xuLVxuLW9iai0kKENPTkZJR19CRlNfRlMpICs9IGJmcy5vXG4tXG4tYmZzLW9ianMgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm9cbmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjA4YWZlNzMzZTYzMi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Jmcy5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSw2OSArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbi0vKlxuLSAqXHRmcy9iZnMvYmZzLmhcbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggVGlncmFuIEFpdmF6aWFuIFx1MDAzY2FpdmF6aWFuLnRpZ3JhbkBnbWFpbC5jb21cdTAwM2Vcbi0gKi9cbi0jaWZuZGVmIF9GU19CRlNfQkZTX0hcbi0jZGVmaW5lIF9GU19CRlNfQkZTX0hcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iZnNfZnMuaFx1MDAzZVxuLVxuLS8qIEluIHRoZW9yeSBCRlMgc3VwcG9ydHMgdXAgdG8gNTEyIGlub2RlcywgbnVtYmVyZWQgZnJvbSAyIChmb3IgLykgdXAgdG8gNTEzIGluY2x1c2l2ZS5cbi0gICBJbiBhY3R1YWwgZmFjdCwgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIDUxMnRoIGlub2RlIChpLmUuIGlub2RlIE5vLiA1MTMgb3IgZmlsZSBOby4gNTExKVxuLSAgIHdpbGwgZmFpbCB3aXRoIEVOT1NQQyBpbiBiZnNfYWRkX2VudHJ5KCk6IHRoZSByb290IGRpcmVjdG9yeSBjYW5ub3QgY29udGFpbiBzbyBtYW55IGVudHJpZXMsIGNvdW50aW5nICcuLicuXG4tICAgU28sIG1rZnMuYmZzKDgpIHNob3VsZCByZWFsbHkgbGltaXQgaXRzIC1OIG9wdGlvbiB0byA1MTEgYW5kIG5vdCA1MTIuIEZvciBub3csIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nXG4tICAgaWYgYSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBzdWNoIFwiaW1wb3NzaWJsZSB0byBmaWxsIHVwXCIgbnVtYmVyIG9mIGlub2RlcyAqL1xuLSNkZWZpbmUgQkZTX01BWF9MQVNUSVx0NTEzXG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBzdXBlcmJsb2NrIGluZm9cbi0gKi9cbi1zdHJ1Y3QgYmZzX3NiX2luZm8ge1xuLVx0dW5zaWduZWQgbG9uZyBzaV9ibG9ja3M7XG4tXHR1bnNpZ25lZCBsb25nIHNpX2ZyZWViO1xuLVx0dW5zaWduZWQgbG9uZyBzaV9mcmVlaTtcbi1cdHVuc2lnbmVkIGxvbmcgc2lfbGZfZWJsaztcbi1cdHVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7XG4tXHRERUNMQVJFX0JJVE1BUChzaV9pbWFwLCBCRlNfTUFYX0xBU1RJKzEpO1xuLVx0c3RydWN0IG11dGV4IGJmc19sb2NrO1xuLX07XG4tXG4tLypcbi0gKiBCRlMgZmlsZSBzeXN0ZW0gaW4tY29yZSBpbm9kZSBpbmZvXG4tICovXG4tc3RydWN0IGJmc19pbm9kZV9pbmZvIHtcbi1cdHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAvKiBpbm9kZSBudW1iZXIgZnJvbSB0aGUgZGlzaywgY2FuIGJlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4tXHR1bnNpZ25lZCBsb25nIGlfZWJsb2NrO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuLVx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbi19O1xuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJmc19zYl9pbmZvICpCRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4tfVxuLVxuLVxuLSNkZWZpbmUgcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgXFxcbi1cdHByaW50ayhLRVJOX0VSUiBcIkJGUy1mczogJXMoKTogXCIgZm9ybWF0LCBfX2Z1bmNfXywgIyMgYXJncylcbi1cbi0vKiBpbm9kZS5jICovXG4tZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pO1xuLWV4dGVybiB2b2lkIGJmc19kdW1wX2ltYXAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4tXG4tLyogZmlsZS5jICovXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19maWxlX29wZXJhdGlvbnM7XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHM7XG4tXG4tLyogZGlyLmMgKi9cbi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmZzX2Rpcl9pbm9wcztcbi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnM7XG4tXG4tI2VuZGlmIC8qIF9GU19CRlNfQkZTX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggOTFhNDg3MWZhMDUxOS4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwzNTYgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2Rpci5jXG4tICpcdEJGUyBkaXJlY3Rvcnkgb3BlcmF0aW9ucy5cbi0gKlx0Q29weXJpZ2h0IChDKSAxOTk5LTIwMTggIFRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXG4tICogIE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlIDIwMDVcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFwiYmZzLmhcIlxuLVxuLSN1bmRlZiBERUJVR1xuLVxuLSNpZmRlZiBERUJVR1xuLSNkZWZpbmUgZHByaW50Zih4Li4uKVx0cHJpbnRmKHgpXG4tI2Vsc2Vcbi0jZGVmaW5lIGRwcmludGYoeC4uLilcbi0jZW5kaWZcbi1cbi1zdGF0aWMgaW50IGJmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwgaW50IGlubyk7XG4tc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqYmZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqY2hpbGQsXG4tXHRcdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpO1xuLVxuLXN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShmKTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IGJsb2NrO1xuLVxuLVx0aWYgKGN0eC1cdTAwM2Vwb3MgXHUwMDI2IChCRlNfRElSRU5UX1NJWkUgLSAxKSkge1xuLVx0XHRwcmludGYoXCJCYWQgZl9wb3M9JTA4bHggZm9yICVzOiUwOGxseFxcblwiLFxuLVx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljdHgtXHUwMDNlcG9zLFxuLVx0XHRcdFx0XHRkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBkaXItXHUwMDNlaV9pbm8pO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHdoaWxlIChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSB7XG4tXHRcdG9mZnNldCA9IGN0eC1cdTAwM2Vwb3MgXHUwMDI2IChCRlNfQlNJWkUgLSAxKTtcbi1cdFx0YmxvY2sgPSBCRlNfSShkaXIpLVx1MDAzZWlfc2Jsb2NrICsgKGN0eC1cdTAwM2Vwb3MgXHUwMDNlXHUwMDNlIEJGU19CU0laRV9CSVRTKTtcbi1cdFx0YmggPSBzYl9icmVhZChkaXItXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0XHRpZiAoIWJoKSB7XG4tXHRcdFx0Y3R4LVx1MDAzZXBvcyArPSBCRlNfQlNJWkUgLSBvZmZzZXQ7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0ZG8ge1xuLVx0XHRcdGRlID0gKHN0cnVjdCBiZnNfZGlyZW50ICopKGJoLVx1MDAzZWJfZGF0YSArIG9mZnNldCk7XG4tXHRcdFx0aWYgKGRlLVx1MDAzZWlubykge1xuLVx0XHRcdFx0aW50IHNpemUgPSBzdHJubGVuKGRlLVx1MDAzZW5hbWUsIEJGU19OQU1FTEVOKTtcbi1cdFx0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VuYW1lLCBzaXplLFxuLVx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyksXG4tXHRcdFx0XHRcdFx0RFRfVU5LTk9XTikpIHtcbi1cdFx0XHRcdFx0YnJlbHNlKGJoKTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdG9mZnNldCArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdFx0Y3R4LVx1MDAzZXBvcyArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdH0gd2hpbGUgKChvZmZzZXQgXHUwMDNjIEJGU19CU0laRSkgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlcG9zIFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4tXHQuaXRlcmF0ZV9zaGFyZWRcdD0gYmZzX3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLXtcbi1cdGludCBlcnI7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGlyLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1bnNpZ25lZCBsb25nIGlubztcbi1cbi1cdGlub2RlID0gbmV3X2lub2RlKHMpO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0aW5vID0gZmluZF9maXJzdF96ZXJvX2JpdChpbmZvLVx1MDAzZXNpX2ltYXAsIGluZm8tXHUwMDNlc2lfbGFzdGkgKyAxKTtcbi1cdGlmIChpbm8gXHUwMDNlIGluZm8tXHUwMDNlc2lfbGFzdGkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRpcHV0KGlub2RlKTtcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tXHR9XG4tXHRzZXRfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWktLTtcbi1cdGlub2RlX2luaXRfb3duZXIoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGRpciwgbW9kZSk7XG4tXHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IDA7XG4tXHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XG4tXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmJmc19maWxlX29wZXJhdGlvbnM7XG4tXHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZiZnNfYW9wcztcbi1cdGlub2RlLVx1MDAzZWlfaW5vID0gaW5vO1xuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfZHNrX2lubyA9IGlubztcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX3NibG9jayA9IDA7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9lYmxvY2sgPSAwO1xuLVx0aW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpO1xuLSAgICAgICAgbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRiZnNfZHVtcF9pbWFwKFwiY3JlYXRlXCIsIHMpO1xuLVxuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRcdGlwdXQoaW5vZGUpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuLVxuLVx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBCRlNfTkFNRUxFTilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmIChiaCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGlubyA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubyk7XG4tXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlub2RlID0gYmZzX2lnZXQoZGlyLVx1MDAzZWlfc2IsIGlubyk7XG4tXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkKTtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGludCBlcnI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0ZXJyID0gYmZzX2FkZF9lbnRyeShkaXIsIFx1MDAyNm5ldy1cdTAwM2VkX25hbWUsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0aW5jX25saW5rKGlub2RlKTtcbi1cdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbi1cdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0aWhvbGQoaW5vZGUpO1xuLVx0ZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi17XG4tXHRpbnQgZXJyb3IgPSAtRU5PRU5UO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqZGU7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0YmggPSBiZnNfZmluZF9lbnRyeShkaXIsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUsIFx1MDAyNmRlKTtcbi1cdGlmICghYmggfHwgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgIT0gaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIG91dF9icmVsc2U7XG4tXG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbi1cdFx0cHJpbnRmKFwidW5saW5raW5nIG5vbi1leGlzdGVudCBmaWxlICVzOiVsbHUgKG5saW5rPSVkKVxcblwiLFxuLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX25saW5rKTtcbi1cdFx0c2V0X25saW5rKGlub2RlLCAxKTtcbi1cdH1cbi1cdGRlLVx1MDAzZWlubyA9IDA7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkJGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG4tXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4tXHRpbm9kZV9zZXRfY3RpbWVfdG9fdHMoaW5vZGUsIGlub2RlX2dldF9jdGltZShkaXIpKTtcbi1cdGlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTtcbi1cdGVycm9yID0gMDtcbi1cbi1vdXRfYnJlbHNlOlxuLVx0YnJlbHNlKGJoKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2Rpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLCAqbmV3X2lub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsICpuZXdfYmg7XG4tXHRzdHJ1Y3QgYmZzX2RpcmVudCAqb2xkX2RlLCAqbmV3X2RlO1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvO1xuLVx0aW50IGVycm9yID0gLUVOT0VOVDtcbi1cbi1cdGlmIChmbGFncyBcdTAwMjYgflJFTkFNRV9OT1JFUExBQ0UpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0b2xkX2JoID0gbmV3X2JoID0gTlVMTDtcbi1cdG9sZF9pbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7XG4tXHRpZiAoU19JU0RJUihvbGRfaW5vZGUtXHUwMDNlaV9tb2RlKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpbmZvID0gQkZTX1NCKG9sZF9pbm9kZS1cdTAwM2VpX3NiKTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRvbGRfYmggPSBiZnNfZmluZF9lbnRyeShvbGRfZGlyLCBcdTAwMjZvbGRfZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2b2xkX2RlKTtcbi1cbi1cdGlmICghb2xkX2JoIHx8IChsZTE2X3RvX2NwdShvbGRfZGUtXHUwMDNlaW5vKSAhPSBvbGRfaW5vZGUtXHUwMDNlaV9pbm8pKVxuLVx0XHRnb3RvIGVuZF9yZW5hbWU7XG4tXG4tXHRlcnJvciA9IC1FUEVSTTtcbi1cdG5ld19pbm9kZSA9IGRfaW5vZGUobmV3X2RlbnRyeSk7XG4tXHRuZXdfYmggPSBiZnNfZmluZF9lbnRyeShuZXdfZGlyLCBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2bmV3X2RlKTtcbi1cbi1cdGlmIChuZXdfYmggXHUwMDI2XHUwMDI2ICFuZXdfaW5vZGUpIHtcbi1cdFx0YnJlbHNlKG5ld19iaCk7XG4tXHRcdG5ld19iaCA9IE5VTEw7XG4tXHR9XG4tXHRpZiAoIW5ld19iaCkge1xuLVx0XHRlcnJvciA9IGJmc19hZGRfZW50cnkobmV3X2RpciwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG4tXHRcdFx0XHRcdG9sZF9pbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIGVuZF9yZW5hbWU7XG4tXHR9XG4tXHRvbGRfZGUtXHUwMDNlaW5vID0gMDtcbi1cdGlub2RlX3NldF9tdGltZV90b190cyhvbGRfZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChvbGRfZGlyKSk7XG4tXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuLVx0aWYgKG5ld19pbm9kZSkge1xuLVx0XHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChuZXdfaW5vZGUpO1xuLVx0XHRpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpO1xuLVx0fVxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG9sZF9iaCwgXHUwMDI2QkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0ZXJyb3IgPSAwO1xuLVxuLWVuZF9yZW5hbWU6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRicmVsc2Uob2xkX2JoKTtcbi1cdGJyZWxzZShuZXdfYmgpO1xuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzID0ge1xuLVx0LmNyZWF0ZVx0XHRcdD0gYmZzX2NyZWF0ZSxcbi1cdC5sb29rdXBcdFx0XHQ9IGJmc19sb29rdXAsXG4tXHQubGlua1x0XHRcdD0gYmZzX2xpbmssXG4tXHQudW5saW5rXHRcdFx0PSBiZnNfdW5saW5rLFxuLVx0LnJlbmFtZVx0XHRcdD0gYmZzX3JlbmFtZSxcbi19O1xuLVxuLXN0YXRpYyBpbnQgYmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmNoaWxkLCBpbnQgaW5vKVxuLXtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0c3RydWN0IGJmc19kaXJlbnQgKmRlO1xuLVx0aW50IGJsb2NrLCBzYmxvY2ssIGVibG9jaywgb2ZmLCBwb3M7XG4tXHRpbnQgaTtcbi1cbi1cdGRwcmludGYoXCJuYW1lPSVzLCBuYW1lbGVuPSVkXFxuXCIsIG5hbWUsIG5hbWVsZW4pO1xuLVxuLVx0c2Jsb2NrID0gQkZTX0koZGlyKS1cdTAwM2VpX3NibG9jaztcbi1cdGVibG9jayA9IEJGU19JKGRpciktXHUwMDNlaV9lYmxvY2s7XG4tXHRmb3IgKGJsb2NrID0gc2Jsb2NrOyBibG9jayBcdTAwM2M9IGVibG9jazsgYmxvY2srKykge1xuLVx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBibG9jayk7XG4tXHRcdGlmICghYmgpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBCRlNfQlNJWkU7IG9mZiArPSBCRlNfRElSRU5UX1NJWkUpIHtcbi1cdFx0XHRkZSA9IChzdHJ1Y3QgYmZzX2RpcmVudCAqKShiaC1cdTAwM2ViX2RhdGEgKyBvZmYpO1xuLVx0XHRcdGlmICghZGUtXHUwMDNlaW5vKSB7XG4tXHRcdFx0XHRwb3MgPSAoYmxvY2sgLSBzYmxvY2spICogQkZTX0JTSVpFICsgb2ZmO1xuLVx0XHRcdFx0aWYgKHBvcyBcdTAwM2U9IGRpci1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2l6ZSArPSBCRlNfRElSRU5UX1NJWkU7XG4tXHRcdFx0XHRcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcik7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcikpO1xuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuLVx0XHRcdFx0ZGUtXHUwMDNlaW5vID0gY3B1X3RvX2xlMTYoKHUxNilpbm8pO1xuLVx0XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkZTX05BTUVMRU47IGkrKylcbi1cdFx0XHRcdFx0ZGUtXHUwMDNlbmFtZVtpXSA9XG4tXHRcdFx0XHRcdFx0KGkgXHUwMDNjIG5hbWVsZW4pID8gbmFtZVtpXSA6IDA7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsXG4tXHRcdFx0XHRcdFx0XHUwMDI2QkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGJyZWxzZShiaCk7XG4tXHR9XG4tXHRyZXR1cm4gLUVOT1NQQztcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgYmZzX25hbWVjbXAoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbi1cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1ZmZlcilcbi17XG4tXHRpZiAoKGxlbiBcdTAwM2MgQkZTX05BTUVMRU4pIFx1MDAyNlx1MDAyNiBidWZmZXJbbGVuXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gIW1lbWNtcChuYW1lLCBidWZmZXIsIGxlbik7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCxcbi1cdFx0XHRzdHJ1Y3QgYmZzX2RpcmVudCAqKnJlc19kaXIpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDAsIG9mZnNldCA9IDA7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi1cdHN0cnVjdCBiZnNfZGlyZW50ICpkZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBjaGlsZC1cdTAwM2VuYW1lO1xuLVx0aW50IG5hbWVsZW4gPSBjaGlsZC1cdTAwM2VsZW47XG4tXG4tXHQqcmVzX2RpciA9IE5VTEw7XG4tXHRpZiAobmFtZWxlbiBcdTAwM2UgQkZTX05BTUVMRU4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0d2hpbGUgKGJsb2NrICogQkZTX0JTSVpFICsgb2Zmc2V0IFx1MDAzYyBkaXItXHUwMDNlaV9zaXplKSB7XG4tXHRcdGlmICghYmgpIHtcbi1cdFx0XHRiaCA9IHNiX2JyZWFkKGRpci1cdTAwM2VpX3NiLCBCRlNfSShkaXIpLVx1MDAzZWlfc2Jsb2NrICsgYmxvY2spO1xuLVx0XHRcdGlmICghYmgpIHtcbi1cdFx0XHRcdGJsb2NrKys7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0ZGUgPSAoc3RydWN0IGJmc19kaXJlbnQgKikoYmgtXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcbi1cdFx0b2Zmc2V0ICs9IEJGU19ESVJFTlRfU0laRTtcbi1cdFx0aWYgKGxlMTZfdG9fY3B1KGRlLVx1MDAzZWlubykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRiZnNfbmFtZWNtcChuYW1lbGVuLCBuYW1lLCBkZS1cdTAwM2VuYW1lKSkge1xuLVx0XHRcdCpyZXNfZGlyID0gZGU7XG4tXHRcdFx0cmV0dXJuIGJoO1xuLVx0XHR9XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNjIGJoLVx1MDAzZWJfc2l6ZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0YnJlbHNlKGJoKTtcbi1cdFx0YmggPSBOVUxMO1xuLVx0XHRvZmZzZXQgPSAwO1xuLVx0XHRibG9jaysrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBOVUxMO1xuLX1cbmRpZmYgLS1naXQgYS9mcy9iZnMvZmlsZS5jIGIvZnMvYmZzL2ZpbGUuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkMzNkNmJkZTk5MmI4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS9mcy9iZnMvZmlsZS5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyMDMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLypcbi0gKlx0ZnMvYmZzL2ZpbGUuY1xuLSAqXHRCRlMgZmlsZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICpcdE1ha2UgdGhlIGZpbGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gdW5kZXJzdGFuZCB0aGUgc2l6ZVxuLSAqXHRvZiB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuXG4tICpcdENvcHlyaWdodCAoQykgMjAwNyBEbWl0cmkgVm9yb2JpZXYgXHUwMDNjZG1pdHJpLnZvcm9iaWV2QGdtYWlsLmNvbVx1MDAzZVxuLSAqXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21wYWdlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJiZnMuaFwiXG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5sbHNlZWsgXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLX07XG4tXG4tc3RhdGljIGludCBiZnNfbW92ZV9ibG9jayh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8sXG4tXHRcdFx0XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4te1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKm5ldztcbi1cbi1cdGJoID0gc2JfYnJlYWQoc2IsIGZyb20pO1xuLVx0aWYgKCFiaClcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRuZXcgPSBzYl9nZXRibGsoc2IsIHRvKTtcbi1cdG1lbWNweShuZXctXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfc2l6ZSk7XG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXcpO1xuLVx0YmZvcmdldChiaCk7XG4tXHRicmVsc2UobmV3KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc19tb3ZlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgd2hlcmUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuLVxuLVx0ZHByaW50ZihcIiUwOGx4LSUwOGx4LVx1MDAzZSUwOGx4XFxuXCIsIHN0YXJ0LCBlbmQsIHdoZXJlKTtcbi1cdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYz0gZW5kOyBpKyspXG4tXHRcdGlmKGJmc19tb3ZlX2Jsb2NrKGksIHdoZXJlICsgaSwgc2IpKSB7XG4tXHRcdFx0ZHByaW50ZihcImZhaWxlZCB0byBtb3ZlIGJsb2NrICUwOGx4IC1cdTAwM2UgJTA4bHhcXG5cIiwgaSxcbi1cdFx0XHRcdFx0XHRcdFx0d2hlcmUgKyBpKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbi1cdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIHBoeXM7XG4tXHRpbnQgZXJyO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Ioc2IpO1xuLVx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTtcbi1cbi1cdHBoeXMgPSBiaS1cdTAwM2VpX3NibG9jayArIGJsb2NrO1xuLVx0aWYgKCFjcmVhdGUpIHtcbi1cdFx0aWYgKHBoeXMgXHUwMDNjPSBiaS1cdTAwM2VpX2VibG9jaykge1xuLVx0XHRcdGRwcmludGYoXCJjPSVkLCBiPSUwOGx4LCBwaHlzPSUwOWx4IChncmFudGVkKVxcblwiLFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdFx0bWFwX2JoKGJoX3Jlc3VsdCwgc2IsIHBoeXMpO1xuLVx0XHR9XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIHRoZSBmaWxlIGlzIG5vdCBlbXB0eSBhbmQgdGhlIHJlcXVlc3RlZCBibG9jayBpcyB3aXRoaW4gdGhlXG4tXHQgKiByYW5nZSBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciB0aGlzIGZpbGUsIHdlIGNhbiBncmFudCBpdC5cbi1cdCAqL1xuLVx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrIFx1MDAyNlx1MDAyNiAocGh5cyBcdTAwM2M9IGJpLVx1MDAzZWlfZWJsb2NrKSkge1xuLVx0XHRkcHJpbnRmKFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAoaW50ZXJpbSBibG9jayBncmFudGVkKVxcblwiLCBcbi1cdFx0XHRcdGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0XHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0LyogVGhlIGZpbGUgd2lsbCBiZSBleHRlbmRlZCwgc28gbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZS4gKi9cbi1cdGlmIChwaHlzIFx1MDAzZT0gaW5mby1cdTAwM2VzaV9ibG9ja3MpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0LyogVGhlIHJlc3QgaGFzIHRvIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGl0c2VsZi4gKi9cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhlIGxhc3QgZGF0YSBibG9jayBmb3IgdGhpcyBmaWxlIGlzIHRoZSBsYXN0IGFsbG9jYXRlZFxuLVx0ICogYmxvY2ssIHdlIGNhbiBleHRlbmQgdGhlIGZpbGUgdHJpdmlhbGx5LCB3aXRob3V0IG1vdmluZyBpdFxuLVx0ICogYW55d2hlcmUuXG4tXHQgKi9cbi1cdGlmIChiaS1cdTAwM2VpX2VibG9jayA9PSBpbmZvLVx1MDAzZXNpX2xmX2VibGspIHtcbi1cdFx0ZHByaW50ZihcImM9JWQsIGI9JTA4bHgsIHBoeXM9JTA4bHggKHNpbXBsZSBleHRlbnNpb24pXFxuXCIsIFxuLVx0XHRcdFx0Y3JlYXRlLCAodW5zaWduZWQgbG9uZylibG9jaywgcGh5cyk7XG4tXHRcdG1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTtcbi1cdFx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBwaHlzIC0gYmktXHUwMDNlaV9lYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdGVyciA9IDA7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0LyogT2ssIHdlIGhhdmUgdG8gbW92ZSB0aGlzIGVudGlyZSBmaWxlIHRvIHRoZSBuZXh0IGZyZWUgYmxvY2suICovXG4tXHRwaHlzID0gaW5mby1cdTAwM2VzaV9sZl9lYmxrICsgMTtcbi1cdGlmIChwaHlzICsgYmxvY2sgXHUwMDNlPSBpbmZvLVx1MDAzZXNpX2Jsb2Nrcykge1xuLVx0XHRlcnIgPSAtRU5PU1BDO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGlmIChiaS1cdTAwM2VpX3NibG9jaykge1xuLVx0XHRlcnIgPSBiZnNfbW92ZV9ibG9ja3MoaW5vZGUtXHUwMDNlaV9zYiwgYmktXHUwMDNlaV9zYmxvY2ssIFxuLVx0XHRcdFx0XHRcdGJpLVx1MDAzZWlfZWJsb2NrLCBwaHlzKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGRwcmludGYoXCJmYWlsZWQgdG8gbW92ZSBpbm89JTA4bHggLVx1MDAzZSBmcyBjb3JydXB0aW9uXFxuXCIsXG4tXHRcdFx0XHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fSBlbHNlXG4tXHRcdGVyciA9IDA7XG4tXG4tXHRkcHJpbnRmKFwiYz0lZCwgYj0lMDhseCwgcGh5cz0lMDhseCAobW92ZWQpXFxuXCIsXG4tICAgICAgICAgICAgICAgIGNyZWF0ZSwgKHVuc2lnbmVkIGxvbmcpYmxvY2ssIHBoeXMpO1xuLVx0YmktXHUwMDNlaV9zYmxvY2sgPSBwaHlzO1xuLVx0cGh5cyArPSBibG9jaztcbi1cdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfZWJsb2NrID0gcGh5cztcbi1cbi1cdC8qXG4tXHQgKiBUaGlzIGFzc3VtZXMgbm90aGluZyBjYW4gd3JpdGUgdGhlIGlub2RlIGJhY2sgd2hpbGUgd2UgYXJlIGhlcmVcbi1cdCAqIGFuZCB0aHVzIHVwZGF0ZSBpbm9kZS1cdTAwM2VpX2Jsb2NrcyEgKFhYWClcbi1cdCAqL1xuLVx0aW5mby1cdTAwM2VzaV9mcmVlYiAtPSBiaS1cdTAwM2VpX2VibG9jayAtIGJpLVx1MDAzZWlfc2Jsb2NrICsgMSAtIGlub2RlLVx1MDAzZWlfYmxvY2tzO1xuLVx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRtYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5cyk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXG4tXHRpZiAodG8gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0dHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tXHRcdFx0ICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgdm9pZCAqKmZzZGF0YSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZvbGlvcCwgYmZzX2dldF9ibG9jayk7XG4tXHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0YmZzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIHNlY3Rvcl90IGJmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbi17XG4tXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTtcbi19XG4tXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGJmc19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gYmZzX3dyaXRlcGFnZXMsXG4tXHQud3JpdGVfYmVnaW5cdD0gYmZzX3dyaXRlX2JlZ2luLFxuLVx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbi1cdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuLVx0LmJtYXBcdFx0PSBiZnNfYm1hcCxcbi19O1xuLVxuLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJmc19maWxlX2lub3BzO1xuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDZlM2E4NDhiNGVmZC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDUzOCArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLS8qXG4tICpcdGZzL2Jmcy9pbm9kZS5jXG4tICpcdEJGUyBzdXBlcmJsb2NrIGFuZCBpbm9kZSBvcGVyYXRpb25zLlxuLSAqXHRDb3B5cmlnaHQgKEMpIDE5OTktMjAxOCBUaWdyYW4gQWl2YXppYW4gXHUwMDNjYWl2YXppYW4udGlncmFuQGdtYWlsLmNvbVx1MDAzZVxuLSAqXHRGcm9tIGZzL21pbml4LCBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMuXG4tICpcdE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIFx1MDAzY2Fkc0B3b21wb20ub3JnXHUwMDNlLCAyMDA1LlxuLSAqL1xuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdmZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfY29udGV4dC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJiZnMuaFwiXG4tXG4tTU9EVUxFX0FVVEhPUihcIlRpZ3JhbiBBaXZhemlhbiBcdTAwM2NhaXZhemlhbi50aWdyYW5AZ21haWwuY29tXHUwMDNlXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlNDTyBVbml4V2FyZSBCRlMgZmlsZXN5c3RlbSBmb3IgTGludXhcIik7XG4tTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG4tI3VuZGVmIERFQlVHXG4tXG4tI2lmZGVmIERFQlVHXG4tI2RlZmluZSBkcHJpbnRmKHguLi4pXHRwcmludGYoeClcbi0jZWxzZVxuLSNkZWZpbmUgZHByaW50Zih4Li4uKVxuLSNlbmRpZlxuLVxuLXN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdGludCBibG9jaywgb2ZmO1xuLVxuLVx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcbi1cdGlmICghaW5vZGUpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKVxuLVx0XHRyZXR1cm4gaW5vZGU7XG4tXG4tXHRpZiAoKGlubyBcdTAwM2MgQkZTX1JPT1RfSU5PKSB8fCAoaW5vIFx1MDAzZSBCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4bHhcXG5cIiwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0YmxvY2sgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICsgMTtcbi1cdGJoID0gc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgYmxvY2spO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDhseFxcblwiLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsXG4tXHRcdFx0XHRcdFx0XHRcdFx0aW5vKTtcbi1cdFx0Z290byBlcnJvcjtcbi1cdH1cbi1cbi1cdG9mZiA9IChpbm8gLSBCRlNfUk9PVF9JTk8pICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tXHRkaSA9IChzdHJ1Y3QgYmZzX2lub2RlICopYmgtXHUwMDNlYl9kYXRhICsgb2ZmO1xuLVxuLVx0Lypcbi1cdCAqIGh0dHBzOi8vbWFydGluLmhpbm5lci5pbmZvL2ZzL2Jmcy9iZnMtc3RydWN0dXJlLmh0bWwgZXhwbGFpbnMgdGhhdFxuLVx0ICogQkZTIGluIFNDTyBVbml4V2FyZSBlbnZpcm9ubWVudCB1c2VkIG9ubHkgbG93ZXIgOSBiaXRzIG9mIGRpLVx1MDAzZWlfbW9kZVxuLVx0ICogdmFsdWUuIFRoaXMgbWVhbnMgdGhhdCwgYWx0aG91Z2ggYmZzX3dyaXRlX2lub2RlKCkgc2F2ZXMgd2hvbGVcbi1cdCAqIGlub2RlLVx1MDAzZWlfbW9kZSBiaXRzICh3aGljaCBpbmNsdWRlIFNfSUZNVCBiaXRzIGFuZCBTX0lTe1VJRCxHSUQsVlRYfVxuLVx0ICogYml0cyksIG1pZGRsZSA3IGJpdHMgb2YgZGktXHUwMDNlaV9tb2RlIHZhbHVlIGNhbiBiZSBnYXJiYWdlIHdoZW4gdGhlc2Vcbi1cdCAqIGJpdHMgd2VyZSBub3Qgc2F2ZWQgYnkgYmZzX3dyaXRlX2lub2RlKCkuXG4tXHQgKiBTaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgbWlkZGxlIDcgYml0cyBhcmUgZ2FyYmFnZSwgdXNlIG9ubHlcbi1cdCAqIGxvd2VyIDEyIGJpdHMgKGkuZS4gdG9sZXJhdGUgU19JU3tVSUQsR0lELFZUWH0gYml0cyBwb3NzaWJseSBiZWluZ1xuLVx0ICogZ2FyYmFnZSkgYW5kIHJlY29uc3RydWN0IFNfSUZNVCBiaXRzIGZvciBMaW51eCBlbnZpcm9ubWVudCBmcm9tXG4tXHQgKiBkaS1cdTAwM2VpX3Z0eXBlIHZhbHVlLlxuLVx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX21vZGUgPSAweDAwMDAwRkZGIFx1MDAyNiBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX21vZGUpO1xuLVx0aWYgKGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdnR5cGUpID09IEJGU19WRElSKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfbW9kZSB8PSBTX0lGRElSO1xuLVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2Rpcl9pbm9wcztcbi1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZiZnNfZGlyX29wZXJhdGlvbnM7XG4tXHR9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdnR5cGUpID09IEJGU19WUkVHKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfbW9kZSB8PSBTX0lGUkVHO1xuLVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2YmZzX2ZpbGVfaW5vcHM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2YmZzX2ZpbGVfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2YmZzX2FvcHM7XG4tXHR9IGVsc2Uge1xuLVx0XHRicmVsc2UoYmgpO1xuLVx0XHRwcmludGYoXCJVbmtub3duIHZ0eXBlPSV1ICVzOiUwOGx4XFxuXCIsXG4tXHRcdCAgICAgICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX3Z0eXBlKSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRnb3RvIGVycm9yO1xuLVx0fVxuLVxuLVx0QkZTX0koaW5vZGUpLVx1MDAzZWlfc2Jsb2NrID0gIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfc2Jsb2NrKTtcbi1cdEJGU19JKGlub2RlKS1cdTAwM2VpX2VibG9jayA9ICBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX2VibG9jayk7XG4tXHRCRlNfSShpbm9kZSktXHUwMDNlaV9kc2tfaW5vID0gbGUxNl90b19jcHUoZGktXHUwMDNlaV9pbm8pO1xuLVx0aV91aWRfd3JpdGUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfdWlkKSk7XG4tXHRpX2dpZF93cml0ZShpbm9kZSwgIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZ2lkKSk7XG4tXHRzZXRfbmxpbmsoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfbmxpbmspKTtcbi1cdGlub2RlLVx1MDAzZWlfc2l6ZSA9IEJGU19GSUxFU0laRShkaSk7XG4tXHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IEJGU19GSUxFQkxPQ0tTKGRpKTtcbi1cdGlub2RlX3NldF9hdGltZShpbm9kZSwgbGUzMl90b19jcHUoZGktXHUwMDNlaV9hdGltZSksIDApO1xuLVx0aW5vZGVfc2V0X210aW1lKGlub2RlLCBsZTMyX3RvX2NwdShkaS1cdTAwM2VpX210aW1lKSwgMCk7XG4tXHRpbm9kZV9zZXRfY3RpbWUoaW5vZGUsIGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfY3RpbWUpLCAwKTtcbi1cbi1cdGJyZWxzZShiaCk7XG4tXHR1bmxvY2tfbmV3X2lub2RlKGlub2RlKTtcbi1cdHJldHVybiBpbm9kZTtcbi1cbi1lcnJvcjpcbi1cdGlnZXRfZmFpbGVkKGlub2RlKTtcbi1cdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGJmc19pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwKVxuLXtcbi1cdGlmICgoaW5vIFx1MDAzYyBCRlNfUk9PVF9JTk8pIHx8IChpbm8gXHUwMDNlIEJGU19TQihzYiktXHUwMDNlc2lfbGFzdGkpKSB7XG4tXHRcdHByaW50ZihcIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4eFxcblwiLCBzYi1cdTAwM2VzX2lkLCBpbm8pO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbi1cdH1cbi1cbi1cdGlubyAtPSBCRlNfUk9PVF9JTk87XG4tXG4tXHQqcCA9IHNiX2JyZWFkKHNiLCAxICsgaW5vIC8gQkZTX0lOT0RFU19QRVJfQkxPQ0spO1xuLVx0aWYgKCEqcCkge1xuLVx0XHRwcmludGYoXCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDh4XFxuXCIsIHNiLVx1MDAzZXNfaWQsIGlubyk7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuLVx0fVxuLVxuLVx0cmV0dXJuIChzdHJ1Y3QgYmZzX2lub2RlICopKCpwKS1cdTAwM2ViX2RhdGEgKyAgaW5vICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLXtcbi1cdHN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHVuc2lnbmVkIGludCBpbm8gPSAodTE2KWlub2RlLVx1MDAzZWlfaW5vO1xuLVx0dW5zaWduZWQgbG9uZyBpX3NibG9jaztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cbi1cdGRwcmludGYoXCJpbm89JTA4eFxcblwiLCBpbm8pO1xuLVxuLVx0ZGkgPSBmaW5kX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXG4tXHRpZiAoaW5vID09IEJGU19ST09UX0lOTylcbi1cdFx0ZGktXHUwMDNlaV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WRElSKTtcbi1cdGVsc2Vcbi1cdFx0ZGktXHUwMDNlaV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WUkVHKTtcbi1cbi1cdGRpLVx1MDAzZWlfaW5vID0gY3B1X3RvX2xlMTYoaW5vKTtcbi1cdGRpLVx1MDAzZWlfbW9kZSA9IGNwdV90b19sZTMyKGlub2RlLVx1MDAzZWlfbW9kZSk7XG4tXHRkaS1cdTAwM2VpX3VpZCA9IGNwdV90b19sZTMyKGlfdWlkX3JlYWQoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfZ2lkID0gY3B1X3RvX2xlMzIoaV9naWRfcmVhZChpbm9kZSkpO1xuLVx0ZGktXHUwMDNlaV9ubGluayA9IGNwdV90b19sZTMyKGlub2RlLVx1MDAzZWlfbmxpbmspO1xuLVx0ZGktXHUwMDNlaV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlX2dldF9hdGltZV9zZWMoaW5vZGUpKTtcbi1cdGRpLVx1MDAzZWlfbXRpbWUgPSBjcHVfdG9fbGUzMihpbm9kZV9nZXRfbXRpbWVfc2VjKGlub2RlKSk7XG4tXHRkaS1cdTAwM2VpX2N0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGVfZ2V0X2N0aW1lX3NlYyhpbm9kZSkpO1xuLVx0aV9zYmxvY2sgPSBCRlNfSShpbm9kZSktXHUwMDNlaV9zYmxvY2s7XG4tXHRkaS1cdTAwM2VpX3NibG9jayA9IGNwdV90b19sZTMyKGlfc2Jsb2NrKTtcbi1cdGRpLVx1MDAzZWlfZWJsb2NrID0gY3B1X3RvX2xlMzIoQkZTX0koaW5vZGUpLVx1MDAzZWlfZWJsb2NrKTtcbi1cdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4tXG4tXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRicmVsc2UoYmgpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBiZnNfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4te1xuLVx0aW50IGVyciA9IDA7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuLVx0aWYgKElTX0VSUihkaSkpXG4tXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbi1cbi1cdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdGVyciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1vdXQ6XG4tXHRicmVsc2UoYmgpO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpID0gQkZTX0koaW5vZGUpO1xuLVxuLVx0ZHByaW50ZihcImlubz0lMDhseFxcblwiLCBpbm8pO1xuLVxuLVx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRtbWJfc3luYyhcdTAwMjZCRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0bW1iX2ludmFsaWRhdGUoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGNsZWFyX2lub2RlKGlub2RlKTtcbi1cbi1cdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRkaSA9IGZpbmRfaW5vZGUocywgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbi1cdGlmIChJU19FUlIoZGkpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0LyogY2xlYXIgb24tZGlzayBpbm9kZSAqL1xuLVx0bWVtc2V0KGRpLCAwLCBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpO1xuLVx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuLVx0YnJlbHNlKGJoKTtcbi1cbi1cdGlmIChiaS1cdTAwM2VpX2Rza19pbm8pIHtcbi1cdFx0aWYgKGJpLVx1MDAzZWlfc2Jsb2NrKVxuLVx0XHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgKz0gYmktXHUwMDNlaV9lYmxvY2sgKyAxIC0gYmktXHUwMDNlaV9zYmxvY2s7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWkrKztcbi1cdFx0Y2xlYXJfYml0KGlubywgaW5mby1cdTAwM2VzaV9pbWFwKTtcbi1cdFx0YmZzX2R1bXBfaW1hcChcImV2aWN0X2lub2RlXCIsIHMpO1xuLVx0fVxuLVxuLVx0Lypcbi1cdCAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZpbGUsIG1ha2UgdGhlIHByZXZpb3VzIGJsb2NrXG4tXHQgKiBcImxhc3QgYmxvY2sgb2YgdGhlIGxhc3QgZmlsZVwiIGV2ZW4gaWYgdGhlcmUgaXMgbm9cbi1cdCAqIHJlYWwgZmlsZSB0aGVyZSwgc2F2ZXMgdXMgMSBnYXAuXG4tXHQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZXNpX2xmX2VibGsgPT0gYmktXHUwMDNlaV9lYmxvY2spXG4tXHRcdGluZm8tXHUwMDNlc2lfbGZfZWJsayA9IGJpLVx1MDAzZWlfc2Jsb2NrIC0gMTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWJmc19sb2NrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4te1xuLVx0c3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHMpO1xuLVxuLVx0aWYgKCFpbmZvKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0a2ZyZWUoaW5mbyk7XG4tXHRzLVx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LVx1MDAzZWRfc2I7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7XG4tXHR1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYocy1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfZGV2KTtcbi1cdGJ1Zi1cdTAwM2VmX3R5cGUgPSBCRlNfTUFHSUM7XG4tXHRidWYtXHUwMDNlZl9ic2l6ZSA9IHMtXHUwMDNlc19ibG9ja3NpemU7XG4tXHRidWYtXHUwMDNlZl9ibG9ja3MgPSBpbmZvLVx1MDAzZXNpX2Jsb2Nrcztcbi1cdGJ1Zi1cdTAwM2VmX2JmcmVlID0gYnVmLVx1MDAzZWZfYmF2YWlsID0gaW5mby1cdTAwM2VzaV9mcmVlYjtcbi1cdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gaW5mby1cdTAwM2VzaV9sYXN0aSArIDEgLSBCRlNfUk9PVF9JTk87XG4tXHRidWYtXHUwMDNlZl9mZnJlZSA9IGluZm8tXHUwMDNlc2lfZnJlZWk7XG4tXHRidWYtXHUwMDNlZl9mc2lkID0gdTY0X3RvX2ZzaWQoaWQpO1xuLVx0YnVmLVx1MDAzZWZfbmFtZWxlbiA9IEJGU19OQU1FTEVOO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmZzX2lub2RlX2NhY2hlcDtcbi1cbi1zdGF0aWMgc3RydWN0IGlub2RlICpiZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi17XG4tXHRzdHJ1Y3QgYmZzX2lub2RlX2luZm8gKmJpO1xuLVx0YmkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdG1tYl9pbml0KFx1MDAyNmJpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbi1cbi1cdHJldHVybiBcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0a21lbV9jYWNoZV9mcmVlKGJmc19pbm9kZV9jYWNoZXAsIEJGU19JKGlub2RlKSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4te1xuLVx0c3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IGZvbztcbi1cbi1cdGlub2RlX2luaXRfb25jZShcdTAwMjZiaS1cdTAwM2V2ZnNfaW5vZGUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2lub2RlY2FjaGUodm9pZClcbi17XG4tXHRiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCJiZnNfaW5vZGVfY2FjaGVcIixcbi1cdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGJmc19pbm9kZV9pbmZvKSxcbi1cdFx0XHRcdFx0ICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8XG4tXHRcdFx0XHRcdFx0U0xBQl9BQ0NPVU5UKSxcbi1cdFx0XHRcdFx0ICAgICBpbml0X29uY2UpO1xuLVx0aWYgKGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSBhbGwgZGVsYXllZCByY3UgZnJlZSBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlXG4tXHQgKiBkZXN0cm95IGNhY2hlLlxuLVx0ICovXG4tXHRyY3VfYmFycmllcigpO1xuLVx0a21lbV9jYWNoZV9kZXN0cm95KGJmc19pbm9kZV9jYWNoZXApO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7XG4tXHQuYWxsb2NfaW5vZGVcdD0gYmZzX2FsbG9jX2lub2RlLFxuLVx0LmZyZWVfaW5vZGVcdD0gYmZzX2ZyZWVfaW5vZGUsXG4tXHQud3JpdGVfaW5vZGVcdD0gYmZzX3dyaXRlX2lub2RlLFxuLVx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbi1cdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4tXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4tXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbi19O1xuLVxuLXZvaWQgYmZzX2R1bXBfaW1hcChjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi17XG4tI2lmZGVmIERFQlVHXG4tXHRpbnQgaTtcbi1cdGNoYXIgKnRtcGJ1ZiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbi1cbi1cdGlmICghdG1wYnVmKVxuLVx0XHRyZXR1cm47XG4tXHRmb3IgKGkgPSBCRlNfU0IocyktXHUwMDNlc2lfbGFzdGk7IGkgXHUwMDNlPSAwOyBpLS0pIHtcbi1cdFx0aWYgKGkgXHUwMDNlIFBBR0VfU0laRSAtIDEwMCkgYnJlYWs7XG4tXHRcdGlmICh0ZXN0X2JpdChpLCBCRlNfU0IocyktXHUwMDNlc2lfaW1hcCkpXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCIxXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0c3RyY2F0KHRtcGJ1ZiwgXCIwXCIpO1xuLVx0fVxuLVx0cHJpbnRmKFwiJXM6IGxhc3RpPSUwOGx4IFx1MDAzYyVzXHUwMDNlXFxuXCIsIHByZWZpeCwgQkZTX1NCKHMpLVx1MDAzZXNpX2xhc3RpLCB0bXBidWYpO1xuLVx0a2ZyZWUodG1wYnVmKTtcbi0jZW5kaWZcbi19XG4tXG4tc3RhdGljIGludCBiZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi17XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqc2JoO1xuLVx0c3RydWN0IGJmc19zdXBlcl9ibG9jayAqYmZzX3NiO1xuLVx0c3RydWN0IGlub2RlICppbm9kZTtcbi1cdHVuc2lnbmVkIGk7XG4tXHRzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm87XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2ssIGlfZWJsb2NrLCBpX2VvZmYsIHNfc2l6ZTtcbi1cdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuLVxuLVx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbi1cdGlmICghaW5mbylcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlYmZzX2xvY2spO1xuLVx0cy1cdTAwM2VzX2ZzX2luZm8gPSBpbmZvO1xuLVx0cy1cdTAwM2VzX3RpbWVfbWluID0gMDtcbi1cdHMtXHUwMDNlc190aW1lX21heCA9IFUzMl9NQVg7XG4tXG4tXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgQkZTX0JTSVpFKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRzYmggPSBzYl9icmVhZChzLCAwKTtcbi1cdGlmICghc2JoKVxuLVx0XHRnb3RvIG91dDtcbi1cdGJmc19zYiA9IChzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICopc2JoLVx1MDAzZWJfZGF0YTtcbi1cdGlmIChsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykgIT0gQkZTX01BR0lDKSB7XG4tXHRcdGlmICghc2lsZW50KVxuLVx0XHRcdHByaW50ZihcIk5vIEJGUyBmaWxlc3lzdGVtIG9uICVzIChtYWdpYz0lMDh4KVxcblwiLCBzLVx1MDAzZXNfaWQsICBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19tYWdpYykpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRpZiAoQkZTX1VOQ0xFQU4oYmZzX3NiLCBzKSBcdTAwMjZcdTAwMjYgIXNpbGVudClcbi1cdFx0cHJpbnRmKFwiJXMgaXMgdW5jbGVhbiwgY29udGludWluZ1xcblwiLCBzLVx1MDAzZXNfaWQpO1xuLVxuLVx0cy1cdTAwM2VzX21hZ2ljID0gQkZTX01BR0lDO1xuLVxuLVx0aWYgKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSBcdTAwM2UgbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSB8fFxuLVx0ICAgIGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2spICsgc2l6ZW9mKHN0cnVjdCBiZnNfZGlyZW50KSkge1xuLVx0XHRwcmludGYoXCJTdXBlcmJsb2NrIGlzIGNvcnJ1cHRlZCBvbiAlc1xcblwiLCBzLVx1MDAzZXNfaWQpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXG4tXHRpbmZvLVx1MDAzZXNpX2xhc3RpID0gKGxlMzJfdG9fY3B1KGJmc19zYi1cdTAwM2VzX3N0YXJ0KSAtIEJGU19CU0laRSkgLyBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkgKyBCRlNfUk9PVF9JTk8gLSAxO1xuLVx0aWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgPT0gQkZTX01BWF9MQVNUSSlcbi1cdFx0cHJpbnRmKFwiTk9URTogZmlsZXN5c3RlbSAlcyB3YXMgY3JlYXRlZCB3aXRoIDUxMiBpbm9kZXMsIHRoZSByZWFsIG1heGltdW0gaXMgNTExLCBtb3VudGluZyBhbnl3YXlcXG5cIiwgcy1cdTAwM2VzX2lkKTtcbi1cdGVsc2UgaWYgKGluZm8tXHUwMDNlc2lfbGFzdGkgXHUwMDNlIEJGU19NQVhfTEFTVEkpIHtcbi1cdFx0cHJpbnRmKFwiSW1wb3NzaWJsZSBsYXN0IGlub2RlIG51bWJlciAlbHUgXHUwMDNlICVkIG9uICVzXFxuXCIsIGluZm8tXHUwMDNlc2lfbGFzdGksIEJGU19NQVhfTEFTVEksIHMtXHUwMDNlc19pZCk7XG4tXHRcdGdvdG8gb3V0MTtcbi1cdH1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJGU19ST09UX0lOTzsgaSsrKVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXG4tXHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZiZnNfc29wcztcbi1cdGlub2RlID0gYmZzX2lnZXQocywgQkZTX1JPT1RfSU5PKTtcbi1cdGlmIChJU19FUlIoaW5vZGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaW5vZGUpO1xuLVx0XHRnb3RvIG91dDE7XG4tXHR9XG4tXHRzLVx1MDAzZXNfcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcbi1cdGlmICghcy1cdTAwM2VzX3Jvb3QpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXQxO1xuLVx0fVxuLVxuLVx0aW5mby1cdTAwM2VzaV9ibG9ja3MgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSArIDEpIFx1MDAzZVx1MDAzZSBCRlNfQlNJWkVfQklUUztcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWIgPSAobGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKSArIDEgLSBsZTMyX3RvX2NwdShiZnNfc2ItXHUwMDNlc19zdGFydCkpIFx1MDAzZVx1MDAzZSBCRlNfQlNJWkVfQklUUztcbi1cdGluZm8tXHUwMDNlc2lfZnJlZWkgPSAwO1xuLVx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gMDtcbi1cbi1cdC8qIGNhbiB3ZSByZWFkIHRoZSBsYXN0IGJsb2NrPyAqL1xuLVx0YmggPSBzYl9icmVhZChzLCBpbmZvLVx1MDAzZXNpX2Jsb2NrcyAtIDEpO1xuLVx0aWYgKCFiaCkge1xuLVx0XHRwcmludGYoXCJMYXN0IGJsb2NrIG5vdCBhdmFpbGFibGUgb24gJXM6ICVsdVxcblwiLCBzLVx1MDAzZXNfaWQsIGluZm8tXHUwMDNlc2lfYmxvY2tzIC0gMSk7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0Mjtcbi1cdH1cbi1cdGJyZWxzZShiaCk7XG4tXG4tXHRiaCA9IE5VTEw7XG4tXHRmb3IgKGkgPSBCRlNfUk9PVF9JTk87IGkgXHUwMDNjPSBpbmZvLVx1MDAzZXNpX2xhc3RpOyBpKyspIHtcbi1cdFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4tXHRcdGludCBibG9jayA9IChpIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICsgMTtcbi1cdFx0aW50IG9mZiA9IChpIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLO1xuLVx0XHR1bnNpZ25lZCBsb25nIGVibG9jaztcbi1cbi1cdFx0aWYgKCFvZmYpIHtcbi1cdFx0XHRicmVsc2UoYmgpO1xuLVx0XHRcdGJoID0gc2JfYnJlYWQocywgYmxvY2spO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghYmgpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC1cdTAwM2ViX2RhdGEgKyBvZmY7XG4tXG4tXHRcdC8qIHRlc3QgaWYgZmlsZXN5c3RlbSBpcyBub3QgY29ycnVwdGVkICovXG4tXG4tXHRcdGlfZW9mZiA9IGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZW9mZnNldCk7XG4tXHRcdGlfc2Jsb2NrID0gbGUzMl90b19jcHUoZGktXHUwMDNlaV9zYmxvY2spO1xuLVx0XHRpX2VibG9jayA9IGxlMzJfdG9fY3B1KGRpLVx1MDAzZWlfZWJsb2NrKTtcbi1cdFx0c19zaXplID0gbGUzMl90b19jcHUoYmZzX3NiLVx1MDAzZXNfZW5kKTtcbi1cbi1cdFx0aWYgKGlfc2Jsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2Jsb2NrcyB8fFxuLVx0XHRcdGlfZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2Jsb2NrcyB8fFxuLVx0XHRcdGlfc2Jsb2NrIFx1MDAzZSBpX2VibG9jayB8fFxuLVx0XHRcdChpX2VvZmYgIT0gbGUzMl90b19jcHUoLTEpIFx1MDAyNlx1MDAyNiBpX2VvZmYgXHUwMDNlIHNfc2l6ZSkgfHxcbi1cdFx0XHRpX3NibG9jayAqIEJGU19CU0laRSBcdTAwM2UgaV9lb2ZmKSB7XG4tXG4tXHRcdFx0cHJpbnRmKFwiSW5vZGUgMHglMDh4IGNvcnJ1cHRlZCBvbiAlc1xcblwiLCBpLCBzLVx1MDAzZXNfaWQpO1xuLVxuLVx0XHRcdGJyZWxzZShiaCk7XG4tXHRcdFx0cmV0ID0gLUVJTztcbi1cdFx0XHRnb3RvIG91dDI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFkaS1cdTAwM2VpX2lubykge1xuLVx0XHRcdGluZm8tXHUwMDNlc2lfZnJlZWkrKztcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRzZXRfYml0KGksIGluZm8tXHUwMDNlc2lfaW1hcCk7XG4tXHRcdGluZm8tXHUwMDNlc2lfZnJlZWIgLT0gQkZTX0ZJTEVCTE9DS1MoZGkpO1xuLVxuLVx0XHRlYmxvY2sgPSAgbGUzMl90b19jcHUoZGktXHUwMDNlaV9lYmxvY2spO1xuLVx0XHRpZiAoZWJsb2NrIFx1MDAzZSBpbmZvLVx1MDAzZXNpX2xmX2VibGspXG4tXHRcdFx0aW5mby1cdTAwM2VzaV9sZl9lYmxrID0gZWJsb2NrO1xuLVx0fVxuLVx0YnJlbHNlKGJoKTtcbi1cdGJyZWxzZShzYmgpO1xuLVx0YmZzX2R1bXBfaW1hcChcImZpbGxfc3VwZXJcIiwgcyk7XG4tXHRyZXR1cm4gMDtcbi1cbi1vdXQyOlxuLVx0ZHB1dChzLVx1MDAzZXNfcm9vdCk7XG4tXHRzLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG4tb3V0MTpcbi1cdGJyZWxzZShzYmgpO1xuLW91dDpcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4tXHRrZnJlZShpbmZvKTtcbi1cdHMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi17XG4tXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgYmZzX2ZpbGxfc3VwZXIpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBiZnNfY29udGV4dF9vcHMgPSB7XG4tXHQuZ2V0X3RyZWUgPSBiZnNfZ2V0X3RyZWUsXG4tfTtcbi1cbi1zdGF0aWMgaW50IGJmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLXtcbi1cdGZjLVx1MDAzZW9wcyA9IFx1MDAyNmJmc19jb250ZXh0X29wcztcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmZzX2ZzX3R5cGUgPSB7XG4tXHQub3duZXJcdFx0XHQ9IFRISVNfTU9EVUxFLFxuLVx0Lm5hbWVcdFx0XHQ9IFwiYmZzXCIsXG4tXHQuaW5pdF9mc19jb250ZXh0XHQ9IGJmc19pbml0X2ZzX2NvbnRleHQsXG4tXHQua2lsbF9zYlx0XHQ9IGtpbGxfYmxvY2tfc3VwZXIsXG4tXHQuZnNfZmxhZ3NcdFx0PSBGU19SRVFVSVJFU19ERVYsXG4tfTtcbi1NT0RVTEVfQUxJQVNfRlMoXCJiZnNcIik7XG4tXG4tc3RhdGljIGludCBfX2luaXQgaW5pdF9iZnNfZnModm9pZClcbi17XG4tXHRpbnQgZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDE7XG4tXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmJmc19mc190eXBlKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuLVx0cmV0dXJuIDA7XG4tb3V0OlxuLVx0ZGVzdHJveV9pbm9kZWNhY2hlKCk7XG4tb3V0MTpcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Jmc19mcyh2b2lkKVxuLXtcbi1cdHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZiZnNfZnNfdHlwZSk7XG4tXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoaW5pdF9iZnNfZnMpXG4tbW9kdWxlX2V4aXQoZXhpdF9iZnNfZnMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvc3RhdG1vdW50L3N0YXRtb3VudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuaW5kZXggNjBjMmM1NDRkYjZhNC4uNTI1NDQ1MTJlZGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9zdGF0bW91bnQvc3RhdG1vdW50X3Rlc3QuY1xuQEAgLTE3LDcgKzE3LDcgQEBcbiBcbiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga25vd25fZnNbXSA9IHtcbiBcdFwiOXBcIiwgXCJhZGZzXCIsIFwiYWZmc1wiLCBcImFmc1wiLCBcImFpb1wiLCBcImFub25faW5vZGVmc1wiLCBcImFwcGFybW9yZnNcIixcbi1cdFwiYXV0b2ZzXCIsIFwiYmNhY2hlZnNcIiwgXCJiZGV2XCIsIFwiYmVmc1wiLCBcImJmc1wiLCBcImJpbmRlclwiLCBcImJpbmZtdF9taXNjXCIsXG4rXHRcImF1dG9mc1wiLCBcImJjYWNoZWZzXCIsIFwiYmRldlwiLCBcImJlZnNcIiwgXCJiaW5kZXJcIiwgXCJiaW5mbXRfbWlzY1wiLFxuIFx0XCJicGZcIiwgXCJidHJmc1wiLCBcImJ0cmZzX3Rlc3RfZnNcIiwgXCJjZXBoXCIsIFwiY2dyb3VwXCIsIFwiY2dyb3VwMlwiLCBcImNpZnNcIixcbiBcdFwiY29kYVwiLCBcImNvbmZpZ2ZzXCIsIFwiY3B1c2V0XCIsIFwiY3JhbWZzXCIsIFwiY3hsXCIsIFwiZGF4XCIsIFwiZGVidWdmc1wiLFxuIFx0XCJkZXZwdHNcIiwgXCJkZXZ0bXBmc1wiLCBcImRtYWJ1ZlwiLCBcImRybVwiLCBcImVjcnlwdGZzXCIsIFwiZWZpdmFyZnNcIiwgXCJlZnNcIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQxOjQxLjY3MTMyMjE3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTk3NDU3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQkZTIEZpbGVzeXN0ZW0gUmVtb3ZhbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uZS4gVGhleSdyZSByaXBwaW5nIG91dCB0aGUgQkZTIGZpbGVzeXN0ZW0gZnJvbSB0aGUgTGludXgga2VybmVsIGNvbXBsZXRlbHkuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCdzIHByZXR0eSB0aG9yb3VnaC4gV2UndmUgZ290OlxuXG4qICAgYENSRURJVFNgIHVwZGF0ZWQgd2l0aCBhdXRob3IgZW1haWwuIEZpbmUuXG4qICAgRG9jdW1lbnRhdGlvbiB1cGRhdGVkIGFuZCwgaW4gc29tZSBjYXNlcywgZGVsZXRlZC4gVGhhdCdzIGV4cGVjdGVkIGZvciBhIGRlcHJlY2F0ZWQgZmlsZXN5c3RlbS5cbiogICBgTUFJTlRBSU5FUlNgIHVwZGF0ZWQg4oCTIEJGUyBzZWN0aW9uIGdvbmUuIE1ha2VzIHNlbnNlLlxuKiAgIEFyY2gtc3BlY2lmaWMgY29uZmlncyBnZXR0aW5nIHRoZSBgQ09ORklHX0JGU19GU2Agb3B0aW9uIHJlbW92ZWQuIFN0YW5kYXJkLlxuKiAgIFRoZSBgZnMvS2NvbmZpZ2AgYW5kIGBmcy9NYWtlZmlsZWAgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcmVtb3ZlIGFueSB0cmFjZSBvZiBCRlMuIEVzc2VudGlhbCBmb3IgYSBjbGVhbiByZW1vdmFsLlxuKiAgIFRoZSBgZnMvYmZzL2AgZGlyZWN0b3J5IGl0c2VsZiwgdGhlICphY3R1YWwgZmlsZXN5c3RlbSBjb2RlKiwgaXMgZ29uZS4gRXZlcnl0aGluZy4gYEtjb25maWdgLCBgTWFrZWZpbGVgLCB0aGUgYC5jYCBmaWxlcywgdGhlIGAuaGAuLi4gaXQncyBhbGwgZGVsZXRlZC4gR29vZC5cbiogICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3N0YXRtb3VudC9zdGF0bW91bnRfdGVzdC5jYCBmaWxlIGlzIHJlbW92aW5nIHJlZmVyZW5jZXMgdG8gXCJiZnNcIi4gUmlnaHQuXG5cblNvLCB0aGUgY29yZSBvZiB0aGUgY2hlY2sgaXM6IGlzIHRoZXJlIGFueSBleGVjdXRhYmxlIGNvZGUgKmxlZnQqPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBuby4gQWxsIHRoZSBmaWxlc3lzdGVtIGNvZGUgaXMgZGVsZXRlZC4gVGhlIG90aGVyIGNoYW5nZXMgYXJlIGNvbmZpZ3VyYXRpb24gdHdlYWtzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGFuZCBzZWxmdGVzdCBjbGVhbnVwLiBOb25lIG9mIHRoYXQgaXMgKmV4ZWN1dGFibGUqIGtlcm5lbCBjb2RlLiBUaGUgcGF0Y2ggaXMgcHVyZWx5IGRlc3RydWN0aXZlIGluIHRlcm1zIG9mIGNvZGUgcHJlc2VuY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgZm9sbG93aW5nIHRoZSBydWxlcyBjb3JyZWN0bHkuIFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNheXM6XG5cbiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXG4qICAgU2VsZi10ZXN0cyB0aGF0IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlxuKiAgIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBjb21waWxlZCBDIGxvZ2ljXG5cbldlbGwsIHRoaXMgcGF0Y2ggbmFpbHMgYWxsIG9mIHRob3NlLiBUaGUgQkZTIGZpbGVzeXN0ZW0gY29kZSBpcyAqZ29uZSouIEl0J3MgYSBjb21wbGV0ZSByZW1vdmFsLCBzbyBubyBjb2RlIGlzIGJlaW5nIGFkZGVkIG9yIG1vZGlmaWVkIHRoYXQgbmVlZHMgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nOiBmYWxzZWAuIFdlIGNhbiBlbmFibGUgemVybyBjb25maWdzLCBhbmQgdGhlcmUgYXJlIHplcm8gZm9jdXMgc3ltYm9scy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoICpyZW1vdmVzKiB0aGUgbGVnYWN5IEJGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQ6IGNvZGUsIGRvY3VtZW50YXRpb24sIGNvbmZpZyBlbnRyaWVzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gTm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgcmVtYWlucy4gVGhpcyBpcyBhIGNsZWFuIHN3ZWVwLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTMsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0MTo0Ny40NzEwNzA5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgbGVnYWN5IEJGUyAoQm9vdCBGaWxlIFN5c3RlbSkgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBrZXJuZWwsIGFsb25nIHdpdGggaXRzIGRvY3VtZW50YXRpb24sIEtjb25maWcgZW50cmllcywgZGVmY29uZmlncywgYW5kIHNlbGZ0ZXN0IHJlZmVyZW5jZXMuIEFzIG9ubHkgY29kZSByZW1vdmFsLCBkb2N1bWVudGF0aW9uLCBhbmQgY29uZmlnL3NlbGZ0ZXN0IGNsZWFudXAgYXJlIHBlcmZvcm1lZCwgdGhlcmUgaXMgbm8gbmV3IG9yIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29kZSB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29tcGxldGVseSByZW1vdmVzIHRoZSBsZWdhY3kgQkZTIChCb290IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBlbnRyaWVzLCBkZWZjb25maWdzLCBhbmQgc2VsZnRlc3QgcmVmZXJlbmNlcy4gQXMgb25seSBjb2RlIHJlbW92YWwsIGRvY3VtZW50YXRpb24sIGFuZCBjb25maWcvc2VsZnRlc3QgY2xlYW51cCBhcmUgcGVyZm9ybWVkLCB0aGVyZSBpcyBubyBuZXcgb3IgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb2RlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0MTo0Ny40NzEwOTI3MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8cc4l[1] Phase: Running StartedAt: 2026-09-05 17:42:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cc4l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 17:42:14 +0000 UTC FinishedAt: 2026-09-05 17:42:19 +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,}