Name: series-workflowr4qmp Phase: Succeeded StartedAt: 2026-08-04 02:03:10 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[0] Phase: Succeeded StartedAt: 2026-08-04 02:03:10 +0000 UTC FinishedAt: 2026-08-04 02:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 02:03:10 +0000 UTC FinishedAt: 2026-08-04 02:16:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "5aed8f404401bfa1570cf0c3ffed7b752f568e83", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "5aed8f404401bfa1570cf0c3ffed7b752f568e83", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO" ], "series_id": "7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_del_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIChgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWApIHRvIHBhc3MgZG93biB0aGUgZGVsZXRpb24gcmVhc29uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pIGFuZCBlbWl0IGl0IHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmYzEyNzU1YjVlY2QyNGJlOWViNTU4OGMxZTYwNjc0ZDUzMzU1NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLmYxNDUzMjc5ODY0MDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIHVuc3BlY1xuJiM0MzsgICAgICAtIGV4cGlyZWRcbiYjNDM7ICAgICAgLSByYS13aXRoZHJhd25cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiAmIzQzOzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgJiM0MzszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNlxuQEAgLTMxMyw3ICYjNDM7MzI3LDM4IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgIyBkZWwtcmVhc29uIGlzIG5vdGlmaWNhdGlvbi1vbmx5LiBJdCBpcyBhYm92ZVxuJiM0MzsgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0c1xuJiM0MzsgICAgICAgICAgIyBpdCBpbiByZXF1ZXN0cy5cbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6IFx1MDAyNnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgICAgICAgICAtIGRzdFxuJiM0MzsgICAgICAgICAgICAtIHNyY1xuJiM0MzsgICAgICAgICAgICAtIGlpZlxuJiM0MzsgICAgICAgICAgICAtIG9pZlxuJiM0MzsgICAgICAgICAgICAtIGdhdGV3YXlcbiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eVxuJiM0MzsgICAgICAgICAgICAtIHByZWZzcmNcbiYjNDM7ICAgICAgICAgICAgLSBtZXRyaWNzXG4mIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoXG4mIzQzOyAgICAgICAgICAgIC0gZmxvd1xuJiM0MzsgICAgICAgICAgICAtIGNhY2hlaW5mb1xuJiM0MzsgICAgICAgICAgICAtIHRhYmxlXG4mIzQzOyAgICAgICAgICAgIC0gbWFya1xuJiM0MzsgICAgICAgICAgICAtIG1mYy1zdGF0c1xuJiM0MzsgICAgICAgICAgICAtIHZpYVxuJiM0MzsgICAgICAgICAgICAtIG5ld2RzdFxuJiM0MzsgICAgICAgICAgICAtIHByZWZcbiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXBcbiYjNDM7ICAgICAgICAgICAgLSBleHBpcmVzXG4mIzQzOyAgICAgICAgICAgIC0gcGFkXG4mIzQzOyAgICAgICAgICAgIC0gdWlkXG4mIzQzOyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvXG4mIzQzOyAgICAgICAgICAgIC0gc3BvcnRcbiYjNDM7ICAgICAgICAgICAgLSBkcG9ydFxuJiM0MzsgICAgICAgICAgICAtIG5oLWlkXG4mIzQzOyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgJiM0MzszNjYsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXG4mIzQzOyAgICAgIHZhbHVlOiAyNFxuJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4mIzQzOyAgICAgIHZhbHVlOiAyNVxuJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlXG4mIzQzO1xuJiM0MzttY2FzdC1ncm91cHM6XG4mIzQzOyAgbGlzdDpcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiA3XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICYjNDM7NDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICYjNDM7NTMzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li43YmNmMGU1YmQ4ODdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiYjNDM7XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uNjZjZmMxN2VkZTBlNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cbiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuJiM0MzsgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxuJiM0MzsgKiB0cmVhdCBcJiMzNDthYnNlbnRcJiMzNDsgYW5kIFwmIzM0O3Vuc3BlY1wmIzM0OyBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4mIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxuJiM0MzsgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cbiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4mIzQzOyAqIGZhbWlseSYjMzk7cy5cbiYjNDM7ICovXG4mIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7XG4mIzQzO1x0UlRfREVMX1JFQVNPTl9VTlNQRUMsXHRcdC8qIGNhdXNlIG5vdCByZWNvcmRlZCAqL1xuJiM0MztcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4mIzQzO1x0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4mIzQzO1x0X19SVF9ERUxfUkVBU09OX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVF9ERUxfUkVBU09OX01BWCAoX19SVF9ERUxfUkVBU09OX01BWCAtIDEpXG4mIzQzO1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wXCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRcdFx0cnQgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC0xOTY3LDcgJiM0MzsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTYsMTMgJiM0MzsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICYjNDM7MjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChydCA9PSBjdXIpIHtcbiBcdFx0XHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcbiBcdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG4tXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xuJiM0MztcdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cnRwX25leHQgPSBcdTAwMjZjdXItXHUwMDNlZmliNl9uZXh0O1xuQEAgLTIyNTMsNyAmIzQzOzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAxLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZmUzNmIzZjUxMjg1MC4uMTExMWM0ZWJjNjFkOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4mIzQzO1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxuJiM0MztcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICYjNDM7NDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuIFx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuIFx0fTtcbiBcbi1cdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4mIzQzO1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM3LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyAmIzQzOzQwNzQsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyAmIzQzOzQyMjYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuJiM0MztcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTtcbiBcdFx0XHRicmVhaztcbkBAIC01NzM5LDYgJiM0Mzs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqL1xuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXG4mIzQzO1x0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXG4gXHQgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47XG4gfVxuIFxuQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICYjNDM7NTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuJiM0MztcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbiYjNDM7XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgJiM0Mzs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyAmIzQzOzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXHUwMDI2Zmw2LmRhZGRyLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU3LDggJiM0Mzs2Mzc4LDkgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiAmIzQzOzY0MjAsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0ICAgIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIHtcbkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4mIzQzO1x0XHRcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyAmIzQzOzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xuIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFxcXG4tICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wmIzM0O0tTUkNcJiMzNDssXG5AQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0ZGV2U2ltXCYjMzQ7LCBcJiMzNDtOZXRkZXZTaW1EZXZcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtOZXRzaGFwZXJGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssIFwmIzM0O1BTUEZhbWlseVwmIzM0OywgXCYjMzQ7TmxFcnJvclwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7TmV0ZGV2RmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LFxuLSAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7TmV0bGlua1wmIzM0O11cbiYjNDM7ICAgICAgICAgICBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYiYjMzk7XFx4ZTBcXHgwMFxceDAwXFx4MDEmIzM5O1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtcXHhlZlxceDAxXFx4MDFcXHgwMSYjMzk7XG5AQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwmIzM0OyBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cJiMzNDspXG4gXG4mIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuJiM0MzsgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKFwmIzM0O3J0bmxncnAtaXB2Ni1yb3V0ZVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBydG5sXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBpZiBhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdICE9IGRzdF9sZW46XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHJldHVybiBhdHRyc1xuJiM0MzsgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpXG4mIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4mIzQzOyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4mIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbiYjNDM7ICAgIHdpdGggb3BlbihmXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwmIzM0OywgXCYjMzQ7d1wmIzM0OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKGZcJiMzNDt7dmFsdWV9XFxuXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0FuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O3JvdXRlL2djX2ludGVydmFsXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoyOjomIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7ZXhwaXJlZCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbiYjNDM7ICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4mIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4mIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4mIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbFxuJiM0MzsgICAgYWRkcmVzcyBwYXNzZXMgREFELCBzbyByZXRyeS5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHNlZW4gPSB7fVxuJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuJiM0MzsgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuJiM0MzsgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4mIzQzOyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4mIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmdcJiMzNDssIDApXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCYjMzQ7LCA2NClcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZFwmIzM0OywgMClcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXBcJiMzNDssIG5zPXN0cihuc19oKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXBcJiMzNDssIG5zPXN0cihuc19yKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCYjMzQ7dmV0aDFcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpXG4mIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLFxuJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKVxuJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcylcbiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2luZXQ2X3J0X2RlbF9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmMxMjc1NWI1ZWNkMjRiZTllYjU1ODhjMWU2MDY3NGQ1MzM1NTYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAwMjoxNTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZjE0NTMyNzk4NjQwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uCiAgIC0KICAgICBuYW1lOiBtZXRyaWNzCiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtCkBAIC0yOTksNiAmIzQzOzMxMiw3IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIGRwb3J0CiAgICAgICAgICAgICAtIG5oLWlkCiAgICAgICAgICAgICAtIGZsb3dsYWJlbAomIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvbgogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjYKQEAgLTMxMyw3ICYjNDM7MzI3LDM4IEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjQKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmUKJiM0MzsgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0cwomIzQzOyAgICAgICAgICAjIGl0IGluIHJlcXVlc3RzLgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzY2LDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLjdiY2YwZTViZDg4N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAkJCSAgICAgYm9vbCBza2lwX25vdGlmeSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjLi42NmNmYzE3ZWRlMGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDI3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICoKJiM0MzsgKiBUaGUgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljOiBhIHZhbHVlIG11c3QgbmV2ZXIgYmUKJiM0MzsgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW4KJiM0MzsgKiBwcm9kdWNlIHN0aWxsIGdldHMgaXRzIG93biB2YWx1ZSByYXRoZXIgdGhhbiByZXVzaW5nIGFub3RoZXIKJiM0MzsgKiBmYW1pbHkmIzM5O3MuCiYjNDM7ICovCiYjNDM7ZW51bSBydF9kZWxfcmVhc29uIHsKJiM0MzsJUlRfREVMX1JFQVNPTl9VTlNQRUMsCQkvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi8KJiM0MzsJUlRfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLAkvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovCiYjNDM7CV9fUlRfREVMX1JFQVNPTl9NQVgKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKQomIzQzOwogLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC4KICAqCiAgKiAmIzM0O3N0cnVjdCBydG5leHRob3AmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggZjZmYTI3MTViNDUwYi4uOWQ4OWJlN2UwNTQ0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODc0LDcgJiM0MzsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCiAJCWlmIChydCkgewogCQkJLyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovCiAJCQlpZiAodmFsaWRfbGZ0ID09IDApIHsKLQkJCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCQkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJCQkgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTk2Nyw3ICYjNDM7MTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKLQkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzOwkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKnc7CkBAIC0yMDU2LDEzICYjNDM7MjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLAogCQkJY2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7CiAJfQogCWlmICghaW5mby0mZ3Q7c2tpcF9ub3RpZnkpCi0JCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTsKJiM0MzsJCWluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCiAJZmliNl9pbmZvX3JlbGVhc2UocnQpOwogfQogCiAvKiBOZWVkIHRvIG93biB0YWJsZS0mZ3Q7dGI2X2xvY2sgKi8KLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDsKQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCQlpZiAocnQgPT0gY3VyKSB7CiAJCQlpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSkKIAkJCQlmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby0mZ3Q7bmxfbmV0KTsKLQkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlydHBfbmV4dCA9ICZhbXA7Y3VyLSZndDtmaWI2X25leHQ7CkBAIC0yMjUzLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogCQlyZXMgPSBjLSZndDtmdW5jKHJ0LCBjLSZndDthcmcpOwogCQlpZiAocmVzID09IC0xKSB7CiAJCQl3LSZndDtsZWFmID0gcnQ7Ci0JCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMSw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncykKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpCiAJZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LSZndDtjbmYucmFfZGVmcnRyX21ldHJpYzsKIAkvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqLwogCWlmIChydCAmYW1wOyZhbXA7IChsaWZldGltZSA9PSAwIHx8IHJ0LSZndDtmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LAomIzQzOwkJCQkgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCXJ0ID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGZjNDJkNjdlNTgyMjYuLjE3MDQzNTlkMzk2MGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcywKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwKIAkJCQkJZ3dhZGRyLCBkZXYpOwogCiAJaWYgKHJ0ICZhbXA7JmFtcDsgIWxpZmV0aW1lKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCWVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtNDAwMSw3ICYjNDM7NDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KQogCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQogCX07CiAKLQlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8pOwomIzQzOwlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBkZWxfcmVhc29uKTsKIH0KIAogc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQpAQCAtNDAyOCw3ICYjNDM7NDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAogCQkJaWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLAogCQkJCQkgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSwKLQkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCkgJmx0OyAwKSB7CiYjNDM7CQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwLAomIzQzOwkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQykgJmx0OyAwKSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCX0gZWxzZQpAQCAtNDA2NCwxMyAmIzQzOzQwNzQsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLAogCQkJCQkgJmFtcDtydC0mZ3Q7ZmliNl9zaWJsaW5ncywKIAkJCQkJIGZpYjZfc2libGluZ3MpIHsKLQkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pOwomIzQzOwkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJfQogCi0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiBvdXRfcHV0OgpAQCAtNDE5Niw3ICYjNDM7NDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAkJCQlpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKQogCQkJCQljb250aW51ZTsKIAotCQkJCWVyciA9ICBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGNmZy0mZ3Q7ZmNfbmhfaWQpCkBAIC00MjE1LDcgJiM0Mzs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCiAJCQkvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi8KIAkJCWlmIChjZmctJmd0O2ZjX2ZsYWdzICZhbXA7IFJURl9HQVRFV0FZKQotCQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQllbHNlCiAJCQkJZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpOwogCQkJYnJlYWs7CkBAIC01NzM5LDYgJiM0Mzs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovCiYjNDM7CSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqLwogCSAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjsKIH0KIApAQCAtNTc3NSw3ICYjNDM7NTc4OCw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAogCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAotCQkJIHVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpOwogCXN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjOwpAQCAtNTk1NCw2ICYjNDM7NTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC0mZ3Q7ZXJyb3IgOiAwKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiYjNDM7CWlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKQEAgLTYxMDMsNyAmIzQzOzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCkKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLSZndDtza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgIDAsIFJUTV9ORVdST1VURSwKIAkJCQkJICBORVRMSU5LX0NCKGFyZy0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncykpIHsKJiM0MzsJCQkJCSAgYXJnLSZndDtjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLAomIzQzOwkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQykpIHsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWNvdW50JiM0MzsmIzQzOzsKQEAgLTYzMzYsMTIgJiM0Mzs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAgIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAl9IGVsc2UgewogCQllcnIgPSAtRU5FVFVOUkVBQ0g7CiAJfQpAQCAtNjM1Nyw4ICYjNDM7NjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAotCQkgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpCiYjNDM7c3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncywKJiM0MzsJCQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTYzNzcsNyAmIzQzOzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7CiYjNDM7CQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovCkBAIC02Mzk4LDYgJiM0Mzs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAogCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTsKIH0KIAomIzQzO3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCSAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIHsKQEAgLTY0MTAsNyAmIzQzOzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgUlRNX05FV1JPVVRFLCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjQ2Myw3ICYjNDM7NjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAl9CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCwKLQkJCSAgICAwLCAwKTsKJiM0MzsJCQkgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQpAQCAtMjksNyAmIzQzOzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZToKIAogX19hbGxfXyA9IFsKICAgICAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0OywgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtTUEVDX1BBVEgmIzM0OywKLSAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywKJiM0MzsgICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssCiAgICAgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssCiAgICAgJiMzNDtQU1BGYW1pbHkmIzM0OywKIF0KQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQogCiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiYjNDM7CiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7bmV0ZGV2LnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQppbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkJiMzNDssIDApCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cCYjMzQ7LCBucz1zdHIobnNfaCkpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cCYjMzQ7LCBucz1zdHIobnNfcikpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpCiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsICYjMzQ7dmV0aDEmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpCiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCAmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkJiMzNDspCiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOgomIzQzOyAgICAgICAgICAgIHJldHVybgomIzQzOwomIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksCiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSkKJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcykKJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOgomIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KQomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGYmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX0mIzM0OykKJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdCkKJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KQomIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NCYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKQogICAgIGtzZnRfZXhpdCgpCiAKIGlmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZXMuIFRoZSBpZGVhIGlzIHRvIHByb3ZpZGUgbW9yZSBncmFudWxhciBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UgYWJvdXQgKndoeSogYSByb3V0ZSB3YXMgZGVsZXRlZC4gVGhpbmdzIGxpa2UgZXhwaXJhdGlvbiBvciBhbiBSQSB3aXRoZHJhd2FsIOKAkyB0aGF0JiMzOTtzIHZhbHVhYmxlIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZyBkYXRhLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaXA2X2ZpYi5jYCwgYHJvdXRlLmNgLCBgbmRpc2MuY2AsIGFuZCBgYWRkcmNvbmYuY2AuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjcml0aWNhbCBhcmVhcyBmb3IgSVB2NiByb3V0aW5nIGFuZCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBwcm9wYWdhdGVzIHRoaXMgYGRlbF9yZWFzb25gIGluZm9ybWF0aW9uIGRvd24gdGhlIHN0YWNrIGFuZCBlbnN1cmVzIGl0JiMzOTtzIGluY2x1ZGVkIGluIHRoZSBOZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEFuZCB0aGV5JiMzOTt2ZSB3aXNlbHkgYWRkZWQgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBHb29kLCBnb29kLiBUZXN0aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBtb2RpZmljYXRpb24gb2YgdGhlIE5ldGxpbmsgbWVzc2FnZXMgdGhlbXNlbHZlcyDigJMgbmV3IGF0dHJpYnV0ZSwgbmV3IGRhdGEuIFNvLCB0aGUgaW1wYWN0IGlzIGRpcmVjdC4gQW5kIHllcywgaXTigJlzIHJlYWNoYWJsZS4gSVB2NiByb3V0ZSBkZWxldGlvbiBoYXBwZW5zIGFsbCB0aGUgdGltZSwgYW5kIFJBIHByb2Nlc3NpbmcsIHRoYXQmIzM5O3MgY3J1Y2lhbCB0b28uCgpHaXZlbiB0aGF0IGl0IGFkZHMgYSAqbmV3KiBhdHRyaWJ1dGUgYW5kIHRvdWNoZXMgcm91dGUgZGVsZXRpb24gY29kZSwgZnV6emluZyBpcyBhbiBvYnZpb3VzIG5leHQgc3RlcC4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIHN1YmplY3QgdGhpcyB0byByaWdvcm91cyB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBkaXJlY3RseS4gVGhlIG9uZXMgY2FsbGVkIG91dCBoZXJlIGFyZSBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgcnQ2X2ZpbGxfbm9kZWAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGBmaWI2X2RlbGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBob3cgdGhlIGBkZWxfcmVhc29uYCBpcyBiZWluZyBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEzMD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzE6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVx0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNzk4PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjg3NzpcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMjMxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xMzYzLVx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMTAyMi1cdGlmIChydCBcdTAwMjZcdTAwMjYgIWxpZmV0aW1lKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cdFx0cnQgPSBOVUxMO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9Mzk5OD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cbm5ldC9pcHY2L3JvdXRlLmM6NDAwODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwOS1cdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyBhbiBJUHY2IFJvdXRpbmcgQ29kZSBQYXRjaCoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gdG8gdGhlIElQdjYgcm91dGluZyBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRoZSBgSVBWNmAgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlZC4gTXkgaW5pdGlhbCBmb2N1cyBnb2VzIGltbWVkaWF0ZWx5IHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkLiBJIHNlZSBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFzIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJJiMzOTttIGFsc28gc2VlaW5nIGBydDZfZmlsbF9ub2RlYCBtb2RpZmllZCB0byB0YWtlIGBkZWxfcmVhc29uYCwgd2hpY2ggKmNvdWxkKiBiZSBzaWduaWZpY2FudCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBJdCBtaWdodCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBpbiBgcnQ2X2ZpbGxfbm9kZWAgb2YgaG93IHRoZSByb3V0ZSBpcyByZW1vdmVkIGFuZCB3aHkuCgpNeSBndXQgdGVsbHMgbWUgYGZpYjZfZGVsYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uOyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBkZWxldGlvbiBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyAqcmVhbGx5KiBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X2RlbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03NTY3PXN0YXRpYyBpbnQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfYXBwZW5kKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzYwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc2MDk6c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZGVsKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy03NjEwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmliNl9pbmZvICoqcnRfYXJyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTc5MDA9c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzNi1cdGNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc5Mzc6XHRcdG1seHN3X3NwX3JvdXRlcl9maWI2X2RlbChtbHhzd19zcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTc5MzgtXHRcdFx0XHRcdCBmaWI2X3dvcmstXHUwMDNlcnRfYXJyLFxuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcyLVx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE4NDE9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0xOTY4LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5Njk6c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcwLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY1LS8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA2NjppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjctXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk1LVx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDk2Olx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA3LSAqXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXHRIb3dldmVyLCBpdCBpcyBpbnRlcm5hbGx5IHJlZW50ZXJhYmxlIHdydCBpdHNlbGYgYW5kIGZpYjZfYWRkL2ZpYjZfZGVsLlxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1Ny1cdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4Olx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1OS1cdFx0XHRpZiAocmVzKSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTIzOTM9c3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDUtXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQwNjpcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9FWFBJUkVEKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA3LX1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk4OS1cdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjM5OTA6XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTM5OTEtXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwNzYtXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjQwNzc6XHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvcm91dGUuYy00MDc4LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MDgyLVxubmV0L2lwdjYvcm91dGUuYzo0MDgzOlx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbm5ldC9pcHY2L3JvdXRlLmMtNDA4NC1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtZXNzaW5nIHdpdGggY29yZSBJUHY2IHJvdXRpbmcgbG9naWMg4oCTIGl0JiMzOTtzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZ29vZC4gVGhlIGNvbmZpZ3MgYXJlIGtleWVkIG9uIGBJUFY2YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgX19pbmV0Nl9ydF9ub3RpZnlgLCBhbmQgYF9faXA2X2RlbF9ydGAuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgSVBWNmAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLiBZdXAsIElQdjYgcm91dGluZyBpcyBpbmRlZWQgdGllZCB0byBgQ09ORklHX0lQVjZgLiBXYWl0IGEgc2Vjb25k4oCmIHRoZSB0ZXN0cyBhbHNvIG1lbnRpb24gYENPTkZJR19JUFY2X1JPVVRFX0lORk9gOiBgJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPJiMzNDtgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcHJvYmFibHkgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgUkEgd2l0aGRyYXduIHNjZW5hcmlvcy4gT2theSwgc28gSSBzaG91bGQgaW5jbHVkZSBib3RoIGBJUFY2YCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgaW4gdGhlICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGxpc3QuIEdvb2QgY2F0Y2guCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19pbmV0Nl9ydF9ub3RpZnlgIGFuZCBgX19pcDZfZGVsX3J0YCDigJMgYXJlIHRoZXkgc3RhdGljPyBZZXMsIGJvdGggb2YgdGhlbSBhcmUuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJlZmVyIHRoZSBub24tc3RhdGljIHZhcmlhbnRzLiBUaGF0IHdvdWxkIGJlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBhbmQgYGluZXQ2X3J0X25vdGlmeWAuIExldCYjMzk7cyB0aHJvdyBpbiBgcnQ2X2ZpbGxfbm9kZWAsIGl0JiMzOTtzIHN0YXRpYywgYnV0IHNlZW1zICYjMzQ7aG90JiMzNDsgYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGZvciBhbGwgcm91dGUgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMgLSBJJiMzOTtsbCBza2lwIGl0IHRvIGF2b2lkIHNrZXdpbmcgdGhlIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byBgaXA2X2RlbF9ydF9yZWFzb25gIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzYtXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODc4LVx0XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cdGlmIChydCBcdTAwMjZcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XG5uZXQvaXB2Ni9uZGlzYy5jOjEzNjQ6XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG5uZXQvaXB2Ni9uZGlzYy5jLTEzNjUtXHRcdFx0XHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4tLVxubmV0L2lwdjYvcm91dGUuYz05NzA9aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xubmV0L2lwdjYvcm91dGUuYzoxMDIzOlx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQzCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipOZXcgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gQXR0cmlidXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBhcm91bmQgZW5oYW5jaW5nIHRoZSBpbmZvcm1hdGlvbiB3ZSBwcm92aWRlIHRvIHVzZXJzcGFjZSB3aGVuIGEgcm91dGUgaXMgcmVtb3ZlZC4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIG1vcmUgdmlzaWJpbGl0eSBpcyBhbHdheXMgYmVuZWZpY2lhbCBpbiBuZXR3b3JrIG1hbmFnZW1lbnQuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRlZCBhdCBrZXkgYXJlYXM6IGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZSBkZWxldGlvbiByZWFzb24gaXRzZWxmICh0aGluZ3MgbGlrZSByb3V0ZSBleHBpcnkgb3IgUkEgd2l0aGRyYXdhbCkgaXMgYmVpbmcgcGx1bWJlZCBkb3duIHRocm91Z2ggdGhlIElQdjYgcm91dGluZyBzdGFjayBhbmQgdGhlbiBlbWl0dGVkIHRvIHVzZXJzcGFjZSB2aWEgdGhpcyBuZXcgYXR0cmlidXRlLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBmbG93LiBJIGNhbiBzZWUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGBJUFY2YCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgY29uZmlnczsgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvdWNoaW4mIzM5OyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0JiMzOTtzIGJvdGggZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIG1lYW5zIGl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSBzaG91bGQgc2NoZWR1bGUgc29tZSB0ZXN0cyBmb3IgdGhpcywgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLiBMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIChgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWApIHRvIHBhc3MgZG93biB0aGUgZGVsZXRpb24gcmVhc29uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pIGFuZCBlbWl0IGl0IHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTU6NTEuNjEwOTQwMzQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzgzNzI0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE1OjUxLjYxMDk0NzI4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NjY4ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ZjMTI3NTViNWVjZDI0YmU5ZWI1NTg4YzFlNjA2NzRkNTMzNTU2MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5pbmRleCAzMzE5NWRiOTY3NDZjLi5mMTQ1MzI3OTg2NDAzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgIC1cXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxcbisgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIHVuc3BlY1xcbisgICAgICAtIGV4cGlyZWRcXG4rICAgICAgLSByYS13aXRoZHJhd25cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuICAgLVxcbiAgICAgbmFtZTogbWV0cmljc1xcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXFxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIGRwb3J0XFxuICAgICAgICAgICAgIC0gbmgtaWRcXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXFxuICAgICAgIGR1bXA6XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNlxcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgIGRvOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjRcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcXG4rICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcXHUwMDI2cm91dGUtcmVxLWF0dHJzXFxuKyAgICAgICAgICAgIC0gZHN0XFxuKyAgICAgICAgICAgIC0gc3JjXFxuKyAgICAgICAgICAgIC0gaWlmXFxuKyAgICAgICAgICAgIC0gb2lmXFxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxcbisgICAgICAgICAgICAtIHByaW9yaXR5XFxuKyAgICAgICAgICAgIC0gcHJlZnNyY1xcbisgICAgICAgICAgICAtIG1ldHJpY3NcXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcXG4rICAgICAgICAgICAgLSBmbG93XFxuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gdGFibGVcXG4rICAgICAgICAgICAgLSBtYXJrXFxuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXFxuKyAgICAgICAgICAgIC0gdmlhXFxuKyAgICAgICAgICAgIC0gbmV3ZHN0XFxuKyAgICAgICAgICAgIC0gcHJlZlxcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcXG4rICAgICAgICAgICAgLSBlbmNhcFxcbisgICAgICAgICAgICAtIGV4cGlyZXNcXG4rICAgICAgICAgICAgLSBwYWRcXG4rICAgICAgICAgICAgLSB1aWRcXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXFxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cXG4rICAgICAgICAgICAgLSBzcG9ydFxcbisgICAgICAgICAgICAtIGRwb3J0XFxuKyAgICAgICAgICAgIC0gbmgtaWRcXG4rICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZGVscm91dGVcXG4gICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGVcXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI1XFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNFxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNVxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuK1xcbittY2FzdC1ncm91cHM6XFxuKyAgbGlzdDpcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXFxuKyAgICAgIHZhbHVlOiA3XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxcbisgICAgICB2YWx1ZTogMTFcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5AQCAtNDY4LDcgKzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5AQCAtNTMyLDYgKzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiAjZW5kaWZcXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gXFxuIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcXG4gXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IDA5ZmZlMGYxM2NlNzUuLjdiY2YwZTViZDg4N2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjLi42NmNmYzE3ZWRlMGU3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbkBAIC0zOTksNiArMzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gXFx0UlRBX0RQT1JULFxcbiBcXHRSVEFfTkhfSUQsXFxuIFxcdFJUQV9GTE9XTEFCRUwsXFxuK1xcdFJUQV9ERUxfUkVBU09OLFxcbiBcXHRfX1JUQV9NQVhcXG4gfTtcXG4gXFxuQEAgLTQwNyw2ICs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcXG4gXFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxcbisgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXFxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XFxuKyAqIHRyZWF0IFxcXCJhYnNlbnRcXFwiIGFuZCBcXFwidW5zcGVjXFxcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXFxuKyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXFxuKyAqXFxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxcbisgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXFxuKyAqIGZhbWlseSdzLlxcbisgKi9cXG4rZW51bSBydF9kZWxfcmVhc29uIHtcXG4rXFx0UlRfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xcbitcXHRfX1JUX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcXG4rXFxuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXFxuICAqXFxuICAqIFxcXCJzdHJ1Y3QgcnRuZXh0aG9wXFxcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY3LDcgKzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTYsMTMgKzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xcbkBAIC0yMDkxLDcgKzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRcXHRpZiAocnQgPT0gY3VyKSB7XFxuIFxcdFxcdFxcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxcbiBcXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG4tXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJ0cF9uZXh0ID0gXFx1MDAyNmN1ci1cXHUwMDNlZmliNl9uZXh0O1xcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIFxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuIFxcdFxcdGlmIChyZXMgPT0gLTEpIHtcXG4gXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbi1cXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDEsNyArMjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XFxuIFxcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRydCA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxcbiBcXHRcXHRcXHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XFxuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGd3YWRkciwgZGV2KTtcXG4gXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XFxuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xcbitcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBcXG4gb3V0OlxcbkBAIC00MDAxLDcgKzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4gXFx0XFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcXG4rXFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2VcXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cnQtXFx1MDAzZWZpYjZfc2libGluZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCBmaWI2X3NpYmxpbmdzKSB7XFxuLVxcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xcbitcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbmhfaWQpXFxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4gXFxuIFxcdFxcdFxcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IFJURl9HQVRFV0FZKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4gXFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XFxuQEAgLTU5NTQsNiArNTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXFx1MDAzZWVycm9yIDogMCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuK1xcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XFxuK1xcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK3tcXG4rXFx0X19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXFxuIFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuQEAgLTY0NjMsNyArNjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxuLVxcdFxcdFxcdCAgICAwLCAwKTtcXG4rXFx0XFx0XFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XFxuQEAgLTE3LDcgKzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxcbisgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcXG4gXFxuIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRkZXZTaW1cXFwiLCBcXFwiTmV0ZGV2U2ltRGV2XFxcIixcXG4gICAgICAgICAgICBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLCBcXFwiUFNQRmFtaWx5XFxcIiwgXFxcIk5sRXJyb3JcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsXFxuLSAgICAgICAgICAgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG4rICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbkBAIC0yOSw3ICsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XFxuIFxcbiBfX2FsbF9fID0gW1xcbiAgICAgXFxcIk5sRXJyb3JcXFwiLCBcXFwiTmxQb2xpY3lcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiU1BFQ19QQVRIXFxcIixcXG4tICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLFxcbisgICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJSdG5sUm91dGVGYW1pbHlcXFwiLFxcbiAgICAgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLFxcbiAgICAgXFxcIlBTUEZhbWlseVxcXCIsXFxuIF1cXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1hZGRyLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4gXFxuK2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuK1xcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXFxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVxcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcXFwiLCAyKVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1xcXCIsIDApXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblxcXCIsIDY0KVxcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcXFwiLCAwKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcXFwiLCBucz1zdHIobnNfaCkpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFxcXCIsIG5zPXN0cihuc19yKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXFxcInZldGgxXFxcIilcXG4rXFxuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFxcXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFxcXCIpXFxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcXG4rICAgICAgICAgICAgcmV0dXJuXFxuK1xcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXFxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcXG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXFxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcXFwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVxcXCIpXFxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXFxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICBpcChcXFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFxcXCIpXFxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTU6NTEuOTQ3MjczNDM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjY5NDIwMjY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdmYzEyNzU1YjVlY2QyNGJlOWViNTU4OGMxZTYwNjc0ZDUzMzU1NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZjE0NTMyNzk4NjQwMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbisgICAgZW50cmllczpcbisgICAgICAtIHVuc3BlY1xuKyAgICAgIC0gZXhwaXJlZFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGRlbC1yZWFzb25cbiAgIC1cbiAgICAgbmFtZTogbWV0cmljc1xuICAgICBuYW1lLXByZWZpeDogcnRheC1cbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNlxuQEAgLTMxMyw3ICszMjcsMzggQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcbisgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0c1xuKyAgICAgICAgICAjIGl0IGluIHJlcXVlc3RzLlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbisgICAgICAgICAgICAtIGRzdFxuKyAgICAgICAgICAgIC0gc3JjXG4rICAgICAgICAgICAgLSBpaWZcbisgICAgICAgICAgICAtIG9pZlxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxuKyAgICAgICAgICAgIC0gcHJpb3JpdHlcbisgICAgICAgICAgICAtIHByZWZzcmNcbisgICAgICAgICAgICAtIG1ldHJpY3NcbisgICAgICAgICAgICAtIG11bHRpcGF0aFxuKyAgICAgICAgICAgIC0gZmxvd1xuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSB0YWJsZVxuKyAgICAgICAgICAgIC0gbWFya1xuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXG4rICAgICAgICAgICAgLSB2aWFcbisgICAgICAgICAgICAtIG5ld2RzdFxuKyAgICAgICAgICAgIC0gcHJlZlxuKyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuKyAgICAgICAgICAgIC0gZW5jYXBcbisgICAgICAgICAgICAtIGV4cGlyZXNcbisgICAgICAgICAgICAtIHBhZFxuKyAgICAgICAgICAgIC0gdWlkXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXG4rICAgICAgICAgICAgLSBpcC1wcm90b1xuKyAgICAgICAgICAgIC0gc3BvcnRcbisgICAgICAgICAgICAtIGRwb3J0XG4rICAgICAgICAgICAgLSBuaC1pZFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuKyAgICAgIHZhbHVlOiAyNFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbisgICAgLVxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjVcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuKyAgICAgIHZhbHVlOiA3XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbisgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li43YmNmMGU1YmQ4ODdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4rXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uNjZjZmMxN2VkZTBlNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqXG4rICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlXG4rICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4rICogZmFtaWx5J3MuXG4rICovXG4rZW51bSBydF9kZWxfcmVhc29uIHtcbitcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4rXHRSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cIixcbkBAIC0yNDAxLDcgKzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICs0MDAyLDE1IEBAIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4rXG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXHUwMDNjIDApIHtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHR9IGVsc2VcbkBAIC00MDY0LDEzICs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4rXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpXG5AQCAtNDIxNSw3ICs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbitcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbitcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiArNTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCArNjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuK1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuK31cbitcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbkBAIC0xNyw3ICsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4rICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wiS1NSQ1wiLFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcIktTUkNcIixcbiAgICAgICAgICAgIFwiTmV0ZGV2U2ltXCIsIFwiTmV0ZGV2U2ltRGV2XCIsXG4gICAgICAgICAgICBcIk5ldHNoYXBlckZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIiwgXCJQU1BGYW1pbHlcIiwgXCJObEVycm9yXCIsXG4gICAgICAgICAgICBcIllubEZhbWlseVwiLCBcIkV0aHRvb2xGYW1pbHlcIiwgXCJOZXRkZXZGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsXG4tICAgICAgICAgICBcIk5sY3RybEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiTmV0bGlua1wiXVxuKyAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5pbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uZjc0Y2NkNWMyZDEzYSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgKzUsOCBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG5AQCAtMTM0LDggKzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cIiBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4rICAgIHJ0bmwubnRmX3N1YnNjcmliZShcInJ0bmxncnAtaXB2Ni1yb3V0ZVwiKVxuKyAgICByZXR1cm4gcnRubFxuK1xuK1xuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCJcIlwiXG4rXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGlmIGF0dHJzWydydG0tZHN0LWxlbiddICE9IGRzdF9sZW46XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBhdHRyc1xuKyAgICByZXR1cm4gTm9uZVxuK1xuK1xuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiR2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4rICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuKyAgICB3aXRoIG9wZW4oZlwiL3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwiLCBcIndcIikgYXMgZjpcbisgICAgICAgIGYud3JpdGUoZlwie3ZhbHVlfVxcblwiKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiQW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwicm91dGUvZ2NfaW50ZXJ2YWxcIiwgMilcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxuK1xuK1xuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbisgICAgXCJcIlwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cIlwiXCJcbitcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4rICAgIHJhID0gc3RydWN0LnBhY2soJyFCQkhCQkhJSScsIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuKyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuKyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSUlJJywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxuK1xuK1xuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXG4rXG4rXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XG4rICAgIFwiXCJcIlxuKyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB1bnRpbCB0aGUgcm91dGVyJ3MgbGluay1sb2NhbFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuKyAgICBcIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcIiwgMClcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgwIHVwXCIsIG5zPXN0cihuc19oKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgxIHVwXCIsIG5zPXN0cihuc19yKSlcbitcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCJ2ZXRoMVwiKVxuK1xuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwiKVxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbisgICAgICAgICAgICByZXR1cm5cbitcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCIpXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE1OjUxLjk0NzI3NDYyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODU0ODc0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBOZXRsaW5rIGF0dHJpYnV0ZSwgYFJUQV9ERUxfUkVBU09OYCwgc3BlY2lmaWNhbGx5IGZvciBJUHY2IHJvdXRlcy4gVGhlIGlkZWEgaXMgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZSBhYm91dCAqd2h5KiBhIHJvdXRlIHdhcyBkZWxldGVkLiBUaGluZ3MgbGlrZSBleHBpcmF0aW9uIG9yIGFuIFJBIHdpdGhkcmF3YWwg4oCTIHRoYXQncyB2YWx1YWJsZSBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcgZGF0YS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaXA2X2ZpYi5jYCwgYHJvdXRlLmNgLCBgbmRpc2MuY2AsIGFuZCBgYWRkcmNvbmYuY2AuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjcml0aWNhbCBhcmVhcyBmb3IgSVB2NiByb3V0aW5nIGFuZCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBwcm9wYWdhdGVzIHRoaXMgYGRlbF9yZWFzb25gIGluZm9ybWF0aW9uIGRvd24gdGhlIHN0YWNrIGFuZCBlbnN1cmVzIGl0J3MgaW5jbHVkZWQgaW4gdGhlIE5ldGxpbmsgbm90aWZpY2F0aW9ucy4gQW5kIHRoZXkndmUgd2lzZWx5IGFkZGVkIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5YC4gR29vZCwgZ29vZC4gVGVzdGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBtb2RpZmljYXRpb24gb2YgdGhlIE5ldGxpbmsgbWVzc2FnZXMgdGhlbXNlbHZlcyDigJMgbmV3IGF0dHJpYnV0ZSwgbmV3IGRhdGEuIFNvLCB0aGUgaW1wYWN0IGlzIGRpcmVjdC4gQW5kIHllcywgaXTigJlzIHJlYWNoYWJsZS4gSVB2NiByb3V0ZSBkZWxldGlvbiBoYXBwZW5zIGFsbCB0aGUgdGltZSwgYW5kIFJBIHByb2Nlc3NpbmcsIHRoYXQncyBjcnVjaWFsIHRvby5cblxuR2l2ZW4gdGhhdCBpdCBhZGRzIGEgKm5ldyogYXR0cmlidXRlIGFuZCB0b3VjaGVzIHJvdXRlIGRlbGV0aW9uIGNvZGUsIGZ1enppbmcgaXMgYW4gb2J2aW91cyBuZXh0IHN0ZXAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBzdWJqZWN0IHRoaXMgdG8gcmlnb3JvdXMgdGVzdGluZyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoZSBvbmVzIGNhbGxlZCBvdXQgaGVyZSBhcmUgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGBmaWI2X2RlbGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAuIExldCdzIHNlZSBob3cgdGhleSdyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoZSBgZGVsX3JlYXNvbmAgaXMgYmVpbmcgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNTo1Ny40MzI3NjU1ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTQ5NzgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cXHRcXHRcXHRpZiAodmFsaWRfbGZ0ID09IDApIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cXHRcXHRydCA9IE5VTEw7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy00MDA5LVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNTo1OS4xOTQyNjg1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNTg4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyBhbiBJUHY2IFJvdXRpbmcgQ29kZSBQYXRjaCoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgSVB2NiByb3V0aW5nIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgc29tZXRoaW5nIHRoYXQgbmVlZHMgdGhlIGBJUFY2YCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVkLiBNeSBpbml0aWFsIGZvY3VzIGdvZXMgaW1tZWRpYXRlbHkgdG8gdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEknbSBhbHNvIHNlZWluZyBgcnQ2X2ZpbGxfbm9kZWAgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAsIHdoaWNoICpjb3VsZCogYmUgc2lnbmlmaWNhbnQgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gSXQgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldGFpbHMgaW4gYHJ0Nl9maWxsX25vZGVgIG9mIGhvdyB0aGUgcm91dGUgaXMgcmVtb3ZlZCBhbmQgd2h5LlxuXG5NeSBndXQgdGVsbHMgbWUgYGZpYjZfZGVsYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRvIHplcm8gaW4gb247IGxldCdzIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkIGZyb20gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBkZWxldGlvbiBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyAqcmVhbGx5KiBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjowMi42MTc4NTk0NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3Nzg2NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03NTY3PXN0YXRpYyBpbnQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfYXBwZW5kKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy03NjA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc2MDk6c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZGVsKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzYxMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmaWI2X2luZm8gKipydF9hcnIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03OTAwPXN0YXRpYyB2b2lkIG1seHN3X3NwX3JvdXRlcl9maWI2X2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzNi1cXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6NzkzNzpcXHRcXHRtbHhzd19zcF9yb3V0ZXJfZmliNl9kZWwobWx4c3dfc3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzOC1cXHRcXHRcXHRcXHRcXHQgZmliNl93b3JrLVxcdTAwM2VydF9hcnIsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9NDY5PWludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcwLVxcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjQ3MTppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzItXFx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTg0MT1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OC1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk2OTpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcwLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjUtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjY6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ny1cXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTUtXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwOTY6XFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDctICpcXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlxcdEhvd2V2ZXIsIGl0IGlzIGludGVybmFsbHkgcmVlbnRlcmFibGUgd3J0IGl0c2VsZiBhbmQgZmliNl9hZGQvZmliNl9kZWwuXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU3LVxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1OS1cXHRcXHRcXHRpZiAocmVzKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjM5Mz1zdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XFx0XFx0XFx0ZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA3LX1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk3Nj1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5ODktXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbm5ldC9pcHY2L3JvdXRlLmM6Mzk5MDpcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxubmV0L2lwdjYvcm91dGUuYy0zOTkxLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDA3Ni1cXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbm5ldC9pcHY2L3JvdXRlLmM6NDA3NzpcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvcm91dGUuYy00MDc4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwODItXFxubmV0L2lwdjYvcm91dGUuYzo0MDgzOlxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvcm91dGUuYy00MDg0LW91dF91bmxvY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE2OjA0LjM5NTcyODc1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTg0MzQwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbWVzc2luZyB3aXRoIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIOKAkyBpdCdzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZ29vZC4gVGhlIGNvbmZpZ3MgYXJlIGtleWVkIG9uIGBJUFY2YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgX19pbmV0Nl9ydF9ub3RpZnlgLCBhbmQgYF9faXA2X2RlbF9ydGAuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJUFY2YCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuIFl1cCwgSVB2NiByb3V0aW5nIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNmAuIFdhaXQgYSBzZWNvbmTigKYgdGhlIHRlc3RzIGFsc28gbWVudGlvbiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2A6IGBcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cImAuIEFoLCByaWdodCwgdGhhdCdzIHByb2JhYmx5IG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIFJBIHdpdGhkcmF3biBzY2VuYXJpb3MuIE9rYXksIHNvIEkgc2hvdWxkIGluY2x1ZGUgYm90aCBgSVBWNmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGluIHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBsaXN0LiBHb29kIGNhdGNoLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBfX2luZXQ2X3J0X25vdGlmeWAgYW5kIGBfX2lwNl9kZWxfcnRgIOKAkyBhcmUgdGhleSBzdGF0aWM/IFllcywgYm90aCBvZiB0aGVtIGFyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgdmFyaWFudHMuIFRoYXQgd291bGQgYmUgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFuZCBgaW5ldDZfcnRfbm90aWZ5YC4gTGV0J3MgdGhyb3cgaW4gYHJ0Nl9maWxsX25vZGVgLCBpdCdzIHN0YXRpYywgYnV0IHNlZW1zIFwiaG90XCIgYmVjYXVzZSBpdCdzIHVzZWQgZm9yIGFsbCByb3V0ZSBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucyAtIEknbGwgc2tpcCBpdCB0byBhdm9pZCBza2V3aW5nIHRoZSBhbmFseXNpcy5cblxuQWxyaWdodCwgbGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIGBpcDZfZGVsX3J0X3JlYXNvbmAgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjoxMS44NTQxNjU1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTY2ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cXHRcXHRcXHRpZiAodmFsaWRfbGZ0ID09IDApIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cXHRcXHRydCA9IE5VTEw7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy00MDA5LVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjoxMy4zOTk4Mzk2OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE1MDYzNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipOZXcgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gQXR0cmlidXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZvY3VzIGlzIGFyb3VuZCBlbmhhbmNpbmcgdGhlIGluZm9ybWF0aW9uIHdlIHByb3ZpZGUgdG8gdXNlcnNwYWNlIHdoZW4gYSByb3V0ZSBpcyByZW1vdmVkLiBUaGF0J3MgYSBnb29kIHRoaW5nLCBtb3JlIHZpc2liaWxpdHkgaXMgYWx3YXlzIGJlbmVmaWNpYWwgaW4gbmV0d29yayBtYW5hZ2VtZW50LlxuXG5UaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRlZCBhdCBrZXkgYXJlYXM6IGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGRlbGV0aW9uIHJlYXNvbiBpdHNlbGYgKHRoaW5ncyBsaWtlIHJvdXRlIGV4cGlyeSBvciBSQSB3aXRoZHJhd2FsKSBpcyBiZWluZyBwbHVtYmVkIGRvd24gdGhyb3VnaCB0aGUgSVB2NiByb3V0aW5nIHN0YWNrIGFuZCB0aGVuIGVtaXR0ZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGlzIG5ldyBhdHRyaWJ1dGUuIFRoYXQncyBhIGxvZ2ljYWwgZmxvdy4gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBgSVBWNmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGNvbmZpZ3M7IHRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvdWNoaW4nIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQncyBib3RoIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBtZWFucyBpdCBkZWZpbml0ZWx5IG5lZWRzIHRvIGJlIGZ1enplZC4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGhhbmRsaW5nIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSBzaG91bGQgc2NoZWR1bGUgc29tZSB0ZXN0cyBmb3IgdGhpcywgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0MywiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTY6MTguODE0OTA2MTQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzOTEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4qmp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 02:03:10 +0000 UTC FinishedAt: 2026-08-04 02:16:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "5aed8f404401bfa1570cf0c3ffed7b752f568e83", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "5aed8f404401bfa1570cf0c3ffed7b752f568e83", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTE_INFO" ], "series_id": "7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_del_rt_reason", "fib6_del", "inet6_rt_del_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIChgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWApIHRvIHBhc3MgZG93biB0aGUgZGVsZXRpb24gcmVhc29uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pIGFuZCBlbWl0IGl0IHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmYzEyNzU1YjVlY2QyNGJlOWViNTU4OGMxZTYwNjc0ZDUzMzU1NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbmluZGV4IDMzMTk1ZGI5Njc0NmMuLmYxNDUzMjc5ODY0MDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbkBAIC03OCw2ICYjNDM7NzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIHVuc3BlY1xuJiM0MzsgICAgICAtIGV4cGlyZWRcbiYjNDM7ICAgICAgLSByYS13aXRoZHJhd25cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xODUsNiAmIzQzOzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgJiM0MzszMTIsNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gZHBvcnRcbiAgICAgICAgICAgICAtIG5oLWlkXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcbiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNlxuQEAgLTMxMyw3ICYjNDM7MzI3LDM4IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgIyBkZWwtcmVhc29uIGlzIG5vdGlmaWNhdGlvbi1vbmx5LiBJdCBpcyBhYm92ZVxuJiM0MzsgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0c1xuJiM0MzsgICAgICAgICAgIyBpdCBpbiByZXF1ZXN0cy5cbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6IFx1MDAyNnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgICAgICAgICAtIGRzdFxuJiM0MzsgICAgICAgICAgICAtIHNyY1xuJiM0MzsgICAgICAgICAgICAtIGlpZlxuJiM0MzsgICAgICAgICAgICAtIG9pZlxuJiM0MzsgICAgICAgICAgICAtIGdhdGV3YXlcbiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eVxuJiM0MzsgICAgICAgICAgICAtIHByZWZzcmNcbiYjNDM7ICAgICAgICAgICAgLSBtZXRyaWNzXG4mIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoXG4mIzQzOyAgICAgICAgICAgIC0gZmxvd1xuJiM0MzsgICAgICAgICAgICAtIGNhY2hlaW5mb1xuJiM0MzsgICAgICAgICAgICAtIHRhYmxlXG4mIzQzOyAgICAgICAgICAgIC0gbWFya1xuJiM0MzsgICAgICAgICAgICAtIG1mYy1zdGF0c1xuJiM0MzsgICAgICAgICAgICAtIHZpYVxuJiM0MzsgICAgICAgICAgICAtIG5ld2RzdFxuJiM0MzsgICAgICAgICAgICAtIHByZWZcbiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXBcbiYjNDM7ICAgICAgICAgICAgLSBleHBpcmVzXG4mIzQzOyAgICAgICAgICAgIC0gcGFkXG4mIzQzOyAgICAgICAgICAgIC0gdWlkXG4mIzQzOyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvXG4mIzQzOyAgICAgICAgICAgIC0gc3BvcnRcbiYjNDM7ICAgICAgICAgICAgLSBkcG9ydFxuJiM0MzsgICAgICAgICAgICAtIG5oLWlkXG4mIzQzOyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgJiM0MzszNjYsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXG4mIzQzOyAgICAgIHZhbHVlOiAyNFxuJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4mIzQzOyAgICAgIHZhbHVlOiAyNVxuJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlXG4mIzQzO1xuJiM0MzttY2FzdC1ncm91cHM6XG4mIzQzOyAgbGlzdDpcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXG4mIzQzOyAgICAgIHZhbHVlOiA3XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICYjNDM7NDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICYjNDM7NTMzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gI2VuZGlmXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li43YmNmMGU1YmQ4ODdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbiYjNDM7XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uNjZjZmMxN2VkZTBlNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBlbnVtIHJ0YXR0cl90eXBlX3Qge1xuIFx0UlRBX0RQT1JULFxuIFx0UlRBX05IX0lELFxuIFx0UlRBX0ZMT1dMQUJFTCxcbiYjNDM7XHRSVEFfREVMX1JFQVNPTixcbiBcdF9fUlRBX01BWFxuIH07XG4gXG5AQCAtNDA3LDYgJiM0Mzs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxuICNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKVxuIFxuJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cbiYjNDM7ICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuJiM0MzsgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcbiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxuJiM0MzsgKiB0cmVhdCBcJiMzNDthYnNlbnRcJiMzNDsgYW5kIFwmIzM0O3Vuc3BlY1wmIzM0OyBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXG4mIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxuJiM0MzsgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cbiYjNDM7ICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4mIzQzOyAqIGZhbWlseSYjMzk7cy5cbiYjNDM7ICovXG4mIzQzO2VudW0gcnRfZGVsX3JlYXNvbiB7XG4mIzQzO1x0UlRfREVMX1JFQVNPTl9VTlNQRUMsXHRcdC8qIGNhdXNlIG5vdCByZWNvcmRlZCAqL1xuJiM0MztcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4mIzQzO1x0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4mIzQzO1x0X19SVF9ERUxfUkVBU09OX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVF9ERUxfUkVBU09OX01BWCAoX19SVF9ERUxfUkVBU09OX01BWCAtIDEpXG4mIzQzO1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wXCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRcdFx0cnQgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbkBAIC0xOTY3LDcgJiM0MzsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTYsMTMgJiM0MzsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICYjNDM7MjA5Myw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChydCA9PSBjdXIpIHtcbiBcdFx0XHRpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSlcbiBcdFx0XHRcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVx1MDAzZW5sX25ldCk7XG4tXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xuJiM0MztcdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cnRwX25leHQgPSBcdTAwMjZjdXItXHUwMDNlZmliNl9uZXh0O1xuQEAgLTIyNTMsNyAmIzQzOzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdFx0XHRyZXMgPSBmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7JXM6IGRlbCBmYWlsZWQ6IHJ0PSVwQCVwIGVycj0lZFxcblwmIzM0OyxcbkBAIC0yNDAxLDcgJiM0MzsyNDAzLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZmUzNmIzZjUxMjg1MC4uMTExMWM0ZWJjNjFkOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG4mIzQzO1x0XHRcdFx0ICBsaWZldGltZSA9PSAwID8gUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04gOlxuJiM0MztcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IGZpYjZfdGFibGUgKnRhYmxlO1xuQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXG4gXHR0YWJsZSA9IHJ0LVx1MDAzZWZpYjZfdGFibGU7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICYjNDM7NDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuIFx0XHQuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeVxuIFx0fTtcbiBcbi1cdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4mIzQzO1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM3LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyAmIzQzOzQwNzQsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLFxuIFx0XHRcdFx0XHQgXHUwMDI2cnQtXHUwMDNlZmliNl9zaWJsaW5ncyxcbiBcdFx0XHRcdFx0IGZpYjZfc2libGluZ3MpIHtcbi1cdFx0XHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyAmIzQzOzQyMjYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4gXG4gXHRcdFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19mbGFncyBcdTAwMjYgUlRGX0dBVEVXQVkpXG4tXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8pO1xuJiM0MztcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTtcbiBcdFx0XHRicmVhaztcbkBAIC01NzM5LDYgJiM0Mzs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqL1xuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXG4mIzQzO1x0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXG4gXHQgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47XG4gfVxuIFxuQEAgLTU3NzUsNyAmIzQzOzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICYjNDM7NTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuJiM0MztcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbiYjNDM7XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgJiM0Mzs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyAmIzQzOzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cdTAwM2Vza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLFxuIFx0XHRcdFx0XHQgIDAsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICBORVRMSU5LX0NCKGFyZy1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgXHUwMDI2Zmw2LmRhZGRyLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IC1FTkVUVU5SRUFDSDtcbiBcdH1cbkBAIC02MzU3LDggJiM0Mzs2Mzc4LDkgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiAmIzQzOzY0MjAsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0ICAgIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIHtcbkBAIC02NDEwLDcgJiM0Mzs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuJiM0MztcdFx0XHQgICAgUlRNX05FV1JPVVRFLCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLFxuJiM0MztcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY0NjMsNyAmIzQzOzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4mIzQzO1x0XHRcdCAgICAwLCAwLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyAmIzQzOzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xuIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFxcXG4tICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHlcbiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wmIzM0O0tTUkNcJiMzNDssXG5AQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0ZGV2U2ltXCYjMzQ7LCBcJiMzNDtOZXRkZXZTaW1EZXZcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtOZXRzaGFwZXJGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssIFwmIzM0O1BTUEZhbWlseVwmIzM0OywgXCYjMzQ7TmxFcnJvclwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7TmV0ZGV2RmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LFxuLSAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7TmV0bGlua1wmIzM0O11cbiYjNDM7ICAgICAgICAgICBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XG4gXG4gX19hbGxfXyA9IFtcbiAgICAgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDssIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7U1BFQ19QQVRIXCYjMzQ7LFxuLSAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OyxcbiYjNDM7ICAgIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxGYW1pbHlcJiMzNDssIFwmIzM0O1J0bmxBZGRyRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sUm91dGVGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtObGN0cmxGYW1pbHlcJiMzNDssIFwmIzM0O0RldmxpbmtGYW1pbHlcJiMzNDssXG4gICAgIFwmIzM0O1BTUEZhbWlseVwmIzM0OyxcbiBdXG5AQCAtNTQsNiAmIzQzOzU0LDExIEBAIGNsYXNzIFJ0bmxBZGRyRmFtaWx5KFlubEZhbWlseSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JiMzOTsmIzM5OywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtydC1yb3V0ZS55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4mIzQzO1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O25ldGRldi55YW1sJiMzOTspKS5hc19wb3NpeCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4gXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYiYjMzk7XFx4ZTBcXHgwMFxceDAwXFx4MDEmIzM5O1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtcXHhlZlxceDAxXFx4MDFcXHgwMSYjMzk7XG5AQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwmIzM0O2luZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblwmIzM0OyBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cJiMzNDspXG4gXG4mIzQzO2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxuJiM0MzsgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuJiM0MzsgICAgcnRubC5udGZfc3Vic2NyaWJlKFwmIzM0O3J0bmxncnAtaXB2Ni1yb3V0ZVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBydG5sXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93YWl0X3JvdXRlX250ZihydG5sLCBuYW1lLCBkc3RfbGVuLCBkc3Q9Tm9uZSwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBpZiBhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdICE9IGRzdF9sZW46XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgaWYgZHN0IGlzIG5vdCBOb25lIGFuZCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykgIT0gZHN0OlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIHJldHVybiBhdHRyc1xuJiM0MzsgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgc2VlbiA9IHt9XG4mIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XVxuJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpXG4mIzQzOyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4mIzQzOyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4mIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgcmV0dXJuIHNlZW5cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbiYjNDM7ICAgIHdpdGggb3BlbihmXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwmIzM0OywgXCYjMzQ7d1wmIzM0OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKGZcJiMzNDt7dmFsdWV9XFxuXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0FuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O3JvdXRlL2djX2ludGVydmFsXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoyOjomIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7ZXhwaXJlZCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuJiM0MzsgICAgcmEgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkhCQkhJSSYjMzk7LCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbiYjNDM7ICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuJiM0MzsgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbiYjNDM7ICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQklJSSYjMzk7LCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4mIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4mIzQzOyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4mIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXG4mIzQzOyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbFxuJiM0MzsgICAgYWRkcmVzcyBwYXNzZXMgREFELCBzbyByZXRyeS5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHNlZW4gPSB7fVxuJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOlxuJiM0MzsgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuJiM0MzsgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXG4mIzQzOyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4mIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcbiYjNDM7ICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJiMzOTsyMDAxOmRiODo2OjomIzM5OyksICg2NCwgJiMzOTsyMDAxOmRiODo1OjomIzM5Oyl9XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFcJiMzNDssIDIpXG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmdcJiMzNDssIDApXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCYjMzQ7LCA2NClcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXCYjMzQ7KVxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuJiM0MzsgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXImIzM5O3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDEvYWNjZXB0X2RhZFwmIzM0OywgMClcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDAgdXBcJiMzNDssIG5zPXN0cihuc19oKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgdmV0aDEgdXBcJiMzNDssIG5zPXN0cihuc19yKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxuJiM0MzsgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCYjMzQ7dmV0aDFcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lPTE4MDAsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDYwMCksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpXG4mIzQzOyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCYjMzQ7bm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcJiMzNDspXG4mIzQzOyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJiMzOTsyMDAxOmRiODo1OjomIzM5OywgNjQsIDApLFxuJiM0MzsgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDApKVxuJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcylcbiYjNDM7ICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbiYjNDM7ICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4mIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCYjMzk7ZGVsLXJlYXNvbiYjMzk7KSwgJiMzOTtyYS13aXRoZHJhd24mIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KVxuJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwmIzM0O25vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9pbigmIzM5O2RlbC1yZWFzb24mIzM5OywgYXR0cnMsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3VzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2luZXQ2X3J0X2RlbF9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmMxMjc1NWI1ZWNkMjRiZTllYjU1ODhjMWU2MDY3NGQ1MzM1NTYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAwMjoxNTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZjE0NTMyNzk4NjQwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnQtZGVsLXJlYXNvbi0KJiM0MzsgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSB1bnNwZWMKJiM0MzsgICAgICAtIGV4cGlyZWQKJiM0MzsgICAgICAtIHJhLXdpdGhkcmF3bgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuCiAgICAgICAgIGRpc3BsYXktaGludDogaGV4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVsLXJlYXNvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBkZWwtcmVhc29uCiAgIC0KICAgICBuYW1lOiBtZXRyaWNzCiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtCkBAIC0yOTksNiAmIzQzOzMxMiw3IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIGRwb3J0CiAgICAgICAgICAgICAtIG5oLWlkCiAgICAgICAgICAgICAtIGZsb3dsYWJlbAomIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvbgogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjYKQEAgLTMxMyw3ICYjNDM7MzI3LDM4IEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjQKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmUKJiM0MzsgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0cwomIzQzOyAgICAgICAgICAjIGl0IGluIHJlcXVlc3RzLgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO3JvdXRlLXJlcS1hdHRycwomIzQzOyAgICAgICAgICAgIC0gZHN0CiYjNDM7ICAgICAgICAgICAgLSBzcmMKJiM0MzsgICAgICAgICAgICAtIGlpZgomIzQzOyAgICAgICAgICAgIC0gb2lmCiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5CiYjNDM7ICAgICAgICAgICAgLSBwcmlvcml0eQomIzQzOyAgICAgICAgICAgIC0gcHJlZnNyYwomIzQzOyAgICAgICAgICAgIC0gbWV0cmljcwomIzQzOyAgICAgICAgICAgIC0gbXVsdGlwYXRoCiYjNDM7ICAgICAgICAgICAgLSBmbG93CiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm8KJiM0MzsgICAgICAgICAgICAtIHRhYmxlCiYjNDM7ICAgICAgICAgICAgLSBtYXJrCiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHMKJiM0MzsgICAgICAgICAgICAtIHZpYQomIzQzOyAgICAgICAgICAgIC0gbmV3ZHN0CiYjNDM7ICAgICAgICAgICAgLSBwcmVmCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcC10eXBlCiYjNDM7ICAgICAgICAgICAgLSBlbmNhcAomIzQzOyAgICAgICAgICAgIC0gZXhwaXJlcwomIzQzOyAgICAgICAgICAgIC0gcGFkCiYjNDM7ICAgICAgICAgICAgLSB1aWQKJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGUKJiM0MzsgICAgICAgICAgICAtIGlwLXByb3RvCiYjNDM7ICAgICAgICAgICAgLSBzcG9ydAomIzQzOyAgICAgICAgICAgIC0gZHBvcnQKJiM0MzsgICAgICAgICAgICAtIG5oLWlkCiYjNDM7ICAgICAgICAgICAgLSBmbG93bGFiZWwKICAgICAtCiAgICAgICBuYW1lOiBkZWxyb3V0ZQogICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGUKQEAgLTMyMSw0ICYjNDM7MzY2LDIzIEBAIG9wZXJhdGlvbnM6CiAgICAgICBkbzoKICAgICAgICAgcmVxdWVzdDoKICAgICAgICAgICB2YWx1ZTogMjUKLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnMKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjQKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGYKJiM0MzsgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuCiYjNDM7ICAgICAgdmFsdWU6IDI1CiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogNwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlCiYjNDM7ICAgICAgdmFsdWU6IDExCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtNDY4LDcgJiM0Mzs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwKIAogaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKJiM0MztpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAKIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncywKIAkJCSB1bnNpZ25lZCBsb25nIG5vdyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDA5ZmZlMGYxM2NlNzUuLjdiY2YwZTViZDg4N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAkJCSAgICAgYm9vbCBza2lwX25vdGlmeSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjLi42NmNmYzE3ZWRlMGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDI3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICoKJiM0MzsgKiBUaGUgdmFsdWUgc3BhY2UgaXMgZmFtaWx5LWFnbm9zdGljOiBhIHZhbHVlIG11c3QgbmV2ZXIgYmUKJiM0MzsgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW4KJiM0MzsgKiBwcm9kdWNlIHN0aWxsIGdldHMgaXRzIG93biB2YWx1ZSByYXRoZXIgdGhhbiByZXVzaW5nIGFub3RoZXIKJiM0MzsgKiBmYW1pbHkmIzM5O3MuCiYjNDM7ICovCiYjNDM7ZW51bSBydF9kZWxfcmVhc29uIHsKJiM0MzsJUlRfREVMX1JFQVNPTl9VTlNQRUMsCQkvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi8KJiM0MzsJUlRfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLAkvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovCiYjNDM7CV9fUlRfREVMX1JFQVNPTl9NQVgKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKQomIzQzOwogLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC4KICAqCiAgKiAmIzM0O3N0cnVjdCBydG5leHRob3AmIzM0OyBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggZjZmYTI3MTViNDUwYi4uOWQ4OWJlN2UwNTQ0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODc0LDcgJiM0MzsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCiAJCWlmIChydCkgewogCQkJLyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovCiAJCQlpZiAodmFsaWRfbGZ0ID09IDApIHsKLQkJCQlpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTsKJiM0MzsJCQkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwKJiM0MzsJCQkJCQkgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTk2Nyw3ICYjNDM7MTk2Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKLQkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzOwkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDsKIAlzdHJ1Y3QgZmliNl93YWxrZXIgKnc7CkBAIC0yMDU2LDEzICYjNDM7MjA1NywxNCBAQCBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLAogCQkJY2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7CiAJfQogCWlmICghaW5mby0mZ3Q7c2tpcF9ub3RpZnkpCi0JCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTsKJiM0MzsJCWluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCiAJZmliNl9pbmZvX3JlbGVhc2UocnQpOwogfQogCiAvKiBOZWVkIHRvIG93biB0YWJsZS0mZ3Q7dGI2X2xvY2sgKi8KLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cDsKQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCQlpZiAocnQgPT0gY3VyKSB7CiAJCQlpZiAoZmliNl9yZXF1aXJlc19zcmMoY3VyKSkKIAkJCQlmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby0mZ3Q7bmxfbmV0KTsKLQkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTsKJiM0MzsJCQlmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlydHBfbmV4dCA9ICZhbXA7Y3VyLSZndDtmaWI2X25leHQ7CkBAIC0yMjUzLDcgJiM0MzsyMjU1LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KQogCQlyZXMgPSBjLSZndDtmdW5jKHJ0LCBjLSZndDthcmcpOwogCQlpZiAocmVzID09IC0xKSB7CiAJCQl3LSZndDtsZWFmID0gcnQ7Ci0JCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvKTsKJiM0MzsJCQlyZXMgPSBmaWI2X2RlbChydCwgJmFtcDtpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMSw3ICYjNDM7MjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncykKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTM2MSw3ICYjNDM7MTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpCiAJZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LSZndDtjbmYucmFfZGVmcnRyX21ldHJpYzsKIAkvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqLwogCWlmIChydCAmYW1wOyZhbXA7IChsaWZldGltZSA9PSAwIHx8IHJ0LSZndDtmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LAomIzQzOwkJCQkgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCXJ0ID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGZjNDJkNjdlNTgyMjYuLjE3MDQzNTlkMzk2MGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwomIzQzOwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcywKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwKIAkJCQkJZ3dhZGRyLCBkZXYpOwogCiAJaWYgKHJ0ICZhbXA7JmFtcDsgIWxpZmV0aW1lKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pOwogCQlydCA9IE5VTEw7CiAJfQogCkBAIC0zOTczLDcgJiM0MzszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCWVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogCiAJdGFibGUgPSBydC0mZ3Q7ZmliNl90YWJsZTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIGRlbF9yZWFzb24pOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIAogb3V0OgpAQCAtNDAwMSw3ICYjNDM7NDAwMiwxNSBAQCBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KQogCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQogCX07CiAKLQlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8pOwomIzQzOwlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmFtcDtpbmZvLCBkZWxfcmVhc29uKTsKIH0KIAogc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQpAQCAtNDAyOCw3ICYjNDM7NDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIAogCQkJaWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLAogCQkJCQkgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSwKLQkJCQkJICBpbmZvLSZndDtwb3J0aWQsIHNlcSwgMCkgJmx0OyAwKSB7CiYjNDM7CQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwLAomIzQzOwkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQykgJmx0OyAwKSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCX0gZWxzZQpAQCAtNDA2NCwxMyAmIzQzOzQwNzQsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLAogCQkJCQkgJmFtcDtydC0mZ3Q7ZmliNl9zaWJsaW5ncywKIAkJCQkJIGZpYjZfc2libGluZ3MpIHsKLQkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pOwomIzQzOwkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJfQogCi0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7CiBvdXRfcHV0OgpAQCAtNDE5Niw3ICYjNDM7NDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywKIAkJCQlpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKQogCQkJCQljb250aW51ZTsKIAotCQkJCWVyciA9ICBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8pOwomIzQzOwkJCQllcnIgPSBfX2lwNl9kZWxfcnQocnQsICZhbXA7Y2ZnLSZndDtmY19ubGluZm8sCiYjNDM7CQkJCQkJICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGNmZy0mZ3Q7ZmNfbmhfaWQpCkBAIC00MjE1LDcgJiM0Mzs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCiAJCQkvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi8KIAkJCWlmIChjZmctJmd0O2ZjX2ZsYWdzICZhbXA7IFJURl9HQVRFV0FZKQotCQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQllbHNlCiAJCQkJZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpOwogCQkJYnJlYWs7CkBAIC01NzM5LDYgJiM0Mzs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovCiAJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovCiYjNDM7CSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqLwogCSAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjsKIH0KIApAQCAtNTc3NSw3ICYjNDM7NTc4OCw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAogCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAotCQkJIHVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpOwogCXN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjOwpAQCAtNTk1NCw2ICYjNDM7NTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC0mZ3Q7ZXJyb3IgOiAwKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiYjNDM7CWlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcyLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKQEAgLTYxMDMsNyAmIzQzOzYxMjEsOCBAQCBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCkKIAkJCWlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLSZndDtza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgIDAsIFJUTV9ORVdST1VURSwKIAkJCQkJICBORVRMSU5LX0NCKGFyZy0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncykpIHsKJiM0MzsJCQkJCSAgYXJnLSZndDtjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEsIGZsYWdzLAomIzQzOwkJCQkJICBSVF9ERUxfUkVBU09OX1VOU1BFQykpIHsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWNvdW50JiM0MzsmIzQzOzsKQEAgLTYzMzYsMTIgJiM0Mzs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAgIGlpZiwgUlRNX05FV1JPVVRFLAogCQkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwKLQkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwKTsKJiM0MzsJCQkJCSAgICBubGgtJmd0O25sbXNnX3NlcSwgMCwKJiM0MzsJCQkJCSAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAl9IGVsc2UgewogCQllcnIgPSAtRU5FVFVOUkVBQ0g7CiAJfQpAQCAtNjM1Nyw4ICYjNDM7NjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAotCQkgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpCiYjNDM7c3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IG5sbV9mbGFncywKJiM0MzsJCQkgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLSZndDtubF9uZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTYzNzcsNyAmIzQzOzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwKLQkJCSAgICBldmVudCwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7CiYjNDM7CQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovCkBAIC02Mzk4LDYgJiM0Mzs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAogCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9ST1VURSwgZXJyKTsKIH0KIAomIzQzO3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiYjNDM7ewomIzQzOwlfX2luZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwLCBkZWxfcmVhc29uKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCSAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIHsKQEAgLTY0MTAsNyAmIzQzOzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsCi0JCQkgICAgUlRNX05FV1JPVVRFLCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7CiYjNDM7CQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsCiYjNDM7CQkJICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjQ2Myw3ICYjNDM7NjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwKIAl9CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCwKLQkJCSAgICAwLCAwKTsKJiM0MzsJCQkgICAgMCwgMCwgUlRfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQpAQCAtMjksNyAmIzQzOzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZToKIAogX19hbGxfXyA9IFsKICAgICAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0OywgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtTUEVDX1BBVEgmIzM0OywKLSAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywKJiM0MzsgICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssCiAgICAgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssCiAgICAgJiMzNDtQU1BGYW1pbHkmIzM0OywKIF0KQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQogCiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiYjNDM7CiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7bmV0ZGV2LnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQppbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkJiMzNDssIDApCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cCYjMzQ7LCBucz1zdHIobnNfaCkpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cCYjMzQ7LCBucz1zdHIobnNfcikpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpCiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsICYjMzQ7dmV0aDEmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpCiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCAmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkJiMzNDspCiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOgomIzQzOyAgICAgICAgICAgIHJldHVybgomIzQzOwomIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksCiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSkKJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcykKJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOgomIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KQomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGYmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX0mIzM0OykKJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdCkKJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KQomIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NCYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKQogICAgIGtzZnRfZXhpdCgpCiAKIGlmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZXMuIFRoZSBpZGVhIGlzIHRvIHByb3ZpZGUgbW9yZSBncmFudWxhciBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UgYWJvdXQgKndoeSogYSByb3V0ZSB3YXMgZGVsZXRlZC4gVGhpbmdzIGxpa2UgZXhwaXJhdGlvbiBvciBhbiBSQSB3aXRoZHJhd2FsIOKAkyB0aGF0JiMzOTtzIHZhbHVhYmxlIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZyBkYXRhLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaXA2X2ZpYi5jYCwgYHJvdXRlLmNgLCBgbmRpc2MuY2AsIGFuZCBgYWRkcmNvbmYuY2AuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjcml0aWNhbCBhcmVhcyBmb3IgSVB2NiByb3V0aW5nIGFuZCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBwcm9wYWdhdGVzIHRoaXMgYGRlbF9yZWFzb25gIGluZm9ybWF0aW9uIGRvd24gdGhlIHN0YWNrIGFuZCBlbnN1cmVzIGl0JiMzOTtzIGluY2x1ZGVkIGluIHRoZSBOZXRsaW5rIG5vdGlmaWNhdGlvbnMuIEFuZCB0aGV5JiMzOTt2ZSB3aXNlbHkgYWRkZWQgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBHb29kLCBnb29kLiBUZXN0aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBtb2RpZmljYXRpb24gb2YgdGhlIE5ldGxpbmsgbWVzc2FnZXMgdGhlbXNlbHZlcyDigJMgbmV3IGF0dHJpYnV0ZSwgbmV3IGRhdGEuIFNvLCB0aGUgaW1wYWN0IGlzIGRpcmVjdC4gQW5kIHllcywgaXTigJlzIHJlYWNoYWJsZS4gSVB2NiByb3V0ZSBkZWxldGlvbiBoYXBwZW5zIGFsbCB0aGUgdGltZSwgYW5kIFJBIHByb2Nlc3NpbmcsIHRoYXQmIzM5O3MgY3J1Y2lhbCB0b28uCgpHaXZlbiB0aGF0IGl0IGFkZHMgYSAqbmV3KiBhdHRyaWJ1dGUgYW5kIHRvdWNoZXMgcm91dGUgZGVsZXRpb24gY29kZSwgZnV6emluZyBpcyBhbiBvYnZpb3VzIG5leHQgc3RlcC4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIHN1YmplY3QgdGhpcyB0byByaWdvcm91cyB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBkaXJlY3RseS4gVGhlIG9uZXMgY2FsbGVkIG91dCBoZXJlIGFyZSBgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgcnQ2X2ZpbGxfbm9kZWAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGBmaWI2X2RlbGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBob3cgdGhlIGBkZWxfcmVhc29uYCBpcyBiZWluZyBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9kZWxfcnRfcmVhc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEzMD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzE6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVx0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNzk4PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjg3NzpcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXHRcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMjMxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xMzYzLVx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cdTAwM2VmaWI2X21ldHJpYyAhPSBkZWZydHJfdXNyX21ldHJpYykpIHtcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMTAyMi1cdGlmIChydCBcdTAwMjZcdTAwMjYgIWxpZmV0aW1lKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cdFx0cnQgPSBOVUxMO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9Mzk5OD1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cbm5ldC9pcHY2L3JvdXRlLmM6NDAwODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwOS1cdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNTgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyBhbiBJUHY2IFJvdXRpbmcgQ29kZSBQYXRjaCoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gdG8gdGhlIElQdjYgcm91dGluZyBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRoZSBgSVBWNmAgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlZC4gTXkgaW5pdGlhbCBmb2N1cyBnb2VzIGltbWVkaWF0ZWx5IHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkLiBJIHNlZSBgaXA2X2RlbF9ydF9yZWFzb25gLCBgZmliNl9kZWxgLCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFzIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJJiMzOTttIGFsc28gc2VlaW5nIGBydDZfZmlsbF9ub2RlYCBtb2RpZmllZCB0byB0YWtlIGBkZWxfcmVhc29uYCwgd2hpY2ggKmNvdWxkKiBiZSBzaWduaWZpY2FudCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBJdCBtaWdodCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBpbiBgcnQ2X2ZpbGxfbm9kZWAgb2YgaG93IHRoZSByb3V0ZSBpcyByZW1vdmVkIGFuZCB3aHkuCgpNeSBndXQgdGVsbHMgbWUgYGZpYjZfZGVsYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uOyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBkZWxldGlvbiBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyAqcmVhbGx5KiBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWI2X2RlbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03NTY3PXN0YXRpYyBpbnQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfYXBwZW5kKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzYwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc2MDk6c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZGVsKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy03NjEwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmliNl9pbmZvICoqcnRfYXJyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTc5MDA9c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzNi1cdGNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc5Mzc6XHRcdG1seHN3X3NwX3JvdXRlcl9maWI2X2RlbChtbHhzd19zcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTc5MzgtXHRcdFx0XHRcdCBmaWI2X3dvcmstXHUwMDNlcnRfYXJyLFxuLS1cbmluY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcyLVx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTE4NDE9c3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0xOTY4LVxubmV0L2lwdjYvaXA2X2ZpYi5jOjE5Njk6c3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcwLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDY1LS8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjA2NjppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjctXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk1LVx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMDk2Olx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYy0yMTA3LSAqXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cbm5ldC9pcHY2L2lwNl9maWIuYzoyMTA4OiAqXHRIb3dldmVyLCBpdCBpcyBpbnRlcm5hbGx5IHJlZW50ZXJhYmxlIHdydCBpdHNlbGYgYW5kIGZpYjZfYWRkL2ZpYjZfZGVsLlxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcdEl0IG1lYW5zLCB0aGF0IHdlIGNhbiBtb2RpZnkgdHJlZSBkdXJpbmcgd2Fsa2luZ1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1Ny1cdFx0XHR3LVx1MDAzZWxlYWYgPSBydDtcbm5ldC9pcHY2L2lwNl9maWIuYzoyMjU4Olx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1OS1cdFx0XHRpZiAocmVzKSB7XG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jPTIzOTM9c3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0MDUtXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjQwNjpcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRfREVMX1JFQVNPTl9FWFBJUkVEKTtcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA3LX1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk4OS1cdHNwaW5fbG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjM5OTA6XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTM5OTEtXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwNzYtXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjQwNzc6XHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xubmV0L2lwdjYvcm91dGUuYy00MDc4LVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MDgyLVxubmV0L2lwdjYvcm91dGUuYzo0MDgzOlx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbm5ldC9pcHY2L3JvdXRlLmMtNDA4NC1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtZXNzaW5nIHdpdGggY29yZSBJUHY2IHJvdXRpbmcgbG9naWMg4oCTIGl0JiMzOTtzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZ29vZC4gVGhlIGNvbmZpZ3MgYXJlIGtleWVkIG9uIGBJUFY2YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgX19pbmV0Nl9ydF9ub3RpZnlgLCBhbmQgYF9faXA2X2RlbF9ydGAuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgSVBWNmAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLiBZdXAsIElQdjYgcm91dGluZyBpcyBpbmRlZWQgdGllZCB0byBgQ09ORklHX0lQVjZgLiBXYWl0IGEgc2Vjb25k4oCmIHRoZSB0ZXN0cyBhbHNvIG1lbnRpb24gYENPTkZJR19JUFY2X1JPVVRFX0lORk9gOiBgJiMzNDtubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPJiMzNDtgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcHJvYmFibHkgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgUkEgd2l0aGRyYXduIHNjZW5hcmlvcy4gT2theSwgc28gSSBzaG91bGQgaW5jbHVkZSBib3RoIGBJUFY2YCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgaW4gdGhlICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGxpc3QuIEdvb2QgY2F0Y2guCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19pbmV0Nl9ydF9ub3RpZnlgIGFuZCBgX19pcDZfZGVsX3J0YCDigJMgYXJlIHRoZXkgc3RhdGljPyBZZXMsIGJvdGggb2YgdGhlbSBhcmUuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJlZmVyIHRoZSBub24tc3RhdGljIHZhcmlhbnRzLiBUaGF0IHdvdWxkIGJlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCBhbmQgYGluZXQ2X3J0X25vdGlmeWAuIExldCYjMzk7cyB0aHJvdyBpbiBgcnQ2X2ZpbGxfbm9kZWAsIGl0JiMzOTtzIHN0YXRpYywgYnV0IHNlZW1zICYjMzQ7aG90JiMzNDsgYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGZvciBhbGwgcm91dGUgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMgLSBJJiMzOTtsbCBza2lwIGl0IHRvIGF2b2lkIHNrZXdpbmcgdGhlIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byBgaXA2X2RlbF9ydF9yZWFzb25gIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzYtXHRcdFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODc4LVx0XHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cdGlmIChydCBcdTAwMjZcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XG5uZXQvaXB2Ni9uZGlzYy5jOjEzNjQ6XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsXG5uZXQvaXB2Ni9uZGlzYy5jLTEzNjUtXHRcdFx0XHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4tLVxubmV0L2lwdjYvcm91dGUuYz05NzA9aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjItXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xubmV0L2lwdjYvcm91dGUuYzoxMDIzOlx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTEwMjQtXHRcdHJ0ID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDctXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwMDktXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQzCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipOZXcgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gQXR0cmlidXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBhcm91bmQgZW5oYW5jaW5nIHRoZSBpbmZvcm1hdGlvbiB3ZSBwcm92aWRlIHRvIHVzZXJzcGFjZSB3aGVuIGEgcm91dGUgaXMgcmVtb3ZlZC4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIG1vcmUgdmlzaWJpbGl0eSBpcyBhbHdheXMgYmVuZWZpY2lhbCBpbiBuZXR3b3JrIG1hbmFnZW1lbnQuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRlZCBhdCBrZXkgYXJlYXM6IGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZSBkZWxldGlvbiByZWFzb24gaXRzZWxmICh0aGluZ3MgbGlrZSByb3V0ZSBleHBpcnkgb3IgUkEgd2l0aGRyYXdhbCkgaXMgYmVpbmcgcGx1bWJlZCBkb3duIHRocm91Z2ggdGhlIElQdjYgcm91dGluZyBzdGFjayBhbmQgdGhlbiBlbWl0dGVkIHRvIHVzZXJzcGFjZSB2aWEgdGhpcyBuZXcgYXR0cmlidXRlLiBUaGF0JiMzOTtzIGEgbG9naWNhbCBmbG93LiBJIGNhbiBzZWUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGBJUFY2YCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgY29uZmlnczsgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvdWNoaW4mIzM5OyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0JiMzOTtzIGJvdGggZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIG1lYW5zIGl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSBzaG91bGQgc2NoZWR1bGUgc29tZSB0ZXN0cyBmb3IgdGhpcywgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLiBMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURV9JTkZPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7ZmliNl9kZWwmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGUgZGVsZXRpb24gbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIChgZmliNl9kZWxgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaW5ldDZfcnRfZGVsX25vdGlmeWApIHRvIHBhc3MgZG93biB0aGUgZGVsZXRpb24gcmVhc29uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pIGFuZCBlbWl0IGl0IHRvIHVzZXJzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTU6NTEuNjEwOTQwMzQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzgzNzI0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE1OjUxLjYxMDk0NzI4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NjY4ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ZjMTI3NTViNWVjZDI0YmU5ZWI1NTg4YzFlNjA2NzRkNTMzNTU2MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5pbmRleCAzMzE5NWRiOTY3NDZjLi5mMTQ1MzI3OTg2NDAzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgIC1cXG4rICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxcbisgICAgZW51bS1uYW1lOiBydC1kZWwtcmVhc29uXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIHVuc3BlY1xcbisgICAgICAtIGV4cGlyZWRcXG4rICAgICAgLSByYS13aXRoZHJhd25cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuICAgLVxcbiAgICAgbmFtZTogbWV0cmljc1xcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXFxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIGRwb3J0XFxuICAgICAgICAgICAgIC0gbmgtaWRcXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXFxuICAgICAgIGR1bXA6XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNlxcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgIGRvOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjRcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcXG4rICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcXHUwMDI2cm91dGUtcmVxLWF0dHJzXFxuKyAgICAgICAgICAgIC0gZHN0XFxuKyAgICAgICAgICAgIC0gc3JjXFxuKyAgICAgICAgICAgIC0gaWlmXFxuKyAgICAgICAgICAgIC0gb2lmXFxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxcbisgICAgICAgICAgICAtIHByaW9yaXR5XFxuKyAgICAgICAgICAgIC0gcHJlZnNyY1xcbisgICAgICAgICAgICAtIG1ldHJpY3NcXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcXG4rICAgICAgICAgICAgLSBmbG93XFxuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gdGFibGVcXG4rICAgICAgICAgICAgLSBtYXJrXFxuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXFxuKyAgICAgICAgICAgIC0gdmlhXFxuKyAgICAgICAgICAgIC0gbmV3ZHN0XFxuKyAgICAgICAgICAgIC0gcHJlZlxcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcXG4rICAgICAgICAgICAgLSBlbmNhcFxcbisgICAgICAgICAgICAtIGV4cGlyZXNcXG4rICAgICAgICAgICAgLSBwYWRcXG4rICAgICAgICAgICAgLSB1aWRcXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXFxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cXG4rICAgICAgICAgICAgLSBzcG9ydFxcbisgICAgICAgICAgICAtIGRwb3J0XFxuKyAgICAgICAgICAgIC0gbmgtaWRcXG4rICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZGVscm91dGVcXG4gICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGVcXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI1XFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNFxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNVxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuK1xcbittY2FzdC1ncm91cHM6XFxuKyAgbGlzdDpcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXFxuKyAgICAgIHZhbHVlOiA3XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxcbisgICAgICB2YWx1ZTogMTFcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuaW5kZXggOWNkMjdlMWI5YjY5Mi4uMjMyMjg5YjQzOWMzYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5AQCAtNDY4LDcgKzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuIHZvaWQgcnQ2X2dldF9wcmVmc3JjKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5AQCAtNTMyLDYgKzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiAjZW5kaWZcXG4gdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gXFxuIHZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcXG4gXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IDA5ZmZlMGYxM2NlNzUuLjdiY2YwZTViZDg4N2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0XFx0XFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5pbmRleCAyNzI2NWZkMzFlNWZjLi42NmNmYzE3ZWRlMGU3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxcbkBAIC0zOTksNiArMzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gXFx0UlRBX0RQT1JULFxcbiBcXHRSVEFfTkhfSUQsXFxuIFxcdFJUQV9GTE9XTEFCRUwsXFxuK1xcdFJUQV9ERUxfUkVBU09OLFxcbiBcXHRfX1JUQV9NQVhcXG4gfTtcXG4gXFxuQEAgLTQwNyw2ICs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcXG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKVxcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcXG4gXFxuKy8qIFJUQV9ERUxfUkVBU09OOiB3aHkgdGhlIGtlcm5lbCBkZWxldGVkIHRoZSByb3V0ZS4gdTMyLlxcbisgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uXFxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxcbisgKiBkZWxldGlvbiBwYXRoIHRoYXQgZG9lcyBub3QgKHlldCkgcmVjb3JkIGl0cyBjYXVzZSAtIGNvbnN1bWVycyBtdXN0XFxuKyAqIHRyZWF0IFxcXCJhYnNlbnRcXFwiIGFuZCBcXFwidW5zcGVjXFxcIiBpZGVudGljYWxseS4gTmV3IGNhdXNlcyBtYXkgYmUgYXBwZW5kZWQuXFxuKyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuXFxuKyAqXFxuKyAqIFRoZSB2YWx1ZSBzcGFjZSBpcyBmYW1pbHktYWdub3N0aWM6IGEgdmFsdWUgbXVzdCBuZXZlciBiZVxcbisgKiByZWludGVycHJldGVkIHBlciBhZGRyZXNzIGZhbWlseS4gQSBjYXVzZSB0aGF0IG9ubHkgb25lIGZhbWlseSBjYW5cXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXFxuKyAqIGZhbWlseSdzLlxcbisgKi9cXG4rZW51bSBydF9kZWxfcmVhc29uIHtcXG4rXFx0UlRfREVMX1JFQVNPTl9VTlNQRUMsXFx0XFx0LyogY2F1c2Ugbm90IHJlY29yZGVkICovXFxuK1xcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xcbitcXHRfX1JUX0RFTF9SRUFTT05fTUFYXFxuK307XFxuK1xcbisjZGVmaW5lIFJUX0RFTF9SRUFTT05fTUFYIChfX1JUX0RFTF9SRUFTT05fTUFYIC0gMSlcXG4rXFxuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXFxuICAqXFxuICAqIFxcXCJzdHJ1Y3QgcnRuZXh0aG9wXFxcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjlkODliZTdlMDU0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuIFxcdFxcdGlmIChydCkge1xcbiBcXHRcXHRcXHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cXG4gXFx0XFx0XFx0aWYgKHZhbGlkX2xmdCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBlOWZjNjkyZDRmM2IyLi4zZTM4MmJhMTU3M2UzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY3LDcgKzE5NjcsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmliNl93YWxrZXIgKnc7XFxuQEAgLTIwNTYsMTMgKzIwNTcsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcXG4gXFx0XFx0XFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XFxuIFxcdH1cXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2Vza2lwX25vdGlmeSlcXG4tXFx0XFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xcbitcXHRcXHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFxuIFxcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcXG4gfVxcbiBcXG4gLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdCAgICAgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xcbkBAIC0yMDkxLDcgKzIwOTMsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRcXHRpZiAocnQgPT0gY3VyKSB7XFxuIFxcdFxcdFxcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxcbiBcXHRcXHRcXHRcXHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cXHUwMDNlbmxfbmV0KTtcXG4tXFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJ0cF9uZXh0ID0gXFx1MDAyNmN1ci1cXHUwMDNlZmliNl9uZXh0O1xcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXFxuIFxcdFxcdHJlcyA9IGMtXFx1MDAzZWZ1bmMocnQsIGMtXFx1MDAzZWFyZyk7XFxuIFxcdFxcdGlmIChyZXMgPT0gLTEpIHtcXG4gXFx0XFx0XFx0dy1cXHUwMDNlbGVhZiA9IHJ0O1xcbi1cXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDEsNyArMjQwMyw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fRVhQSVJFRCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcXG5pbmRleCBmZTM2YjNmNTEyODUwLi4xMTExYzRlYmM2MWQ5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuQEAgLTEzNjEsNyArMTM2MSw5IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cXHUwMDNlY25mLnJhX2RlZnJ0cl9tZXRyaWM7XFxuIFxcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAobGlmZXRpbWUgPT0gMCB8fCBydC1cXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XFxuLVxcdFxcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xcbitcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbitcXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRydCA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggZmM0MmQ2N2U1ODIyNi4uMTcwNDM1OWQzOTYwZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxcbiBcXHRcXHRcXHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XFxuQEAgLTEwMjAsNyArMTAyMCw3IEBAIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGd3YWRkciwgZGV2KTtcXG4gXFxuIFxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG4tXFx0XFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XFxuK1xcdFxcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmxfbmV0O1xcbiBcXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XFxuQEAgLTM5ODYsNyArMzk4Nyw3IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHRhYmxlID0gcnQtXFx1MDAzZWZpYjZfdGFibGU7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xcbitcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBcXG4gb3V0OlxcbkBAIC00MDAxLDcgKzQwMDIsMTUgQEAgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4gXFx0XFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvKTtcXG4rXFx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuK1xcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7IC5ubF9uZXQgPSBuZXQgfTtcXG4rXFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbkBAIC00MDI4LDcgKzQwMzcsOCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2VcXG5AQCAtNDA2NCwxMyArNDA3NCwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cnQtXFx1MDAzZWZpYjZfc2libGluZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCBmaWI2X3NpYmxpbmdzKSB7XFxuLVxcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xcbitcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbiBvdXRfcHV0OlxcbkBAIC00MTk2LDcgKzQyMDYsOCBAQCBzdGF0aWMgaW50IGlwNl9yb3V0ZV9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGNmZy1cXHUwMDNlZmNfbmhfaWQpXFxuQEAgLTQyMTUsNyArNDIyNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4gXFxuIFxcdFxcdFxcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19mbGFncyBcXHUwMDI2IFJURl9HQVRFV0FZKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzUxLDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvICpydDYgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4gXFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XFxuQEAgLTU5NTQsNiArNTk2NywxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgZHN0LCAwLCBleHBpcmVzLCBkc3QgPyBkc3QtXFx1MDAzZWVycm9yIDogMCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuK1xcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcXG4rXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcbiBcXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnQ2X2V4LVxcdTAwM2VydDZpLVxcdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGR1bXAtXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGR1bXAtXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgdy1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKSkge1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcXHUwMDI2Zmw2LmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzgsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXFx1MDAzZW5sX25ldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtNjM3Nyw3ICs2Mzk5LDcgQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XFxuK1xcdFxcdFxcdCAgICBldmVudCwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncywgZGVsX3JlYXNvbik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi9cXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXFxuK3tcXG4rXFx0X19pbmV0Nl9ydF9ub3RpZnkoZXZlbnQsIHJ0LCBpbmZvLCBubG1fZmxhZ3MsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4rfVxcbitcXG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDQsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXFxuIFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuQEAgLTY0NjMsNyArNjQ5OCw3IEBAIHZvaWQgZmliNl9pbmZvX2h3X2ZsYWdzX3NldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZjZpLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsIDAsXFxuLVxcdFxcdFxcdCAgICAwLCAwKTtcXG4rXFx0XFx0XFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cXG4gXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XFxuQEAgLTE3LDcgKzE3LDcgQEAgZnJvbSAudXRpbHMgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBmZF9yZWFkX3RpbWVvdXQsIGNtZCwgYmtnLCBkZWZlciwgXFxcXFxcbiAgICAgd2FpdF9maWxlLCB0b29sLCB0Y1xcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxcbisgICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcXG4gXFxuIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXFxcIktTUkNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRkZXZTaW1cXFwiLCBcXFwiTmV0ZGV2U2ltRGV2XFxcIixcXG4gICAgICAgICAgICBcXFwiTmV0c2hhcGVyRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLCBcXFwiUFNQRmFtaWx5XFxcIiwgXFxcIk5sRXJyb3JcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJOZXRkZXZGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsXFxuLSAgICAgICAgICAgXFxcIk5sY3RybEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG4rICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsIFxcXCJOZXRsaW5rXFxcIl1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbkBAIC0yOSw3ICsyOSw3IEBAIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9yIGFzIGU6XFxuIFxcbiBfX2FsbF9fID0gW1xcbiAgICAgXFxcIk5sRXJyb3JcXFwiLCBcXFwiTmxQb2xpY3lcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiU1BFQ19QQVRIXFxcIixcXG4tICAgIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIlJ0bmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLFxcbisgICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsIFxcXCJSdG5sUm91dGVGYW1pbHlcXFwiLFxcbiAgICAgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIkRldmxpbmtGYW1pbHlcXFwiLFxcbiAgICAgXFxcIlBTUEZhbWlseVxcXCIsXFxuIF1cXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1hZGRyLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4gXFxuK2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXFxuK1xcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XFxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTUsNyArNSw4IEBAIGltcG9ydCBzb2NrZXRcXG4gaW1wb3J0IHN0cnVjdFxcbiBpbXBvcnQgdGltZVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxcbitmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XFxuIFxcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xcXFx4ZTBcXFxceDAwXFxcXHgwMFxcXFx4MDEnXFxuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xcXFx4ZWZcXFxceDAxXFxcXHgwMVxcXFx4MDEnXFxuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfdHJ1ZShmXFxcImluZXQge2lmbmFtZX0gZm9yd2FyZGluZyBvblxcXCIgaW4gY21kX29iai5zdGRvdXQsXFxuICAgICAgICAgICAgICAgZlxcXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XFxcIilcXG4gXFxuK2RlZiBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpOlxcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxcbisgICAgcnRubC5udGZfc3Vic2NyaWJlKFxcXCJydG5sZ3JwLWlwdjYtcm91dGVcXFwiKVxcbisgICAgcmV0dXJuIHJ0bmxcXG4rXFxuK1xcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZXR1cm4gdGhlIGF0dHJzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBub3RpZmljYXRpb24sIE5vbmUgb24gdGltZW91dC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAgaWYgYXR0cnNbJ3J0bS1kc3QtbGVuJ10gIT0gZHN0X2xlbjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBhdHRyc1xcbisgICAgcmV0dXJuIE5vbmVcXG4rXFxuK1xcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XFxuKyAgICBcXFwiXFxcIlxcXCJHYXRoZXIgYXR0cnMgb2YgbWF0Y2hpbmcgbm90aWZpY2F0aW9ucywga2V5ZWQgYnkgKGRzdF9sZW4sIGRzdCkuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXFxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxcbisgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XFxuKyAgICB3aXRoIG9wZW4oZlxcXCIvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9XFxcIiwgXFxcIndcXFwiKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoZlxcXCJ7dmFsdWV9XFxcXG5cXFwiKVxcbitcXG4rXFxuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwicm91dGUvZ2NfaW50ZXJ2YWxcXFwiLCAyKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lPTE1KVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHRoZSBleHBpcmVkIHJvdXRlXFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxcbitcXG4rXFxuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxcbisgICAgcmEgPSBzdHJ1Y3QucGFjaygnIUJCSEJCSElJJywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXFxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cXG4rICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cXG4rICAgIGlmIHBpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xcbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJSUknLCAzLCA0LCBwbGVuLCAweDgwLCB2YWxpZF9sZnQsIDAsIDApXFxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcXG4rXFxuK1xcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXFxuKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X01VTFRJQ0FTVF9IT1BTLCAyNTUpXFxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXFxuK1xcbitcXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFNlbmRpbmcgZmFpbHMgd2l0aCBFQUREUk5PVEFWQUlMIHVudGlsIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsXFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgc2VlbiA9IHt9XFxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXFxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XFxuKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKVxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IC0gc2V0KHNlZW4ua2V5cygpKSwgZGVhZGxpbmU9MikpXFxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgIHJldHVybiBzZWVuXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XFxuK1xcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVxcXCIpXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcXFwiLCAyKVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1xcXCIsIDApXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblxcXCIsIDY0KVxcbisgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJubyBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcXG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcXFwiLCAwKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgdmV0aDAgdXBcXFwiLCBucz1zdHIobnNfaCkpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFxcXCIsIG5zPXN0cihuc19yKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShuc19oKVxcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXFxcInZldGgxXFxcIilcXG4rXFxuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDYwMCksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFxcXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFxcXCIpXFxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcXG4rICAgICAgICAgICAgcmV0dXJuXFxuK1xcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXFxuKyAgICAgICAgc2VlbiA9IF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ2RlbHJvdXRlLW50ZicsIHJvdXRlcylcXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcXG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXFxuKyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGZcXFwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVxcXCIpXFxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ3JhLXdpdGhkcmF3bicpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBBIGRlbGV0aW9uIHBhdGggdGhhdCByZWNvcmRzIG5vIGNhdXNlIChoZXJlIGEgdXNlcnNwYWNlIHJlcXVlc3QpXFxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcXG4rICAgICAgICBpcChcXFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoxOjonKVxcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFxcXCJubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFxcXCIpXFxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuICAgICBrc2Z0X2V4aXQoKVxcbiBcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTU6NTEuOTQ3MjczNDM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjY5NDIwMjY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIElQdjYgcm91dGluZyBsb2dpYyAoYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgKSB0byBwYXNzIGRvd24gdGhlIGRlbGV0aW9uIHJlYXNvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKSBhbmQgZW1pdCBpdCB0byB1c2Vyc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdmYzEyNzU1YjVlY2QyNGJlOWViNTU4OGMxZTYwNjc0ZDUzMzU1NjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjE1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZjE0NTMyNzk4NjQwMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHJ0YS11c2VkXG4gICAgICAgICB0eXBlOiB1MzJcbisgIC1cbisgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICB0eXBlOiBlbnVtXG4rICAgIG5hbWUtcHJlZml4OiBydC1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0LWRlbC1yZWFzb25cbisgICAgZW50cmllczpcbisgICAgICAtIHVuc3BlY1xuKyAgICAgIC0gZXhwaXJlZFxuKyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgYnl0ZS1vcmRlcjogYmlnLWVuZGlhblxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGRlbC1yZWFzb25cbiAgIC1cbiAgICAgbmFtZTogbWV0cmljc1xuICAgICBuYW1lLXByZWZpeDogcnRheC1cbkBAIC0yOTksNiArMzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNlxuQEAgLTMxMyw3ICszMjcsMzggQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcbisgICAgICAgICAgIyBzdHJpY3Rfc3RhcnRfdHlwZSBpbiBydG1faXB2Nl9wb2xpY3ksIHNvIHRoZSBrZXJuZWwgcmVqZWN0c1xuKyAgICAgICAgICAjIGl0IGluIHJlcXVlc3RzLlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbisgICAgICAgICAgICAtIGRzdFxuKyAgICAgICAgICAgIC0gc3JjXG4rICAgICAgICAgICAgLSBpaWZcbisgICAgICAgICAgICAtIG9pZlxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxuKyAgICAgICAgICAgIC0gcHJpb3JpdHlcbisgICAgICAgICAgICAtIHByZWZzcmNcbisgICAgICAgICAgICAtIG1ldHJpY3NcbisgICAgICAgICAgICAtIG11bHRpcGF0aFxuKyAgICAgICAgICAgIC0gZmxvd1xuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSB0YWJsZVxuKyAgICAgICAgICAgIC0gbWFya1xuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXG4rICAgICAgICAgICAgLSB2aWFcbisgICAgICAgICAgICAtIG5ld2RzdFxuKyAgICAgICAgICAgIC0gcHJlZlxuKyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuKyAgICAgICAgICAgIC0gZW5jYXBcbisgICAgICAgICAgICAtIGV4cGlyZXNcbisgICAgICAgICAgICAtIHBhZFxuKyAgICAgICAgICAgIC0gdWlkXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXG4rICAgICAgICAgICAgLSBpcC1wcm90b1xuKyAgICAgICAgICAgIC0gc3BvcnRcbisgICAgICAgICAgICAtIGRwb3J0XG4rICAgICAgICAgICAgLSBuaC1pZFxuKyAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4gICAgIC1cbiAgICAgICBuYW1lOiBkZWxyb3V0ZVxuICAgICAgIGRvYzogRGVsZXRlIGFuIGV4aXN0aW5nIHJvdXRlXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI1XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbisgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogbmV3cm91dGUtbnRmXG4rICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuKyAgICAgIHZhbHVlOiAyNFxuKyAgICAgIG5vdGlmeTogZ2V0cm91dGVcbisgICAgLVxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjVcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuKyAgICAgIHZhbHVlOiA3XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbisgICAgICB2YWx1ZTogMTFcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbmluZGV4IDljZDI3ZTFiOWI2OTIuLjIzMjI4OWI0MzljM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaFxuQEAgLTQ2OCw3ICs0NjgsOCBAQCB2b2lkIGZpYjZfY2xlYW5fYWxsX3NraXBfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pO1xuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKVxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li43YmNmMGU1YmQ4ODdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDYgKzEyOCw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4rXHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uNjZjZmMxN2VkZTBlNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMjcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqXG4rICogVGhlIHZhbHVlIHNwYWNlIGlzIGZhbWlseS1hZ25vc3RpYzogYSB2YWx1ZSBtdXN0IG5ldmVyIGJlXG4rICogcmVpbnRlcnByZXRlZCBwZXIgYWRkcmVzcyBmYW1pbHkuIEEgY2F1c2UgdGhhdCBvbmx5IG9uZSBmYW1pbHkgY2FuXG4rICogcHJvZHVjZSBzdGlsbCBnZXRzIGl0cyBvd24gdmFsdWUgcmF0aGVyIHRoYW4gcmV1c2luZyBhbm90aGVyXG4rICogZmFtaWx5J3MuXG4rICovXG4rZW51bSBydF9kZWxfcmVhc29uIHtcbitcdFJUX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUX0RFTF9SRUFTT05fRVhQSVJFRCxcdFx0LyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovXG4rXHRSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTixcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cbitcdF9fUlRfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRfREVMX1JFQVNPTl9NQVggKF9fUlRfREVMX1JFQVNPTl9NQVggLSAxKVxuK1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcInN0cnVjdCBydG5leHRob3BcIiBkZXNjcmliZXMgYWxsIG5lY2Vzc2FyeSBuZXh0aG9wIGluZm9ybWF0aW9uLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5pbmRleCBmNmZhMjcxNWI0NTBiLi45ZDg5YmU3ZTA1NDRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuY1xuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0XHRcdHJ0ID0gTlVMTDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuY1xuaW5kZXggZTlmYzY5MmQ0ZjNiMi4uM2UzODJiYTE1NzNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jXG5AQCAtMTk2Nyw3ICsxOTY3LDggQEAgc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxuLVx0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBmaWI2X3dhbGtlciAqdztcbkBAIC0yMDU2LDEzICsyMDU3LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbitcdFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXG4gXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XG4gfVxuIFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVx1MDAzZXRiNl9sb2NrICovXG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUzLDcgKzIyNTUsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXG5cIixcbkBAIC0yNDAxLDcgKzI0MDMsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmNcbmluZGV4IGZlMzZiM2Y1MTI4NTAuLjExMTFjNGViYzYxZDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXG4rKysgYi9uZXQvaXB2Ni9uZGlzYy5jXG5AQCAtMTM2MSw3ICsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOIDpcbitcdFx0XHRcdFx0XHQgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li4xNzA0MzU5ZDM5NjBkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKTtcbitcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0ZW51bSBydF9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtNDAwMSw3ICs0MDAyLDE1IEBAIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHQgICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRzdHJ1Y3QgbmxfaW5mbyBpbmZvID0geyAubmxfbmV0ID0gbmV0IH07XG4rXG4rXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNyw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVF9ERUxfUkVBU09OX1VOU1BFQykgXHUwMDNjIDApIHtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHR9IGVsc2VcbkBAIC00MDY0LDEzICs0MDc0LDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4rXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbywgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNiw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfbmhfaWQpXG5AQCAtNDIxNSw3ICs0MjI2LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbitcdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyxcbitcdFx0XHRcdFx0XHQgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiArNTc1MSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuK1x0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICArIG5leHRob3BfbGVuO1xuIH1cbiBcbkBAIC01Nzc1LDcgKzU3ODgsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0XHRcdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLFxuIFx0XHRcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi1cdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjcsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUX0RFTF9SRUFTT05fVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC02MDU1LDcgKzYwNzIsOCBAQCBzdGF0aWMgaW50IHJ0Nl9uaF9kdW1wX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICphcmcpXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZydDZfZXgtXHUwMDNlcnQ2aS1cdTAwM2Vkc3QsIE5VTEwsIE5VTEwsIDAsXG4gXHRcdFx0XHRcdCAgICBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGR1bXAtXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBkdW1wLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIHctXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTYxMDMsNyArNjEyMSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbitcdFx0XHRcdFx0ICBhcmctXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgUlRfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzU1LDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4rXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgUlRfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCArNjM3OCw5IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4tXHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbitzdGF0aWMgdm9pZCBfX2luZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuK1x0XHRcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTksNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDIwLDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XG4rfVxuK1xuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHRcdFx0IGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xuK31cbitcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtNjQxMCw3ICs2NDQ0LDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHRnb3RvIGVycm91dDtcbiBcbiBcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxuLVx0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpO1xuK1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4rXHRcdFx0ICAgIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTgsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuaW5kZXggZTU4YmRiZGM1OGVlYS4uMzQ5MzU4ODZiNmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbkBAIC0xNyw3ICsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4rICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gLnlubCBpbXBvcnQgTmV0c2hhcGVyRmFtaWx5LCBEZXZsaW5rRmFtaWx5LCBQU1BGYW1pbHksIE5ldGxpbmtcbiBcbiBfX2FsbF9fID0gW1wiS1NSQ1wiLFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcIktTUkNcIixcbiAgICAgICAgICAgIFwiTmV0ZGV2U2ltXCIsIFwiTmV0ZGV2U2ltRGV2XCIsXG4gICAgICAgICAgICBcIk5ldHNoYXBlckZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIiwgXCJQU1BGYW1pbHlcIiwgXCJObEVycm9yXCIsXG4gICAgICAgICAgICBcIllubEZhbWlseVwiLCBcIkV0aHRvb2xGYW1pbHlcIiwgXCJOZXRkZXZGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsXG4tICAgICAgICAgICBcIk5sY3RybEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiTmV0bGlua1wiXVxuKyAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5pbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG5AQCAtMjksNyArMjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwiTmxFcnJvclwiLCBcIk5sUG9saWN5XCIsIFwiTmV0bGlua1wiLCBcIllubEZhbWlseVwiLCBcIlNQRUNfUEFUSFwiLFxuLSAgICBcIkV0aHRvb2xGYW1pbHlcIiwgXCJSdG5sRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIixcbisgICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsIFwiUnRubFJvdXRlRmFtaWx5XCIsXG4gICAgIFwiTmV0ZGV2RmFtaWx5XCIsIFwiTmV0c2hhcGVyRmFtaWx5XCIsIFwiTmxjdHJsRmFtaWx5XCIsIFwiRGV2bGlua0ZhbWlseVwiLFxuICAgICBcIlBTUEZhbWlseVwiLFxuIF1cbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgncnQtYWRkci55YW1sJykpLmFzX3Bvc2l4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbiBcbitjbGFzcyBSdG5sUm91dGVGYW1pbHkoWW5sRmFtaWx5KTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxuK1xuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgnbmV0ZGV2LnlhbWwnKSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uZjc0Y2NkNWMyZDEzYSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgKzUsOCBAQCBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG5AQCAtMTM0LDggKzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIGtzZnRfdHJ1ZShmXCJpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cIiBpbiBjbWRfb2JqLnN0ZG91dCxcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbitkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXG4rICAgIHJ0bmwubnRmX3N1YnNjcmliZShcInJ0bmxncnAtaXB2Ni1yb3V0ZVwiKVxuKyAgICByZXR1cm4gcnRubFxuK1xuK1xuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBhdHRycyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgbm90aWZpY2F0aW9uLCBOb25lIG9uIHRpbWVvdXQuXCJcIlwiXG4rXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGlmIGF0dHJzWydydG0tZHN0LWxlbiddICE9IGRzdF9sZW46XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBhdHRyc1xuKyAgICByZXR1cm4gTm9uZVxuK1xuK1xuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcbisgICAgXCJcIlwiR2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwiXCJcIlxuK1xuKyAgICBzZWVuID0ge31cbisgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbisgICAgICAgIGlmIG1zZ1snbmFtZSddICE9IG5hbWU6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIGF0dHJzID0gbXNnWydtc2cnXVxuKyAgICAgICAga2V5ID0gKGF0dHJzWydydG0tZHN0LWxlbiddLCBhdHRycy5nZXQoJ2RzdCcpKVxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XG4rICAgICAgICAgICAgc2VlbltrZXldID0gYXR0cnNcbisgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuKyAgICAgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBfd3JpdGVfaXB2Nl9zeXNjdGwobmFtZSwgdmFsdWUpOlxuKyAgICB3aXRoIG9wZW4oZlwiL3Byb2Mvc3lzL25ldC9pcHY2L3tuYW1lfVwiLCBcIndcIikgYXMgZjpcbisgICAgICAgIGYud3JpdGUoZlwie3ZhbHVlfVxcblwiKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiQW4gZXhwaXJlZCByb3V0ZSByZXBvcnRzIFJUQV9ERUxfUkVBU09OID09IGV4cGlyZWQuXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnMpXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwicm91dGUvZ2NfaW50ZXJ2YWxcIiwgMilcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoyOjovNjQgZGV2IGR1bW15MSBleHBpcmVzIDJcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSlcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwiKVxuKyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJ2RlbC1yZWFzb24nKSwgJ2V4cGlyZWQnKVxuK1xuK1xuK2RlZiBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCBsaWZldGltZSwgcmlvPU5vbmUsIHBpbz1Ob25lKTpcbisgICAgXCJcIlwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cIlwiXCJcbitcbisgICAgIyB0eXBlLCBjb2RlLCBja3N1bSwgaG9wIGxpbWl0LCBmbGFncywgcm91dGVyIGxpZmV0aW1lLFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXG4rICAgIHJhID0gc3RydWN0LnBhY2soJyFCQkhCQkhJSScsIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKVxuKyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xuKyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpXG4rICAgICAgICByYSArPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxuKyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHZhbGlkX2xmdCA9IHBpb1xuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSUlJJywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuKyAgICAgICAgcmEgKz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxuK1xuK1xuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcbisgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuKyAgICAgICAgcmV0dXJuIHNvY2ssIHNvY2tldC5pZl9uYW1ldG9pbmRleChpZm5hbWUpXG4rXG4rXG4rZGVmIF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHdhbnQsICoqcmFfb3B0cyk6XG4rICAgIFwiXCJcIlxuKyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB1bnRpbCB0aGUgcm91dGVyJ3MgbGluay1sb2NhbFxuKyAgICBhZGRyZXNzIHBhc3NlcyBEQUQsIHNvIHJldHJ5LlxuKyAgICBcIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAqKnJhX29wdHMpXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMilcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuKyAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICBicmVha1xuKyAgICByZXR1cm4gc2VlblxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgUm91dGVzIHdpdGhkcmF3biBieSBhIHplcm8tbGlmZXRpbWUgUkEgKHJvdXRlciBsaWZldGltZSwgUkZDIDQ4NjFcbisgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjpcbisgICAgICAgIGlwKGZcImxpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2ZvcndhcmRpbmdcIiwgMClcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4rICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4rICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJ3MgbGluay1sb2NhbCBzb3VyY2UgaXMgdXNhYmxlIHJpZ2h0IGF3YXlcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgxL2FjY2VwdF9kYWRcIiwgMClcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgwIHVwXCIsIG5zPXN0cihuc19oKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IHZldGgxIHVwXCIsIG5zPXN0cihuc19yKSlcbitcbisgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbisgICAgICAgIHNvY2ssIGlmaW5kZXggPSBfcmFfcm91dGVyX3NvY2sobnNfciwgXCJ2ZXRoMVwiKVxuK1xuKyAgICAgICAgc2VlbiA9IF9yYV9hZHZlcnRpc2Vfcm91dGVzKHJ0bmwsIHNvY2ssIGlmaW5kZXgsIHJvdXRlcyxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCA2MDApLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCA2MDApKVxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXCJub3QgYWxsIFJBIHJvdXRlcyB3ZXJlIGluc3RhbGxlZFwiKVxuKyAgICAgICAgaWYgc2V0KHNlZW4pICE9IHJvdXRlczpcbisgICAgICAgICAgICByZXR1cm5cbitcbisgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIDAsIHJpbz0oJzIwMDE6ZGI4OjU6OicsIDY0LCAwKSxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcbisgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCByb3V0ZXMpXG4rICAgICAgICBmb3Iga2V5IGluIHJvdXRlczpcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcbisgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XCIpXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdyYS13aXRoZHJhd24nKVxuK1xuK1xuK2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgQSBkZWxldGlvbiBwYXRoIHRoYXQgcmVjb3JkcyBubyBjYXVzZSAoaGVyZSBhIHVzZXJzcGFjZSByZXF1ZXN0KVxuKyAgICBtdXN0IG5vdCBjYXJyeSBSVEFfREVMX1JFQVNPTiBhdCBhbGwuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgaXAoXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiBkdW1teTEgdXBcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuK1xuKyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJ2RlbHJvdXRlLW50ZicsIDY0LCAnMjAwMTpkYjg6MTo6JylcbisgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIFwibm8gUlRNX0RFTFJPVVRFIGZvciAyMDAxOmRiODoxOjovNjRcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfbm90X2luKCdkZWwtcmVhc29uJywgYXR0cnMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE1OjUxLjk0NzI3NDYyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODU0ODc0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBOZXRsaW5rIGF0dHJpYnV0ZSwgYFJUQV9ERUxfUkVBU09OYCwgc3BlY2lmaWNhbGx5IGZvciBJUHY2IHJvdXRlcy4gVGhlIGlkZWEgaXMgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZSBhYm91dCAqd2h5KiBhIHJvdXRlIHdhcyBkZWxldGVkLiBUaGluZ3MgbGlrZSBleHBpcmF0aW9uIG9yIGFuIFJBIHdpdGhkcmF3YWwg4oCTIHRoYXQncyB2YWx1YWJsZSBkZWJ1Z2dpbmcgYW5kIG1vbml0b3JpbmcgZGF0YS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgaXA2X2ZpYi5jYCwgYHJvdXRlLmNgLCBgbmRpc2MuY2AsIGFuZCBgYWRkcmNvbmYuY2AuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjcml0aWNhbCBhcmVhcyBmb3IgSVB2NiByb3V0aW5nIGFuZCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBwcm9wYWdhdGVzIHRoaXMgYGRlbF9yZWFzb25gIGluZm9ybWF0aW9uIGRvd24gdGhlIHN0YWNrIGFuZCBlbnN1cmVzIGl0J3MgaW5jbHVkZWQgaW4gdGhlIE5ldGxpbmsgbm90aWZpY2F0aW9ucy4gQW5kIHRoZXkndmUgd2lzZWx5IGFkZGVkIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5YC4gR29vZCwgZ29vZC4gVGVzdGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBtb2RpZmljYXRpb24gb2YgdGhlIE5ldGxpbmsgbWVzc2FnZXMgdGhlbXNlbHZlcyDigJMgbmV3IGF0dHJpYnV0ZSwgbmV3IGRhdGEuIFNvLCB0aGUgaW1wYWN0IGlzIGRpcmVjdC4gQW5kIHllcywgaXTigJlzIHJlYWNoYWJsZS4gSVB2NiByb3V0ZSBkZWxldGlvbiBoYXBwZW5zIGFsbCB0aGUgdGltZSwgYW5kIFJBIHByb2Nlc3NpbmcsIHRoYXQncyBjcnVjaWFsIHRvby5cblxuR2l2ZW4gdGhhdCBpdCBhZGRzIGEgKm5ldyogYXR0cmlidXRlIGFuZCB0b3VjaGVzIHJvdXRlIGRlbGV0aW9uIGNvZGUsIGZ1enppbmcgaXMgYW4gb2J2aW91cyBuZXh0IHN0ZXAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBzdWJqZWN0IHRoaXMgdG8gcmlnb3JvdXMgdGVzdGluZyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoZSBvbmVzIGNhbGxlZCBvdXQgaGVyZSBhcmUgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGBmaWI2X2RlbGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAuIExldCdzIHNlZSBob3cgdGhleSdyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoZSBgZGVsX3JlYXNvbmAgaXMgYmVpbmcgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNTo1Ny40MzI3NjU1ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTQ5NzgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cXHRcXHRcXHRpZiAodmFsaWRfbGZ0ID09IDApIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cXHRcXHRydCA9IE5VTEw7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy00MDA5LVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNTo1OS4xOTQyNjg1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNTg4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyBhbiBJUHY2IFJvdXRpbmcgQ29kZSBQYXRjaCoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIG1vZGlmaWNhdGlvbiB0byB0aGUgSVB2NiByb3V0aW5nIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgc29tZXRoaW5nIHRoYXQgbmVlZHMgdGhlIGBJUFY2YCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVkLiBNeSBpbml0aWFsIGZvY3VzIGdvZXMgaW1tZWRpYXRlbHkgdG8gdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBmaWI2X2RlbGAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEknbSBhbHNvIHNlZWluZyBgcnQ2X2ZpbGxfbm9kZWAgbW9kaWZpZWQgdG8gdGFrZSBgZGVsX3JlYXNvbmAsIHdoaWNoICpjb3VsZCogYmUgc2lnbmlmaWNhbnQgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gSXQgbWlnaHQgYmUgaGFuZGxpbmcgdGhlIGRldGFpbHMgaW4gYHJ0Nl9maWxsX25vZGVgIG9mIGhvdyB0aGUgcm91dGUgaXMgcmVtb3ZlZCBhbmQgd2h5LlxuXG5NeSBndXQgdGVsbHMgbWUgYGZpYjZfZGVsYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRvIHplcm8gaW4gb247IGxldCdzIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkIGZyb20gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBkZWxldGlvbiBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyAqcmVhbGx5KiBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjowMi42MTc4NTk0NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3Nzg2NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03NTY3PXN0YXRpYyBpbnQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfYXBwZW5kKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy03NjA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjc2MDk6c3RhdGljIHZvaWQgbWx4c3dfc3Bfcm91dGVyX2ZpYjZfZGVsKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzYxMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmaWI2X2luZm8gKipydF9hcnIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz03OTAwPXN0YXRpYyB2b2lkIG1seHN3X3NwX3JvdXRlcl9maWI2X2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzNi1cXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6NzkzNzpcXHRcXHRtbHhzd19zcF9yb3V0ZXJfZmliNl9kZWwobWx4c3dfc3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtNzkzOC1cXHRcXHRcXHRcXHRcXHQgZmliNl93b3JrLVxcdTAwM2VydF9hcnIsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfZmliLmg9NDY5PWludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcwLVxcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oOjQ3MTppbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzItXFx0ICAgICBlbnVtIHJ0X2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTg0MT1zdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTk2OC1cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTk2OTpzdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbm5ldC9pcHY2L2lwNl9maWIuYy0xOTcwLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjUtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjY6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ny1cXHQgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwOTUtXFx0XFx0XFx0XFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXFx1MDAzZW5sX25ldCk7XFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwOTY6XFx0XFx0XFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yMDk3LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDctICpcXHRDZXJ0YWlubHksIGl0IGlzIG5vdCBpbnRlcnJ1cHQgc2FmZS5cXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjEwODogKlxcdEhvd2V2ZXIsIGl0IGlzIGludGVybmFsbHkgcmVlbnRlcmFibGUgd3J0IGl0c2VsZiBhbmQgZmliNl9hZGQvZmliNl9kZWwuXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIxMDktICpcXHRJdCBtZWFucywgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRyZWUgZHVyaW5nIHdhbGtpbmdcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yMjM0PXN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yMjU3LVxcdFxcdFxcdHctXFx1MDAzZWxlYWYgPSBydDtcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MjI1ODpcXHRcXHRcXHRyZXMgPSBmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUX0RFTF9SRUFTT05fVU5TUEVDKTtcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjI1OS1cXHRcXHRcXHRpZiAocmVzKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MjM5Mz1zdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA1LVxcdFxcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjI0MDY6XFx0XFx0XFx0ZmliNl9kZWwocnQsIFxcdTAwMjZpbmZvLCBSVF9ERUxfUkVBU09OX0VYUElSRUQpO1xcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDA3LX1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk3Nj1zdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5ODktXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbm5ldC9pcHY2L3JvdXRlLmM6Mzk5MDpcXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XFxubmV0L2lwdjYvcm91dGUuYy0zOTkxLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00MDE2PXN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDA3Ni1cXHRcXHRcXHRcXHRcXHQgZmliNl9zaWJsaW5ncykge1xcbm5ldC9pcHY2L3JvdXRlLmM6NDA3NzpcXHRcXHRcXHRlcnIgPSBmaWI2X2RlbChzaWJsaW5nLCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvcm91dGUuYy00MDc4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQwODItXFxubmV0L2lwdjYvcm91dGUuYzo0MDgzOlxcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVF9ERUxfUkVBU09OX1VOU1BFQyk7XFxubmV0L2lwdjYvcm91dGUuYy00MDg0LW91dF91bmxvY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjE2OjA0LjM5NTcyODc1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTg0MzQwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbWVzc2luZyB3aXRoIGNvcmUgSVB2NiByb3V0aW5nIGxvZ2ljIOKAkyBpdCdzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZ29vZC4gVGhlIGNvbmZpZ3MgYXJlIGtleWVkIG9uIGBJUFY2YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBgX19pbmV0Nl9ydF9ub3RpZnlgLCBhbmQgYF9faXA2X2RlbF9ydGAuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJUFY2YCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuIFl1cCwgSVB2NiByb3V0aW5nIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNmAuIFdhaXQgYSBzZWNvbmTigKYgdGhlIHRlc3RzIGFsc28gbWVudGlvbiBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2A6IGBcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cImAuIEFoLCByaWdodCwgdGhhdCdzIHByb2JhYmx5IG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIFJBIHdpdGhkcmF3biBzY2VuYXJpb3MuIE9rYXksIHNvIEkgc2hvdWxkIGluY2x1ZGUgYm90aCBgSVBWNmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGluIHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBsaXN0LiBHb29kIGNhdGNoLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBfX2luZXQ2X3J0X25vdGlmeWAgYW5kIGBfX2lwNl9kZWxfcnRgIOKAkyBhcmUgdGhleSBzdGF0aWM/IFllcywgYm90aCBvZiB0aGVtIGFyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgdmFyaWFudHMuIFRoYXQgd291bGQgYmUgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGZpYjZfZGVsYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFuZCBgaW5ldDZfcnRfbm90aWZ5YC4gTGV0J3MgdGhyb3cgaW4gYHJ0Nl9maWxsX25vZGVgLCBpdCdzIHN0YXRpYywgYnV0IHNlZW1zIFwiaG90XCIgYmVjYXVzZSBpdCdzIHVzZWQgZm9yIGFsbCByb3V0ZSBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucyAtIEknbGwgc2tpcCBpdCB0byBhdm9pZCBza2V3aW5nIHRoZSBhbmFseXNpcy5cblxuQWxyaWdodCwgbGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIGBpcDZfZGVsX3J0X3JlYXNvbmAgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjoxMS44NTQxNjU1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTY2ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVsX3J0X3JlYXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMzA9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjg3Ni1cXHRcXHRcXHRpZiAodmFsaWRfbGZ0ID09IDApIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4Nzc6XFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTM2My1cXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbm5ldC9pcHY2L25kaXNjLmM6MTM2NDpcXHRcXHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LFxcbm5ldC9pcHY2L25kaXNjLmMtMTM2NS1cXHRcXHRcXHRcXHQgIGxpZmV0aW1lID09IDAgPyBSVF9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk3MD1pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xMDIyLVxcdGlmIChydCBcXHUwMDI2XFx1MDAyNiAhbGlmZXRpbWUpIHtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjEwMjM6XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgUlRfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04pO1xcbm5ldC9pcHY2L3JvdXRlLmMtMTAyNC1cXHRcXHRydCA9IE5VTEw7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5OTg9aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAwNy1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQwMDg6aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy00MDA5LVxcdFxcdCAgICAgIGVudW0gcnRfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjoxNjoxMy4zOTk4Mzk2OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE1MDYzNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipOZXcgSVB2NiBSb3V0ZSBEZWxldGlvbiBOb3RpZmljYXRpb24gQXR0cmlidXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBSVEFfREVMX1JFQVNPTmAsIHNwZWNpZmljYWxseSBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZvY3VzIGlzIGFyb3VuZCBlbmhhbmNpbmcgdGhlIGluZm9ybWF0aW9uIHdlIHByb3ZpZGUgdG8gdXNlcnNwYWNlIHdoZW4gYSByb3V0ZSBpcyByZW1vdmVkLiBUaGF0J3MgYSBnb29kIHRoaW5nLCBtb3JlIHZpc2liaWxpdHkgaXMgYWx3YXlzIGJlbmVmaWNpYWwgaW4gbmV0d29yayBtYW5hZ2VtZW50LlxuXG5UaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRlZCBhdCBrZXkgYXJlYXM6IGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGFuZCBgaW5ldDZfcnRfZGVsX25vdGlmeWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGRlbGV0aW9uIHJlYXNvbiBpdHNlbGYgKHRoaW5ncyBsaWtlIHJvdXRlIGV4cGlyeSBvciBSQSB3aXRoZHJhd2FsKSBpcyBiZWluZyBwbHVtYmVkIGRvd24gdGhyb3VnaCB0aGUgSVB2NiByb3V0aW5nIHN0YWNrIGFuZCB0aGVuIGVtaXR0ZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGlzIG5ldyBhdHRyaWJ1dGUuIFRoYXQncyBhIGxvZ2ljYWwgZmxvdy4gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBgSVBWNmAgYW5kIGBJUFY2X1JPVVRFX0lORk9gIGNvbmZpZ3M7IHRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvdWNoaW4nIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQncyBib3RoIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBtZWFucyBpdCBkZWZpbml0ZWx5IG5lZWRzIHRvIGJlIGZ1enplZC4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGhhbmRsaW5nIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSBzaG91bGQgc2NoZWR1bGUgc29tZSB0ZXN0cyBmb3IgdGhpcywgZ2l2ZW4gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0MywiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MTY6MTguODE0OTA2MTQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzOTEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZSBkZWxldGlvbiBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgY29yZSBJUHY2IHJvdXRpbmcgbG9naWMgKGBmaWI2X2RlbGAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCkgdG8gcGFzcyBkb3duIHRoZSBkZWxldGlvbiByZWFzb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikgYW5kIGVtaXQgaXQgdG8gdXNlcnNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4qmp[1] Phase: Succeeded StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 02:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 02:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2] Phase: Succeeded StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 02:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 02:16:30 +0000 UTC FinishedAt: 2026-08-04 02:16:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-792781352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 02:17:03 +0000 UTC FinishedAt: 2026-08-04 02:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 02:17:03 +0000 UTC FinishedAt: 2026-08-04 02:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1ece659e-9212-408e-8b16-cf5241dcb269,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-792781352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "acf11b64-ef3e-4e8a-8729-7018b363208d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-2619431070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 02:17:03 +0000 UTC FinishedAt: 2026-08-04 02:33:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1ece659e-9212-408e-8b16-cf5241dcb269,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-792781352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "acf11b64-ef3e-4e8a-8729-7018b363208d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-2619431070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 02:33:48 +0000 UTC FinishedAt: 2026-08-04 02:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 02:33:48 +0000 UTC FinishedAt: 2026-08-04 02:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 02:33:48 +0000 UTC FinishedAt: 2026-08-04 02:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 02:33:48 +0000 UTC FinishedAt: 2026-08-04 02:33:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-2658805263/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 02:33:58 +0000 UTC FinishedAt: 2026-08-04 02:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 02:33:58 +0000 UTC FinishedAt: 2026-08-04 02:35:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*acf11b64-ef3e-4e8a-8729-7018b363208d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-2619431070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 02:36:00 +0000 UTC FinishedAt: 2026-08-04 02:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 02:36:00 +0000 UTC FinishedAt: 2026-08-04 02:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 02:36:00 +0000 UTC FinishedAt: 2026-08-04 02:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 02:36:00 +0000 UTC FinishedAt: 2026-08-04 02:53:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1ece659e-9212-408e-8b16-cf5241dcb269,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-2658805263/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "948e86bd-fa2a-4339-975d-2091d9321ed7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-846399267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 02:36:00 +0000 UTC FinishedAt: 2026-08-04 02:52:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1ece659e-9212-408e-8b16-cf5241dcb269,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-2658805263/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "948e86bd-fa2a-4339-975d-2091d9321ed7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-846399267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 02:53:09 +0000 UTC FinishedAt: 2026-08-04 02:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 02:53:09 +0000 UTC FinishedAt: 2026-08-04 02:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 02:53:09 +0000 UTC FinishedAt: 2026-08-04 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 02:53:09 +0000 UTC FinishedAt: 2026-08-04 02:55:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*948e86bd-fa2a-4339-975d-2091d9321ed7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-846399267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*acf11b64-ef3e-4e8a-8729-7018b363208d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*948e86bd-fa2a-4339-975d-2091d9321ed7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-2619431070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-846399267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 02:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 02:55:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-1259808200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 02:55:10 +0000 UTC FinishedAt: 2026-08-04 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 02:55:20 +0000 UTC FinishedAt: 2026-08-04 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_del_rt_reason","fib6_del","inet6_rt_del_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5aed8f404401bfa1570cf0c3ffed7b752f568e83","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTE_INFO"],"series_id":"7ff62fe7-f7bd-4d2d-a4ea-ec7126cae34c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 02:55:20 +0000 UTC FinishedAt: 2026-08-04 05:58:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*acf11b64-ef3e-4e8a-8729-7018b363208d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*948e86bd-fa2a-4339-975d-2091d9321ed7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-2619431070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-build-action-846399267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4qmp/series-workflowr4qmp-convert-artifact-1259808200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}