Name: series-workflowvtnh7 Phase: Succeeded StartedAt: 2026-08-20 09:55:49 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[0] Phase: Succeeded StartedAt: 2026-08-20 09:55:49 +0000 UTC FinishedAt: 2026-08-20 10:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 09:55:49 +0000 UTC FinishedAt: 2026-08-20 10:22:59 +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": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E100" ], "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": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E100" ], "series_id": "ecd03f40-5ec8-4a9c-be98-e75dc18e14a8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "e100_probe", "e100_set_eeprom", "e100_diag_test" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O2UxMDBfc2V0X2VlcHJvbSYjMzQ7LAogICAgJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTM4NGVjMGZmNTU0N2MyNzE3ODQxYTU1MjM1YjhkYzgzNWY0NzZmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEwOjIwOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuaW5kZXggMjk5NjA3NjJlNjRhOC4uY2Q4MTkwMzg2NjUyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXG5AQCAtNzQ0LDcgJiM0Mzs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4mIzQzO1x0XHRcdHUxNiBsZW4gPSBpIC0gMTY7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbiYjNDM7XHRcdFx0XHQqYWRkcl9sZW4gPSAwO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQqYWRkcl9sZW4gLT0gbGVuO1xuIFx0XHRcdGkgPSAxNztcbiBcdFx0fVxuIFxuQEAgLTc2NSw3ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgYWRkcl9sZW4pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0Zm9yIChhZGRyID0gMDsgYWRkciBcdTAwM2MgbmljLVx1MDAzZWVlcHJvbV93YzsgYWRkciYjNDM7JiM0MzspIHtcbiBcdFx0bmljLVx1MDAzZWVlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgYWRkcik7XG5AQCAtNzkxLDcgJiM0Mzs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgYWRkcl9sZW4pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0aWYgKHN0YXJ0ICYjNDM7IGNvdW50IFx1MDAzZT0gbmljLVx1MDAzZWVlcHJvbV93YylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O2UxMDBfc2V0X2VlcHJvbSYjMzQ7LAogICAgJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBFRVBST00gcmVhZCwgbG9hZCwgYW5kIHNhdmUgZnVuY3Rpb25zIGluIHRoZSBlMTAwIGRyaXZlciB0byBwcmV2ZW50IHVuZGVyZmxvdyBhbmQgb3V0LW9mLWJvdW5kcyBzaGlmdHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIHZpYSBldGh0b29sIGlvY3RscyAoc2V0X2VlcHJvbSwgc2VsZl90ZXN0KS4gVGhlIGUxMDAgZHJpdmVyIGlzIGZvciBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IGNhcmRzLCB3aGljaCBhcmUgZW11bGF0ZWQgYnkgUUVNVSAoZS5nLiwgaTgyNTU3YiwgaTgyNTU5ZXIpLCBtYWtpbmcgdGhlc2UgcGF0aHMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKaW5kZXggMjk5NjA3NjJlNjRhOC4uY2Q4MTkwMzg2NjUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwpAQCAtNzQ0LDcgJiM0Mzs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpCiAJCSAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovCiAJCWN0cmwgPSBpb3JlYWQ4KCZhbXA7bmljLSZndDtjc3ItJmd0O2VlcHJvbV9jdHJsX2xvKTsKIAkJaWYgKCEoY3RybCAmYW1wOyBlZWRvKSAmYW1wOyZhbXA7IGkgJmd0OyAxNikgewotCQkJKmFkZHJfbGVuIC09IChpIC0gMTYpOwomIzQzOwkJCXUxNiBsZW4gPSBpIC0gMTY7CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiAmZ3Q7ICphZGRyX2xlbikgewomIzQzOwkJCQkqYWRkcl9sZW4gPSAwOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJKmFkZHJfbGVuIC09IGxlbjsKIAkJCWkgPSAxNzsKIAkJfQogCkBAIC03NjUsNyAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKQogCiAJLyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi8KIAllMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgMCk7Ci0JbmljLSZndDtlZXByb21fd2MgPSAxICZsdDsmbHQ7IGFkZHJfbGVuOwomIzQzOwomIzQzOwlpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuICZndDsgOCkgewomIzQzOwkJbmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgJiMzNDtJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxuJiMzNDssCiYjNDM7CQkJICBhZGRyX2xlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwluaWMtJmd0O2VlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTsKIAogCWZvciAoYWRkciA9IDA7IGFkZHIgJmx0OyBuaWMtJmd0O2VlcHJvbV93YzsgYWRkciYjNDM7JiM0MzspIHsKIAkJbmljLSZndDtlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgYWRkcik7CkBAIC03OTEsNyAmIzQzOzgwNiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX3NhdmUoc3RydWN0IG5pYyAqbmljLCB1MTYgc3RhcnQsIHUxNiBjb3VudCkKIAogCS8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovCiAJZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIDApOwotCW5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiAmZ3Q7IDgpIHsKJiM0MzsJCW5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcbiYjMzQ7LAomIzQzOwkJCSAgYWRkcl9sZW4pOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmljLSZndDtlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7CiAKIAlpZiAoc3RhcnQgJiM0MzsgY291bnQgJmd0Oz0gbmljLSZndDtlZXByb21fd2MpCiAJCXJldHVybiAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgRHJpdmVyIENvZGUgaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2AgZmlsZS4gSXQmIzM5O3MgZm9yIHRoZSBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IGRyaXZlciwgYSBkcml2ZXIgSSYjMzk7bSBxdWl0ZSBmYW1pbGlhciB3aXRoLCBzbyB0aGUgY29kZSBpdHNlbGYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRyaWdnZXIgdGhlc2UgbmV3IGNoZWNrcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PwoKSSBrbm93IFFFTVUgc3VwcG9ydHMgdGhlIGBpODI1NTdiYCwgYGk4MjU1OWVyYCwgYW5kIGBpODI1NTljYCB3aGljaCBhbGwgZW11bGF0ZSB0aGUgZTEwMCBmYW1pbHkgb2YgTklDcy4gVGhhdCYjMzk7cyBnb29kLCBzbyB0aGUgaGFyZHdhcmUgc3VwcG9ydCBpcyB0aGVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBzZWUgaWYgYGUxMDBfZWVwcm9tX2xvYWRgIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gSSByZWNhbGwgYGUxMDBfZWVwcm9tX2xvYWRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIHByb2JlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeSB0byB0cmlnZ2VyLiBOb3csIHdoYXQgYWJvdXQgYGUxMDBfZWVwcm9tX3NhdmVgPyBBaCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBldGh0b29sIG9wZXJhdGlvbnMsIGlzbiYjMzk7dCBpdD8gU28sIHRoYXQgaW1wbGllcyB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgdXNlciBzcGFjZSB1dGlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZXRodG9vbCBjb21tYW5kIG9yIHNlcXVlbmNlIHRvIHRyaWdnZXIgdGhhdCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpdmUgaW50byBgZTEwMC5jYCBhbmQgY29uZmlybSB3aGVyZSBgZTEwMF9lZXByb21fc2F2ZWAgaXMgYWN0dWFsbHkgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX2VlcHJvbV9zYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz03Njk9c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODAyLS8qIFNhdmUgKHBvcnRpb24gb2YpIGRyaXZlciBFRVBST00gY2FjaGUgdG8gZGV2aWNlIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo4MDM6c3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODA0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjU2Nj1zdGF0aWMgaW50IGUxMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI1NzY6XHRyZXR1cm4gZTEwMF9lZXByb21fc2F2ZShuaWMsIGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDNlXHUwMDNlIDEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU3Ny1cdFx0KGVlcHJvbS1cdTAwM2VsZW4gXHUwMDNlXHUwMDNlIDEpICYjNDM7IDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEUxMDAgRHJpdmVyIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGUxMDBgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBRRU1VJiMzOTtzIGdvdCBhbiBlMTAwIGVtdWxhdGlvbiwgd2hpY2ggaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gSWYgd2UgY2FuIHJlYWNoIGl0LCB0aGVuIHdlIGNhbiBoaXQgaXQgd2l0aCBvdXIgb3duIGlucHV0cyBhbmQgc2VlIHdoYXQgd2UgY2FuIGJyZWFrLiBBbmQgaGV5LCBldGh0b29sIG9wcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCwgd2hpY2ggY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGV4cGxvaXRhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZ2V0IHRob3NlIHRvIHRhbGsgdG8gdGhlIGVtdWxhdGVkIGRyaXZlci4KCkZpcnN0IHRoaW5nLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciBgZTEwMGAuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBUaGF0JiMzOTtsbCB0ZWxsIHVzIGlmIGl0JiMzOTtzIGV2ZW4gY29tcGlsZWQgaW4sIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGF0dGFja2luZyB0aGUgcmlnaHQgdGFyZ2V0LCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbGFuZHNjYXBlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFMTAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAmIzQzOyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NjE6Y29uZmlnIEUxMDAwRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAwIFBDSS1FeHByZXNzIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjgxOmNvbmZpZyBFMTAwMEVfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gUENIIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRTEwMCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGlzIGBFMTAwYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHByYWN0aWNlIHRvIHN0YXJ0IHRoZXJlLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uIOKAkyBpdHMgYnVpbGRpbmcgYmxvY2tzLiBXaGF0IG90aGVyIHN5c3RlbXMsIGxpYnJhcmllcywgb3IgY29tcG9uZW50cyBpcyBpdCB0aWVkIHRvPyBBIHF1aWNrIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBpcyBlc3NlbnRpYWwuIFdpdGhvdXQga25vd2luZyB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcyB1c2luZywgSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLiBEZXBlbmRlbmN5IG1hcHBpbmcgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHN5c3RlbSBhbmFseXNpcyBhbmQgSSBqdXN0IG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRTEwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMD1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliaWUvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI6Y29uZmlnIEUxMDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwJiM0Mzsgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjQ1OmNvbmZpZyBFMTAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAwIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzo4MTpjb25maWcgRTEwMDBFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODItXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIFBDSCBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEUxMDAgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgRTEwMCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBFMTAwIGRyaXZlciBpcyBzdHJ1Y3R1cmVkIOKAkyB3aGF0IGFyZSB0aGUgbWFpbiBDT05GSUcgc3ltYm9scywgYXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgbmV0d29yayBkcml2ZXJzIG9yIGhhcmR3YXJlIHN1cHBvcnQ/IE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgYnVpbGQgZmxhZ3MsIGVzcGVjaWFsbHkgdGhvc2UgaW5mbHVlbmNpbmcgZmVhdHVyZXMgbGlrZSBETUEgaGFuZGxpbmcsIGludGVycnVwdCBtb2RlcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gQW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciBoYXJkd2FyZSByZXZpc2lvbnMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBPbmNlIEkgaGF2ZSBhIGdvb2QgaGlnaC1sZXZlbCBncmFzcCwgSSB3aWxsIGxvb2sgdG8gc2VlIGhvdyB0aG9zZSBzeW1ib2xzIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIyOlx0Y29uZmlnIEUxMDBcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAmIzQzOyBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAyNTpcdFx0c2VsZWN0IE1JSVxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQUk8vMTAwIGZhbWlseSBvZiBhZGFwdGVycy5cbiAgMjg6XHRcdCAgVG8gdmVyaWZ5IHRoYXQgeW91ciBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyXG4gIDI5Olx0XHQgIG9uIHRoZSBhZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXJcbiAgMzA6XHRcdCAgaW4gdGhlIGZvcm1hdCAxMjM0NTYtMDAxIChzaXggZGlnaXRzIGh5cGhlbiB0aHJlZSBkaWdpdHMpLlxuICAzMTpcdFxuICAzMjpcdFx0ICBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGFuZCB0aGUgQWRhcHRlciBcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcbiAgMzM6XHRcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XG4gIDM0Olx0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVx1MDAzZVxuICAzNjpcdFxuICAzNzpcdFx0ICB0byBpZGVudGlmeSB0aGUgYWRhcHRlci5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDQwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAucnN0XHUwMDNlLlxuICA0MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRTEwMCBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYEUxMDBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBzeXN0ZW0uIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBQQ0lgIGFuZCBgTUlJYCwgYW5kIGBNSUlgIGlzIGN1cnJlbnRseSBhY3RpdmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBzdGFnZSBmb3Igd2hhdCBJIHNob3VsZCBiZSBsb29raW5nIGF0LgoKTm93LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgRUVQUk9NIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAuIEl0JiMzOTtzIHdvcnRoIG5vdGluZyB0aGVzZSBhcmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gdGhlIGNvbnRleHQuIFRoaXMgbWVhbnMgdGhhdCBJIG5vdyBuZWVkIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNjb3BlIHRoYXQgbWlnaHQgYmUgY2FsbGluZyB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IGlzIHdoZXJlIHRoZSBrZXkgdW5kZXJzdGFuZGluZyB3aWxsIGxpZS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfZWVwcm9tX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTcyMT1zdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNzY4LS8qIExvYWQgZW50aXJlIEVFUFJPTSBpbWFnZSBpbnRvIGRyaXZlciBjYWNoZSBhbmQgdmFsaWRhdGUgY2hlY2tzdW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo3Njk6c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy03NzAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjMwPXN0YXRpYyB2b2lkIGUxMDBfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MzgtXHRkYXRhWzBdID0gIW1paV9saW5rX29rKFx1MDAyNm5pYy1cdTAwM2VtaWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2Mzk6XHRkYXRhWzFdID0gZTEwMF9lZXByb21fbG9hZChuaWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2NDAtXHRpZiAodGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgRVRIX1RFU1RfRkxfT0ZGTElORSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yODUzPXN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjk0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyOTQ0Olx0aWYgKChlcnIgPSBlMTAwX2VlcHJvbV9sb2FkKG5pYykpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI5NDUtXHRcdGdvdG8gZXJyX291dF9mcmVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgZTEwMCBEcml2ZXImIzM5O3MgRUVQUk9NIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGUxMDAgbmV0d29yayBkcml2ZXIgaGFuZGxlcyBpdHMgRUVQUk9NIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGNydWNpYWwgdG8gZ2V0IHRoaXMgcmlnaHQgZm9yIHByb3BlciBOSUMgb3BlcmF0aW9uLiBJIHNlZSB0aGF0IHRoZSBgZTEwMF9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBpbml0aWFsIGRpc2NvdmVyeSBhbmQgc2V0dXAgcm91dGluZSwgcmVsaWVzIG9uIGBlMTAwX2VlcHJvbV9sb2FkYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgcHJvYmUgbmVlZHMgdGhlIEVFUFJPTSBkYXRhIHRvIGluaXRpYWxpemUgaXRzZWxmLCBsb2FkIE1BQyBhZGRyZXNzLCBhbmQgcG9zc2libHkgb3RoZXIgZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gIFRoZW4gSSBzZWUgYGUxMDBfZGlhZ190ZXN0YCBhbHNvIGNhbGxzIGBlMTAwX2VlcHJvbV9sb2FkYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7ICB0aGUgZGlhZ25vc3RpYyBmdW5jdGlvbiBuZWVkcyB0byBwdWxsIHRoZSBzYW1lIEVFUFJPTSBkYXRhIGFzIHRoZSBkcml2ZXIgZm9yIGRpYWdub3N0aWMgdGVzdGluZy4gQnV0IGJvdGggYXJlIHVzaW5nIHRoZSBsb2FkIGZ1bmN0aW9uLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UsIHRob3VnaCwgaXMgYGUxMDBfc2V0X2VlcHJvbWAuIFRoaXMgZnVuY3Rpb24sIHByZXN1bWFibHkgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBFRVBST00sIGNhbGxzIGBlMTAwX2VlcHJvbV9zYXZlYC4gIFNvIGBlMTAwX3NldF9lZXByb21gIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHNhdmUgRUVQUk9NIGRhdGEsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBpbXBsZW1lbnQgc29tZSBmdW5jdGlvbnMgbGlrZSBzZXR0aW5nIHRoZSBNQUMgYWRkcmVzcy4gU2VlbXMgY29uc2lzdGVudCB3aXRoIGhvdyB0aGVzZSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQgaW4gb3RoZXIgTklDIGRyaXZlcnMgSSYjMzk7dmUgd29ya2VkIG9uLiBJJiMzOTttIGtlZXBpbmcgdGhpcyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZHJpdmVyJiMzOTtzIGludGVybmFsczsgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgZGV2aWNlJiMzOTtzIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiwgYW5kIGFueSBpc3N1ZXMgaGVyZSBjYW4gY2F1c2UgbWFqb3IgaGVhZGFjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX3NldF9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2Ny1cdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVx0LmdldF9lZXByb21cdFx0PSBlMTAwX2dldF9lZXByb20sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3MTpcdC5zZXRfZWVwcm9tXHRcdD0gZTEwMF9zZXRfZWVwcm9tLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGUxMDAgRHJpdmVyIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBlMTAwYCBkcml2ZXIgYW5kIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvcmUgZW50cnkgcG9pbnRzLiBJdCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgYXJlIGBlMTAwX3Byb2JlYCBhbmQgYGUxMDBfc2V0X2VlcHJvbWAuIGBlMTAwX3Byb2JlYCBpcyBjbGVhcmx5IHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgZHJpdmVyIGxpZmVjeWNsZS4gSXQmIzM5O3MgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhhdCBtYWtlcyBzZW5zZS4gYGUxMDBfc2V0X2VlcHJvbWAgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24sIHRyaWdnZXJlZCBieSBhIHVzZXIgc3BhY2UgdG9vbCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYXMgd2VsbC4KCkhtbSwgYnV0IHdhaXQuIEkganVzdCByZWFsaXplZCBgZTEwMF9zZXRfZWVwcm9tYCBpcyBhY3R1YWxseSAqc3RhdGljKi4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIHllcCwgY29uZmlybWVkLCBpdCYjMzk7cyBzdGF0aWMuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljLCB0aGVyZSBpcyBubyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpZiBpdCYjMzk7cyBpbmxpbmVkLiBCdXQgd2FpdCwgc2luY2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCBjYW4mIzM5O3QgYmUgaW5saW5lZC4KClRoZSBldGh0b29sIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGUxMDBfcHJvYmVgLiBTbyB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBlMTAwX2V0aHRvb2xfb3BzYCBpcyBhbHNvIHN0YXRpYy4gU28gdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSBgZTEwMF9wcm9iZWAgYW5kIHRob3NlIGV0aHRvb2wgaW9jdGxzLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIGhhdmUgdG8gY2hvb3NlIGVudHJ5IHBvaW50cyB3aGljaCBhcmUgKm5vdCogc3RhdGljLCBpZiBwb3NzaWJsZS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgYGUxMDBfcHJvYmVgIGlzIGFsc28gc3RhdGljLiBBbmQgeWVzLCBpdCBpcy4gV2VsbCwgdGhhdCYjMzk7cyBub3QgaWRlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI4Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlMTAwX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI4NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjg1MzpzdGF0aWMgaW50IGUxMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTMxOTM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGUxMDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0zMTk1LVx0LmlkX3RhYmxlID0gICAgIGUxMDBfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcdC5wcm9iZSA9ICAgICAgICBlMTAwX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTMxOTctXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGUxMDAgRHJpdmVyIENvZGUqKgoKT2theSwgc28gYGUxMDBfcHJvYmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8gbm90ZS4gSW4gZmFjdCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgbG9va2luZyBhdCB0aGUgYGUxMDAuY2AgZmlsZSBhZ2FpbiwgYWxsIHRoZSBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZSwgYXJlIHN0YXRpYywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHRoZSBtb2R1bGUgaXRzZWxmOiBgaW5pdF9tb2R1bGVgIGFuZCBgY2xlYW51cF9tb2R1bGVgIOKAkyBvciwgYXMgaXQmIzM5O3Mgb2Z0ZW4gYWxpYXNlZCwgYGUxMDBfaW5pdF9tb2R1bGVgLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3Iga2VybmVsIG1vZHVsZXMuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIGV4aGF1c3RpdmUsIGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIExldCYjMzk7cyBtYWtlIGEgcXVpY2sgcGFzcyB0byB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGJlIHVuZXhwZWN0ZWQuIFlvdSBuZXZlciBrbm93IHdoYXQgbWlnaHQgYmUgbHVya2luZyBpbiBsZWdhY3kgY29kZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byBoYXZlIGEgY2xlYW4sIGNvbnRyb2xsZWQgaW50ZXJmYWNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgZ290IG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBgXnZvaWQgYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhhdCBgXnZvaWQgYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgbWVhbiBhIGZldyB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gSWYgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcG9pbnRlcnMsIGEgY2FyZXQgcHJlY2VkaW5nIGB2b2lkYCBjb3VsZCBpbmRpY2F0ZSBhIHBvaW50ZXIgdG8gYW4gdW5kZWZpbmVkIHR5cGUg4oCTIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgYSBiYWQgc2lnbiwgc3VnZ2VzdGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBJIHNhdyB0aGlzLiAKCklzIHRoaXMgaW4gYSBmdW5jdGlvbiBzaWduYXR1cmUsIGEgdmFyaWFibGUgZGVjbGFyYXRpb24sIG9yIHNvbWV3aGVyZSBlbHNlPyBCZWNhdXNlIGlmIGl0JiMzOTtzIGEgZnVuY3Rpb24gcmV0dXJuIHR5cGUsICBgXnZvaWQgYCBjb3VsZCBiZSBhIGJpdCBtaXNsZWFkaW5nLiAgV2hpbGUgdGVjaG5pY2FsbHkgYSBmdW5jdGlvbiAqY2FuKiByZXR1cm4gYSBwb2ludGVyIHRvIGB2b2lkYCAsIHlvdSYjMzk7ZCBiZSBtb3JlIGxpa2VseSB0byBzZWUgdGhlIHByb3BlciBwb2ludGVyIG5vdGF0aW9uIGB2b2lkICpgIGRpcmVjdGx5LiBUaGF0IHVzYWdlIGlzIHBvc3NpYmxlIGJ1dCByYXJlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGEgbGlicmFyeSBvciBjb2RpbmcgY29udmVudGlvbiB0aGF0IHVzZXMgdGhhdC4KClNvLCBmaXJzdCBJIG5lZWQgdG8gc2VlIG1vcmUgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIHRoZSBjYXJldCByYWlzZXMgYSBmbGFnLCBidXQgd2l0aG91dCB0aGF0IGNvbnRleHQsIHRoaXMgaXMgYSBwdXp6bGUgYW5kIG5vdCBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVsIGUxMDAgRHJpdmVyIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGUxMDAgZHJpdmVyIGNvZGUuIEl0IGxvb2tzIGxpa2UgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHN5bWJvbCB2aXNpYmlsaXR5IHN0YW5kcG9pbnQuIEdpdmVuIHRoaXMsIEkgY2FuIHplcm8gaW4gb24gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9zZXRfZWVwcm9tYCBhcyBteSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QsIGJlY2F1c2UgdGhleSBhcmVuJiMzOTt0IGlubGluZWQgLSB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBnaXZlcyB0aGVtIGV4dGVybmFsIGxpbmthZ2UuCgpOb3csIGEgcXVpY2sgc2Nhbi4uLiBhaGEhIEkgc2VlIHRoYXQgYGUxMDBfZWVwcm9tX2xvYWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgZTEwMF9wcm9iZWAgYW5kIGFsc28gYGUxMDBfZGlhZ190ZXN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBlMTAwX2RpYWdfdGVzdGAgaXMgYWxzbyBhbiBldGh0b29sIG9wZXJhdGlvbiwgcmlnaHQ/IFNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIGBlMTAwX2RpYWdfdGVzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjIxPXN0YXRpYyBjb25zdCBjaGFyIGUxMDBfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjYzMDpzdGF0aWMgdm9pZCBlMTAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MzEtXHRzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzczLVx0LnNldF9yaW5ncGFyYW1cdFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3NDpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzc1LVx0LmdldF9zdHJpbmdzXHRcdD0gZTEwMF9nZXRfc3RyaW5ncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZWwgUFJPLzEwMCYjNDM7IERyaXZlciBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZTEwMF9wcm9iZWAsIGBlMTAwX3NldF9lZXByb21gLCBhbmQgYGUxMDBfZGlhZ190ZXN0YCBzZWVtIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJlZmVycmVkIGNvZGluZyBzdHlsZSBpcyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCB0aG91Z2ggaXQgc2VlbXMgbGlrZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBzbyBJIHdpbGwgcHJpb3JpdGl6ZSBvbmVzIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gZ3VhcmFudGVlIHRoZXkgYXJlIGVudHJ5IHBvaW50cy4gRmlyc3QgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgRTEwMGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgZm9yIHRoaXMgbW9kdWxlLgoKT2theSwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2hvd3M6CgpgYGAKY29uZmlnIEUxMDAKCXRyaXN0YXRlICYjMzQ7SW50ZWwoUikgUFJPLzEwMCYjNDM7IHN1cHBvcnQmIzM0OwoJZGVwZW5kcyBvbiBQQ0kKCXNlbGVjdCBNSUkKYGBgCgpTbyBgRTEwMGAgaXMgZW5vdWdoLiBHcmVhdC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCBhcmVuJiMzOTt0IGlubGluZWQgYW5kIGFyZSBzdGF0aWMuIEkgc2VlIHRoYXQgdGhleSBhcmUgc3RhdGljLiBgZTEwMF9lZXByb21fbG9hZGAgaXMgY2FsbGVkIGZyb20gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9kaWFnX3Rlc3RgLiBJdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaXQmIzM5O3MgYSBiaXQgbGFyZ2Ugc28gbWF5YmUgbm90LiBgZTEwMF9lZXByb21fc2F2ZWAgaXMgY2FsbGVkIGZyb20gYGUxMDBfc2V0X2VlcHJvbWAuIFNvLCBiZXR0ZXIgZm9jdXMgb24gYGUxMDBfcHJvYmVgLCBgZTEwMF9zZXRfZWVwcm9tYCwgYW5kIGBlMTAwX2RpYWdfdGVzdGAuCgpXYWl0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2g6CmBgYGMKQEAgLTc0NCw3ICYjNDM7NzQ0LDE0IEBAIHN0YXRpYyBfX2xlMTYgZTEwMF9lZXByb21fcmVhZChzdHJ1Y3QgbmljICpuaWMsIHUxNiAqYWRkcl9sZW4sIHUxNiBhZGRyKQogCQkgKiBjb21wbGV0ZSBhZGRyZXNzLiAgVXNlIHRoaXMgdG8gYWRqdXN0IGFkZHJfbGVuLiAqLwogCQljdHJsID0gaW9yZWFkOCgmYW1wO25pYy0mZ3Q7Y3NyLSZndDtlZXByb21fY3RybF9sbyk7CiAJCWlmICghKGN0cmwgJmFtcDsgZWVkbykgJmFtcDsmYW1wOyBpICZndDsgMTYpIHsKLQkJCSphZGRyX2xlbiAtPSAoaSAtIDE2KTsKJiM0MzsJCQl1MTYgbGVuID0gaSAtIDE2OwomIzQzOwomIzQzOwkJCWlmIChsZW4gJmd0OyAqYWRkcl9sZW4pIHsKJiM0MzsJCQkJKmFkZHJfbGVuID0gMDsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCSphZGRyX2xlbiAtPSBsZW47CiAJCQlpID0gMTc7CiAJCX0KIApAQCAtNzY1LDcgJiM0Mzs3NzIsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYykKIAogCS8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovCiAJZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIDApOwotCW5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiAmZ3Q7IDgpIHsKJiM0MzsJCW5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcbiYjMzQ7LAomIzQzOwkJCSAgYWRkcl9sZW4pOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmljLSZndDtlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7CiAKIAlmb3IgKGFkZHIgPSAwOyBhZGRyICZsdDsgbmljLSZndDtlZXByb21fd2M7IGFkZHImIzQzOyYjNDM7KSB7CiAJCW5pYy0mZ3Q7ZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIGFkZHIpOwpAQCAtNzkxLDcgJiM0Mzs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpCiAKIAkvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqLwogCWUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCAwKTsKLQluaWMtJmd0O2VlcHJvbV93YyA9IDEgJmx0OyZsdDsgYWRkcl9sZW47CiYjNDM7CiYjNDM7CWlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gJmd0OyA4KSB7CiYjNDM7CQluZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAmIzM0O0ludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XG4mIzM0OywKJiM0MzsJCQkgIGFkZHJfbGVuKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwogCiAJaWYgKHN0YXJ0ICYjNDM7IGNvdW50ICZndDs9IG5pYy0mZ3Q7ZWVwCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODU0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTMxOTUtXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzozMTk2Olx0LnByb2JlID0gICAgICAgIGUxMDBfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cdC5yZW1vdmUgPSAgICAgICBlMTAwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBlMTAwYCBEcml2ZXIqKgoKQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIHJpZ2h0LiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyB0aGUgYGUxMDBfcHJvYmVgIGZ1bmN0aW9uIGlzIHNvbGlkOyB0aGF0IGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zIGZvciBob3cgdGhlIGRyaXZlciBzaG91bGQgaGFuZGxlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiBhbmQgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byB0aGUgYGUxMDBfc2V0X2VlcHJvbWAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIGRlbHZlIGludG8gdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcnNpc3RlbnQgc2V0dGluZ3MgYW5kIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgRUVQUk9NIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX3NldF9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2Ny1cdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVx0LmdldF9lZXByb21cdFx0PSBlMTAwX2dldF9lZXByb20sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3MTpcdC5zZXRfZWVwcm9tXHRcdD0gZTEwMF9zZXRfZWVwcm9tLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEUxMDAgRHJpdmVyIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBlMTAwX3NldF9lZXByb21gLi4uIHllcCwgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uLiBHb29kLCB0aGF0JiMzOTtzIG9uZSBjb25maXJtZWQuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZTEwMF9kaWFnX3Rlc3RgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkaWFnbm9zdGljIHRlc3RzLiBJIHdhbnQgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGNoZWNrLiBBbHdheXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QgcHJvdG9jb2xzLiBOZWVkIHRvIGtub3cgdGhlIGJyZWFkdGggYW5kIGRlcHRoIG9mIHRoZSBzZWxmLWRpYWdub3N0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjYyMT1zdGF0aWMgY29uc3QgY2hhciBlMTAwX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2MzA6c3RhdGljIHZvaWQgZTEwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjMxLVx0c3RydWN0IGV0aHRvb2xfdGVzdCAqdGVzdCwgdTY0ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3My1cdC5zZXRfcmluZ3BhcmFtXHRcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzQ6XHQuc2VsZl90ZXN0XHRcdD0gZTEwMF9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3NS1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDBfZ2V0X3N0cmluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODc1CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlhZ25vc3RpY3MgYW5kIFJlcG9ydGluZyBQcm90b2NvbCoqCgpSaWdodCwgYGUxMDBfZGlhZ190ZXN0YCBpcyB0aGUgY29ycmVjdCBkaWFnbm9zdGljIHByb2NlZHVyZSB0byBiZSBydW5uaW5nLiBHb29kLiBOb3csIHRoYXQgdGVzdCBzaG91bGQgcHJvdmlkZSB0aGUgZGF0YSBJIG5lZWQgdG8uLi4gKmFoYSosIHllcywgSSByZW1lbWJlciBub3cuIEkgbmVlZCB0byB1dGlsaXplIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHByb3Blcmx5IGZvcm1hdHRpbmcgYW5kIGRlbGl2ZXJpbmcgdGhvc2UgZGlhZ25vc3RpYyBmaW5kaW5ncy4gVGhlIHJlc3VsdHMgc2hvdWxkIGJlIHByb3ZpZGVkIHRocm91Z2ggdGhhdCBzcGVjaWZpYyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAgICYjMzQ7ZTEwMF9zZXRfZWVwcm9tJiMzNDssCiAgICAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAgICYjMzQ7ZTEwMF9zZXRfZWVwcm9tJiMzNDssCiAgICAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGNhdXNlZCBieSBhbiBpbnZhbGlkIGBhZGRyX2xlbmAgcmVhZCBmcm9tIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgd2FzIGdyZWF0ZXIgdGhhbiA4LCBgbmljLVx1MDAzZWVlcHJvbV93Y2Agd291bGQgZXhjZWVkIHRoZSAyNTYtZWxlbWVudCBzaXplIG9mIHRoZSBgbmljLVx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW5gIHdpdGggYSBsYXJnZSBgYWRkcl9sZW5gIGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgd2hpY2ggaXMgY2F1Z2h0IGJ5IFVCU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzODRlYzBmZjU1NDdjMjcxNzg0MWE1NTIzNWI4ZGM4MzVmNDc2ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxMDoyMDoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwppbmRleCAyOTk2MDc2MmU2NGE4Li5jZDgxOTAzODY2NTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCkBAIC03NDQsNyAmIzQzOzc0NCwxNCBAQCBzdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcikKIAkJICogY29tcGxldGUgYWRkcmVzcy4gIFVzZSB0aGlzIHRvIGFkanVzdCBhZGRyX2xlbi4gKi8KIAkJY3RybCA9IGlvcmVhZDgoJmFtcDtuaWMtJmd0O2Nzci0mZ3Q7ZWVwcm9tX2N0cmxfbG8pOwogCQlpZiAoIShjdHJsICZhbXA7IGVlZG8pICZhbXA7JmFtcDsgaSAmZ3Q7IDE2KSB7Ci0JCQkqYWRkcl9sZW4gLT0gKGkgLSAxNik7CiYjNDM7CQkJdTE2IGxlbiA9IGkgLSAxNjsKJiM0MzsKJiM0MzsJCQlpZiAobGVuICZndDsgKmFkZHJfbGVuKSB7CiYjNDM7CQkJCSphZGRyX2xlbiA9IDA7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkqYWRkcl9sZW4gLT0gbGVuOwogCQkJaSA9IDE3OwogCQl9CiAKQEAgLTc2NSw3ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpCiAKIAkvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqLwogCWUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCAwKTsKLQluaWMtJmd0O2VlcHJvbV93YyA9IDEgJmx0OyZsdDsgYWRkcl9sZW47CiYjNDM7CiYjNDM7CWlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gJmd0OyA4KSB7CiYjNDM7CQluZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAmIzM0O0ludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XG4mIzM0OywKJiM0MzsJCQkgIGFkZHJfbGVuKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwogCiAJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IG5pYy0mZ3Q7ZWVwcm9tX3djOyBhZGRyJiM0MzsmIzQzOykgewogCQluaWMtJmd0O2VlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCBhZGRyKTsKQEAgLTc5MSw3ICYjNDM7ODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KQogCiAJLyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi8KIAllMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgMCk7Ci0JbmljLSZndDtlZXByb21fd2MgPSAxICZsdDsmbHQ7IGFkZHJfbGVuOwomIzQzOwomIzQzOwlpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuICZndDsgOCkgewomIzQzOwkJbmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgJiMzNDtJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxuJiMzNDssCiYjNDM7CQkJICBhZGRyX2xlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwluaWMtJmd0O2VlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTsKIAogCWlmIChzdGFydCAmIzQzOyBjb3VudCAmZ3Q7PSBuaWMtJmd0O2VlcHJvbV93YykKIAkJcmV0dXJuIC1FSU5WQUw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBlMTAwIEVFUFJPTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGZldyBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2A6IGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIEVFUFJPTSBoYW5kbGluZy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBzZWUgdGhlIGZpeCBpbiBgZTEwMF9lZXByb21fcmVhZGAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYm91bmRzIGNoZWNrIGZvciBgYWRkcl9sZW5gIGlzIGdvb2Q7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYW4gdW5kZXJmbG93IHNjZW5hcmlvLiBCeSBpbnRyb2R1Y2luZyBhIGNoZWNrIGBpZiAobGVuICZndDsgKmFkZHJfbGVuKWAgYmVmb3JlIHN1YnRyYWN0aW5nLCB3ZSYjMzk7cmUgZW5zdXJpbmcgdGhhdCB3ZSBkb24mIzM5O3QgZW5kIHVwIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgYGFkZHJfbGVuYCwgd2hpY2ggY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uIFRoaXMgYXZvaWRzIGEgY2xhc3NpYyBzaGlmdC1vdXQtb2YtYm91bmRzIGlzc3VlLgoKVGhlbiB0aGVyZSBhcmUgdGhlIGBlMTAwX2VlcHJvbV9sb2FkYCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGNoYW5nZXMuICBIZXJlLCB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYGFkZHJfbGVuYCB0byBwcmV2ZW50IGJvdGggemVybyBhbmQgZXhjZXNzaXZlIHZhbHVlcy4gIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIHdlIGhhdmU6CgpgYGBjCm5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwpgYGAKClRoZSBvbGQgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gYW4gdW5kZXJmbG93LCBtYWtpbmcgYGFkZHJfbGVuYCBhIGh1Z2UgcG9zaXRpdmUgbnVtYmVyLiBUaGlzLCB3aGVuIHVzZWQgYXMgYSBzaGlmdCBjb3VudCBpbiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAsIGlzIFVuZGVmaW5lZCBCZWhhdmlvciAoVUIpLCBiZWNhdXNlIHNoaWZ0aW5nIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYml0LXdpZHRoIG9mIHRoZSBvcGVyYW5kIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIEMgc3RhbmRhcmQuIFRoaXMgcGF0Y2ggbm93IGF2b2lkcyBVQiBieSBjaGVja2luZyBmb3IgYW5kIHJlamVjdGluZyBpbnZhbGlkIGBhZGRyX2xlbmAgdmFsdWVzLgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgcHJldmlvdXNseSwgYW4gdW5kZXJmbG93IGNvdWxkIGxlYWQgdG8gYG5pYy0mZ3Q7ZWVwcm9tX3djYCBiZWNvbWluZyBhIHZlcnkgbGFyZ2UgbnVtYmVyLCB3aGljaCB3b3VsZCB0aGVuIGJlIHVzZWQgaW4gYSBsb29wIHRvIGFjY2VzcyBgbmljLSZndDtlZXByb21gOgoKYGBgYwpmb3IgKGFkZHIgPSAwOyBhZGRyICZsdDsgbmljLSZndDtlZXByb21fd2M7IGFkZHImIzQzOyYjNDM7KSB7CgkJbmljLSZndDtlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgYWRkcik7CmBgYAoKVGhpcyBlZmZlY3RpdmVseSBjcmVhdGVzIGEgYnVmZmVyIG92ZXJmbG93LCBiZWNhdXNlIGBuaWMtJmd0O2VlcHJvbWAgaXMgYW4gYXJyYXkgb2YgYSBzcGVjaWZpYyBzaXplLCBhbmQgaWYgYG5pYy0mZ3Q7ZWVwcm9tX3djYCBpcyB0b28gbGFyZ2UsIGl0IHdvdWxkIGFsbG93IHRoZSBwcm9ncmFtIHRvIHdyaXRlIGRhdGEgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KClRoZSBwYXRjaCBlZmZlY3RpdmVseSBtaXRpZ2F0ZXMgYSBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1ZyBhbmQgcHJldmVudHMgYSBzdWJzZXF1ZW50IGJ1ZmZlciBvdmVyZmxvdy4gIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgYW5kIFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgZXNwZWNpYWxseSBVQlNBTiwgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoZXNlIGtpbmRzIG9mIGlzc3Vlcy4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0JiMzOTtzIGEgbWF0dGVyIG9mIFVCIGFuZCBib3VuZHMgdmlvbGF0aW9ucy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGVlcHJvbWAgd2l0aGluIHRoZSBgc3RydWN0IG5pY2AgdG8gdmVyaWZ5IHRoZSBzaXplIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhhdCBleHRyYSBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuaWMgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz01MzQ9c3RydWN0IHBhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTUzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo1Mzk6c3RydWN0IG5pYyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNTQwLVx0LyogQmVnaW46IGZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6IGtlZXAgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzgwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFMTAwIEVFUFJPTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgSW50ZWwgRTEwMCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgRUVQUk9NIGhhbmRsaW5nIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgbGVuZ3RoIG9mIEVFUFJPTSBhY2Nlc3NlcyBhcmUgbWFuYWdlZC4KClRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGBhZGRyX2xlbmAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciBgbmljLSZndDtlZXByb21fd2NgIHRvIGJlY29tZSBleGNlc3NpdmVseSBsYXJnZS4gIFRoaXMgd29ycmllcyBtZSBiZWNhdXNlIGBuaWMtJmd0O2VlcHJvbV93Y2AgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBzaXplIG9yIHdvcmQgY291bnQgb2YgZGF0YSBiZWluZyBhY2Nlc3NlZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCBpcyBwb29ybHkgdmFsaWRhdGVkLCBpdCBjb3VsZCBsZWFkIHRvIGFuIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gdXNlZCBpbiBjYWxjdWxhdGlvbnMsIGFuZCBjb25zZXF1ZW50bHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2UgY2FuIHNlZSB0aGlzIGltbWVkaWF0ZWx5OiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAgd2l0aCBgYWRkcl9sZW4gJmd0OyA4YCBvciBuZWdhdGl2ZSBjYW4gY3JlYXRlIGEgaHVnZSBgZWVwcm9tX3djYC4KClRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIGBhZGRyX2xlbmAgaW4gYWxsIHRocmVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBndWFyZHMgYWdhaW5zdCB1bmRlcmZsb3cgaW4gYGUxMDBfZWVwcm9tX3JlYWRgIGFuZCBlbnN1cmVzIGBhZGRyX2xlbmAgaXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChub3QgemVybyBhbmQgbm90IGV4Y2VlZGluZyA4KSBpbiBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLgoKSSBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIHRvIGRvIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYHN0cnVjdCBuaWNgIGRlZmluaXRpb24gYW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBgbmljLSZndDtlZXByb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBlZXByb21gIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBlZXByb21fd2NgIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSBmaXguIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBhIGxhcmdlIGBlZXByb21fd2NgIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb24gdGhlIGBuaWMtJmd0O2VlcHJvbWAgYXJyYXkuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIGJlZm9yZSBJIGZ1bGx5IGVuZG9yc2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Mzk6XHRzdHJ1Y3QgbmljIHtcbiA1NDA6XHRcdC8qIEJlZ2luOiBmcmVxdWVudGx5IHVzZWQgdmFsdWVzOiBrZWVwIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi9cbiA1NDE6XHRcdHUzMiBtc2dfZW5hYmxlXHRcdFx0XHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gNTQyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIDU0MzpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4gNTQ0Olx0XHR1MTYgKCptZGlvX2N0cmwpKHN0cnVjdCBuaWMgKm5pYywgdTMyIGFkZHIsIHUzMiBkaXIsIHUzMiByZWcsIHUxNiBkYXRhKTtcbiA1NDU6XHRcbiA1NDY6XHRcdHN0cnVjdCByeCAqcnhzXHRcdFx0XHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gNTQ3Olx0XHRzdHJ1Y3QgcnggKnJ4X3RvX3VzZTtcbiA1NDg6XHRcdHN0cnVjdCByeCAqcnhfdG9fY2xlYW47XG4gNTQ5Olx0XHRzdHJ1Y3QgcmZkIGJsYW5rX3JmZDtcbiA1NTA6XHRcdGVudW0gcnVfc3RhdGUgcnVfcnVubmluZztcbiA1NTE6XHRcbiA1NTI6XHRcdHNwaW5sb2NrX3QgY2JfbG9ja1x0XHRcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiA1NTM6XHRcdHNwaW5sb2NrX3QgY21kX2xvY2s7XG4gNTU0Olx0XHRzdHJ1Y3QgY3NyIF9faW9tZW0gKmNzcjtcbiA1NTU6XHRcdGVudW0gc2NiX2NtZF9sbyBjdWNfY21kO1xuIDU1NjpcdFx0dW5zaWduZWQgaW50IGNic19hdmFpbDtcbiA1NTc6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIDU1ODpcdFx0c3RydWN0IGNiICpjYnM7XG4gNTU5Olx0XHRzdHJ1Y3QgY2IgKmNiX3RvX3VzZTtcbiA1NjA6XHRcdHN0cnVjdCBjYiAqY2JfdG9fc2VuZDtcbiA1NjE6XHRcdHN0cnVjdCBjYiAqY2JfdG9fY2xlYW47XG4gNTYyOlx0XHRfX2xlMTYgdHhfY29tbWFuZDtcbiA1NjM6XHRcdC8qIEVuZDogZnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0ICovXG4gNTY0Olx0XG4gNTY1Olx0XHRlbnVtIHtcbiA1NjY6XHRcdFx0aWNoICAgICAgICAgICAgICAgID0gKDEgXHUwMDNjXHUwMDNjIDApLFxuIDU2NzpcdFx0XHRwcm9taXNjdW91cyAgICAgICAgPSAoMSBcdTAwM2NcdTAwM2MgMSksXG4gNTY4Olx0XHRcdG11bHRpY2FzdF9hbGwgICAgICA9ICgxIFx1MDAzY1x1MDAzYyAyKSxcbiA1Njk6XHRcdFx0d29sX21hZ2ljICAgICAgICAgID0gKDEgXHUwMDNjXHUwMDNjIDMpLFxuIDU3MDpcdFx0XHRpY2hfMTBoX3dvcmthcm91bmQgPSAoMSBcdTAwM2NcdTAwM2MgNCksXG4gNTcxOlx0XHR9IGZsYWdzXHRcdFx0XHRcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiA1NzI6XHRcbiA1NzM6XHRcdGVudW0gbWFjIG1hYztcbiA1NzQ6XHRcdGVudW0gcGh5IHBoeTtcbiA1NzU6XHRcdHN0cnVjdCBwYXJhbXMgcGFyYW1zO1xuIDU3NjpcdFx0c3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7XG4gNTc3Olx0XHRzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpO1xuIDU3ODpcdFx0c3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzaztcbiA1Nzk6XHRcdGVudW0gbG9vcGJhY2sgbG9vcGJhY2s7XG4gNTgwOlx0XG4gNTgxOlx0XHRzdHJ1Y3QgbWVtICptZW07XG4gNTgyOlx0XHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIDU4MzpcdFxuIDU4NDpcdFx0c3RydWN0IGRtYV9wb29sICpjYnNfcG9vbDtcbiA1ODU6XHRcdGRtYV9hZGRyX3QgY2JzX2RtYV9hZGRyO1xuIDU4NjpcdFx0dTggYWRhcHRpdmVfaWZzO1xuIDU4NzpcdFx0dTggdHhfdGhyZXNob2xkO1xuIDU4ODpcdFx0dTMyIHR4X2ZyYW1lcztcbiA1ODk6XHRcdHUzMiB0eF9jb2xsaXNpb25zO1xuIDU5MDpcdFx0dTMyIHR4X2RlZmVycmVkO1xuIDU5MTpcdFx0dTMyIHR4X3NpbmdsZV9jb2xsaXNpb25zO1xuIDU5MjpcdFx0dTMyIHR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4gNTkzOlx0XHR1MzIgdHhfZmNfcGF1c2U7XG4gNTk0Olx0XHR1MzIgdHhfdGNvX2ZyYW1lcztcbiA1OTU6XHRcbiA1OTY6XHRcdHUzMiByeF9mY19wYXVzZTtcbiA1OTc6XHRcdHUzMiByeF9mY191bnN1cHBvcnRlZDtcbiA1OTg6XHRcdHUzMiByeF90Y29fZnJhbWVzO1xuIDU5OTpcdFx0dTMyIHJ4X3Nob3J0X2ZyYW1lX2Vycm9ycztcbiA2MDA6XHRcdHUzMiByeF9vdmVyX2xlbmd0aF9lcnJvcnM7XG4gNjAxOlx0XG4gNjAyOlx0XHR1MTYgZWVwcm9tX3djO1xuIDYwMzpcdFx0X19sZTE2IGVlcHJvbVsyNTZdO1xuIDYwNDpcdFx0c3BpbmxvY2tfdCBtZGlvX2xvY2s7XG4gNjA1Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIDYwNjpcdH07XG4gNjA3Olx0XG4gNjA4Olx0c3RhdGljIGlubGluZSB2b2lkIGUxMDBfd3JpdGVfZmx1c2goc3RydWN0IG5pYyAqbmljKVxuIDYwOTpcdHtcbiA2MTA6XHRcdC8qIEZsdXNoIHByZXZpb3VzIFBDSSB3cml0ZXMgdGhyb3VnaCBpbnRlcm1lZGlhdGUgYnJpZGdlc1xuIDYxMTpcdFx0ICogYnkgZG9pbmcgYSBiZW5pZ24gcmVhZCAqL1xuIDYxMjpcdFx0KHZvaWQpaW9yZWFkOChcdTAwMjZuaWMtXHUwMDNlY3NyLVx1MDAzZXNjYi5zdGF0dXMpO1xuIDYxMzpcdH1cbiA2MTQ6XHRcbiA2MTU6XHRzdGF0aWMgdm9pZCBlMTAwX2VuYWJsZV9pcnEoc3RydWN0IG5pYyAqbmljKVxuIDYxNjpcdHtcbiA2MTc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gNjE4Olx0XG4gNjE5Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuaWMtXHUwMDNlY21kX2xvY2ssIGZsYWdzKTtcbiA2MjA6XHRcdGlvd3JpdGU4KGlycV9tYXNrX25vbmUsIFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlc2NiLmNtZF9oaSk7XG4gNjIxOlx0XHRlMTAwX3dyaXRlX2ZsdXNoKG5pYyk7XG4gNjIyOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5pYy1cdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgdm9pZCBlMTAwX2Rpc2FibGVfaXJxKHN0cnVjdCBuaWMgKm5pYylcbiA2MjY6XHR7XG4gNjI3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDYyODpcdFxuIDYyOTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmljLVx1MDAzZWNtZF9sb2NrLCBmbGFncyk7XG4gNjMwOlx0XHRpb3dyaXRlOChpcnFfbWFza19hbGwsIFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlc2NiLmNtZF9oaSk7XG4gNjMxOlx0XHRlMTAwX3dyaXRlX2ZsdXNoKG5pYyk7XG4gNjMyOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5pYy1cdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xuIDYzMzpcdH1cbiA2MzQ6XHRcbiA2MzU6XHRzdGF0aWMgdm9pZCBlMTAwX2h3X3Jlc2V0KHN0cnVjdCBuaWMgKm5pYylcbiA2MzY6XHR7XG4gNjM3Olx0XHQvKiBQdXQgQ1UgYW5kIFJVIGludG8gaWRsZSB3aXRoIGEgc2VsZWN0aXZlIHJlc2V0IHRvIGdldFxuIDYzODpcdFx0ICogZGV2aWNlIG9mZiBvZiBQQ0kgYnVzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjcKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGUxMDAgRHJpdmVyIEVFUFJPTSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGUxMDBgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYGFkZHJfbGVuYCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIHRvIGBhZGRyX2xlbmAgaW4gdGhlIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSB0aGUgcGF0Y2ggYWltcyB0byBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyBvdXQgb2Ygd2hhY2suCgpTcGVjaWZpY2FsbHksIGluIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGFkZHJfbGVuYCBpcyBtb2RpZmllZCBiYXNlZCBvbiBzb21lIEVFUFJPTSBjb250cm9sIGJpdHMgYW5kIGFuIGl0ZXJhdGlvbiBjb3VudGVyLiBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBpcyBtZXQsIGBhZGRyX2xlbmAgZ2V0cyByZWR1Y2VkLiBNeSBjb25jZXJuIGlzLCB0aGF0IHRoZXJlIGlzIGEgY2hlY2sgaWYgYGxlbiAmZ3Q7ICphZGRyX2xlbmAsIGluIHdoaWNoIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYCphZGRyX2xlbiA9IDA7YCBicmVha3MgdGhlIGxvb3AuIEluIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCwgaXQgY2hlY2tzIGlmIGBhZGRyX2xlbmAgaXMgemVybywgb3IgZ3JlYXRlciB0aGFuIDgsIGFuZCByZXR1cm5zIGFuIGVycm9yLiBUaGUga2V5IGlzIGluIGhvdyBgYWRkcl9sZW5gIGlzIHVzZWQuCgpJIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBUaGUgY29kZSByZWFkcyBgYWRkcl9sZW5gIGFuZCB0aGVuIGNhbGN1bGF0ZXMgYG5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbmAuIElmIGBhZGRyX2xlbmAgYmVjb21lcyB0b28gbGFyZ2UsIHRoaXMgYml0LXNoaWZ0IG9wZXJhdGlvbiBjb3VsZCByZXN1bHQgaW4gYSBtYXNzaXZlIG51bWJlciBvciB1bmRlZmluZWQgYmVoYXZpb3IuIElmIGBhZGRyX2xlbmAgYmVjb21lcyAxMCAob3IgbGFyZ2VyKSwgdGhlbiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAgaXMgMTAyNCwgd2hpY2ggaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBgbmljLSZndDtlZXByb21gIGFycmF5LCB3aGljaCBpcyBvbmx5IHNpemUgMjU2LiBUaGlzIG1lYW5zIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaXMgZ29pbmcgdG8gaGFwcGVuLgoKYG5pYy0mZ3Q7ZWVwcm9tX3djYCBjb250cm9scyB0aGUgbG9vcCBib3VuZCBmb3IgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEuIFRoZSBjb2RlIGl0ZXJhdGVzIHVwIHRvIGBuaWMtJmd0O2VlcHJvbV93Y2AsIHdyaXRpbmcgdG8gYG5pYy0mZ3Q7ZWVwcm9tW2FkZHJdYC4gSWYgYG5pYy0mZ3Q7ZWVwcm9tX3djYCBleGNlZWRzIDI1NiwgaXQmIzM5O3MgYSBndWFyYW50ZWVkIG91dC1vZi1ib3VuZHMgd3JpdGUuIEJpbmdvISBDbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBjYXVnaHQgYnkgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikuCgpOb3csIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBkbyB3aXRoIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHBvdGVudGlhbGx5IHZpYSBldGh0b29sLiBXZWxsLCB0aGUgcGF0Y2ggcmVzdHJpY3RzIGBhZGRyX2xlbmAgdG8gYmUgJmx0Oz0gOC4gTWVhbmluZywgdGhhdCBgZWVwcm9tX3djICZsdDs9IDI1NmAuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCByZWFkIGlzIGFuIGlzc3VlLiBUaGUgY29yZSBmaXggaXMgcHJldmVudGluZyBgYWRkcl9sZW5gIGZyb20gYmVjb21pbmcgYSBodWdlIG51bWJlciwgbGVhZGluZyB0byBhbiBPT0IgYWNjZXNzLgoKV2FpdCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0ISBJZiBgYWRkcl9sZW5gIGlzIHJlZHVjZWQgYnkgdG9vIG11Y2gsIGNvdWxkIGl0IHdyYXAgYXJvdW5kPyBZZXMsIHRoZSBgKmFkZHJfbGVuIC09IGxlbmAgY291bGQgdW5kZXJmbG93LCBsZWFkaW5nIHRvIGxhcmdlIGBhZGRyX2xlbmAuIEFoLCBidXQgYGUxMDBfZWVwcm9tX2xvYWRgIGFjdHVhbGx5IGluaXRpYWxpemVzIGBhZGRyX2xlbmAgdG8gOCBhbmQgdGhlbiBpdCYjMzk7cyB1c2VkIGluIGBlMTAwX2VlcHJvbV9yZWFkYC4gSWYgYW4gdW5kZXJmbG93IGhhcHBlbnMsIHRoZW4gYDEgJmx0OyZsdDsgYWRkcl9sZW5gIHJlc3VsdHMgaW4gYSBodWdlIG51bWJlci4KClRoZSB0aGluZyBpcywgYGFkZHJfbGVuYCBpcyBgdTE2YC4gSWYgaXQgYmVjb21lcyA2NTUzNSwgYDEgJmx0OyZsdDsgNjU1MzVgIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDLiBUaGF0JiMzOTtzIGEgc2hpZnQgY291bnQgdGhhdCYjMzk7cyB0b28gbGFyZ2UsIGJ1dCBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNBTml0aXplcikgc2hvdWxkIGNhdGNoIHRoaXMuCgpTbywgZm9yIGV4YW1wbGUsIGxldCYjMzk7cyBzYXkgYGFkZHJfbGVuYCBiZWNvbWVzIDEwLiBUaGVuIGBuaWMtJmd0O2VlcHJvbV93YyA9IDEwMjRgLCBhbmQgd3JpdGluZyB1cCB0byAxMDI0IHRvIGFuIGFycmF5IG9mIHNpemUgMjU2IGlzIGFuIE9PQiB3cml0ZS4gVGhpcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4KCk5vdywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzc3VlPyBObywgdGhpcyBpcyBhbiBPT0Igd3JpdGUgZHVlIHRvIGEgYml0IHNoaWZ0IHRoYXQgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB0aGF0IEtBU0FOIGFuZCBVQlNBTiBhcmUgcGVyZmVjdGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcuIE5vIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHJlYWRzIHRoYXQgS01TQU4gc3BlY2lhbGl6ZXMgaW4uIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLgoKSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBzaGlmdCB0aGF0IGNhbiBiZSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gLiBJZiBgYWRkcl9sZW5gIGlzIGxhcmdlciB0aGFuIDgsIGBuaWMtJmd0O2VlcHJvbV93Y2AgZXhjZWVkcyB0aGUgc2l6ZSBvZiBgbmljLSZndDtlZXByb21gLiBLQVNBTiBkZXRlY3RzIHRoZSBidWZmZXIgb3ZlcmZsb3csIFVCU0FOIGRldGVjdHMgdGhlIHVuZGVmaW5lZCBiaXQtc2hpZnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWssIHRoZXJlZm9yZSwgbm8gbmVlZCBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MjkuODg5ODYzNzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzA0MTc0MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGNhdXNlZCBieSBhbiBpbnZhbGlkIGBhZGRyX2xlbmAgcmVhZCBmcm9tIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgd2FzIGdyZWF0ZXIgdGhhbiA4LCBgbmljLVxcdTAwM2VlZXByb21fd2NgIHdvdWxkIGV4Y2VlZCB0aGUgMjU2LWVsZW1lbnQgc2l6ZSBvZiB0aGUgYG5pYy1cXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFxcdTAwM2NcXHUwMDNjIGFkZHJfbGVuYCB3aXRoIGEgbGFyZ2UgYGFkZHJfbGVuYCBpcyB1bmRlZmluZWQgYmVoYXZpb3IsIHdoaWNoIGlzIGNhdWdodCBieSBVQlNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW52b2x2ZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MjkuODg5ODcxMjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYwNzg4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDEwOjIwOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXFxuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXFxuIFxcdFxcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXFxuIFxcdFxcdGN0cmwgPSBpb3JlYWQ4KFxcdTAwMjZuaWMtXFx1MDAzZWNzci1cXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xcbiBcXHRcXHRpZiAoIShjdHJsIFxcdTAwMjYgZWVkbykgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNlIDE2KSB7XFxuLVxcdFxcdFxcdCphZGRyX2xlbiAtPSAoaSAtIDE2KTtcXG4rXFx0XFx0XFx0dTE2IGxlbiA9IGkgLSAxNjtcXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSAqYWRkcl9sZW4pIHtcXG4rXFx0XFx0XFx0XFx0KmFkZHJfbGVuID0gMDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdCphZGRyX2xlbiAtPSBsZW47XFxuIFxcdFxcdFxcdGkgPSAxNztcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNzY1LDcgKzc3MiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKVxcbiBcXG4gXFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cXG4gXFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFxcdTAwMjZhZGRyX2xlbiwgMCk7XFxuLVxcdG5pYy1cXHUwMDNlZWVwcm9tX3djID0gMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbjtcXG4rXFxuK1xcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXFx1MDAzZSA4KSB7XFxuK1xcdFxcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICBcXFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgYWRkcl9sZW4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0bmljLVxcdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XFxuIFxcbiBcXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFxcdTAwM2MgbmljLVxcdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xcbiBcXHRcXHRuaWMtXFx1MDAzZWVlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCBcXHUwMDI2YWRkcl9sZW4sIGFkZHIpO1xcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxcbiBcXG4gXFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cXG4gXFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFxcdTAwMjZhZGRyX2xlbiwgMCk7XFxuLVxcdG5pYy1cXHUwMDNlZWVwcm9tX3djID0gMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbjtcXG4rXFxuK1xcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXFx1MDAzZSA4KSB7XFxuK1xcdFxcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICBcXFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgYWRkcl9sZW4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0bmljLVxcdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XFxuIFxcbiBcXHRpZiAoc3RhcnQgKyBjb3VudCBcXHUwMDNlPSBuaWMtXFx1MDAzZWVlcHJvbV93YylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjMwLjMxNjczNzczMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwMzE3NTUwMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4rXHRcdFx0dTE2IGxlbiA9IGkgLSAxNjtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbitcdFx0XHRcdCphZGRyX2xlbiA9IDA7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0KmFkZHJfbGVuIC09IGxlbjtcbiBcdFx0XHRpID0gMTc7XG4gXHRcdH1cbiBcbkBAIC03NjUsNyArNzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIG5pYy1cdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xuIFx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxuIFxuIFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cbiBcdGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgMCk7XG4tXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW47XG4rXG4rXHRpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuIFx1MDAzZSA4KSB7XG4rXHRcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgXCJJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxcblwiLFxuK1x0XHRcdCAgYWRkcl9sZW4pO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdG5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG4gXG4gXHRpZiAoc3RhcnQgKyBjb3VudCBcdTAwM2U9IG5pYy1cdTAwM2VlZXByb21fd2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MzAuMzE2NzM5NjUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNTI4MzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IERyaXZlciBDb2RlIGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jYCBmaWxlLiBJdCdzIGZvciB0aGUgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBkcml2ZXIsIGEgZHJpdmVyIEknbSBxdWl0ZSBmYW1pbGlhciB3aXRoLCBzbyB0aGUgY29kZSBpdHNlbGYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRyaWdnZXIgdGhlc2UgbmV3IGNoZWNrcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50P1xuXG5JIGtub3cgUUVNVSBzdXBwb3J0cyB0aGUgYGk4MjU1N2JgLCBgaTgyNTU5ZXJgLCBhbmQgYGk4MjU1OWNgIHdoaWNoIGFsbCBlbXVsYXRlIHRoZSBlMTAwIGZhbWlseSBvZiBOSUNzLiBUaGF0J3MgZ29vZCwgc28gdGhlIGhhcmR3YXJlIHN1cHBvcnQgaXMgdGhlcmUuIE5vdywgbGV0IG1lIHF1aWNrbHkgc2VlIGlmIGBlMTAwX2VlcHJvbV9sb2FkYCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIEkgcmVjYWxsIGBlMTAwX2VlcHJvbV9sb2FkYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gdHJpZ2dlci4gTm93LCB3aGF0IGFib3V0IGBlMTAwX2VlcHJvbV9zYXZlYD8gQWgsIHllcywgaXQncyBjYWxsZWQgZnJvbSBldGh0b29sIG9wZXJhdGlvbnMsIGlzbid0IGl0PyBTbywgdGhhdCBpbXBsaWVzIHRoaXMgaXMgdHJpZ2dlcmVkIHZpYSB1c2VyIHNwYWNlIHV0aWxpdGllcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGV0aHRvb2wgY29tbWFuZCBvciBzZXF1ZW5jZSB0byB0cmlnZ2VyIHRoYXQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gYGUxMDAuY2AgYW5kIGNvbmZpcm0gd2hlcmUgYGUxMDBfZWVwcm9tX3NhdmVgIGlzIGFjdHVhbGx5IHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMDozNS43NDIwMjc3MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MzU3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9lZXByb21fc2F2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTc2OT1zdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTgwMi0vKiBTYXZlIChwb3J0aW9uIG9mKSBkcml2ZXIgRUVQUk9NIGNhY2hlIHRvIGRldmljZSBhbmQgdXBkYXRlIGNoZWNrc3VtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjgwMzpzdGF0aWMgaW50IGUxMDBfZWVwcm9tX3NhdmUoc3RydWN0IG5pYyAqbmljLCB1MTYgc3RhcnQsIHUxNiBjb3VudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNTY2PXN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjU3NjpcXHRyZXR1cm4gZTEwMF9lZXByb21fc2F2ZShuaWMsIGVlcHJvbS1cXHUwMDNlb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI1NzctXFx0XFx0KGVlcHJvbS1cXHUwMDNlbGVuIFxcdTAwM2VcXHUwMDNlIDEpICsgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjM1LjgzNTc2OTI5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODE0NzMzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFMTAwIERyaXZlciBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGUxMDBgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBRRU1VJ3MgZ290IGFuIGUxMDAgZW11bGF0aW9uLCB3aGljaCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLiBJZiB3ZSBjYW4gcmVhY2ggaXQsIHRoZW4gd2UgY2FuIGhpdCBpdCB3aXRoIG91ciBvd24gaW5wdXRzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gYnJlYWsuIEFuZCBoZXksIGV0aHRvb2wgb3BzIGFyZSBwb3RlbnRpYWxseSBleHBvc2VkLCB3aGljaCBjb3VsZCBvcGVuIHVwIHNvbWUgaW50ZXJlc3RpbmcgYXZlbnVlcyBmb3IgZXhwbG9pdGF0aW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCB0aG9zZSB0byB0YWxrIHRvIHRoZSBlbXVsYXRlZCBkcml2ZXIuXG5cbkZpcnN0IHRoaW5nLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciBgZTEwMGAuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQnbGwgdGVsbCB1cyBpZiBpdCdzIGV2ZW4gY29tcGlsZWQgaW4sIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgYXR0YWNraW5nIHRoZSByaWdodCB0YXJnZXQsIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsYW5kc2NhcGUuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjM5LjUxNzI0Nzc0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU3OTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MzkuNjA2ODQyMTU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3OTYyMjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRTEwMCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEUxMDBgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBkZXBlbmRlbmNpZXMuIEl0J3MgYSBzdGFuZGFyZCBwcmFjdGljZSB0byBzdGFydCB0aGVyZSwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGllcyBvbiDigJMgaXRzIGJ1aWxkaW5nIGJsb2Nrcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGNvbXBvbmVudHMgaXMgaXQgdGllZCB0bz8gQSBxdWljayBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgaXMgZXNzZW50aWFsLiBXaXRob3V0IGtub3dpbmcgd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdXNpbmcsIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLiBEZXBlbmRlbmN5IG1hcHBpbmcgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHN5c3RlbSBhbmFseXNpcyBhbmQgSSBqdXN0IG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjQyLjM4NjQ2ODg1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgxODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NDIuNDY5MzE1Njk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MDk1NTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRTEwMCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEUxMDAgS2NvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBFMTAwIGRyaXZlciBpcyBzdHJ1Y3R1cmVkIOKAkyB3aGF0IGFyZSB0aGUgbWFpbiBDT05GSUcgc3ltYm9scywgYXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgbmV0d29yayBkcml2ZXJzIG9yIGhhcmR3YXJlIHN1cHBvcnQ/IE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgYnVpbGQgZmxhZ3MsIGVzcGVjaWFsbHkgdGhvc2UgaW5mbHVlbmNpbmcgZmVhdHVyZXMgbGlrZSBETUEgaGFuZGxpbmcsIGludGVycnVwdCBtb2RlcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gQW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciBoYXJkd2FyZSByZXZpc2lvbnMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBPbmNlIEkgaGF2ZSBhIGdvb2QgaGlnaC1sZXZlbCBncmFzcCwgSSB3aWxsIGxvb2sgdG8gc2VlIGhvdyB0aG9zZSBzeW1ib2xzIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NDUuODUwMjc1NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgRTEwMFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMjU6XFx0XFx0c2VsZWN0IE1JSVxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQUk8vMTAwIGZhbWlseSBvZiBhZGFwdGVycy5cXG4gIDI4OlxcdFxcdCAgVG8gdmVyaWZ5IHRoYXQgeW91ciBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyXFxuICAyOTpcXHRcXHQgIG9uIHRoZSBhZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXJcXG4gIDMwOlxcdFxcdCAgaW4gdGhlIGZvcm1hdCAxMjM0NTYtMDAxIChzaXggZGlnaXRzIGh5cGhlbiB0aHJlZSBkaWdpdHMpLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIFVzZSB0aGUgYWJvdmUgaW5mb3JtYXRpb24gYW5kIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcXG4gIDMzOlxcdFxcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICB0byBpZGVudGlmeSB0aGUgYWRhcHRlci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDQwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAucnN0XFx1MDAzZS5cXG4gIDQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMDo0NS44NTAzNzUyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUzODkzNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRTEwMCBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgRTEwMGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIHN5c3RlbS4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYFBDSWAgYW5kIGBNSUlgLCBhbmQgYE1JSWAgaXMgY3VycmVudGx5IGFjdGl2ZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgc3RhZ2UgZm9yIHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBhdC5cblxuTm93LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgRUVQUk9NIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAuIEl0J3Mgd29ydGggbm90aW5nIHRoZXNlIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiB0aGUgY29udGV4dC4gVGhpcyBtZWFucyB0aGF0IEkgbm93IG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2NvcGUgdGhhdCBtaWdodCBiZSBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaXMgd2hlcmUgdGhlIGtleSB1bmRlcnN0YW5kaW5nIHdpbGwgbGllLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NTIwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjUwLjQwNDI3MjQ4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTAwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9lZXByb21fbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTcyMT1zdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy03NjgtLyogTG9hZCBlbnRpcmUgRUVQUk9NIGltYWdlIGludG8gZHJpdmVyIGNhY2hlIGFuZCB2YWxpZGF0ZSBjaGVja3N1bSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo3Njk6c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNzcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjMwPXN0YXRpYyB2b2lkIGUxMDBfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYzOC1cXHRkYXRhWzBdID0gIW1paV9saW5rX29rKFxcdTAwMjZuaWMtXFx1MDAzZW1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2Mzk6XFx0ZGF0YVsxXSA9IGUxMDBfZWVwcm9tX2xvYWQobmljKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjY0MC1cXHRpZiAodGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjg1Mz1zdGF0aWMgaW50IGUxMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjk0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjk0NDpcXHRpZiAoKGVyciA9IGUxMDBfZWVwcm9tX2xvYWQobmljKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI5NDUtXFx0XFx0Z290byBlcnJfb3V0X2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjUwLjQ4NjY2OTMwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgwMjYwNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBlMTAwIERyaXZlcidzIEVFUFJPTSBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgZTEwMCBuZXR3b3JrIGRyaXZlciBoYW5kbGVzIGl0cyBFRVBST00gaW50ZXJhY3Rpb25zLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGZvciBwcm9wZXIgTklDIG9wZXJhdGlvbi4gSSBzZWUgdGhhdCB0aGUgYGUxMDBfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaW5pdGlhbCBkaXNjb3ZlcnkgYW5kIHNldHVwIHJvdXRpbmUsIHJlbGllcyBvbiBgZTEwMF9lZXByb21fbG9hZGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHByb2JlIG5lZWRzIHRoZSBFRVBST00gZGF0YSB0byBpbml0aWFsaXplIGl0c2VsZiwgbG9hZCBNQUMgYWRkcmVzcywgYW5kIHBvc3NpYmx5IG90aGVyIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuICBUaGVuIEkgc2VlIGBlMTAwX2RpYWdfdGVzdGAgYWxzbyBjYWxscyBgZTEwMF9lZXByb21fbG9hZGAuIFRoYXQncyBpbXBvcnRhbnQ7ICB0aGUgZGlhZ25vc3RpYyBmdW5jdGlvbiBuZWVkcyB0byBwdWxsIHRoZSBzYW1lIEVFUFJPTSBkYXRhIGFzIHRoZSBkcml2ZXIgZm9yIGRpYWdub3N0aWMgdGVzdGluZy4gQnV0IGJvdGggYXJlIHVzaW5nIHRoZSBsb2FkIGZ1bmN0aW9uLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSBpbnRlcmVzdGluZyBwaWVjZSwgdGhvdWdoLCBpcyBgZTEwMF9zZXRfZWVwcm9tYC4gVGhpcyBmdW5jdGlvbiwgcHJlc3VtYWJseSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBvciBtb2RpZnlpbmcgdGhlIEVFUFJPTSwgY2FsbHMgYGUxMDBfZWVwcm9tX3NhdmVgLiAgU28gYGUxMDBfc2V0X2VlcHJvbWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gc2F2ZSBFRVBST00gZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGltcGxlbWVudCBzb21lIGZ1bmN0aW9ucyBsaWtlIHNldHRpbmcgdGhlIE1BQyBhZGRyZXNzLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZCBpbiBvdGhlciBOSUMgZHJpdmVycyBJJ3ZlIHdvcmtlZCBvbi4gSSdtIGtlZXBpbmcgdGhpcyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZHJpdmVyJ3MgaW50ZXJuYWxzOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXZpY2UncyBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBhbnkgaXNzdWVzIGhlcmUgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjU1LjA2NjkzNTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI3ODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3NldF9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNTU1PXN0YXRpYyBpbnQgZTEwMF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjU2NjpzdGF0aWMgaW50IGUxMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTY3LVxcdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjc1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3MC1cXHQuZ2V0X2VlcHJvbVxcdFxcdD0gZTEwMF9nZXRfZWVwcm9tLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzcxOlxcdC5zZXRfZWVwcm9tXFx0XFx0PSBlMTAwX3NldF9lZXByb20sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NTUuMTMxMjI0Nzk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTc2MTc0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBlMTAwIERyaXZlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGUxMDBgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biB0aGUgY29yZSBlbnRyeSBwb2ludHMuIEl0IHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9zZXRfZWVwcm9tYC4gYGUxMDBfcHJvYmVgIGlzIGNsZWFybHkgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGRyaXZlciBsaWZlY3ljbGUuIEl0J3MgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhhdCBtYWtlcyBzZW5zZS4gYGUxMDBfc2V0X2VlcHJvbWAgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24sIHRyaWdnZXJlZCBieSBhIHVzZXIgc3BhY2UgdG9vbCwgdGhhdCdzIGltcG9ydGFudCB0byBjb25zaWRlciBhcyB3ZWxsLlxuXG5IbW0sIGJ1dCB3YWl0LiBJIGp1c3QgcmVhbGl6ZWQgYGUxMDBfc2V0X2VlcHJvbWAgaXMgYWN0dWFsbHkgKnN0YXRpYyouIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLCBzaW5jZSB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGNvbmZpcm1lZCwgaXQncyBzdGF0aWMuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZXJlIGlzIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzIGlmIGl0J3MgaW5saW5lZC4gQnV0IHdhaXQsIHNpbmNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCBjYW4ndCBiZSBpbmxpbmVkLlxuXG5UaGUgZXRodG9vbCBvcGVyYXRpb25zIGFyZSByZWdpc3RlcmVkIGluIGBlMTAwX3Byb2JlYC4gU28gdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBlMTAwX2V0aHRvb2xfb3BzYCBpcyBhbHNvIHN0YXRpYy4gU28gdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSBgZTEwMF9wcm9iZWAgYW5kIHRob3NlIGV0aHRvb2wgaW9jdGxzLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIGhhdmUgdG8gY2hvb3NlIGVudHJ5IHBvaW50cyB3aGljaCBhcmUgKm5vdCogc3RhdGljLCBpZiBwb3NzaWJsZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIGBlMTAwX3Byb2JlYCBpcyBhbHNvIHN0YXRpYy4gQW5kIHllcywgaXQgaXMuIFdlbGwsIHRoYXQncyBub3QgaWRlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MDIuNDQ4ODQ2NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQ4NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5NS1cXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcXHQucHJvYmUgPSAgICAgICAgZTEwMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjAyLjg0MDM0NTg3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA2NjQ5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgZTEwMCBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHNvIGBlMTAwX3Byb2JlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8gbm90ZS4gSW4gZmFjdCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgbG9va2luZyBhdCB0aGUgYGUxMDAuY2AgZmlsZSBhZ2FpbiwgYWxsIHRoZSBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZSwgYXJlIHN0YXRpYywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHRoZSBtb2R1bGUgaXRzZWxmOiBgaW5pdF9tb2R1bGVgIGFuZCBgY2xlYW51cF9tb2R1bGVgIOKAkyBvciwgYXMgaXQncyBvZnRlbiBhbGlhc2VkLCBgZTEwMF9pbml0X21vZHVsZWAuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGtlcm5lbCBtb2R1bGVzLiBCdXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBleGhhdXN0aXZlLCBpdCdzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIExldCdzIG1ha2UgYSBxdWljayBwYXNzIHRvIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIHRoaXMgbW9kdWxlIHRoYXQgbWlnaHQgYmUgdW5leHBlY3RlZC4gWW91IG5ldmVyIGtub3cgd2hhdCBtaWdodCBiZSBsdXJraW5nIGluIGxlZ2FjeSBjb2RlLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gaGF2ZSBhIGNsZWFuLCBjb250cm9sbGVkIGludGVyZmFjZS4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZ290IG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjA3LjQ0Njk5ODc1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NDc3MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MDcuNTA1ODYxOTY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTU4NTIzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgXnZvaWQgYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoYXQgYF52b2lkIGAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIG1lYW4gYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcG9pbnRlcnMsIGEgY2FyZXQgcHJlY2VkaW5nIGB2b2lkYCBjb3VsZCBpbmRpY2F0ZSBhIHBvaW50ZXIgdG8gYW4gdW5kZWZpbmVkIHR5cGUg4oCTIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgYSBiYWQgc2lnbiwgc3VnZ2VzdGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBJIHNhdyB0aGlzLiBcblxuSXMgdGhpcyBpbiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgb3Igc29tZXdoZXJlIGVsc2U/IEJlY2F1c2UgaWYgaXQncyBhIGZ1bmN0aW9uIHJldHVybiB0eXBlLCAgYF52b2lkIGAgY291bGQgYmUgYSBiaXQgbWlzbGVhZGluZy4gIFdoaWxlIHRlY2huaWNhbGx5IGEgZnVuY3Rpb24gKmNhbiogcmV0dXJuIGEgcG9pbnRlciB0byBgdm9pZGAgLCB5b3UnZCBiZSBtb3JlIGxpa2VseSB0byBzZWUgdGhlIHByb3BlciBwb2ludGVyIG5vdGF0aW9uIGB2b2lkICpgIGRpcmVjdGx5LiBUaGF0IHVzYWdlIGlzIHBvc3NpYmxlIGJ1dCByYXJlLiBJJ2QgYmUgbG9va2luZyBmb3IgYSBsaWJyYXJ5IG9yIGNvZGluZyBjb252ZW50aW9uIHRoYXQgdXNlcyB0aGF0LlxuXG5TbywgZmlyc3QgSSBuZWVkIHRvIHNlZSBtb3JlIGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiB0aGUgY2FyZXQgcmFpc2VzIGEgZmxhZywgYnV0IHdpdGhvdXQgdGhhdCBjb250ZXh0LCB0aGlzIGlzIGEgcHV6emxlIGFuZCBub3QgYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxMS4wMDE3MTc5NTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDUxODg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxMS4wNTE3NzcwMTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1Nzk1NTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVsIGUxMDAgRHJpdmVyIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBlMTAwIGRyaXZlciBjb2RlLiBJdCBsb29rcyBsaWtlIGFsbCB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZyb20gYSBzeW1ib2wgdmlzaWJpbGl0eSBzdGFuZHBvaW50LiBHaXZlbiB0aGlzLCBJIGNhbiB6ZXJvIGluIG9uIGBlMTAwX3Byb2JlYCBhbmQgYGUxMDBfc2V0X2VlcHJvbWAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzIG9mIGludGVyZXN0LCBiZWNhdXNlIHRoZXkgYXJlbid0IGlubGluZWQgLSB0aGV5J3JlIGJlaW5nIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGdpdmVzIHRoZW0gZXh0ZXJuYWwgbGlua2FnZS5cblxuTm93LCBhIHF1aWNrIHNjYW4uLi4gYWhhISBJIHNlZSB0aGF0IGBlMTAwX2VlcHJvbV9sb2FkYCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGUxMDBfcHJvYmVgIGFuZCBhbHNvIGBlMTAwX2RpYWdfdGVzdGAuIFRoYXQncyBpbXBvcnRhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBlMTAwX2RpYWdfdGVzdGAgaXMgYWxzbyBhbiBldGh0b29sIG9wZXJhdGlvbiwgcmlnaHQ/IFNvIGl0J3MgcHJvYmFibHkgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbi4gSSBzaG91bGQgY2hlY2sgYGUxMDBfZGlhZ190ZXN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxNS43MDk3MzUwOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjMzMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDBfZGlhZ190ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjYyMT1zdGF0aWMgY29uc3QgY2hhciBlMTAwX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2MzA6c3RhdGljIHZvaWQgZTEwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYzMS1cXHRzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjc1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3My1cXHQuc2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzc0OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzc1LVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gZTEwMF9nZXRfc3RyaW5ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MTUuNzU1MzczODkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjM3ODc2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEludGVsIFBSTy8xMDArIERyaXZlciBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGUxMDBfcHJvYmVgLCBgZTEwMF9zZXRfZWVwcm9tYCwgYW5kIGBlMTAwX2RpYWdfdGVzdGAgc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGhlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHByZWZlcnJlZCBjb2Rpbmcgc3R5bGUgaXMgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cywgdGhvdWdoIGl0IHNlZW1zIGxpa2UgdGhleSBhcmUgYWxsIHN0YXRpYywgc28gSSB3aWxsIHByaW9yaXRpemUgb25lcyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGd1YXJhbnRlZSB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEZpcnN0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYEUxMDBgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IGZvciB0aGlzIG1vZHVsZS5cblxuT2theSwgbGV0J3Mgc2VlLiBUaGUgY29uZmlndXJhdGlvbiBzaG93czpcblxuYGBgXG5jb25maWcgRTEwMFxuXHR0cmlzdGF0ZSBcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIFBDSVxuXHRzZWxlY3QgTUlJXG5gYGBcblxuU28gYEUxMDBgIGlzIGVub3VnaC4gR3JlYXQuIE5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGUxMDBfZWVwcm9tX2xvYWRgIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgYXJlbid0IGlubGluZWQgYW5kIGFyZSBzdGF0aWMuIEkgc2VlIHRoYXQgdGhleSBhcmUgc3RhdGljLiBgZTEwMF9lZXByb21fbG9hZGAgaXMgY2FsbGVkIGZyb20gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9kaWFnX3Rlc3RgLiBJdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaXQncyBhIGJpdCBsYXJnZSBzbyBtYXliZSBub3QuIGBlMTAwX2VlcHJvbV9zYXZlYCBpcyBjYWxsZWQgZnJvbSBgZTEwMF9zZXRfZWVwcm9tYC4gU28sIGJldHRlciBmb2N1cyBvbiBgZTEwMF9wcm9iZWAsIGBlMTAwX3NldF9lZXByb21gLCBhbmQgYGUxMDBfZGlhZ190ZXN0YC5cblxuV2FpdCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2g6XG5gYGBjXG5AQCAtNzQ0LDcgKzc0NCwxNCBAQCBzdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcbiBcdFx0ICogY29tcGxldGUgYWRkcmVzcy4gIFVzZSB0aGlzIHRvIGFkanVzdCBhZGRyX2xlbi4gKi9cbiBcdFx0Y3RybCA9IGlvcmVhZDgoXHUwMDI2bmljLVx1MDAzZWNzci1cdTAwM2VlZXByb21fY3RybF9sbyk7XG4gXHRcdGlmICghKGN0cmwgXHUwMDI2IGVlZG8pIFx1MDAyNlx1MDAyNiBpIFx1MDAzZSAxNikge1xuLVx0XHRcdCphZGRyX2xlbiAtPSAoaSAtIDE2KTtcbitcdFx0XHR1MTYgbGVuID0gaSAtIDE2O1xuK1xuK1x0XHRcdGlmIChsZW4gXHUwMDNlICphZGRyX2xlbikge1xuK1x0XHRcdFx0KmFkZHJfbGVuID0gMDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQqYWRkcl9sZW4gLT0gbGVuO1xuIFx0XHRcdGkgPSAxNztcbiBcdFx0fVxuIFxuQEAgLTc2NSw3ICs3NzIsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbiBcbiBcdC8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovXG4gXHRlMTAwX2VlcHJvbV9yZWFkKG5pYywgXHUwMDI2YWRkcl9sZW4sIDApO1xuLVx0bmljLVx1MDAzZWVlcHJvbV93YyA9IDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuO1xuK1xuK1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuK1x0XHRuZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgIFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cIixcbitcdFx0XHQgIGFkZHJfbGVuKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0Zm9yIChhZGRyID0gMDsgYWRkciBcdTAwM2MgbmljLVx1MDAzZWVlcHJvbV93YzsgYWRkcisrKSB7XG4gXHRcdG5pYy1cdTAwM2VlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgXHUwMDI2YWRkcl9sZW4sIGFkZHIpO1xuQEAgLTc5MSw3ICs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGlmIChzdGFydCArIGNvdW50IFx1MDAzZT0gbmljLVx1MDAzZWVlcFxuXG4iLCJJbnB1dFRva2VucyI6OTIxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MzAuMzkzMjUzOTYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTkzOTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5NS1cXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcXHQucHJvYmUgPSAgICAgICAgZTEwMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjMwLjQ3NTE5NzY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI4MDQyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGUxMDBgIERyaXZlcioqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyByaWdodC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgdGhlIGBlMTAwX3Byb2JlYCBmdW5jdGlvbiBpcyBzb2xpZDsgdGhhdCBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucyBmb3IgaG93IHRoZSBkcml2ZXIgc2hvdWxkIGhhbmRsZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24gYW5kIHNldHVwLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGZvY3VzIHRvIHRoZSBgZTEwMF9zZXRfZWVwcm9tYCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIHdlJ2xsIGRlbHZlIGludG8gdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcnNpc3RlbnQgc2V0dGluZ3MgYW5kIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgRUVQUk9NIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozMy41MzgwMDQxNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDBfc2V0X2VlcHJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI1NjctXFx0c3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpieXRlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVxcdC5nZXRfZWVwcm9tXFx0XFx0PSBlMTAwX2dldF9lZXByb20sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzE6XFx0LnNldF9lZXByb21cXHRcXHQ9IGUxMDBfc2V0X2VlcHJvbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3Mi1cXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9nZXRfcmluZ3BhcmFtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozMy41ODM2NTA0MTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMzkyMjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBFMTAwIERyaXZlciBGdW5jdGlvbmFsaXR5KipcblxuUmlnaHQsIHNvIGBlMTAwX3NldF9lZXByb21gLi4uIHllcCwgdGhhdCdzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgRUVQUk9NIGNvbmZpZ3VyYXRpb24uIEdvb2QsIHRoYXQncyBvbmUgY29uZmlybWVkLiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZTEwMF9kaWFnX3Rlc3RgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkaWFnbm9zdGljIHRlc3RzLiBJIHdhbnQgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGNoZWNrLiBBbHdheXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QgcHJvdG9jb2xzLiBOZWVkIHRvIGtub3cgdGhlIGJyZWFkdGggYW5kIGRlcHRoIG9mIHRoZSBzZWxmLWRpYWdub3N0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjM2LjYxNzU3NTEyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMTE1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9kaWFnX3Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjIxPXN0YXRpYyBjb25zdCBjaGFyIGUxMDBfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjYzMDpzdGF0aWMgdm9pZCBlMTAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjMxLVxcdHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzczLVxcdC5zZXRfcmluZ3BhcmFtXFx0XFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzQ6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZTEwMF9kaWFnX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzUtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlMTAwX2dldF9zdHJpbmdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozNi42Njc2ODg2ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NTg5NTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWFnbm9zdGljcyBhbmQgUmVwb3J0aW5nIFByb3RvY29sKipcblxuUmlnaHQsIGBlMTAwX2RpYWdfdGVzdGAgaXMgdGhlIGNvcnJlY3QgZGlhZ25vc3RpYyBwcm9jZWR1cmUgdG8gYmUgcnVubmluZy4gR29vZC4gTm93LCB0aGF0IHRlc3Qgc2hvdWxkIHByb3ZpZGUgdGhlIGRhdGEgSSBuZWVkIHRvLi4uICphaGEqLCB5ZXMsIEkgcmVtZW1iZXIgbm93LiBJIG5lZWQgdG8gdXRpbGl6ZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGZvciBwcm9wZXJseSBmb3JtYXR0aW5nIGFuZCBkZWxpdmVyaW5nIHRob3NlIGRpYWdub3N0aWMgZmluZGluZ3MuIFRoZSByZXN1bHRzIHNob3VsZCBiZSBwcm92aWRlZCB0aHJvdWdoIHRoYXQgc3BlY2lmaWMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzUsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6NDAuNTUzNTg3ODgyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTY2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTo0MC42MzQyOTEzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NTk3MTQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTo0MC42MzQ5MDcxNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NjU1OTA5MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gIHJlYWQgZnJvbSB0aGUgRUVQUk9NLiBJZiBgYWRkcl9sZW5gIHdhcyBncmVhdGVyIHRoYW4gOCwgYG5pYy1cXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXFx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4rXHRcdFx0dTE2IGxlbiA9IGkgLSAxNjtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbitcdFx0XHRcdCphZGRyX2xlbiA9IDA7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0KmFkZHJfbGVuIC09IGxlbjtcbiBcdFx0XHRpID0gMTc7XG4gXHRcdH1cbiBcbkBAIC03NjUsNyArNzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIG5pYy1cdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xuIFx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxuIFxuIFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cbiBcdGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgMCk7XG4tXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW47XG4rXG4rXHRpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuIFx1MDAzZSA4KSB7XG4rXHRcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgXCJJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxcblwiLFxuK1x0XHRcdCAgYWRkcl9sZW4pO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdG5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG4gXG4gXHRpZiAoc3RhcnQgKyBjb3VudCBcdTAwM2U9IG5pYy1cdTAwM2VlZXByb21fd2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6NDAuNjM0OTA4MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0NjE3NDQ5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGUxMDAgRUVQUk9NIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBmZXcgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNgOiBgZTEwMF9lZXByb21fcmVhZGAsIGBlMTAwX2VlcHJvbV9sb2FkYCwgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBFRVBST00gaGFuZGxpbmcuIExldCBtZSBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGZpeCBpbiBgZTEwMF9lZXByb21fcmVhZGAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYm91bmRzIGNoZWNrIGZvciBgYWRkcl9sZW5gIGlzIGdvb2Q7IGl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBhbiB1bmRlcmZsb3cgc2NlbmFyaW8uIEJ5IGludHJvZHVjaW5nIGEgY2hlY2sgYGlmIChsZW4gXHUwMDNlICphZGRyX2xlbilgIGJlZm9yZSBzdWJ0cmFjdGluZywgd2UncmUgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGZvciBgYWRkcl9sZW5gLCB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBsYXRlciBvbi4gVGhpcyBhdm9pZHMgYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuXG5cblRoZW4gdGhlcmUgYXJlIHRoZSBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCBjaGFuZ2VzLiAgSGVyZSwgdGhleSdyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYGFkZHJfbGVuYCB0byBwcmV2ZW50IGJvdGggemVybyBhbmQgZXhjZXNzaXZlIHZhbHVlcy4gIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIHdlIGhhdmU6XG5cbmBgYGNcbm5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG5gYGBcblxuVGhlIG9sZCBjb2RlIHdhcyBzdXNjZXB0aWJsZSB0byBhbiB1bmRlcmZsb3csIG1ha2luZyBgYWRkcl9sZW5gIGEgaHVnZSBwb3NpdGl2ZSBudW1iZXIuIFRoaXMsIHdoZW4gdXNlZCBhcyBhIHNoaWZ0IGNvdW50IGluIGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAsIGlzIFVuZGVmaW5lZCBCZWhhdmlvciAoVUIpLCBiZWNhdXNlIHNoaWZ0aW5nIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYml0LXdpZHRoIG9mIHRoZSBvcGVyYW5kIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIEMgc3RhbmRhcmQuIFRoaXMgcGF0Y2ggbm93IGF2b2lkcyBVQiBieSBjaGVja2luZyBmb3IgYW5kIHJlamVjdGluZyBpbnZhbGlkIGBhZGRyX2xlbmAgdmFsdWVzLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSB0aGF0LCBwcmV2aW91c2x5LCBhbiB1bmRlcmZsb3cgY291bGQgbGVhZCB0byBgbmljLVx1MDAzZWVlcHJvbV93Y2AgYmVjb21pbmcgYSB2ZXJ5IGxhcmdlIG51bWJlciwgd2hpY2ggd291bGQgdGhlbiBiZSB1c2VkIGluIGEgbG9vcCB0byBhY2Nlc3MgYG5pYy1cdTAwM2VlZXByb21gOlxuXG5gYGBjXG5mb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBuaWMtXHUwMDNlZWVwcm9tX3djOyBhZGRyKyspIHtcblx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbmBgYFxuXG5UaGlzIGVmZmVjdGl2ZWx5IGNyZWF0ZXMgYSBidWZmZXIgb3ZlcmZsb3csIGJlY2F1c2UgYG5pYy1cdTAwM2VlZXByb21gIGlzIGFuIGFycmF5IG9mIGEgc3BlY2lmaWMgc2l6ZSwgYW5kIGlmIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBpcyB0b28gbGFyZ2UsIGl0IHdvdWxkIGFsbG93IHRoZSBwcm9ncmFtIHRvIHdyaXRlIGRhdGEgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuVGhlIHBhdGNoIGVmZmVjdGl2ZWx5IG1pdGlnYXRlcyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnIGFuZCBwcmV2ZW50cyBhIHN1YnNlcXVlbnQgYnVmZmVyIG92ZXJmbG93LiAgSSdtIGNvbmZpZGVudCB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIGVzcGVjaWFsbHkgVUJTQU4sIGFyZSBwZXJmZWN0bHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBoZXJlIGJlY2F1c2Ugd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0J3MgYSBtYXR0ZXIgb2YgVUIgYW5kIGJvdW5kcyB2aW9sYXRpb25zLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGVlcHJvbWAgd2l0aGluIHRoZSBgc3RydWN0IG5pY2AgdG8gdmVyaWZ5IHRoZSBzaXplIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0J3MgYWx3YXlzIGdvb2QgdG8gaGF2ZSB0aGF0IGV4dHJhIGNvbmZpcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIyOjAwLjA5NjY1NzAzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTgyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5pYyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTUzND1zdHJ1Y3QgcGFyYW1zIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy01MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjUzOTpzdHJ1Y3QgbmljIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNTQwLVxcdC8qIEJlZ2luOiBmcmVxdWVudGx5IHVzZWQgdmFsdWVzOiBrZWVwIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjI6MDAuMTQ3MDY2Mzk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODgyMDg0NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFMTAwIEVFUFJPTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBJbnRlbCBFMTAwIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcgZnVuY3Rpb25zOiBgZTEwMF9lZXByb21fcmVhZGAsIGBlMTAwX2VlcHJvbV9sb2FkYCwgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGxlbmd0aCBvZiBFRVBST00gYWNjZXNzZXMgYXJlIG1hbmFnZWQuXG5cblRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGBhZGRyX2xlbmAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciBgbmljLVx1MDAzZWVlcHJvbV93Y2AgdG8gYmVjb21lIGV4Y2Vzc2l2ZWx5IGxhcmdlLiAgVGhpcyB3b3JyaWVzIG1lIGJlY2F1c2UgYG5pYy1cdTAwM2VlZXByb21fd2NgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgc2l6ZSBvciB3b3JkIGNvdW50IG9mIGRhdGEgYmVpbmcgYWNjZXNzZWQgZnJvbSBvciB3cml0dGVuIHRvIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgaXMgcG9vcmx5IHZhbGlkYXRlZCwgaXQgY291bGQgbGVhZCB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIHVzZWQgaW4gY2FsY3VsYXRpb25zLCBhbmQgY29uc2VxdWVudGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFdlIGNhbiBzZWUgdGhpcyBpbW1lZGlhdGVseTogYDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYCB3aXRoIGBhZGRyX2xlbiBcdTAwM2UgOGAgb3IgbmVnYXRpdmUgY2FuIGNyZWF0ZSBhIGh1Z2UgYGVlcHJvbV93Y2AuXG5cblRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIGBhZGRyX2xlbmAgaW4gYWxsIHRocmVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBndWFyZHMgYWdhaW5zdCB1bmRlcmZsb3cgaW4gYGUxMDBfZWVwcm9tX3JlYWRgIGFuZCBlbnN1cmVzIGBhZGRyX2xlbmAgaXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChub3QgemVybyBhbmQgbm90IGV4Y2VlZGluZyA4KSBpbiBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgdG8gZG8gdGhpcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgbmljYCBkZWZpbml0aW9uIGFuZCB0aGUgZGVjbGFyYXRpb24gb2YgYG5pYy1cdTAwM2VlZXByb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBlZXByb21gIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBlZXByb21fd2NgIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSBmaXguIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBhIGxhcmdlIGBlZXByb21fd2NgIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb24gdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheS4gVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MgYmVmb3JlIEkgZnVsbHkgZW5kb3JzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIyOjE3LjAyOTE1NDg5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Mzk6XFx0c3RydWN0IG5pYyB7XFxuIDU0MDpcXHRcXHQvKiBCZWdpbjogZnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0ICovXFxuIDU0MTpcXHRcXHR1MzIgbXNnX2VuYWJsZVxcdFxcdFxcdFxcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gNTQyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIDU0MzpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcXG4gNTQ0OlxcdFxcdHUxNiAoKm1kaW9fY3RybCkoc3RydWN0IG5pYyAqbmljLCB1MzIgYWRkciwgdTMyIGRpciwgdTMyIHJlZywgdTE2IGRhdGEpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRzdHJ1Y3QgcnggKnJ4c1xcdFxcdFxcdFxcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gNTQ3OlxcdFxcdHN0cnVjdCByeCAqcnhfdG9fdXNlO1xcbiA1NDg6XFx0XFx0c3RydWN0IHJ4ICpyeF90b19jbGVhbjtcXG4gNTQ5OlxcdFxcdHN0cnVjdCByZmQgYmxhbmtfcmZkO1xcbiA1NTA6XFx0XFx0ZW51bSBydV9zdGF0ZSBydV9ydW5uaW5nO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRzcGlubG9ja190IGNiX2xvY2tcXHRcXHRcXHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIDU1MzpcXHRcXHRzcGlubG9ja190IGNtZF9sb2NrO1xcbiA1NTQ6XFx0XFx0c3RydWN0IGNzciBfX2lvbWVtICpjc3I7XFxuIDU1NTpcXHRcXHRlbnVtIHNjYl9jbWRfbG8gY3VjX2NtZDtcXG4gNTU2OlxcdFxcdHVuc2lnbmVkIGludCBjYnNfYXZhaWw7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gNTU4OlxcdFxcdHN0cnVjdCBjYiAqY2JzO1xcbiA1NTk6XFx0XFx0c3RydWN0IGNiICpjYl90b191c2U7XFxuIDU2MDpcXHRcXHRzdHJ1Y3QgY2IgKmNiX3RvX3NlbmQ7XFxuIDU2MTpcXHRcXHRzdHJ1Y3QgY2IgKmNiX3RvX2NsZWFuO1xcbiA1NjI6XFx0XFx0X19sZTE2IHR4X2NvbW1hbmQ7XFxuIDU2MzpcXHRcXHQvKiBFbmQ6IGZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6IGtlZXAgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdCAqL1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRlbnVtIHtcXG4gNTY2OlxcdFxcdFxcdGljaCAgICAgICAgICAgICAgICA9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbiA1Njc6XFx0XFx0XFx0cHJvbWlzY3VvdXMgICAgICAgID0gKDEgXFx1MDAzY1xcdTAwM2MgMSksXFxuIDU2ODpcXHRcXHRcXHRtdWx0aWNhc3RfYWxsICAgICAgPSAoMSBcXHUwMDNjXFx1MDAzYyAyKSxcXG4gNTY5OlxcdFxcdFxcdHdvbF9tYWdpYyAgICAgICAgICA9ICgxIFxcdTAwM2NcXHUwMDNjIDMpLFxcbiA1NzA6XFx0XFx0XFx0aWNoXzEwaF93b3JrYXJvdW5kID0gKDEgXFx1MDAzY1xcdTAwM2MgNCksXFxuIDU3MTpcXHRcXHR9IGZsYWdzXFx0XFx0XFx0XFx0XFx0X19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbiA1NzI6XFx0XFxuIDU3MzpcXHRcXHRlbnVtIG1hYyBtYWM7XFxuIDU3NDpcXHRcXHRlbnVtIHBoeSBwaHk7XFxuIDU3NTpcXHRcXHRzdHJ1Y3QgcGFyYW1zIHBhcmFtcztcXG4gNTc2OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nO1xcbiA1Nzc6XFx0XFx0c3RydWN0IG1paV9pZl9pbmZvIG1paTtcXG4gNTc4OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7XFxuIDU3OTpcXHRcXHRlbnVtIGxvb3BiYWNrIGxvb3BiYWNrO1xcbiA1ODA6XFx0XFxuIDU4MTpcXHRcXHRzdHJ1Y3QgbWVtICptZW07XFxuIDU4MjpcXHRcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRzdHJ1Y3QgZG1hX3Bvb2wgKmNic19wb29sO1xcbiA1ODU6XFx0XFx0ZG1hX2FkZHJfdCBjYnNfZG1hX2FkZHI7XFxuIDU4NjpcXHRcXHR1OCBhZGFwdGl2ZV9pZnM7XFxuIDU4NzpcXHRcXHR1OCB0eF90aHJlc2hvbGQ7XFxuIDU4ODpcXHRcXHR1MzIgdHhfZnJhbWVzO1xcbiA1ODk6XFx0XFx0dTMyIHR4X2NvbGxpc2lvbnM7XFxuIDU5MDpcXHRcXHR1MzIgdHhfZGVmZXJyZWQ7XFxuIDU5MTpcXHRcXHR1MzIgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuIDU5MjpcXHRcXHR1MzIgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcXG4gNTkzOlxcdFxcdHUzMiB0eF9mY19wYXVzZTtcXG4gNTk0OlxcdFxcdHUzMiB0eF90Y29fZnJhbWVzO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHR1MzIgcnhfZmNfcGF1c2U7XFxuIDU5NzpcXHRcXHR1MzIgcnhfZmNfdW5zdXBwb3J0ZWQ7XFxuIDU5ODpcXHRcXHR1MzIgcnhfdGNvX2ZyYW1lcztcXG4gNTk5OlxcdFxcdHUzMiByeF9zaG9ydF9mcmFtZV9lcnJvcnM7XFxuIDYwMDpcXHRcXHR1MzIgcnhfb3Zlcl9sZW5ndGhfZXJyb3JzO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHR1MTYgZWVwcm9tX3djO1xcbiA2MDM6XFx0XFx0X19sZTE2IGVlcHJvbVsyNTZdO1xcbiA2MDQ6XFx0XFx0c3BpbmxvY2tfdCBtZGlvX2xvY2s7XFxuIDYwNTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbiA2MDY6XFx0fTtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGlubGluZSB2b2lkIGUxMDBfd3JpdGVfZmx1c2goc3RydWN0IG5pYyAqbmljKVxcbiA2MDk6XFx0e1xcbiA2MTA6XFx0XFx0LyogRmx1c2ggcHJldmlvdXMgUENJIHdyaXRlcyB0aHJvdWdoIGludGVybWVkaWF0ZSBicmlkZ2VzXFxuIDYxMTpcXHRcXHQgKiBieSBkb2luZyBhIGJlbmlnbiByZWFkICovXFxuIDYxMjpcXHRcXHQodm9pZClpb3JlYWQ4KFxcdTAwMjZuaWMtXFx1MDAzZWNzci1cXHUwMDNlc2NiLnN0YXR1cyk7XFxuIDYxMzpcXHR9XFxuIDYxNDpcXHRcXG4gNjE1OlxcdHN0YXRpYyB2b2lkIGUxMDBfZW5hYmxlX2lycShzdHJ1Y3QgbmljICpuaWMpXFxuIDYxNjpcXHR7XFxuIDYxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MjA6XFx0XFx0aW93cml0ZTgoaXJxX21hc2tfbm9uZSwgXFx1MDAyNm5pYy1cXHUwMDNlY3NyLVxcdTAwM2VzY2IuY21kX2hpKTtcXG4gNjIxOlxcdFxcdGUxMDBfd3JpdGVfZmx1c2gobmljKTtcXG4gNjIyOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5pYy1cXHUwMDNlY21kX2xvY2ssIGZsYWdzKTtcXG4gNjIzOlxcdH1cXG4gNjI0OlxcdFxcbiA2MjU6XFx0c3RhdGljIHZvaWQgZTEwMF9kaXNhYmxlX2lycShzdHJ1Y3QgbmljICpuaWMpXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MzA6XFx0XFx0aW93cml0ZTgoaXJxX21hc2tfYWxsLCBcXHUwMDI2bmljLVxcdTAwM2Vjc3ItXFx1MDAzZXNjYi5jbWRfaGkpO1xcbiA2MzE6XFx0XFx0ZTEwMF93cml0ZV9mbHVzaChuaWMpO1xcbiA2MzI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MzM6XFx0fVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHRzdGF0aWMgdm9pZCBlMTAwX2h3X3Jlc2V0KHN0cnVjdCBuaWMgKm5pYylcXG4gNjM2OlxcdHtcXG4gNjM3OlxcdFxcdC8qIFB1dCBDVSBhbmQgUlUgaW50byBpZGxlIHdpdGggYSBzZWxlY3RpdmUgcmVzZXQgdG8gZ2V0XFxuIDYzODpcXHRcXHQgKiBkZXZpY2Ugb2ZmIG9mIFBDSSBidXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjI6MTcuMDI5NDAwMDc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY0NTU4MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZTEwMCBEcml2ZXIgRUVQUk9NIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGUxMDBgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYGFkZHJfbGVuYCBhbmQgaG93IGl0J3MgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBib3VuZHMgY2hlY2tpbmcgdG8gYGFkZHJfbGVuYCBpbiB0aGUgYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgZnVuY3Rpb25zLiBTZWVtcyBsaWtlIHRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIG91dCBvZiB3aGFjay5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZTEwMF9lZXByb21fcmVhZGAsIGBhZGRyX2xlbmAgaXMgbW9kaWZpZWQgYmFzZWQgb24gc29tZSBFRVBST00gY29udHJvbCBiaXRzIGFuZCBhbiBpdGVyYXRpb24gY291bnRlci4gSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjaywgYW5kIGlmIGEgY2VydGFpbiBjb25kaXRpb24gaXMgbWV0LCBgYWRkcl9sZW5gIGdldHMgcmVkdWNlZC4gTXkgY29uY2VybiBpcywgdGhhdCB0aGVyZSBpcyBhIGNoZWNrIGlmIGBsZW4gXHUwMDNlICphZGRyX2xlbmAsIGluIHdoaWNoIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYCphZGRyX2xlbiA9IDA7YCBicmVha3MgdGhlIGxvb3AuIEluIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCwgaXQgY2hlY2tzIGlmIGBhZGRyX2xlbmAgaXMgemVybywgb3IgZ3JlYXRlciB0aGFuIDgsIGFuZCByZXR1cm5zIGFuIGVycm9yLiBUaGUga2V5IGlzIGluIGhvdyBgYWRkcl9sZW5gIGlzIHVzZWQuXG5cbkkgaW1tZWRpYXRlbHkgc2VlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUuIFRoZSBjb2RlIHJlYWRzIGBhZGRyX2xlbmAgYW5kIHRoZW4gY2FsY3VsYXRlcyBgbmljLVx1MDAzZWVlcHJvbV93YyA9IDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYC4gSWYgYGFkZHJfbGVuYCBiZWNvbWVzIHRvbyBsYXJnZSwgdGhpcyBiaXQtc2hpZnQgb3BlcmF0aW9uIGNvdWxkIHJlc3VsdCBpbiBhIG1hc3NpdmUgbnVtYmVyIG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gSWYgYGFkZHJfbGVuYCBiZWNvbWVzIDEwIChvciBsYXJnZXIpLCB0aGVuIGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgaXMgMTAyNCwgd2hpY2ggaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBgbmljLVx1MDAzZWVlcHJvbWAgYXJyYXksIHdoaWNoIGlzIG9ubHkgc2l6ZSAyNTYuIFRoaXMgbWVhbnMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpcyBnb2luZyB0byBoYXBwZW4uXG5cbmBuaWMtXHUwMDNlZWVwcm9tX3djYCBjb250cm9scyB0aGUgbG9vcCBib3VuZCBmb3IgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEuIFRoZSBjb2RlIGl0ZXJhdGVzIHVwIHRvIGBuaWMtXHUwMDNlZWVwcm9tX3djYCwgd3JpdGluZyB0byBgbmljLVx1MDAzZWVlcHJvbVthZGRyXWAuIElmIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBleGNlZWRzIDI1NiwgaXQncyBhIGd1YXJhbnRlZWQgb3V0LW9mLWJvdW5kcyB3cml0ZS4gQmluZ28hIENsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGNhdWdodCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKS5cblxuTm93LCBsZXQgbWUgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaXNzdWUgdG8gZG8gd2l0aCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSB2aWEgZXRodG9vbC4gV2VsbCwgdGhlIHBhdGNoIHJlc3RyaWN0cyBgYWRkcl9sZW5gIHRvIGJlIFx1MDAzYz0gOC4gTWVhbmluZywgdGhhdCBgZWVwcm9tX3djIFx1MDAzYz0gMjU2YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIHJlYWQgaXMgYW4gaXNzdWUuIFRoZSBjb3JlIGZpeCBpcyBwcmV2ZW50aW5nIGBhZGRyX2xlbmAgZnJvbSBiZWNvbWluZyBhIGh1Z2UgbnVtYmVyLCBsZWFkaW5nIHRvIGFuIE9PQiBhY2Nlc3MuXG5cbldhaXQsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCEgSWYgYGFkZHJfbGVuYCBpcyByZWR1Y2VkIGJ5IHRvbyBtdWNoLCBjb3VsZCBpdCB3cmFwIGFyb3VuZD8gWWVzLCB0aGUgYCphZGRyX2xlbiAtPSBsZW5gIGNvdWxkIHVuZGVyZmxvdywgbGVhZGluZyB0byBsYXJnZSBgYWRkcl9sZW5gLiBBaCwgYnV0IGBlMTAwX2VlcHJvbV9sb2FkYCBhY3R1YWxseSBpbml0aWFsaXplcyBgYWRkcl9sZW5gIHRvIDggYW5kIHRoZW4gaXQncyB1c2VkIGluIGBlMTAwX2VlcHJvbV9yZWFkYC4gSWYgYW4gdW5kZXJmbG93IGhhcHBlbnMsIHRoZW4gYDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYCByZXN1bHRzIGluIGEgaHVnZSBudW1iZXIuXG5cblRoZSB0aGluZyBpcywgYGFkZHJfbGVuYCBpcyBgdTE2YC4gSWYgaXQgYmVjb21lcyA2NTUzNSwgYDEgXHUwMDNjXHUwMDNjIDY1NTM1YCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gVGhhdCdzIGEgc2hpZnQgY291bnQgdGhhdCdzIHRvbyBsYXJnZSwgYnV0IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU0FOaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy5cblxuU28sIGZvciBleGFtcGxlLCBsZXQncyBzYXkgYGFkZHJfbGVuYCBiZWNvbWVzIDEwLiBUaGVuIGBuaWMtXHUwMDNlZWVwcm9tX3djID0gMTAyNGAsIGFuZCB3cml0aW5nIHVwIHRvIDEwMjQgdG8gYW4gYXJyYXkgb2Ygc2l6ZSAyNTYgaXMgYW4gT09CIHdyaXRlLiBUaGlzIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5Ob3csIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpc3N1ZT8gTm8sIHRoaXMgaXMgYW4gT09CIHdyaXRlIGR1ZSB0byBhIGJpdCBzaGlmdCB0aGF0IGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgdGhhdCBLQVNBTiBhbmQgVUJTQU4gYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLiBObyBtZW1vcnkgbGVha3Mgb3IgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IEtNU0FOIHNwZWNpYWxpemVzIGluLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBzaGlmdCB0aGF0IGNhbiBiZSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gLiBJZiBgYWRkcl9sZW5gIGlzIGxhcmdlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBleGNlZWRzIHRoZSBzaXplIG9mIGBuaWMtXHUwMDNlZWVwcm9tYC4gS0FTQU4gZGV0ZWN0cyB0aGUgYnVmZmVyIG92ZXJmbG93LCBVQlNBTiBkZXRlY3RzIHRoZSB1bmRlZmluZWQgYml0LXNoaWZ0LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrLCB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDI3LCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMjo0Ny4xOTM5NjQ0OThaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXFx1MDAzZWVlcHJvbV93Y2Agd291bGQgZXhjZWVkIHRoZSAyNTYtZWxlbWVudCBzaXplIG9mIHRoZSBgbmljLVxcdTAwM2VlZXByb21gIGFycmF5LCBsZWFkaW5nIHRvIGEgYnVmZmVyIG92ZXJmbG93IGR1cmluZyB0aGUgRUVQUk9NIHJlYWQgbG9vcC4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gQWRkaXRpb25hbGx5LCB0aGUgc2hpZnQgYDEgXFx1MDAzY1xcdTAwM2MgYWRkcl9sZW5gIHdpdGggYSBsYXJnZSBgYWRkcl9sZW5gIGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgd2hpY2ggaXMgY2F1Z2h0IGJ5IFVCU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gIHJlYWQgZnJvbSB0aGUgRUVQUk9NLiBJZiBgYWRkcl9sZW5gIHdhcyBncmVhdGVyIHRoYW4gOCwgYG5pYy1cXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXFx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvtnh7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 09:55:49 +0000 UTC FinishedAt: 2026-08-20 10:22:49 +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": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E100" ], "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": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E100" ], "series_id": "ecd03f40-5ec8-4a9c-be98-e75dc18e14a8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "e100_probe", "e100_set_eeprom", "e100_diag_test" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O2UxMDBfc2V0X2VlcHJvbSYjMzQ7LAogICAgJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTM4NGVjMGZmNTU0N2MyNzE3ODQxYTU1MjM1YjhkYzgzNWY0NzZmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEwOjIwOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuaW5kZXggMjk5NjA3NjJlNjRhOC4uY2Q4MTkwMzg2NjUyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXG5AQCAtNzQ0LDcgJiM0Mzs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4mIzQzO1x0XHRcdHUxNiBsZW4gPSBpIC0gMTY7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbiYjNDM7XHRcdFx0XHQqYWRkcl9sZW4gPSAwO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHQqYWRkcl9sZW4gLT0gbGVuO1xuIFx0XHRcdGkgPSAxNztcbiBcdFx0fVxuIFxuQEAgLTc2NSw3ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgYWRkcl9sZW4pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0Zm9yIChhZGRyID0gMDsgYWRkciBcdTAwM2MgbmljLVx1MDAzZWVlcHJvbV93YzsgYWRkciYjNDM7JiM0MzspIHtcbiBcdFx0bmljLVx1MDAzZWVlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgYWRkcik7XG5AQCAtNzkxLDcgJiM0Mzs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgYWRkcl9sZW4pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0aWYgKHN0YXJ0ICYjNDM7IGNvdW50IFx1MDAzZT0gbmljLVx1MDAzZWVlcHJvbV93YylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O2UxMDBfc2V0X2VlcHJvbSYjMzQ7LAogICAgJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBFRVBST00gcmVhZCwgbG9hZCwgYW5kIHNhdmUgZnVuY3Rpb25zIGluIHRoZSBlMTAwIGRyaXZlciB0byBwcmV2ZW50IHVuZGVyZmxvdyBhbmQgb3V0LW9mLWJvdW5kcyBzaGlmdHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIHZpYSBldGh0b29sIGlvY3RscyAoc2V0X2VlcHJvbSwgc2VsZl90ZXN0KS4gVGhlIGUxMDAgZHJpdmVyIGlzIGZvciBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IGNhcmRzLCB3aGljaCBhcmUgZW11bGF0ZWQgYnkgUUVNVSAoZS5nLiwgaTgyNTU3YiwgaTgyNTU5ZXIpLCBtYWtpbmcgdGhlc2UgcGF0aHMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKaW5kZXggMjk5NjA3NjJlNjRhOC4uY2Q4MTkwMzg2NjUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwpAQCAtNzQ0LDcgJiM0Mzs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpCiAJCSAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovCiAJCWN0cmwgPSBpb3JlYWQ4KCZhbXA7bmljLSZndDtjc3ItJmd0O2VlcHJvbV9jdHJsX2xvKTsKIAkJaWYgKCEoY3RybCAmYW1wOyBlZWRvKSAmYW1wOyZhbXA7IGkgJmd0OyAxNikgewotCQkJKmFkZHJfbGVuIC09IChpIC0gMTYpOwomIzQzOwkJCXUxNiBsZW4gPSBpIC0gMTY7CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiAmZ3Q7ICphZGRyX2xlbikgewomIzQzOwkJCQkqYWRkcl9sZW4gPSAwOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJKmFkZHJfbGVuIC09IGxlbjsKIAkJCWkgPSAxNzsKIAkJfQogCkBAIC03NjUsNyAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKQogCiAJLyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi8KIAllMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgMCk7Ci0JbmljLSZndDtlZXByb21fd2MgPSAxICZsdDsmbHQ7IGFkZHJfbGVuOwomIzQzOwomIzQzOwlpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuICZndDsgOCkgewomIzQzOwkJbmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgJiMzNDtJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxuJiMzNDssCiYjNDM7CQkJICBhZGRyX2xlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwluaWMtJmd0O2VlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTsKIAogCWZvciAoYWRkciA9IDA7IGFkZHIgJmx0OyBuaWMtJmd0O2VlcHJvbV93YzsgYWRkciYjNDM7JiM0MzspIHsKIAkJbmljLSZndDtlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgYWRkcik7CkBAIC03OTEsNyAmIzQzOzgwNiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX3NhdmUoc3RydWN0IG5pYyAqbmljLCB1MTYgc3RhcnQsIHUxNiBjb3VudCkKIAogCS8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovCiAJZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIDApOwotCW5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiAmZ3Q7IDgpIHsKJiM0MzsJCW5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcbiYjMzQ7LAomIzQzOwkJCSAgYWRkcl9sZW4pOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmljLSZndDtlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7CiAKIAlpZiAoc3RhcnQgJiM0MzsgY291bnQgJmd0Oz0gbmljLSZndDtlZXByb21fd2MpCiAJCXJldHVybiAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgRHJpdmVyIENvZGUgaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2AgZmlsZS4gSXQmIzM5O3MgZm9yIHRoZSBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IGRyaXZlciwgYSBkcml2ZXIgSSYjMzk7bSBxdWl0ZSBmYW1pbGlhciB3aXRoLCBzbyB0aGUgY29kZSBpdHNlbGYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRyaWdnZXIgdGhlc2UgbmV3IGNoZWNrcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PwoKSSBrbm93IFFFTVUgc3VwcG9ydHMgdGhlIGBpODI1NTdiYCwgYGk4MjU1OWVyYCwgYW5kIGBpODI1NTljYCB3aGljaCBhbGwgZW11bGF0ZSB0aGUgZTEwMCBmYW1pbHkgb2YgTklDcy4gVGhhdCYjMzk7cyBnb29kLCBzbyB0aGUgaGFyZHdhcmUgc3VwcG9ydCBpcyB0aGVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBzZWUgaWYgYGUxMDBfZWVwcm9tX2xvYWRgIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gSSByZWNhbGwgYGUxMDBfZWVwcm9tX2xvYWRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIHByb2JlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeSB0byB0cmlnZ2VyLiBOb3csIHdoYXQgYWJvdXQgYGUxMDBfZWVwcm9tX3NhdmVgPyBBaCwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBldGh0b29sIG9wZXJhdGlvbnMsIGlzbiYjMzk7dCBpdD8gU28sIHRoYXQgaW1wbGllcyB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgdXNlciBzcGFjZSB1dGlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZXRodG9vbCBjb21tYW5kIG9yIHNlcXVlbmNlIHRvIHRyaWdnZXIgdGhhdCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpdmUgaW50byBgZTEwMC5jYCBhbmQgY29uZmlybSB3aGVyZSBgZTEwMF9lZXByb21fc2F2ZWAgaXMgYWN0dWFsbHkgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX2VlcHJvbV9zYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz03Njk9c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODAyLS8qIFNhdmUgKHBvcnRpb24gb2YpIGRyaXZlciBFRVBST00gY2FjaGUgdG8gZGV2aWNlIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo4MDM6c3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODA0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjU2Nj1zdGF0aWMgaW50IGUxMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI1NzY6XHRyZXR1cm4gZTEwMF9lZXByb21fc2F2ZShuaWMsIGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDNlXHUwMDNlIDEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU3Ny1cdFx0KGVlcHJvbS1cdTAwM2VsZW4gXHUwMDNlXHUwMDNlIDEpICYjNDM7IDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEUxMDAgRHJpdmVyIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGUxMDBgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBRRU1VJiMzOTtzIGdvdCBhbiBlMTAwIGVtdWxhdGlvbiwgd2hpY2ggaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gSWYgd2UgY2FuIHJlYWNoIGl0LCB0aGVuIHdlIGNhbiBoaXQgaXQgd2l0aCBvdXIgb3duIGlucHV0cyBhbmQgc2VlIHdoYXQgd2UgY2FuIGJyZWFrLiBBbmQgaGV5LCBldGh0b29sIG9wcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZCwgd2hpY2ggY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGV4cGxvaXRhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZ2V0IHRob3NlIHRvIHRhbGsgdG8gdGhlIGVtdWxhdGVkIGRyaXZlci4KCkZpcnN0IHRoaW5nLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciBgZTEwMGAuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBUaGF0JiMzOTtsbCB0ZWxsIHVzIGlmIGl0JiMzOTtzIGV2ZW4gY29tcGlsZWQgaW4sIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGF0dGFja2luZyB0aGUgcmlnaHQgdGFyZ2V0LCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbGFuZHNjYXBlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFMTAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAmIzQzOyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NjE6Y29uZmlnIEUxMDAwRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAwIFBDSS1FeHByZXNzIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjgxOmNvbmZpZyBFMTAwMEVfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gUENIIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRTEwMCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGlzIGBFMTAwYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHByYWN0aWNlIHRvIHN0YXJ0IHRoZXJlLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcmVsaWVzIG9uIOKAkyBpdHMgYnVpbGRpbmcgYmxvY2tzLiBXaGF0IG90aGVyIHN5c3RlbXMsIGxpYnJhcmllcywgb3IgY29tcG9uZW50cyBpcyBpdCB0aWVkIHRvPyBBIHF1aWNrIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBpcyBlc3NlbnRpYWwuIFdpdGhvdXQga25vd2luZyB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcyB1c2luZywgSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLiBEZXBlbmRlbmN5IG1hcHBpbmcgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHN5c3RlbSBhbmFseXNpcyBhbmQgSSBqdXN0IG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRTEwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMD1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliaWUvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI6Y29uZmlnIEUxMDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwJiM0Mzsgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjQ1OmNvbmZpZyBFMTAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAwIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzo4MTpjb25maWcgRTEwMDBFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODItXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIFBDSCBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEUxMDAgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgRTEwMCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBFMTAwIGRyaXZlciBpcyBzdHJ1Y3R1cmVkIOKAkyB3aGF0IGFyZSB0aGUgbWFpbiBDT05GSUcgc3ltYm9scywgYXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgbmV0d29yayBkcml2ZXJzIG9yIGhhcmR3YXJlIHN1cHBvcnQ/IE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgYnVpbGQgZmxhZ3MsIGVzcGVjaWFsbHkgdGhvc2UgaW5mbHVlbmNpbmcgZmVhdHVyZXMgbGlrZSBETUEgaGFuZGxpbmcsIGludGVycnVwdCBtb2RlcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gQW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciBoYXJkd2FyZSByZXZpc2lvbnMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBPbmNlIEkgaGF2ZSBhIGdvb2QgaGlnaC1sZXZlbCBncmFzcCwgSSB3aWxsIGxvb2sgdG8gc2VlIGhvdyB0aG9zZSBzeW1ib2xzIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIyOlx0Y29uZmlnIEUxMDBcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIFBSTy8xMDAmIzQzOyBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAyNTpcdFx0c2VsZWN0IE1JSVxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQUk8vMTAwIGZhbWlseSBvZiBhZGFwdGVycy5cbiAgMjg6XHRcdCAgVG8gdmVyaWZ5IHRoYXQgeW91ciBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyXG4gIDI5Olx0XHQgIG9uIHRoZSBhZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXJcbiAgMzA6XHRcdCAgaW4gdGhlIGZvcm1hdCAxMjM0NTYtMDAxIChzaXggZGlnaXRzIGh5cGhlbiB0aHJlZSBkaWdpdHMpLlxuICAzMTpcdFxuICAzMjpcdFx0ICBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGFuZCB0aGUgQWRhcHRlciBcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcbiAgMzM6XHRcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XG4gIDM0Olx0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVx1MDAzZVxuICAzNjpcdFxuICAzNzpcdFx0ICB0byBpZGVudGlmeSB0aGUgYWRhcHRlci5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDQwOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAucnN0XHUwMDNlLlxuICA0MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRTEwMCBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYEUxMDBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBzeXN0ZW0uIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBQQ0lgIGFuZCBgTUlJYCwgYW5kIGBNSUlgIGlzIGN1cnJlbnRseSBhY3RpdmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBzdGFnZSBmb3Igd2hhdCBJIHNob3VsZCBiZSBsb29raW5nIGF0LgoKTm93LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgRUVQUk9NIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAuIEl0JiMzOTtzIHdvcnRoIG5vdGluZyB0aGVzZSBhcmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gdGhlIGNvbnRleHQuIFRoaXMgbWVhbnMgdGhhdCBJIG5vdyBuZWVkIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNjb3BlIHRoYXQgbWlnaHQgYmUgY2FsbGluZyB0aGVzZSBzcGVjaWZpYyBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IGlzIHdoZXJlIHRoZSBrZXkgdW5kZXJzdGFuZGluZyB3aWxsIGxpZS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfZWVwcm9tX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTcyMT1zdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNzY4LS8qIExvYWQgZW50aXJlIEVFUFJPTSBpbWFnZSBpbnRvIGRyaXZlciBjYWNoZSBhbmQgdmFsaWRhdGUgY2hlY2tzdW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo3Njk6c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy03NzAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjMwPXN0YXRpYyB2b2lkIGUxMDBfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MzgtXHRkYXRhWzBdID0gIW1paV9saW5rX29rKFx1MDAyNm5pYy1cdTAwM2VtaWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2Mzk6XHRkYXRhWzFdID0gZTEwMF9lZXByb21fbG9hZChuaWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2NDAtXHRpZiAodGVzdC1cdTAwM2VmbGFncyBcdTAwMjYgRVRIX1RFU1RfRkxfT0ZGTElORSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yODUzPXN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjk0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyOTQ0Olx0aWYgKChlcnIgPSBlMTAwX2VlcHJvbV9sb2FkKG5pYykpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI5NDUtXHRcdGdvdG8gZXJyX291dF9mcmVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgZTEwMCBEcml2ZXImIzM5O3MgRUVQUk9NIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGUxMDAgbmV0d29yayBkcml2ZXIgaGFuZGxlcyBpdHMgRUVQUk9NIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGNydWNpYWwgdG8gZ2V0IHRoaXMgcmlnaHQgZm9yIHByb3BlciBOSUMgb3BlcmF0aW9uLiBJIHNlZSB0aGF0IHRoZSBgZTEwMF9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBpbml0aWFsIGRpc2NvdmVyeSBhbmQgc2V0dXAgcm91dGluZSwgcmVsaWVzIG9uIGBlMTAwX2VlcHJvbV9sb2FkYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgcHJvYmUgbmVlZHMgdGhlIEVFUFJPTSBkYXRhIHRvIGluaXRpYWxpemUgaXRzZWxmLCBsb2FkIE1BQyBhZGRyZXNzLCBhbmQgcG9zc2libHkgb3RoZXIgZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gIFRoZW4gSSBzZWUgYGUxMDBfZGlhZ190ZXN0YCBhbHNvIGNhbGxzIGBlMTAwX2VlcHJvbV9sb2FkYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7ICB0aGUgZGlhZ25vc3RpYyBmdW5jdGlvbiBuZWVkcyB0byBwdWxsIHRoZSBzYW1lIEVFUFJPTSBkYXRhIGFzIHRoZSBkcml2ZXIgZm9yIGRpYWdub3N0aWMgdGVzdGluZy4gQnV0IGJvdGggYXJlIHVzaW5nIHRoZSBsb2FkIGZ1bmN0aW9uLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UsIHRob3VnaCwgaXMgYGUxMDBfc2V0X2VlcHJvbWAuIFRoaXMgZnVuY3Rpb24sIHByZXN1bWFibHkgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBFRVBST00sIGNhbGxzIGBlMTAwX2VlcHJvbV9zYXZlYC4gIFNvIGBlMTAwX3NldF9lZXByb21gIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHNhdmUgRUVQUk9NIGRhdGEsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBpbXBsZW1lbnQgc29tZSBmdW5jdGlvbnMgbGlrZSBzZXR0aW5nIHRoZSBNQUMgYWRkcmVzcy4gU2VlbXMgY29uc2lzdGVudCB3aXRoIGhvdyB0aGVzZSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQgaW4gb3RoZXIgTklDIGRyaXZlcnMgSSYjMzk7dmUgd29ya2VkIG9uLiBJJiMzOTttIGtlZXBpbmcgdGhpcyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZHJpdmVyJiMzOTtzIGludGVybmFsczsgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgZGV2aWNlJiMzOTtzIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiwgYW5kIGFueSBpc3N1ZXMgaGVyZSBjYW4gY2F1c2UgbWFqb3IgaGVhZGFjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX3NldF9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2Ny1cdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVx0LmdldF9lZXByb21cdFx0PSBlMTAwX2dldF9lZXByb20sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3MTpcdC5zZXRfZWVwcm9tXHRcdD0gZTEwMF9zZXRfZWVwcm9tLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGUxMDAgRHJpdmVyIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBlMTAwYCBkcml2ZXIgYW5kIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvcmUgZW50cnkgcG9pbnRzLiBJdCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMgYXJlIGBlMTAwX3Byb2JlYCBhbmQgYGUxMDBfc2V0X2VlcHJvbWAuIGBlMTAwX3Byb2JlYCBpcyBjbGVhcmx5IHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgZHJpdmVyIGxpZmVjeWNsZS4gSXQmIzM5O3MgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhhdCBtYWtlcyBzZW5zZS4gYGUxMDBfc2V0X2VlcHJvbWAgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24sIHRyaWdnZXJlZCBieSBhIHVzZXIgc3BhY2UgdG9vbCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYXMgd2VsbC4KCkhtbSwgYnV0IHdhaXQuIEkganVzdCByZWFsaXplZCBgZTEwMF9zZXRfZWVwcm9tYCBpcyBhY3R1YWxseSAqc3RhdGljKi4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIHllcCwgY29uZmlybWVkLCBpdCYjMzk7cyBzdGF0aWMuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljLCB0aGVyZSBpcyBubyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpZiBpdCYjMzk7cyBpbmxpbmVkLiBCdXQgd2FpdCwgc2luY2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCBjYW4mIzM5O3QgYmUgaW5saW5lZC4KClRoZSBldGh0b29sIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGUxMDBfcHJvYmVgLiBTbyB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBlMTAwX2V0aHRvb2xfb3BzYCBpcyBhbHNvIHN0YXRpYy4gU28gdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSBgZTEwMF9wcm9iZWAgYW5kIHRob3NlIGV0aHRvb2wgaW9jdGxzLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIGhhdmUgdG8gY2hvb3NlIGVudHJ5IHBvaW50cyB3aGljaCBhcmUgKm5vdCogc3RhdGljLCBpZiBwb3NzaWJsZS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgYGUxMDBfcHJvYmVgIGlzIGFsc28gc3RhdGljLiBBbmQgeWVzLCBpdCBpcy4gV2VsbCwgdGhhdCYjMzk7cyBub3QgaWRlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI4Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlMTAwX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI4NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjg1MzpzdGF0aWMgaW50IGUxMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTMxOTM9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGUxMDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0zMTk1LVx0LmlkX3RhYmxlID0gICAgIGUxMDBfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcdC5wcm9iZSA9ICAgICAgICBlMTAwX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTMxOTctXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGUxMDAgRHJpdmVyIENvZGUqKgoKT2theSwgc28gYGUxMDBfcHJvYmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8gbm90ZS4gSW4gZmFjdCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgbG9va2luZyBhdCB0aGUgYGUxMDAuY2AgZmlsZSBhZ2FpbiwgYWxsIHRoZSBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZSwgYXJlIHN0YXRpYywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHRoZSBtb2R1bGUgaXRzZWxmOiBgaW5pdF9tb2R1bGVgIGFuZCBgY2xlYW51cF9tb2R1bGVgIOKAkyBvciwgYXMgaXQmIzM5O3Mgb2Z0ZW4gYWxpYXNlZCwgYGUxMDBfaW5pdF9tb2R1bGVgLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3Iga2VybmVsIG1vZHVsZXMuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIGV4aGF1c3RpdmUsIGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIExldCYjMzk7cyBtYWtlIGEgcXVpY2sgcGFzcyB0byB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGJlIHVuZXhwZWN0ZWQuIFlvdSBuZXZlciBrbm93IHdoYXQgbWlnaHQgYmUgbHVya2luZyBpbiBsZWdhY3kgY29kZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byBoYXZlIGEgY2xlYW4sIGNvbnRyb2xsZWQgaW50ZXJmYWNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgZ290IG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBgXnZvaWQgYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhhdCBgXnZvaWQgYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgbWVhbiBhIGZldyB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gSWYgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcG9pbnRlcnMsIGEgY2FyZXQgcHJlY2VkaW5nIGB2b2lkYCBjb3VsZCBpbmRpY2F0ZSBhIHBvaW50ZXIgdG8gYW4gdW5kZWZpbmVkIHR5cGUg4oCTIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgYSBiYWQgc2lnbiwgc3VnZ2VzdGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBJIHNhdyB0aGlzLiAKCklzIHRoaXMgaW4gYSBmdW5jdGlvbiBzaWduYXR1cmUsIGEgdmFyaWFibGUgZGVjbGFyYXRpb24sIG9yIHNvbWV3aGVyZSBlbHNlPyBCZWNhdXNlIGlmIGl0JiMzOTtzIGEgZnVuY3Rpb24gcmV0dXJuIHR5cGUsICBgXnZvaWQgYCBjb3VsZCBiZSBhIGJpdCBtaXNsZWFkaW5nLiAgV2hpbGUgdGVjaG5pY2FsbHkgYSBmdW5jdGlvbiAqY2FuKiByZXR1cm4gYSBwb2ludGVyIHRvIGB2b2lkYCAsIHlvdSYjMzk7ZCBiZSBtb3JlIGxpa2VseSB0byBzZWUgdGhlIHByb3BlciBwb2ludGVyIG5vdGF0aW9uIGB2b2lkICpgIGRpcmVjdGx5LiBUaGF0IHVzYWdlIGlzIHBvc3NpYmxlIGJ1dCByYXJlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGEgbGlicmFyeSBvciBjb2RpbmcgY29udmVudGlvbiB0aGF0IHVzZXMgdGhhdC4KClNvLCBmaXJzdCBJIG5lZWQgdG8gc2VlIG1vcmUgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIHRoZSBjYXJldCByYWlzZXMgYSBmbGFnLCBidXQgd2l0aG91dCB0aGF0IGNvbnRleHQsIHRoaXMgaXMgYSBwdXp6bGUgYW5kIG5vdCBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVsIGUxMDAgRHJpdmVyIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGUxMDAgZHJpdmVyIGNvZGUuIEl0IGxvb2tzIGxpa2UgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHN5bWJvbCB2aXNpYmlsaXR5IHN0YW5kcG9pbnQuIEdpdmVuIHRoaXMsIEkgY2FuIHplcm8gaW4gb24gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9zZXRfZWVwcm9tYCBhcyBteSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QsIGJlY2F1c2UgdGhleSBhcmVuJiMzOTt0IGlubGluZWQgLSB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBnaXZlcyB0aGVtIGV4dGVybmFsIGxpbmthZ2UuCgpOb3csIGEgcXVpY2sgc2Nhbi4uLiBhaGEhIEkgc2VlIHRoYXQgYGUxMDBfZWVwcm9tX2xvYWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgZTEwMF9wcm9iZWAgYW5kIGFsc28gYGUxMDBfZGlhZ190ZXN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBlMTAwX2RpYWdfdGVzdGAgaXMgYWxzbyBhbiBldGh0b29sIG9wZXJhdGlvbiwgcmlnaHQ/IFNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIGBlMTAwX2RpYWdfdGVzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjIxPXN0YXRpYyBjb25zdCBjaGFyIGUxMDBfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjYzMDpzdGF0aWMgdm9pZCBlMTAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MzEtXHRzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzczLVx0LnNldF9yaW5ncGFyYW1cdFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3NDpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzc1LVx0LmdldF9zdHJpbmdzXHRcdD0gZTEwMF9nZXRfc3RyaW5ncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZWwgUFJPLzEwMCYjNDM7IERyaXZlciBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZTEwMF9wcm9iZWAsIGBlMTAwX3NldF9lZXByb21gLCBhbmQgYGUxMDBfZGlhZ190ZXN0YCBzZWVtIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgaGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJlZmVycmVkIGNvZGluZyBzdHlsZSBpcyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCB0aG91Z2ggaXQgc2VlbXMgbGlrZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBzbyBJIHdpbGwgcHJpb3JpdGl6ZSBvbmVzIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gZ3VhcmFudGVlIHRoZXkgYXJlIGVudHJ5IHBvaW50cy4gRmlyc3QgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgRTEwMGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgZm9yIHRoaXMgbW9kdWxlLgoKT2theSwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2hvd3M6CgpgYGAKY29uZmlnIEUxMDAKCXRyaXN0YXRlICYjMzQ7SW50ZWwoUikgUFJPLzEwMCYjNDM7IHN1cHBvcnQmIzM0OwoJZGVwZW5kcyBvbiBQQ0kKCXNlbGVjdCBNSUkKYGBgCgpTbyBgRTEwMGAgaXMgZW5vdWdoLiBHcmVhdC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCBhcmVuJiMzOTt0IGlubGluZWQgYW5kIGFyZSBzdGF0aWMuIEkgc2VlIHRoYXQgdGhleSBhcmUgc3RhdGljLiBgZTEwMF9lZXByb21fbG9hZGAgaXMgY2FsbGVkIGZyb20gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9kaWFnX3Rlc3RgLiBJdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaXQmIzM5O3MgYSBiaXQgbGFyZ2Ugc28gbWF5YmUgbm90LiBgZTEwMF9lZXByb21fc2F2ZWAgaXMgY2FsbGVkIGZyb20gYGUxMDBfc2V0X2VlcHJvbWAuIFNvLCBiZXR0ZXIgZm9jdXMgb24gYGUxMDBfcHJvYmVgLCBgZTEwMF9zZXRfZWVwcm9tYCwgYW5kIGBlMTAwX2RpYWdfdGVzdGAuCgpXYWl0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2g6CmBgYGMKQEAgLTc0NCw3ICYjNDM7NzQ0LDE0IEBAIHN0YXRpYyBfX2xlMTYgZTEwMF9lZXByb21fcmVhZChzdHJ1Y3QgbmljICpuaWMsIHUxNiAqYWRkcl9sZW4sIHUxNiBhZGRyKQogCQkgKiBjb21wbGV0ZSBhZGRyZXNzLiAgVXNlIHRoaXMgdG8gYWRqdXN0IGFkZHJfbGVuLiAqLwogCQljdHJsID0gaW9yZWFkOCgmYW1wO25pYy0mZ3Q7Y3NyLSZndDtlZXByb21fY3RybF9sbyk7CiAJCWlmICghKGN0cmwgJmFtcDsgZWVkbykgJmFtcDsmYW1wOyBpICZndDsgMTYpIHsKLQkJCSphZGRyX2xlbiAtPSAoaSAtIDE2KTsKJiM0MzsJCQl1MTYgbGVuID0gaSAtIDE2OwomIzQzOwomIzQzOwkJCWlmIChsZW4gJmd0OyAqYWRkcl9sZW4pIHsKJiM0MzsJCQkJKmFkZHJfbGVuID0gMDsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCSphZGRyX2xlbiAtPSBsZW47CiAJCQlpID0gMTc7CiAJCX0KIApAQCAtNzY1LDcgJiM0Mzs3NzIsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYykKIAogCS8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovCiAJZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIDApOwotCW5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiAmZ3Q7IDgpIHsKJiM0MzsJCW5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICYjMzQ7SW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcbiYjMzQ7LAomIzQzOwkJCSAgYWRkcl9sZW4pOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmljLSZndDtlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7CiAKIAlmb3IgKGFkZHIgPSAwOyBhZGRyICZsdDsgbmljLSZndDtlZXByb21fd2M7IGFkZHImIzQzOyYjNDM7KSB7CiAJCW5pYy0mZ3Q7ZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsICZhbXA7YWRkcl9sZW4sIGFkZHIpOwpAQCAtNzkxLDcgJiM0Mzs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpCiAKIAkvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqLwogCWUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCAwKTsKLQluaWMtJmd0O2VlcHJvbV93YyA9IDEgJmx0OyZsdDsgYWRkcl9sZW47CiYjNDM7CiYjNDM7CWlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gJmd0OyA4KSB7CiYjNDM7CQluZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAmIzM0O0ludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XG4mIzM0OywKJiM0MzsJCQkgIGFkZHJfbGVuKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwogCiAJaWYgKHN0YXJ0ICYjNDM7IGNvdW50ICZndDs9IG5pYy0mZ3Q7ZWVwCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODU0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTMxOTUtXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzozMTk2Olx0LnByb2JlID0gICAgICAgIGUxMDBfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cdC5yZW1vdmUgPSAgICAgICBlMTAwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBlMTAwYCBEcml2ZXIqKgoKQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIHJpZ2h0LiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyB0aGUgYGUxMDBfcHJvYmVgIGZ1bmN0aW9uIGlzIHNvbGlkOyB0aGF0IGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zIGZvciBob3cgdGhlIGRyaXZlciBzaG91bGQgaGFuZGxlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiBhbmQgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byB0aGUgYGUxMDBfc2V0X2VlcHJvbWAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIGRlbHZlIGludG8gdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcnNpc3RlbnQgc2V0dGluZ3MgYW5kIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgRUVQUk9NIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX3NldF9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2Ny1cdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVx0LmdldF9lZXByb21cdFx0PSBlMTAwX2dldF9lZXByb20sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc3MTpcdC5zZXRfZWVwcm9tXHRcdD0gZTEwMF9zZXRfZWVwcm9tLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEUxMDAgRHJpdmVyIEZ1bmN0aW9uYWxpdHkqKgoKUmlnaHQsIHNvIGBlMTAwX3NldF9lZXByb21gLi4uIHllcCwgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uLiBHb29kLCB0aGF0JiMzOTtzIG9uZSBjb25maXJtZWQuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZTEwMF9kaWFnX3Rlc3RgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkaWFnbm9zdGljIHRlc3RzLiBJIHdhbnQgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGNoZWNrLiBBbHdheXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QgcHJvdG9jb2xzLiBOZWVkIHRvIGtub3cgdGhlIGJyZWFkdGggYW5kIGRlcHRoIG9mIHRoZSBzZWxmLWRpYWdub3N0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlMTAwX2RpYWdfdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjYyMT1zdGF0aWMgY29uc3QgY2hhciBlMTAwX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2MzA6c3RhdGljIHZvaWQgZTEwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjMxLVx0c3RydWN0IGV0aHRvb2xfdGVzdCAqdGVzdCwgdTY0ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3My1cdC5zZXRfcmluZ3BhcmFtXHRcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzQ6XHQuc2VsZl90ZXN0XHRcdD0gZTEwMF9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3NS1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDBfZ2V0X3N0cmluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODc1CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlhZ25vc3RpY3MgYW5kIFJlcG9ydGluZyBQcm90b2NvbCoqCgpSaWdodCwgYGUxMDBfZGlhZ190ZXN0YCBpcyB0aGUgY29ycmVjdCBkaWFnbm9zdGljIHByb2NlZHVyZSB0byBiZSBydW5uaW5nLiBHb29kLiBOb3csIHRoYXQgdGVzdCBzaG91bGQgcHJvdmlkZSB0aGUgZGF0YSBJIG5lZWQgdG8uLi4gKmFoYSosIHllcywgSSByZW1lbWJlciBub3cuIEkgbmVlZCB0byB1dGlsaXplIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHByb3Blcmx5IGZvcm1hdHRpbmcgYW5kIGRlbGl2ZXJpbmcgdGhvc2UgZGlhZ25vc3RpYyBmaW5kaW5ncy4gVGhlIHJlc3VsdHMgc2hvdWxkIGJlIHByb3ZpZGVkIHRocm91Z2ggdGhhdCBzcGVjaWZpYyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAgICYjMzQ7ZTEwMF9zZXRfZWVwcm9tJiMzNDssCiAgICAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDBfcHJvYmUmIzM0OywKICAgICYjMzQ7ZTEwMF9zZXRfZWVwcm9tJiMzNDssCiAgICAmIzM0O2UxMDBfZGlhZ190ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGNhdXNlZCBieSBhbiBpbnZhbGlkIGBhZGRyX2xlbmAgcmVhZCBmcm9tIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgd2FzIGdyZWF0ZXIgdGhhbiA4LCBgbmljLVx1MDAzZWVlcHJvbV93Y2Agd291bGQgZXhjZWVkIHRoZSAyNTYtZWxlbWVudCBzaXplIG9mIHRoZSBgbmljLVx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW5gIHdpdGggYSBsYXJnZSBgYWRkcl9sZW5gIGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgd2hpY2ggaXMgY2F1Z2h0IGJ5IFVCU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzODRlYzBmZjU1NDdjMjcxNzg0MWE1NTIzNWI4ZGM4MzVmNDc2ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxMDoyMDoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwppbmRleCAyOTk2MDc2MmU2NGE4Li5jZDgxOTAzODY2NTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCkBAIC03NDQsNyAmIzQzOzc0NCwxNCBAQCBzdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcikKIAkJICogY29tcGxldGUgYWRkcmVzcy4gIFVzZSB0aGlzIHRvIGFkanVzdCBhZGRyX2xlbi4gKi8KIAkJY3RybCA9IGlvcmVhZDgoJmFtcDtuaWMtJmd0O2Nzci0mZ3Q7ZWVwcm9tX2N0cmxfbG8pOwogCQlpZiAoIShjdHJsICZhbXA7IGVlZG8pICZhbXA7JmFtcDsgaSAmZ3Q7IDE2KSB7Ci0JCQkqYWRkcl9sZW4gLT0gKGkgLSAxNik7CiYjNDM7CQkJdTE2IGxlbiA9IGkgLSAxNjsKJiM0MzsKJiM0MzsJCQlpZiAobGVuICZndDsgKmFkZHJfbGVuKSB7CiYjNDM7CQkJCSphZGRyX2xlbiA9IDA7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkqYWRkcl9sZW4gLT0gbGVuOwogCQkJaSA9IDE3OwogCQl9CiAKQEAgLTc2NSw3ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpCiAKIAkvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqLwogCWUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCAwKTsKLQluaWMtJmd0O2VlcHJvbV93YyA9IDEgJmx0OyZsdDsgYWRkcl9sZW47CiYjNDM7CiYjNDM7CWlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gJmd0OyA4KSB7CiYjNDM7CQluZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAmIzM0O0ludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XG4mIzM0OywKJiM0MzsJCQkgIGFkZHJfbGVuKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwogCiAJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IG5pYy0mZ3Q7ZWVwcm9tX3djOyBhZGRyJiM0MzsmIzQzOykgewogCQluaWMtJmd0O2VlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCAmYW1wO2FkZHJfbGVuLCBhZGRyKTsKQEAgLTc5MSw3ICYjNDM7ODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KQogCiAJLyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi8KIAllMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgMCk7Ci0JbmljLSZndDtlZXByb21fd2MgPSAxICZsdDsmbHQ7IGFkZHJfbGVuOwomIzQzOwomIzQzOwlpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuICZndDsgOCkgewomIzQzOwkJbmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgJiMzNDtJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxuJiMzNDssCiYjNDM7CQkJICBhZGRyX2xlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwluaWMtJmd0O2VlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTsKIAogCWlmIChzdGFydCAmIzQzOyBjb3VudCAmZ3Q7PSBuaWMtJmd0O2VlcHJvbV93YykKIAkJcmV0dXJuIC1FSU5WQUw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBlMTAwIEVFUFJPTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIGZldyBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2A6IGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIEVFUFJPTSBoYW5kbGluZy4gTGV0IG1lIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBzZWUgdGhlIGZpeCBpbiBgZTEwMF9lZXByb21fcmVhZGAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYm91bmRzIGNoZWNrIGZvciBgYWRkcl9sZW5gIGlzIGdvb2Q7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYW4gdW5kZXJmbG93IHNjZW5hcmlvLiBCeSBpbnRyb2R1Y2luZyBhIGNoZWNrIGBpZiAobGVuICZndDsgKmFkZHJfbGVuKWAgYmVmb3JlIHN1YnRyYWN0aW5nLCB3ZSYjMzk7cmUgZW5zdXJpbmcgdGhhdCB3ZSBkb24mIzM5O3QgZW5kIHVwIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgYGFkZHJfbGVuYCwgd2hpY2ggY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uIFRoaXMgYXZvaWRzIGEgY2xhc3NpYyBzaGlmdC1vdXQtb2YtYm91bmRzIGlzc3VlLgoKVGhlbiB0aGVyZSBhcmUgdGhlIGBlMTAwX2VlcHJvbV9sb2FkYCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGNoYW5nZXMuICBIZXJlLCB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYGFkZHJfbGVuYCB0byBwcmV2ZW50IGJvdGggemVybyBhbmQgZXhjZXNzaXZlIHZhbHVlcy4gIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIHdlIGhhdmU6CgpgYGBjCm5pYy0mZ3Q7ZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pOwpgYGAKClRoZSBvbGQgY29kZSB3YXMgc3VzY2VwdGlibGUgdG8gYW4gdW5kZXJmbG93LCBtYWtpbmcgYGFkZHJfbGVuYCBhIGh1Z2UgcG9zaXRpdmUgbnVtYmVyLiBUaGlzLCB3aGVuIHVzZWQgYXMgYSBzaGlmdCBjb3VudCBpbiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAsIGlzIFVuZGVmaW5lZCBCZWhhdmlvciAoVUIpLCBiZWNhdXNlIHNoaWZ0aW5nIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYml0LXdpZHRoIG9mIHRoZSBvcGVyYW5kIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIEMgc3RhbmRhcmQuIFRoaXMgcGF0Y2ggbm93IGF2b2lkcyBVQiBieSBjaGVja2luZyBmb3IgYW5kIHJlamVjdGluZyBpbnZhbGlkIGBhZGRyX2xlbmAgdmFsdWVzLgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgcHJldmlvdXNseSwgYW4gdW5kZXJmbG93IGNvdWxkIGxlYWQgdG8gYG5pYy0mZ3Q7ZWVwcm9tX3djYCBiZWNvbWluZyBhIHZlcnkgbGFyZ2UgbnVtYmVyLCB3aGljaCB3b3VsZCB0aGVuIGJlIHVzZWQgaW4gYSBsb29wIHRvIGFjY2VzcyBgbmljLSZndDtlZXByb21gOgoKYGBgYwpmb3IgKGFkZHIgPSAwOyBhZGRyICZsdDsgbmljLSZndDtlZXByb21fd2M7IGFkZHImIzQzOyYjNDM7KSB7CgkJbmljLSZndDtlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgJmFtcDthZGRyX2xlbiwgYWRkcik7CmBgYAoKVGhpcyBlZmZlY3RpdmVseSBjcmVhdGVzIGEgYnVmZmVyIG92ZXJmbG93LCBiZWNhdXNlIGBuaWMtJmd0O2VlcHJvbWAgaXMgYW4gYXJyYXkgb2YgYSBzcGVjaWZpYyBzaXplLCBhbmQgaWYgYG5pYy0mZ3Q7ZWVwcm9tX3djYCBpcyB0b28gbGFyZ2UsIGl0IHdvdWxkIGFsbG93IHRoZSBwcm9ncmFtIHRvIHdyaXRlIGRhdGEgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KClRoZSBwYXRjaCBlZmZlY3RpdmVseSBtaXRpZ2F0ZXMgYSBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1ZyBhbmQgcHJldmVudHMgYSBzdWJzZXF1ZW50IGJ1ZmZlciBvdmVyZmxvdy4gIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgYW5kIFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgZXNwZWNpYWxseSBVQlNBTiwgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRoZXNlIGtpbmRzIG9mIGlzc3Vlcy4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0JiMzOTtzIGEgbWF0dGVyIG9mIFVCIGFuZCBib3VuZHMgdmlvbGF0aW9ucy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGVlcHJvbWAgd2l0aGluIHRoZSBgc3RydWN0IG5pY2AgdG8gdmVyaWZ5IHRoZSBzaXplIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhhdCBleHRyYSBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuaWMgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz01MzQ9c3RydWN0IHBhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTUzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo1Mzk6c3RydWN0IG5pYyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNTQwLVx0LyogQmVnaW46IGZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6IGtlZXAgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzgwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFMTAwIEVFUFJPTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgSW50ZWwgRTEwMCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgRUVQUk9NIGhhbmRsaW5nIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgbGVuZ3RoIG9mIEVFUFJPTSBhY2Nlc3NlcyBhcmUgbWFuYWdlZC4KClRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGBhZGRyX2xlbmAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciBgbmljLSZndDtlZXByb21fd2NgIHRvIGJlY29tZSBleGNlc3NpdmVseSBsYXJnZS4gIFRoaXMgd29ycmllcyBtZSBiZWNhdXNlIGBuaWMtJmd0O2VlcHJvbV93Y2AgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBzaXplIG9yIHdvcmQgY291bnQgb2YgZGF0YSBiZWluZyBhY2Nlc3NlZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCBpcyBwb29ybHkgdmFsaWRhdGVkLCBpdCBjb3VsZCBsZWFkIHRvIGFuIGludGVnZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gdXNlZCBpbiBjYWxjdWxhdGlvbnMsIGFuZCBjb25zZXF1ZW50bHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gV2UgY2FuIHNlZSB0aGlzIGltbWVkaWF0ZWx5OiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAgd2l0aCBgYWRkcl9sZW4gJmd0OyA4YCBvciBuZWdhdGl2ZSBjYW4gY3JlYXRlIGEgaHVnZSBgZWVwcm9tX3djYC4KClRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIGBhZGRyX2xlbmAgaW4gYWxsIHRocmVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBndWFyZHMgYWdhaW5zdCB1bmRlcmZsb3cgaW4gYGUxMDBfZWVwcm9tX3JlYWRgIGFuZCBlbnN1cmVzIGBhZGRyX2xlbmAgaXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChub3QgemVybyBhbmQgbm90IGV4Y2VlZGluZyA4KSBpbiBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLgoKSSBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIHRvIGRvIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYHN0cnVjdCBuaWNgIGRlZmluaXRpb24gYW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBgbmljLSZndDtlZXByb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBlZXByb21gIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBlZXByb21fd2NgIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSBmaXguIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBhIGxhcmdlIGBlZXByb21fd2NgIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb24gdGhlIGBuaWMtJmd0O2VlcHJvbWAgYXJyYXkuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIGJlZm9yZSBJIGZ1bGx5IGVuZG9yc2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Mzk6XHRzdHJ1Y3QgbmljIHtcbiA1NDA6XHRcdC8qIEJlZ2luOiBmcmVxdWVudGx5IHVzZWQgdmFsdWVzOiBrZWVwIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi9cbiA1NDE6XHRcdHUzMiBtc2dfZW5hYmxlXHRcdFx0XHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gNTQyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIDU0MzpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4gNTQ0Olx0XHR1MTYgKCptZGlvX2N0cmwpKHN0cnVjdCBuaWMgKm5pYywgdTMyIGFkZHIsIHUzMiBkaXIsIHUzMiByZWcsIHUxNiBkYXRhKTtcbiA1NDU6XHRcbiA1NDY6XHRcdHN0cnVjdCByeCAqcnhzXHRcdFx0XHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gNTQ3Olx0XHRzdHJ1Y3QgcnggKnJ4X3RvX3VzZTtcbiA1NDg6XHRcdHN0cnVjdCByeCAqcnhfdG9fY2xlYW47XG4gNTQ5Olx0XHRzdHJ1Y3QgcmZkIGJsYW5rX3JmZDtcbiA1NTA6XHRcdGVudW0gcnVfc3RhdGUgcnVfcnVubmluZztcbiA1NTE6XHRcbiA1NTI6XHRcdHNwaW5sb2NrX3QgY2JfbG9ja1x0XHRcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiA1NTM6XHRcdHNwaW5sb2NrX3QgY21kX2xvY2s7XG4gNTU0Olx0XHRzdHJ1Y3QgY3NyIF9faW9tZW0gKmNzcjtcbiA1NTU6XHRcdGVudW0gc2NiX2NtZF9sbyBjdWNfY21kO1xuIDU1NjpcdFx0dW5zaWduZWQgaW50IGNic19hdmFpbDtcbiA1NTc6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIDU1ODpcdFx0c3RydWN0IGNiICpjYnM7XG4gNTU5Olx0XHRzdHJ1Y3QgY2IgKmNiX3RvX3VzZTtcbiA1NjA6XHRcdHN0cnVjdCBjYiAqY2JfdG9fc2VuZDtcbiA1NjE6XHRcdHN0cnVjdCBjYiAqY2JfdG9fY2xlYW47XG4gNTYyOlx0XHRfX2xlMTYgdHhfY29tbWFuZDtcbiA1NjM6XHRcdC8qIEVuZDogZnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0ICovXG4gNTY0Olx0XG4gNTY1Olx0XHRlbnVtIHtcbiA1NjY6XHRcdFx0aWNoICAgICAgICAgICAgICAgID0gKDEgXHUwMDNjXHUwMDNjIDApLFxuIDU2NzpcdFx0XHRwcm9taXNjdW91cyAgICAgICAgPSAoMSBcdTAwM2NcdTAwM2MgMSksXG4gNTY4Olx0XHRcdG11bHRpY2FzdF9hbGwgICAgICA9ICgxIFx1MDAzY1x1MDAzYyAyKSxcbiA1Njk6XHRcdFx0d29sX21hZ2ljICAgICAgICAgID0gKDEgXHUwMDNjXHUwMDNjIDMpLFxuIDU3MDpcdFx0XHRpY2hfMTBoX3dvcmthcm91bmQgPSAoMSBcdTAwM2NcdTAwM2MgNCksXG4gNTcxOlx0XHR9IGZsYWdzXHRcdFx0XHRcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiA1NzI6XHRcbiA1NzM6XHRcdGVudW0gbWFjIG1hYztcbiA1NzQ6XHRcdGVudW0gcGh5IHBoeTtcbiA1NzU6XHRcdHN0cnVjdCBwYXJhbXMgcGFyYW1zO1xuIDU3NjpcdFx0c3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7XG4gNTc3Olx0XHRzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpO1xuIDU3ODpcdFx0c3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzaztcbiA1Nzk6XHRcdGVudW0gbG9vcGJhY2sgbG9vcGJhY2s7XG4gNTgwOlx0XG4gNTgxOlx0XHRzdHJ1Y3QgbWVtICptZW07XG4gNTgyOlx0XHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIDU4MzpcdFxuIDU4NDpcdFx0c3RydWN0IGRtYV9wb29sICpjYnNfcG9vbDtcbiA1ODU6XHRcdGRtYV9hZGRyX3QgY2JzX2RtYV9hZGRyO1xuIDU4NjpcdFx0dTggYWRhcHRpdmVfaWZzO1xuIDU4NzpcdFx0dTggdHhfdGhyZXNob2xkO1xuIDU4ODpcdFx0dTMyIHR4X2ZyYW1lcztcbiA1ODk6XHRcdHUzMiB0eF9jb2xsaXNpb25zO1xuIDU5MDpcdFx0dTMyIHR4X2RlZmVycmVkO1xuIDU5MTpcdFx0dTMyIHR4X3NpbmdsZV9jb2xsaXNpb25zO1xuIDU5MjpcdFx0dTMyIHR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4gNTkzOlx0XHR1MzIgdHhfZmNfcGF1c2U7XG4gNTk0Olx0XHR1MzIgdHhfdGNvX2ZyYW1lcztcbiA1OTU6XHRcbiA1OTY6XHRcdHUzMiByeF9mY19wYXVzZTtcbiA1OTc6XHRcdHUzMiByeF9mY191bnN1cHBvcnRlZDtcbiA1OTg6XHRcdHUzMiByeF90Y29fZnJhbWVzO1xuIDU5OTpcdFx0dTMyIHJ4X3Nob3J0X2ZyYW1lX2Vycm9ycztcbiA2MDA6XHRcdHUzMiByeF9vdmVyX2xlbmd0aF9lcnJvcnM7XG4gNjAxOlx0XG4gNjAyOlx0XHR1MTYgZWVwcm9tX3djO1xuIDYwMzpcdFx0X19sZTE2IGVlcHJvbVsyNTZdO1xuIDYwNDpcdFx0c3BpbmxvY2tfdCBtZGlvX2xvY2s7XG4gNjA1Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIDYwNjpcdH07XG4gNjA3Olx0XG4gNjA4Olx0c3RhdGljIGlubGluZSB2b2lkIGUxMDBfd3JpdGVfZmx1c2goc3RydWN0IG5pYyAqbmljKVxuIDYwOTpcdHtcbiA2MTA6XHRcdC8qIEZsdXNoIHByZXZpb3VzIFBDSSB3cml0ZXMgdGhyb3VnaCBpbnRlcm1lZGlhdGUgYnJpZGdlc1xuIDYxMTpcdFx0ICogYnkgZG9pbmcgYSBiZW5pZ24gcmVhZCAqL1xuIDYxMjpcdFx0KHZvaWQpaW9yZWFkOChcdTAwMjZuaWMtXHUwMDNlY3NyLVx1MDAzZXNjYi5zdGF0dXMpO1xuIDYxMzpcdH1cbiA2MTQ6XHRcbiA2MTU6XHRzdGF0aWMgdm9pZCBlMTAwX2VuYWJsZV9pcnEoc3RydWN0IG5pYyAqbmljKVxuIDYxNjpcdHtcbiA2MTc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gNjE4Olx0XG4gNjE5Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuaWMtXHUwMDNlY21kX2xvY2ssIGZsYWdzKTtcbiA2MjA6XHRcdGlvd3JpdGU4KGlycV9tYXNrX25vbmUsIFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlc2NiLmNtZF9oaSk7XG4gNjIxOlx0XHRlMTAwX3dyaXRlX2ZsdXNoKG5pYyk7XG4gNjIyOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5pYy1cdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgdm9pZCBlMTAwX2Rpc2FibGVfaXJxKHN0cnVjdCBuaWMgKm5pYylcbiA2MjY6XHR7XG4gNjI3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDYyODpcdFxuIDYyOTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmljLVx1MDAzZWNtZF9sb2NrLCBmbGFncyk7XG4gNjMwOlx0XHRpb3dyaXRlOChpcnFfbWFza19hbGwsIFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlc2NiLmNtZF9oaSk7XG4gNjMxOlx0XHRlMTAwX3dyaXRlX2ZsdXNoKG5pYyk7XG4gNjMyOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5pYy1cdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xuIDYzMzpcdH1cbiA2MzQ6XHRcbiA2MzU6XHRzdGF0aWMgdm9pZCBlMTAwX2h3X3Jlc2V0KHN0cnVjdCBuaWMgKm5pYylcbiA2MzY6XHR7XG4gNjM3Olx0XHQvKiBQdXQgQ1UgYW5kIFJVIGludG8gaWRsZSB3aXRoIGEgc2VsZWN0aXZlIHJlc2V0IHRvIGdldFxuIDYzODpcdFx0ICogZGV2aWNlIG9mZiBvZiBQQ0kgYnVzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjcKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGUxMDAgRHJpdmVyIEVFUFJPTSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGUxMDBgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYGFkZHJfbGVuYCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIHRvIGBhZGRyX2xlbmAgaW4gdGhlIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGUxMDBfZWVwcm9tX2xvYWRgLCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSB0aGUgcGF0Y2ggYWltcyB0byBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyBvdXQgb2Ygd2hhY2suCgpTcGVjaWZpY2FsbHksIGluIGBlMTAwX2VlcHJvbV9yZWFkYCwgYGFkZHJfbGVuYCBpcyBtb2RpZmllZCBiYXNlZCBvbiBzb21lIEVFUFJPTSBjb250cm9sIGJpdHMgYW5kIGFuIGl0ZXJhdGlvbiBjb3VudGVyLiBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBpcyBtZXQsIGBhZGRyX2xlbmAgZ2V0cyByZWR1Y2VkLiBNeSBjb25jZXJuIGlzLCB0aGF0IHRoZXJlIGlzIGEgY2hlY2sgaWYgYGxlbiAmZ3Q7ICphZGRyX2xlbmAsIGluIHdoaWNoIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYCphZGRyX2xlbiA9IDA7YCBicmVha3MgdGhlIGxvb3AuIEluIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCwgaXQgY2hlY2tzIGlmIGBhZGRyX2xlbmAgaXMgemVybywgb3IgZ3JlYXRlciB0aGFuIDgsIGFuZCByZXR1cm5zIGFuIGVycm9yLiBUaGUga2V5IGlzIGluIGhvdyBgYWRkcl9sZW5gIGlzIHVzZWQuCgpJIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBUaGUgY29kZSByZWFkcyBgYWRkcl9sZW5gIGFuZCB0aGVuIGNhbGN1bGF0ZXMgYG5pYy0mZ3Q7ZWVwcm9tX3djID0gMSAmbHQ7Jmx0OyBhZGRyX2xlbmAuIElmIGBhZGRyX2xlbmAgYmVjb21lcyB0b28gbGFyZ2UsIHRoaXMgYml0LXNoaWZ0IG9wZXJhdGlvbiBjb3VsZCByZXN1bHQgaW4gYSBtYXNzaXZlIG51bWJlciBvciB1bmRlZmluZWQgYmVoYXZpb3IuIElmIGBhZGRyX2xlbmAgYmVjb21lcyAxMCAob3IgbGFyZ2VyKSwgdGhlbiBgMSAmbHQ7Jmx0OyBhZGRyX2xlbmAgaXMgMTAyNCwgd2hpY2ggaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBgbmljLSZndDtlZXByb21gIGFycmF5LCB3aGljaCBpcyBvbmx5IHNpemUgMjU2LiBUaGlzIG1lYW5zIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaXMgZ29pbmcgdG8gaGFwcGVuLgoKYG5pYy0mZ3Q7ZWVwcm9tX3djYCBjb250cm9scyB0aGUgbG9vcCBib3VuZCBmb3IgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEuIFRoZSBjb2RlIGl0ZXJhdGVzIHVwIHRvIGBuaWMtJmd0O2VlcHJvbV93Y2AsIHdyaXRpbmcgdG8gYG5pYy0mZ3Q7ZWVwcm9tW2FkZHJdYC4gSWYgYG5pYy0mZ3Q7ZWVwcm9tX3djYCBleGNlZWRzIDI1NiwgaXQmIzM5O3MgYSBndWFyYW50ZWVkIG91dC1vZi1ib3VuZHMgd3JpdGUuIEJpbmdvISBDbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBjYXVnaHQgYnkgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikuCgpOb3csIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBkbyB3aXRoIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHBvdGVudGlhbGx5IHZpYSBldGh0b29sLiBXZWxsLCB0aGUgcGF0Y2ggcmVzdHJpY3RzIGBhZGRyX2xlbmAgdG8gYmUgJmx0Oz0gOC4gTWVhbmluZywgdGhhdCBgZWVwcm9tX3djICZsdDs9IDI1NmAuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCByZWFkIGlzIGFuIGlzc3VlLiBUaGUgY29yZSBmaXggaXMgcHJldmVudGluZyBgYWRkcl9sZW5gIGZyb20gYmVjb21pbmcgYSBodWdlIG51bWJlciwgbGVhZGluZyB0byBhbiBPT0IgYWNjZXNzLgoKV2FpdCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0ISBJZiBgYWRkcl9sZW5gIGlzIHJlZHVjZWQgYnkgdG9vIG11Y2gsIGNvdWxkIGl0IHdyYXAgYXJvdW5kPyBZZXMsIHRoZSBgKmFkZHJfbGVuIC09IGxlbmAgY291bGQgdW5kZXJmbG93LCBsZWFkaW5nIHRvIGxhcmdlIGBhZGRyX2xlbmAuIEFoLCBidXQgYGUxMDBfZWVwcm9tX2xvYWRgIGFjdHVhbGx5IGluaXRpYWxpemVzIGBhZGRyX2xlbmAgdG8gOCBhbmQgdGhlbiBpdCYjMzk7cyB1c2VkIGluIGBlMTAwX2VlcHJvbV9yZWFkYC4gSWYgYW4gdW5kZXJmbG93IGhhcHBlbnMsIHRoZW4gYDEgJmx0OyZsdDsgYWRkcl9sZW5gIHJlc3VsdHMgaW4gYSBodWdlIG51bWJlci4KClRoZSB0aGluZyBpcywgYGFkZHJfbGVuYCBpcyBgdTE2YC4gSWYgaXQgYmVjb21lcyA2NTUzNSwgYDEgJmx0OyZsdDsgNjU1MzVgIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBpbiBDLiBUaGF0JiMzOTtzIGEgc2hpZnQgY291bnQgdGhhdCYjMzk7cyB0b28gbGFyZ2UsIGJ1dCBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNBTml0aXplcikgc2hvdWxkIGNhdGNoIHRoaXMuCgpTbywgZm9yIGV4YW1wbGUsIGxldCYjMzk7cyBzYXkgYGFkZHJfbGVuYCBiZWNvbWVzIDEwLiBUaGVuIGBuaWMtJmd0O2VlcHJvbV93YyA9IDEwMjRgLCBhbmQgd3JpdGluZyB1cCB0byAxMDI0IHRvIGFuIGFycmF5IG9mIHNpemUgMjU2IGlzIGFuIE9PQiB3cml0ZS4gVGhpcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4KCk5vdywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzc3VlPyBObywgdGhpcyBpcyBhbiBPT0Igd3JpdGUgZHVlIHRvIGEgYml0IHNoaWZ0IHRoYXQgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB0aGF0IEtBU0FOIGFuZCBVQlNBTiBhcmUgcGVyZmVjdGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcuIE5vIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHJlYWRzIHRoYXQgS01TQU4gc3BlY2lhbGl6ZXMgaW4uIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLgoKSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBzaGlmdCB0aGF0IGNhbiBiZSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gLiBJZiBgYWRkcl9sZW5gIGlzIGxhcmdlciB0aGFuIDgsIGBuaWMtJmd0O2VlcHJvbV93Y2AgZXhjZWVkcyB0aGUgc2l6ZSBvZiBgbmljLSZndDtlZXByb21gLiBLQVNBTiBkZXRlY3RzIHRoZSBidWZmZXIgb3ZlcmZsb3csIFVCU0FOIGRldGVjdHMgdGhlIHVuZGVmaW5lZCBiaXQtc2hpZnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWssIHRoZXJlZm9yZSwgbm8gbmVlZCBmb3IgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MjkuODg5ODYzNzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzA0MTc0MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0IG91dCBvZiBib3VuZHMpIGNhdXNlZCBieSBhbiBpbnZhbGlkIGBhZGRyX2xlbmAgcmVhZCBmcm9tIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgd2FzIGdyZWF0ZXIgdGhhbiA4LCBgbmljLVxcdTAwM2VlZXByb21fd2NgIHdvdWxkIGV4Y2VlZCB0aGUgMjU2LWVsZW1lbnQgc2l6ZSBvZiB0aGUgYG5pYy1cXHUwMDNlZWVwcm9tYCBhcnJheSwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdyBkdXJpbmcgdGhlIEVFUFJPTSByZWFkIGxvb3AuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIEFkZGl0aW9uYWxseSwgdGhlIHNoaWZ0IGAxIFxcdTAwM2NcXHUwMDNjIGFkZHJfbGVuYCB3aXRoIGEgbGFyZ2UgYGFkZHJfbGVuYCBpcyB1bmRlZmluZWQgYmVoYXZpb3IsIHdoaWNoIGlzIGNhdWdodCBieSBVQlNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW52b2x2ZWQgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIEVFUFJPTSByZWFkLCBsb2FkLCBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gdGhlIGUxMDAgZHJpdmVyIHRvIHByZXZlbnQgdW5kZXJmbG93IGFuZCBvdXQtb2YtYm91bmRzIHNoaWZ0cy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgdmlhIGV0aHRvb2wgaW9jdGxzIChzZXRfZWVwcm9tLCBzZWxmX3Rlc3QpLiBUaGUgZTEwMCBkcml2ZXIgaXMgZm9yIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgY2FyZHMsIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VIChlLmcuLCBpODI1NTdiLCBpODI1NTllciksIG1ha2luZyB0aGVzZSBwYXRocyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MjkuODg5ODcxMjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYwNzg4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDEwOjIwOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXFxuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXFxuIFxcdFxcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXFxuIFxcdFxcdGN0cmwgPSBpb3JlYWQ4KFxcdTAwMjZuaWMtXFx1MDAzZWNzci1cXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xcbiBcXHRcXHRpZiAoIShjdHJsIFxcdTAwMjYgZWVkbykgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNlIDE2KSB7XFxuLVxcdFxcdFxcdCphZGRyX2xlbiAtPSAoaSAtIDE2KTtcXG4rXFx0XFx0XFx0dTE2IGxlbiA9IGkgLSAxNjtcXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSAqYWRkcl9sZW4pIHtcXG4rXFx0XFx0XFx0XFx0KmFkZHJfbGVuID0gMDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdCphZGRyX2xlbiAtPSBsZW47XFxuIFxcdFxcdFxcdGkgPSAxNztcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNzY1LDcgKzc3MiwxNSBAQCBzdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKVxcbiBcXG4gXFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cXG4gXFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFxcdTAwMjZhZGRyX2xlbiwgMCk7XFxuLVxcdG5pYy1cXHUwMDNlZWVwcm9tX3djID0gMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbjtcXG4rXFxuK1xcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXFx1MDAzZSA4KSB7XFxuK1xcdFxcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICBcXFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgYWRkcl9sZW4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0bmljLVxcdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XFxuIFxcbiBcXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFxcdTAwM2MgbmljLVxcdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xcbiBcXHRcXHRuaWMtXFx1MDAzZWVlcHJvbVthZGRyXSA9IGUxMDBfZWVwcm9tX3JlYWQobmljLCBcXHUwMDI2YWRkcl9sZW4sIGFkZHIpO1xcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxcbiBcXG4gXFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cXG4gXFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFxcdTAwMjZhZGRyX2xlbiwgMCk7XFxuLVxcdG5pYy1cXHUwMDNlZWVwcm9tX3djID0gMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbjtcXG4rXFxuK1xcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXFx1MDAzZSA4KSB7XFxuK1xcdFxcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICBcXFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgYWRkcl9sZW4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0bmljLVxcdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XFxuIFxcbiBcXHRpZiAoc3RhcnQgKyBjb3VudCBcXHUwMDNlPSBuaWMtXFx1MDAzZWVlcHJvbV93YylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjMwLjMxNjczNzczMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwMzE3NTUwMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4rXHRcdFx0dTE2IGxlbiA9IGkgLSAxNjtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbitcdFx0XHRcdCphZGRyX2xlbiA9IDA7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0KmFkZHJfbGVuIC09IGxlbjtcbiBcdFx0XHRpID0gMTc7XG4gXHRcdH1cbiBcbkBAIC03NjUsNyArNzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIG5pYy1cdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xuIFx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxuIFxuIFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cbiBcdGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgMCk7XG4tXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW47XG4rXG4rXHRpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuIFx1MDAzZSA4KSB7XG4rXHRcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgXCJJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxcblwiLFxuK1x0XHRcdCAgYWRkcl9sZW4pO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdG5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG4gXG4gXHRpZiAoc3RhcnQgKyBjb3VudCBcdTAwM2U9IG5pYy1cdTAwM2VlZXByb21fd2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MzAuMzE2NzM5NjUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNTI4MzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IERyaXZlciBDb2RlIGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jYCBmaWxlLiBJdCdzIGZvciB0aGUgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBkcml2ZXIsIGEgZHJpdmVyIEknbSBxdWl0ZSBmYW1pbGlhciB3aXRoLCBzbyB0aGUgY29kZSBpdHNlbGYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRyaWdnZXIgdGhlc2UgbmV3IGNoZWNrcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50P1xuXG5JIGtub3cgUUVNVSBzdXBwb3J0cyB0aGUgYGk4MjU1N2JgLCBgaTgyNTU5ZXJgLCBhbmQgYGk4MjU1OWNgIHdoaWNoIGFsbCBlbXVsYXRlIHRoZSBlMTAwIGZhbWlseSBvZiBOSUNzLiBUaGF0J3MgZ29vZCwgc28gdGhlIGhhcmR3YXJlIHN1cHBvcnQgaXMgdGhlcmUuIE5vdywgbGV0IG1lIHF1aWNrbHkgc2VlIGlmIGBlMTAwX2VlcHJvbV9sb2FkYCBhbmQgYGUxMDBfZWVwcm9tX3NhdmVgIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIEkgcmVjYWxsIGBlMTAwX2VlcHJvbV9sb2FkYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gdHJpZ2dlci4gTm93LCB3aGF0IGFib3V0IGBlMTAwX2VlcHJvbV9zYXZlYD8gQWgsIHllcywgaXQncyBjYWxsZWQgZnJvbSBldGh0b29sIG9wZXJhdGlvbnMsIGlzbid0IGl0PyBTbywgdGhhdCBpbXBsaWVzIHRoaXMgaXMgdHJpZ2dlcmVkIHZpYSB1c2VyIHNwYWNlIHV0aWxpdGllcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGV0aHRvb2wgY29tbWFuZCBvciBzZXF1ZW5jZSB0byB0cmlnZ2VyIHRoYXQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gYGUxMDAuY2AgYW5kIGNvbmZpcm0gd2hlcmUgYGUxMDBfZWVwcm9tX3NhdmVgIGlzIGFjdHVhbGx5IHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMDozNS43NDIwMjc3MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MzU3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9lZXByb21fc2F2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTc2OT1zdGF0aWMgaW50IGUxMDBfZWVwcm9tX2xvYWQoc3RydWN0IG5pYyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTgwMi0vKiBTYXZlIChwb3J0aW9uIG9mKSBkcml2ZXIgRUVQUk9NIGNhY2hlIHRvIGRldmljZSBhbmQgdXBkYXRlIGNoZWNrc3VtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjgwMzpzdGF0aWMgaW50IGUxMDBfZWVwcm9tX3NhdmUoc3RydWN0IG5pYyAqbmljLCB1MTYgc3RhcnQsIHUxNiBjb3VudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtODA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNTY2PXN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU3NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjU3NjpcXHRyZXR1cm4gZTEwMF9lZXByb21fc2F2ZShuaWMsIGVlcHJvbS1cXHUwMDNlb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIDEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI1NzctXFx0XFx0KGVlcHJvbS1cXHUwMDNlbGVuIFxcdTAwM2VcXHUwMDNlIDEpICsgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjM1LjgzNTc2OTI5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODE0NzMzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFMTAwIERyaXZlciBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGUxMDBgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBRRU1VJ3MgZ290IGFuIGUxMDAgZW11bGF0aW9uLCB3aGljaCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLiBJZiB3ZSBjYW4gcmVhY2ggaXQsIHRoZW4gd2UgY2FuIGhpdCBpdCB3aXRoIG91ciBvd24gaW5wdXRzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gYnJlYWsuIEFuZCBoZXksIGV0aHRvb2wgb3BzIGFyZSBwb3RlbnRpYWxseSBleHBvc2VkLCB3aGljaCBjb3VsZCBvcGVuIHVwIHNvbWUgaW50ZXJlc3RpbmcgYXZlbnVlcyBmb3IgZXhwbG9pdGF0aW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCB0aG9zZSB0byB0YWxrIHRvIHRoZSBlbXVsYXRlZCBkcml2ZXIuXG5cbkZpcnN0IHRoaW5nLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciBgZTEwMGAuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQnbGwgdGVsbCB1cyBpZiBpdCdzIGV2ZW4gY29tcGlsZWQgaW4sIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgYXR0YWNraW5nIHRoZSByaWdodCB0YXJnZXQsIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsYW5kc2NhcGUuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjM5LjUxNzI0Nzc0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU3OTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6MzkuNjA2ODQyMTU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3OTYyMjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRTEwMCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEUxMDBgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBkZXBlbmRlbmNpZXMuIEl0J3MgYSBzdGFuZGFyZCBwcmFjdGljZSB0byBzdGFydCB0aGVyZSwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGllcyBvbiDigJMgaXRzIGJ1aWxkaW5nIGJsb2Nrcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGNvbXBvbmVudHMgaXMgaXQgdGllZCB0bz8gQSBxdWljayBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgaXMgZXNzZW50aWFsLiBXaXRob3V0IGtub3dpbmcgd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdXNpbmcsIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLiBEZXBlbmRlbmN5IG1hcHBpbmcgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHN5c3RlbSBhbmFseXNpcyBhbmQgSSBqdXN0IG5lZWQgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjQyLjM4NjQ2ODg1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgxODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMjpjb25maWcgRTEwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6NDU6Y29uZmlnIEUxMDAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NDIuNDY5MzE1Njk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MDk1NTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRTEwMCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEUxMDAgS2NvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBFMTAwIGRyaXZlciBpcyBzdHJ1Y3R1cmVkIOKAkyB3aGF0IGFyZSB0aGUgbWFpbiBDT05GSUcgc3ltYm9scywgYXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgbmV0d29yayBkcml2ZXJzIG9yIGhhcmR3YXJlIHN1cHBvcnQ/IE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgYnVpbGQgZmxhZ3MsIGVzcGVjaWFsbHkgdGhvc2UgaW5mbHVlbmNpbmcgZmVhdHVyZXMgbGlrZSBETUEgaGFuZGxpbmcsIGludGVycnVwdCBtb2RlcywgYW5kIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gQW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciBoYXJkd2FyZSByZXZpc2lvbnMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LiBPbmNlIEkgaGF2ZSBhIGdvb2QgaGlnaC1sZXZlbCBncmFzcCwgSSB3aWxsIGxvb2sgdG8gc2VlIGhvdyB0aG9zZSBzeW1ib2xzIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NDUuODUwMjc1NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgRTEwMFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMjU6XFx0XFx0c2VsZWN0IE1JSVxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQUk8vMTAwIGZhbWlseSBvZiBhZGFwdGVycy5cXG4gIDI4OlxcdFxcdCAgVG8gdmVyaWZ5IHRoYXQgeW91ciBhZGFwdGVyIGlzIHN1cHBvcnRlZCwgZmluZCB0aGUgYm9hcmQgSUQgbnVtYmVyXFxuICAyOTpcXHRcXHQgIG9uIHRoZSBhZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXJcXG4gIDMwOlxcdFxcdCAgaW4gdGhlIGZvcm1hdCAxMjM0NTYtMDAxIChzaXggZGlnaXRzIGh5cGhlbiB0aHJlZSBkaWdpdHMpLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIFVzZSB0aGUgYWJvdmUgaW5mb3JtYXRpb24gYW5kIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcXG4gIDMzOlxcdFxcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICB0byBpZGVudGlmeSB0aGUgYWRhcHRlci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDQwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAucnN0XFx1MDAzZS5cXG4gIDQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMDo0NS44NTAzNzUyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUzODkzNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRTEwMCBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgRTEwMGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIHN5c3RlbS4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYFBDSWAgYW5kIGBNSUlgLCBhbmQgYE1JSWAgaXMgY3VycmVudGx5IGFjdGl2ZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgc3RhZ2UgZm9yIHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBhdC5cblxuTm93LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgRUVQUk9NIGZ1bmN0aW9uczogYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAuIEl0J3Mgd29ydGggbm90aW5nIHRoZXNlIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiB0aGUgY29udGV4dC4gVGhpcyBtZWFucyB0aGF0IEkgbm93IG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2NvcGUgdGhhdCBtaWdodCBiZSBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaXMgd2hlcmUgdGhlIGtleSB1bmRlcnN0YW5kaW5nIHdpbGwgbGllLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NTIwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjUwLjQwNDI3MjQ4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTAwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9lZXByb21fbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTcyMT1zdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy03NjgtLyogTG9hZCBlbnRpcmUgRUVQUk9NIGltYWdlIGludG8gZHJpdmVyIGNhY2hlIGFuZCB2YWxpZGF0ZSBjaGVja3N1bSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzo3Njk6c3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNzcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjMwPXN0YXRpYyB2b2lkIGUxMDBfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYzOC1cXHRkYXRhWzBdID0gIW1paV9saW5rX29rKFxcdTAwMjZuaWMtXFx1MDAzZW1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2Mzk6XFx0ZGF0YVsxXSA9IGUxMDBfZWVwcm9tX2xvYWQobmljKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjY0MC1cXHRpZiAodGVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjg1Mz1zdGF0aWMgaW50IGUxMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjk0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjk0NDpcXHRpZiAoKGVyciA9IGUxMDBfZWVwcm9tX2xvYWQobmljKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI5NDUtXFx0XFx0Z290byBlcnJfb3V0X2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjUwLjQ4NjY2OTMwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgwMjYwNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBlMTAwIERyaXZlcidzIEVFUFJPTSBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgZTEwMCBuZXR3b3JrIGRyaXZlciBoYW5kbGVzIGl0cyBFRVBST00gaW50ZXJhY3Rpb25zLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGZvciBwcm9wZXIgTklDIG9wZXJhdGlvbi4gSSBzZWUgdGhhdCB0aGUgYGUxMDBfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaW5pdGlhbCBkaXNjb3ZlcnkgYW5kIHNldHVwIHJvdXRpbmUsIHJlbGllcyBvbiBgZTEwMF9lZXByb21fbG9hZGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHByb2JlIG5lZWRzIHRoZSBFRVBST00gZGF0YSB0byBpbml0aWFsaXplIGl0c2VsZiwgbG9hZCBNQUMgYWRkcmVzcywgYW5kIHBvc3NpYmx5IG90aGVyIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuICBUaGVuIEkgc2VlIGBlMTAwX2RpYWdfdGVzdGAgYWxzbyBjYWxscyBgZTEwMF9lZXByb21fbG9hZGAuIFRoYXQncyBpbXBvcnRhbnQ7ICB0aGUgZGlhZ25vc3RpYyBmdW5jdGlvbiBuZWVkcyB0byBwdWxsIHRoZSBzYW1lIEVFUFJPTSBkYXRhIGFzIHRoZSBkcml2ZXIgZm9yIGRpYWdub3N0aWMgdGVzdGluZy4gQnV0IGJvdGggYXJlIHVzaW5nIHRoZSBsb2FkIGZ1bmN0aW9uLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSBpbnRlcmVzdGluZyBwaWVjZSwgdGhvdWdoLCBpcyBgZTEwMF9zZXRfZWVwcm9tYC4gVGhpcyBmdW5jdGlvbiwgcHJlc3VtYWJseSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBvciBtb2RpZnlpbmcgdGhlIEVFUFJPTSwgY2FsbHMgYGUxMDBfZWVwcm9tX3NhdmVgLiAgU28gYGUxMDBfc2V0X2VlcHJvbWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gc2F2ZSBFRVBST00gZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIGltcGxlbWVudCBzb21lIGZ1bmN0aW9ucyBsaWtlIHNldHRpbmcgdGhlIE1BQyBhZGRyZXNzLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZCBpbiBvdGhlciBOSUMgZHJpdmVycyBJJ3ZlIHdvcmtlZCBvbi4gSSdtIGtlZXBpbmcgdGhpcyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZHJpdmVyJ3MgaW50ZXJuYWxzOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXZpY2UncyBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBhbnkgaXNzdWVzIGhlcmUgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIwOjU1LjA2NjkzNTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI3ODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3NldF9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNTU1PXN0YXRpYyBpbnQgZTEwMF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjU2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjU2NjpzdGF0aWMgaW50IGUxMDBfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTY3LVxcdHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjc1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3MC1cXHQuZ2V0X2VlcHJvbVxcdFxcdD0gZTEwMF9nZXRfZWVwcm9tLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzcxOlxcdC5zZXRfZWVwcm9tXFx0XFx0PSBlMTAwX3NldF9lZXByb20sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzItXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IGUxMDBfZ2V0X3JpbmdwYXJhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjA6NTUuMTMxMjI0Nzk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTc2MTc0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBlMTAwIERyaXZlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGUxMDBgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biB0aGUgY29yZSBlbnRyeSBwb2ludHMuIEl0IHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9zZXRfZWVwcm9tYC4gYGUxMDBfcHJvYmVgIGlzIGNsZWFybHkgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGRyaXZlciBsaWZlY3ljbGUuIEl0J3MgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhhdCBtYWtlcyBzZW5zZS4gYGUxMDBfc2V0X2VlcHJvbWAgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24sIHRyaWdnZXJlZCBieSBhIHVzZXIgc3BhY2UgdG9vbCwgdGhhdCdzIGltcG9ydGFudCB0byBjb25zaWRlciBhcyB3ZWxsLlxuXG5IbW0sIGJ1dCB3YWl0LiBJIGp1c3QgcmVhbGl6ZWQgYGUxMDBfc2V0X2VlcHJvbWAgaXMgYWN0dWFsbHkgKnN0YXRpYyouIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLCBzaW5jZSB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGNvbmZpcm1lZCwgaXQncyBzdGF0aWMuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZXJlIGlzIG5vIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzIGlmIGl0J3MgaW5saW5lZC4gQnV0IHdhaXQsIHNpbmNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCBjYW4ndCBiZSBpbmxpbmVkLlxuXG5UaGUgZXRodG9vbCBvcGVyYXRpb25zIGFyZSByZWdpc3RlcmVkIGluIGBlMTAwX3Byb2JlYC4gU28gdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBlMTAwX2V0aHRvb2xfb3BzYCBpcyBhbHNvIHN0YXRpYy4gU28gdGhlIHJlYWwgZW50cnkgcG9pbnRzIGFyZSBgZTEwMF9wcm9iZWAgYW5kIHRob3NlIGV0aHRvb2wgaW9jdGxzLiBJIHNob3VsZCBrZWVwIGluIG1pbmQgdGhhdCBJIGhhdmUgdG8gY2hvb3NlIGVudHJ5IHBvaW50cyB3aGljaCBhcmUgKm5vdCogc3RhdGljLCBpZiBwb3NzaWJsZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIGBlMTAwX3Byb2JlYCBpcyBhbHNvIHN0YXRpYy4gQW5kIHllcywgaXQgaXMuIFdlbGwsIHRoYXQncyBub3QgaWRlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MDIuNDQ4ODQ2NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQ4NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5NS1cXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcXHQucHJvYmUgPSAgICAgICAgZTEwMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjAyLjg0MDM0NTg3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA2NjQ5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgZTEwMCBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHNvIGBlMTAwX3Byb2JlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8gbm90ZS4gSW4gZmFjdCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgbG9va2luZyBhdCB0aGUgYGUxMDAuY2AgZmlsZSBhZ2FpbiwgYWxsIHRoZSBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZSwgYXJlIHN0YXRpYywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHRoZSBtb2R1bGUgaXRzZWxmOiBgaW5pdF9tb2R1bGVgIGFuZCBgY2xlYW51cF9tb2R1bGVgIOKAkyBvciwgYXMgaXQncyBvZnRlbiBhbGlhc2VkLCBgZTEwMF9pbml0X21vZHVsZWAuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGtlcm5lbCBtb2R1bGVzLiBCdXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBleGhhdXN0aXZlLCBpdCdzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIExldCdzIG1ha2UgYSBxdWljayBwYXNzIHRvIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIHRoaXMgbW9kdWxlIHRoYXQgbWlnaHQgYmUgdW5leHBlY3RlZC4gWW91IG5ldmVyIGtub3cgd2hhdCBtaWdodCBiZSBsdXJraW5nIGluIGxlZ2FjeSBjb2RlLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gaGF2ZSBhIGNsZWFuLCBjb250cm9sbGVkIGludGVyZmFjZS4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZ290IG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjA3LjQ0Njk5ODc1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NDc3MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MDcuNTA1ODYxOTY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTU4NTIzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgXnZvaWQgYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoYXQgYF52b2lkIGAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIG1lYW4gYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcG9pbnRlcnMsIGEgY2FyZXQgcHJlY2VkaW5nIGB2b2lkYCBjb3VsZCBpbmRpY2F0ZSBhIHBvaW50ZXIgdG8gYW4gdW5kZWZpbmVkIHR5cGUg4oCTIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgYSBiYWQgc2lnbiwgc3VnZ2VzdGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBJIHNhdyB0aGlzLiBcblxuSXMgdGhpcyBpbiBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgb3Igc29tZXdoZXJlIGVsc2U/IEJlY2F1c2UgaWYgaXQncyBhIGZ1bmN0aW9uIHJldHVybiB0eXBlLCAgYF52b2lkIGAgY291bGQgYmUgYSBiaXQgbWlzbGVhZGluZy4gIFdoaWxlIHRlY2huaWNhbGx5IGEgZnVuY3Rpb24gKmNhbiogcmV0dXJuIGEgcG9pbnRlciB0byBgdm9pZGAgLCB5b3UnZCBiZSBtb3JlIGxpa2VseSB0byBzZWUgdGhlIHByb3BlciBwb2ludGVyIG5vdGF0aW9uIGB2b2lkICpgIGRpcmVjdGx5LiBUaGF0IHVzYWdlIGlzIHBvc3NpYmxlIGJ1dCByYXJlLiBJJ2QgYmUgbG9va2luZyBmb3IgYSBsaWJyYXJ5IG9yIGNvZGluZyBjb252ZW50aW9uIHRoYXQgdXNlcyB0aGF0LlxuXG5TbywgZmlyc3QgSSBuZWVkIHRvIHNlZSBtb3JlIGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiB0aGUgY2FyZXQgcmFpc2VzIGEgZmxhZywgYnV0IHdpdGhvdXQgdGhhdCBjb250ZXh0LCB0aGlzIGlzIGEgcHV6emxlIGFuZCBub3QgYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxMS4wMDE3MTc5NTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDUxODg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxMS4wNTE3NzcwMTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1Nzk1NTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVsIGUxMDAgRHJpdmVyIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBlMTAwIGRyaXZlciBjb2RlLiBJdCBsb29rcyBsaWtlIGFsbCB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZyb20gYSBzeW1ib2wgdmlzaWJpbGl0eSBzdGFuZHBvaW50LiBHaXZlbiB0aGlzLCBJIGNhbiB6ZXJvIGluIG9uIGBlMTAwX3Byb2JlYCBhbmQgYGUxMDBfc2V0X2VlcHJvbWAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzIG9mIGludGVyZXN0LCBiZWNhdXNlIHRoZXkgYXJlbid0IGlubGluZWQgLSB0aGV5J3JlIGJlaW5nIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGdpdmVzIHRoZW0gZXh0ZXJuYWwgbGlua2FnZS5cblxuTm93LCBhIHF1aWNrIHNjYW4uLi4gYWhhISBJIHNlZSB0aGF0IGBlMTAwX2VlcHJvbV9sb2FkYCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGUxMDBfcHJvYmVgIGFuZCBhbHNvIGBlMTAwX2RpYWdfdGVzdGAuIFRoYXQncyBpbXBvcnRhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBlMTAwX2RpYWdfdGVzdGAgaXMgYWxzbyBhbiBldGh0b29sIG9wZXJhdGlvbiwgcmlnaHQ/IFNvIGl0J3MgcHJvYmFibHkgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbi4gSSBzaG91bGQgY2hlY2sgYGUxMDBfZGlhZ190ZXN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMToxNS43MDk3MzUwOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjMzMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDBfZGlhZ190ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjYyMT1zdGF0aWMgY29uc3QgY2hhciBlMTAwX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI2MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI2MzA6c3RhdGljIHZvaWQgZTEwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYzMS1cXHRzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9Mjc1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3My1cXHQuc2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzc0OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzc1LVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gZTEwMF9nZXRfc3RyaW5ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MTUuNzU1MzczODkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjM3ODc2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEludGVsIFBSTy8xMDArIERyaXZlciBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGUxMDBfcHJvYmVgLCBgZTEwMF9zZXRfZWVwcm9tYCwgYW5kIGBlMTAwX2RpYWdfdGVzdGAgc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGhlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHByZWZlcnJlZCBjb2Rpbmcgc3R5bGUgaXMgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cywgdGhvdWdoIGl0IHNlZW1zIGxpa2UgdGhleSBhcmUgYWxsIHN0YXRpYywgc28gSSB3aWxsIHByaW9yaXRpemUgb25lcyB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGd1YXJhbnRlZSB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEZpcnN0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYEUxMDBgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IGZvciB0aGlzIG1vZHVsZS5cblxuT2theSwgbGV0J3Mgc2VlLiBUaGUgY29uZmlndXJhdGlvbiBzaG93czpcblxuYGBgXG5jb25maWcgRTEwMFxuXHR0cmlzdGF0ZSBcIkludGVsKFIpIFBSTy8xMDArIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIFBDSVxuXHRzZWxlY3QgTUlJXG5gYGBcblxuU28gYEUxMDBgIGlzIGVub3VnaC4gR3JlYXQuIE5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGUxMDBfZWVwcm9tX2xvYWRgIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgYXJlbid0IGlubGluZWQgYW5kIGFyZSBzdGF0aWMuIEkgc2VlIHRoYXQgdGhleSBhcmUgc3RhdGljLiBgZTEwMF9lZXByb21fbG9hZGAgaXMgY2FsbGVkIGZyb20gYGUxMDBfcHJvYmVgIGFuZCBgZTEwMF9kaWFnX3Rlc3RgLiBJdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaXQncyBhIGJpdCBsYXJnZSBzbyBtYXliZSBub3QuIGBlMTAwX2VlcHJvbV9zYXZlYCBpcyBjYWxsZWQgZnJvbSBgZTEwMF9zZXRfZWVwcm9tYC4gU28sIGJldHRlciBmb2N1cyBvbiBgZTEwMF9wcm9iZWAsIGBlMTAwX3NldF9lZXByb21gLCBhbmQgYGUxMDBfZGlhZ190ZXN0YC5cblxuV2FpdCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2g6XG5gYGBjXG5AQCAtNzQ0LDcgKzc0NCwxNCBAQCBzdGF0aWMgX19sZTE2IGUxMDBfZWVwcm9tX3JlYWQoc3RydWN0IG5pYyAqbmljLCB1MTYgKmFkZHJfbGVuLCB1MTYgYWRkcilcbiBcdFx0ICogY29tcGxldGUgYWRkcmVzcy4gIFVzZSB0aGlzIHRvIGFkanVzdCBhZGRyX2xlbi4gKi9cbiBcdFx0Y3RybCA9IGlvcmVhZDgoXHUwMDI2bmljLVx1MDAzZWNzci1cdTAwM2VlZXByb21fY3RybF9sbyk7XG4gXHRcdGlmICghKGN0cmwgXHUwMDI2IGVlZG8pIFx1MDAyNlx1MDAyNiBpIFx1MDAzZSAxNikge1xuLVx0XHRcdCphZGRyX2xlbiAtPSAoaSAtIDE2KTtcbitcdFx0XHR1MTYgbGVuID0gaSAtIDE2O1xuK1xuK1x0XHRcdGlmIChsZW4gXHUwMDNlICphZGRyX2xlbikge1xuK1x0XHRcdFx0KmFkZHJfbGVuID0gMDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQqYWRkcl9sZW4gLT0gbGVuO1xuIFx0XHRcdGkgPSAxNztcbiBcdFx0fVxuIFxuQEAgLTc2NSw3ICs3NzIsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9sb2FkKHN0cnVjdCBuaWMgKm5pYylcbiBcbiBcdC8qIFRyeSByZWFkaW5nIHdpdGggYW4gOC1iaXQgYWRkciBsZW4gdG8gZGlzY292ZXIgYWN0dWFsIGFkZHIgbGVuICovXG4gXHRlMTAwX2VlcHJvbV9yZWFkKG5pYywgXHUwMDI2YWRkcl9sZW4sIDApO1xuLVx0bmljLVx1MDAzZWVlcHJvbV93YyA9IDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuO1xuK1xuK1x0aWYgKCFhZGRyX2xlbiB8fCBhZGRyX2xlbiBcdTAwM2UgOCkge1xuK1x0XHRuZXRpZl9lcnIobmljLCBwcm9iZSwgbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgIFwiSW52YWxpZCBFRVBST00gYWRkcmVzcyBsZW5ndGggJXVcXG5cIixcbitcdFx0XHQgIGFkZHJfbGVuKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gKHUxNilCSVQoYWRkcl9sZW4pO1xuIFxuIFx0Zm9yIChhZGRyID0gMDsgYWRkciBcdTAwM2MgbmljLVx1MDAzZWVlcHJvbV93YzsgYWRkcisrKSB7XG4gXHRcdG5pYy1cdTAwM2VlZXByb21bYWRkcl0gPSBlMTAwX2VlcHJvbV9yZWFkKG5pYywgXHUwMDI2YWRkcl9sZW4sIGFkZHIpO1xuQEAgLTc5MSw3ICs4MDYsMTUgQEAgc3RhdGljIGludCBlMTAwX2VlcHJvbV9zYXZlKHN0cnVjdCBuaWMgKm5pYywgdTE2IHN0YXJ0LCB1MTYgY291bnQpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGlmIChzdGFydCArIGNvdW50IFx1MDAzZT0gbmljLVx1MDAzZWVlcFxuXG4iLCJJbnB1dFRva2VucyI6OTIxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6MzAuMzkzMjUzOTYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTkzOTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlMTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjgzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGUxMDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yODUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyODUzOnN0YXRpYyBpbnQgZTEwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjg1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MzE5Mz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5NS1cXHQuaWRfdGFibGUgPSAgICAgZTEwMF9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MzE5NjpcXHQucHJvYmUgPSAgICAgICAgZTEwMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMzE5Ny1cXHQucmVtb3ZlID0gICAgICAgZTEwMF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjMwLjQ3NTE5NzY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI4MDQyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGUxMDBgIERyaXZlcioqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyByaWdodC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgdGhlIGBlMTAwX3Byb2JlYCBmdW5jdGlvbiBpcyBzb2xpZDsgdGhhdCBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucyBmb3IgaG93IHRoZSBkcml2ZXIgc2hvdWxkIGhhbmRsZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24gYW5kIHNldHVwLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGZvY3VzIHRvIHRoZSBgZTEwMF9zZXRfZWVwcm9tYCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIHdlJ2xsIGRlbHZlIGludG8gdGhlIEVFUFJPTSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHBlcnNpc3RlbnQgc2V0dGluZ3MgYW5kIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgRUVQUk9NIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozMy41MzgwMDQxNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDBfc2V0X2VlcHJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI1NTU9c3RhdGljIGludCBlMTAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNTY2OnN0YXRpYyBpbnQgZTEwMF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI1NjctXFx0c3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpieXRlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzcwLVxcdC5nZXRfZWVwcm9tXFx0XFx0PSBlMTAwX2dldF9lZXByb20sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzE6XFx0LnNldF9lZXByb21cXHRcXHQ9IGUxMDBfc2V0X2VlcHJvbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc3Mi1cXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9nZXRfcmluZ3BhcmFtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozMy41ODM2NTA0MTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMzkyMjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBFMTAwIERyaXZlciBGdW5jdGlvbmFsaXR5KipcblxuUmlnaHQsIHNvIGBlMTAwX3NldF9lZXByb21gLi4uIHllcCwgdGhhdCdzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgRUVQUk9NIGNvbmZpZ3VyYXRpb24uIEdvb2QsIHRoYXQncyBvbmUgY29uZmlybWVkLiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZTEwMF9kaWFnX3Rlc3RgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkaWFnbm9zdGljIHRlc3RzLiBJIHdhbnQgdG8gc2VlIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGNoZWNrLiBBbHdheXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QgcHJvdG9jb2xzLiBOZWVkIHRvIGtub3cgdGhlIGJyZWFkdGggYW5kIGRlcHRoIG9mIHRoZSBzZWxmLWRpYWdub3N0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIxOjM2LjYxNzU3NTEyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMTE1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZTEwMF9kaWFnX3Rlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNjIxPXN0YXRpYyBjb25zdCBjaGFyIGUxMDBfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjYyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6MjYzMDpzdGF0aWMgdm9pZCBlMTAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNjMxLVxcdHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYz0yNzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzczLVxcdC5zZXRfcmluZ3BhcmFtXFx0XFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjI3NzQ6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZTEwMF9kaWFnX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jLTI3NzUtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlMTAwX2dldF9zdHJpbmdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTozNi42Njc2ODg2ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NTg5NTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWFnbm9zdGljcyBhbmQgUmVwb3J0aW5nIFByb3RvY29sKipcblxuUmlnaHQsIGBlMTAwX2RpYWdfdGVzdGAgaXMgdGhlIGNvcnJlY3QgZGlhZ25vc3RpYyBwcm9jZWR1cmUgdG8gYmUgcnVubmluZy4gR29vZC4gTm93LCB0aGF0IHRlc3Qgc2hvdWxkIHByb3ZpZGUgdGhlIGRhdGEgSSBuZWVkIHRvLi4uICphaGEqLCB5ZXMsIEkgcmVtZW1iZXIgbm93LiBJIG5lZWQgdG8gdXRpbGl6ZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGZvciBwcm9wZXJseSBmb3JtYXR0aW5nIGFuZCBkZWxpdmVyaW5nIHRob3NlIGRpYWdub3N0aWMgZmluZGluZ3MuIFRoZSByZXN1bHRzIHNob3VsZCBiZSBwcm92aWRlZCB0aHJvdWdoIHRoYXQgc3BlY2lmaWMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzUsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6NDAuNTUzNTg3ODgyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTY2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkUxMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwX3Byb2JlXCIsXG4gICAgXCJlMTAwX3NldF9lZXByb21cIixcbiAgICBcImUxMDBfZGlhZ190ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gRUVQUk9NIHJlYWQsIGxvYWQsIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiB0aGUgZTEwMCBkcml2ZXIgdG8gcHJldmVudCB1bmRlcmZsb3cgYW5kIG91dC1vZi1ib3VuZHMgc2hpZnRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCB2aWEgZXRodG9vbCBpb2N0bHMgKHNldF9lZXByb20sIHNlbGZfdGVzdCkuIFRoZSBlMTAwIGRyaXZlciBpcyBmb3IgSW50ZWwgUFJPLzEwMCBFdGhlcm5ldCBjYXJkcywgd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUgKGUuZy4sIGk4MjU1N2IsIGk4MjU1OWVyKSwgbWFraW5nIHRoZXNlIHBhdGhzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTo0MC42MzQyOTEzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NTk3MTQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMTo0MC42MzQ5MDcxNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NjU1OTA5MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gIHJlYWQgZnJvbSB0aGUgRUVQUk9NLiBJZiBgYWRkcl9sZW5gIHdhcyBncmVhdGVyIHRoYW4gOCwgYG5pYy1cXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXFx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1Mzg0ZWMwZmY1NTQ3YzI3MTc4NDFhNTUyMzViOGRjODM1ZjQ3NmYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTA6MjA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbmluZGV4IDI5OTYwNzYyZTY0YTguLmNkODE5MDM4NjY1MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY1xuQEAgLTc0NCw3ICs3NDQsMTQgQEAgc3RhdGljIF9fbGUxNiBlMTAwX2VlcHJvbV9yZWFkKHN0cnVjdCBuaWMgKm5pYywgdTE2ICphZGRyX2xlbiwgdTE2IGFkZHIpXG4gXHRcdCAqIGNvbXBsZXRlIGFkZHJlc3MuICBVc2UgdGhpcyB0byBhZGp1c3QgYWRkcl9sZW4uICovXG4gXHRcdGN0cmwgPSBpb3JlYWQ4KFx1MDAyNm5pYy1cdTAwM2Vjc3ItXHUwMDNlZWVwcm9tX2N0cmxfbG8pO1xuIFx0XHRpZiAoIShjdHJsIFx1MDAyNiBlZWRvKSBcdTAwMjZcdTAwMjYgaSBcdTAwM2UgMTYpIHtcbi1cdFx0XHQqYWRkcl9sZW4gLT0gKGkgLSAxNik7XG4rXHRcdFx0dTE2IGxlbiA9IGkgLSAxNjtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzZSAqYWRkcl9sZW4pIHtcbitcdFx0XHRcdCphZGRyX2xlbiA9IDA7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0KmFkZHJfbGVuIC09IGxlbjtcbiBcdFx0XHRpID0gMTc7XG4gXHRcdH1cbiBcbkBAIC03NjUsNyArNzcyLDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fbG9hZChzdHJ1Y3QgbmljICpuaWMpXG4gXG4gXHQvKiBUcnkgcmVhZGluZyB3aXRoIGFuIDgtYml0IGFkZHIgbGVuIHRvIGRpc2NvdmVyIGFjdHVhbCBhZGRyIGxlbiAqL1xuIFx0ZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCAwKTtcbi1cdG5pYy1cdTAwM2VlZXByb21fd2MgPSAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbjtcbitcbitcdGlmICghYWRkcl9sZW4gfHwgYWRkcl9sZW4gXHUwMDNlIDgpIHtcbitcdFx0bmV0aWZfZXJyKG5pYywgcHJvYmUsIG5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICBcIkludmFsaWQgRUVQUk9NIGFkZHJlc3MgbGVuZ3RoICV1XFxuXCIsXG4rXHRcdFx0ICBhZGRyX2xlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0bmljLVx1MDAzZWVlcHJvbV93YyA9ICh1MTYpQklUKGFkZHJfbGVuKTtcbiBcbiBcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIG5pYy1cdTAwM2VlZXByb21fd2M7IGFkZHIrKykge1xuIFx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbkBAIC03OTEsNyArODA2LDE1IEBAIHN0YXRpYyBpbnQgZTEwMF9lZXByb21fc2F2ZShzdHJ1Y3QgbmljICpuaWMsIHUxNiBzdGFydCwgdTE2IGNvdW50KVxuIFxuIFx0LyogVHJ5IHJlYWRpbmcgd2l0aCBhbiA4LWJpdCBhZGRyIGxlbiB0byBkaXNjb3ZlciBhY3R1YWwgYWRkciBsZW4gKi9cbiBcdGUxMDBfZWVwcm9tX3JlYWQobmljLCBcdTAwMjZhZGRyX2xlbiwgMCk7XG4tXHRuaWMtXHUwMDNlZWVwcm9tX3djID0gMSBcdTAwM2NcdTAwM2MgYWRkcl9sZW47XG4rXG4rXHRpZiAoIWFkZHJfbGVuIHx8IGFkZHJfbGVuIFx1MDAzZSA4KSB7XG4rXHRcdG5ldGlmX2VycihuaWMsIHByb2JlLCBuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgXCJJbnZhbGlkIEVFUFJPTSBhZGRyZXNzIGxlbmd0aCAldVxcblwiLFxuK1x0XHRcdCAgYWRkcl9sZW4pO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdG5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG4gXG4gXHRpZiAoc3RhcnQgKyBjb3VudCBcdTAwM2U9IG5pYy1cdTAwM2VlZXByb21fd2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjE6NDAuNjM0OTA4MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0NjE3NDQ5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGUxMDAgRUVQUk9NIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBmZXcgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNgOiBgZTEwMF9lZXByb21fcmVhZGAsIGBlMTAwX2VlcHJvbV9sb2FkYCwgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBFRVBST00gaGFuZGxpbmcuIExldCBtZSBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGZpeCBpbiBgZTEwMF9lZXByb21fcmVhZGAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYm91bmRzIGNoZWNrIGZvciBgYWRkcl9sZW5gIGlzIGdvb2Q7IGl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBhbiB1bmRlcmZsb3cgc2NlbmFyaW8uIEJ5IGludHJvZHVjaW5nIGEgY2hlY2sgYGlmIChsZW4gXHUwMDNlICphZGRyX2xlbilgIGJlZm9yZSBzdWJ0cmFjdGluZywgd2UncmUgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGZvciBgYWRkcl9sZW5gLCB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBsYXRlciBvbi4gVGhpcyBhdm9pZHMgYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuXG5cblRoZW4gdGhlcmUgYXJlIHRoZSBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCBjaGFuZ2VzLiAgSGVyZSwgdGhleSdyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYGFkZHJfbGVuYCB0byBwcmV2ZW50IGJvdGggemVybyBhbmQgZXhjZXNzaXZlIHZhbHVlcy4gIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIHdlIGhhdmU6XG5cbmBgYGNcbm5pYy1cdTAwM2VlZXByb21fd2MgPSAodTE2KUJJVChhZGRyX2xlbik7XG5gYGBcblxuVGhlIG9sZCBjb2RlIHdhcyBzdXNjZXB0aWJsZSB0byBhbiB1bmRlcmZsb3csIG1ha2luZyBgYWRkcl9sZW5gIGEgaHVnZSBwb3NpdGl2ZSBudW1iZXIuIFRoaXMsIHdoZW4gdXNlZCBhcyBhIHNoaWZ0IGNvdW50IGluIGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAsIGlzIFVuZGVmaW5lZCBCZWhhdmlvciAoVUIpLCBiZWNhdXNlIHNoaWZ0aW5nIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYml0LXdpZHRoIG9mIHRoZSBvcGVyYW5kIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIEMgc3RhbmRhcmQuIFRoaXMgcGF0Y2ggbm93IGF2b2lkcyBVQiBieSBjaGVja2luZyBmb3IgYW5kIHJlamVjdGluZyBpbnZhbGlkIGBhZGRyX2xlbmAgdmFsdWVzLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSB0aGF0LCBwcmV2aW91c2x5LCBhbiB1bmRlcmZsb3cgY291bGQgbGVhZCB0byBgbmljLVx1MDAzZWVlcHJvbV93Y2AgYmVjb21pbmcgYSB2ZXJ5IGxhcmdlIG51bWJlciwgd2hpY2ggd291bGQgdGhlbiBiZSB1c2VkIGluIGEgbG9vcCB0byBhY2Nlc3MgYG5pYy1cdTAwM2VlZXByb21gOlxuXG5gYGBjXG5mb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBuaWMtXHUwMDNlZWVwcm9tX3djOyBhZGRyKyspIHtcblx0XHRuaWMtXHUwMDNlZWVwcm9tW2FkZHJdID0gZTEwMF9lZXByb21fcmVhZChuaWMsIFx1MDAyNmFkZHJfbGVuLCBhZGRyKTtcbmBgYFxuXG5UaGlzIGVmZmVjdGl2ZWx5IGNyZWF0ZXMgYSBidWZmZXIgb3ZlcmZsb3csIGJlY2F1c2UgYG5pYy1cdTAwM2VlZXByb21gIGlzIGFuIGFycmF5IG9mIGEgc3BlY2lmaWMgc2l6ZSwgYW5kIGlmIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBpcyB0b28gbGFyZ2UsIGl0IHdvdWxkIGFsbG93IHRoZSBwcm9ncmFtIHRvIHdyaXRlIGRhdGEgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuVGhlIHBhdGNoIGVmZmVjdGl2ZWx5IG1pdGlnYXRlcyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnIGFuZCBwcmV2ZW50cyBhIHN1YnNlcXVlbnQgYnVmZmVyIG92ZXJmbG93LiAgSSdtIGNvbmZpZGVudCB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIGVzcGVjaWFsbHkgVUJTQU4sIGFyZSBwZXJmZWN0bHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgbm90IG5lY2Vzc2FyeSBoZXJlIGJlY2F1c2Ugd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0J3MgYSBtYXR0ZXIgb2YgVUIgYW5kIGJvdW5kcyB2aW9sYXRpb25zLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGVlcHJvbWAgd2l0aGluIHRoZSBgc3RydWN0IG5pY2AgdG8gdmVyaWZ5IHRoZSBzaXplIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEl0J3MgYWx3YXlzIGdvb2QgdG8gaGF2ZSB0aGF0IGV4dHJhIGNvbmZpcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIyOjAwLjA5NjY1NzAzN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTgyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5pYyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTUzND1zdHJ1Y3QgcGFyYW1zIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy01MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjUzOTpzdHJ1Y3QgbmljIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtNTQwLVxcdC8qIEJlZ2luOiBmcmVxdWVudGx5IHVzZWQgdmFsdWVzOiBrZWVwIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjI6MDAuMTQ3MDY2Mzk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODgyMDg0NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFMTAwIEVFUFJPTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBJbnRlbCBFMTAwIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcgZnVuY3Rpb25zOiBgZTEwMF9lZXByb21fcmVhZGAsIGBlMTAwX2VlcHJvbV9sb2FkYCwgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGxlbmd0aCBvZiBFRVBST00gYWNjZXNzZXMgYXJlIG1hbmFnZWQuXG5cblRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGBhZGRyX2xlbmAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciBgbmljLVx1MDAzZWVlcHJvbV93Y2AgdG8gYmVjb21lIGV4Y2Vzc2l2ZWx5IGxhcmdlLiAgVGhpcyB3b3JyaWVzIG1lIGJlY2F1c2UgYG5pYy1cdTAwM2VlZXByb21fd2NgIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgc2l6ZSBvciB3b3JkIGNvdW50IG9mIGRhdGEgYmVpbmcgYWNjZXNzZWQgZnJvbSBvciB3cml0dGVuIHRvIHRoZSBFRVBST00uIElmIGBhZGRyX2xlbmAgaXMgcG9vcmx5IHZhbGlkYXRlZCwgaXQgY291bGQgbGVhZCB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIHVzZWQgaW4gY2FsY3VsYXRpb25zLCBhbmQgY29uc2VxdWVudGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFdlIGNhbiBzZWUgdGhpcyBpbW1lZGlhdGVseTogYDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYCB3aXRoIGBhZGRyX2xlbiBcdTAwM2UgOGAgb3IgbmVnYXRpdmUgY2FuIGNyZWF0ZSBhIGh1Z2UgYGVlcHJvbV93Y2AuXG5cblRoZSBwYXRjaCBpcyBmaXhpbmcgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIGBhZGRyX2xlbmAgaW4gYWxsIHRocmVlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBndWFyZHMgYWdhaW5zdCB1bmRlcmZsb3cgaW4gYGUxMDBfZWVwcm9tX3JlYWRgIGFuZCBlbnN1cmVzIGBhZGRyX2xlbmAgaXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChub3QgemVybyBhbmQgbm90IGV4Y2VlZGluZyA4KSBpbiBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYC4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgdG8gZG8gdGhpcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgbmljYCBkZWZpbml0aW9uIGFuZCB0aGUgZGVjbGFyYXRpb24gb2YgYG5pYy1cdTAwM2VlZXByb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBlZXByb21gIGFjdHVhbGx5ICppcyogYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBlZXByb21fd2NgIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSBmaXguIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBhIGxhcmdlIGBlZXByb21fd2NgIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb24gdGhlIGBuaWMtXHUwMDNlZWVwcm9tYCBhcnJheS4gVGhpcyBpcyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MgYmVmb3JlIEkgZnVsbHkgZW5kb3JzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEwOjIyOjE3LjAyOTE1NDg5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Mzk6XFx0c3RydWN0IG5pYyB7XFxuIDU0MDpcXHRcXHQvKiBCZWdpbjogZnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0ICovXFxuIDU0MTpcXHRcXHR1MzIgbXNnX2VuYWJsZVxcdFxcdFxcdFxcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gNTQyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIDU0MzpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcXG4gNTQ0OlxcdFxcdHUxNiAoKm1kaW9fY3RybCkoc3RydWN0IG5pYyAqbmljLCB1MzIgYWRkciwgdTMyIGRpciwgdTMyIHJlZywgdTE2IGRhdGEpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRzdHJ1Y3QgcnggKnJ4c1xcdFxcdFxcdFxcdF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gNTQ3OlxcdFxcdHN0cnVjdCByeCAqcnhfdG9fdXNlO1xcbiA1NDg6XFx0XFx0c3RydWN0IHJ4ICpyeF90b19jbGVhbjtcXG4gNTQ5OlxcdFxcdHN0cnVjdCByZmQgYmxhbmtfcmZkO1xcbiA1NTA6XFx0XFx0ZW51bSBydV9zdGF0ZSBydV9ydW5uaW5nO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRzcGlubG9ja190IGNiX2xvY2tcXHRcXHRcXHRfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIDU1MzpcXHRcXHRzcGlubG9ja190IGNtZF9sb2NrO1xcbiA1NTQ6XFx0XFx0c3RydWN0IGNzciBfX2lvbWVtICpjc3I7XFxuIDU1NTpcXHRcXHRlbnVtIHNjYl9jbWRfbG8gY3VjX2NtZDtcXG4gNTU2OlxcdFxcdHVuc2lnbmVkIGludCBjYnNfYXZhaWw7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gNTU4OlxcdFxcdHN0cnVjdCBjYiAqY2JzO1xcbiA1NTk6XFx0XFx0c3RydWN0IGNiICpjYl90b191c2U7XFxuIDU2MDpcXHRcXHRzdHJ1Y3QgY2IgKmNiX3RvX3NlbmQ7XFxuIDU2MTpcXHRcXHRzdHJ1Y3QgY2IgKmNiX3RvX2NsZWFuO1xcbiA1NjI6XFx0XFx0X19sZTE2IHR4X2NvbW1hbmQ7XFxuIDU2MzpcXHRcXHQvKiBFbmQ6IGZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6IGtlZXAgYWRqYWNlbnQgZm9yIGNhY2hlIGVmZmVjdCAqL1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRlbnVtIHtcXG4gNTY2OlxcdFxcdFxcdGljaCAgICAgICAgICAgICAgICA9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbiA1Njc6XFx0XFx0XFx0cHJvbWlzY3VvdXMgICAgICAgID0gKDEgXFx1MDAzY1xcdTAwM2MgMSksXFxuIDU2ODpcXHRcXHRcXHRtdWx0aWNhc3RfYWxsICAgICAgPSAoMSBcXHUwMDNjXFx1MDAzYyAyKSxcXG4gNTY5OlxcdFxcdFxcdHdvbF9tYWdpYyAgICAgICAgICA9ICgxIFxcdTAwM2NcXHUwMDNjIDMpLFxcbiA1NzA6XFx0XFx0XFx0aWNoXzEwaF93b3JrYXJvdW5kID0gKDEgXFx1MDAzY1xcdTAwM2MgNCksXFxuIDU3MTpcXHRcXHR9IGZsYWdzXFx0XFx0XFx0XFx0XFx0X19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbiA1NzI6XFx0XFxuIDU3MzpcXHRcXHRlbnVtIG1hYyBtYWM7XFxuIDU3NDpcXHRcXHRlbnVtIHBoeSBwaHk7XFxuIDU3NTpcXHRcXHRzdHJ1Y3QgcGFyYW1zIHBhcmFtcztcXG4gNTc2OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nO1xcbiA1Nzc6XFx0XFx0c3RydWN0IG1paV9pZl9pbmZvIG1paTtcXG4gNTc4OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7XFxuIDU3OTpcXHRcXHRlbnVtIGxvb3BiYWNrIGxvb3BiYWNrO1xcbiA1ODA6XFx0XFxuIDU4MTpcXHRcXHRzdHJ1Y3QgbWVtICptZW07XFxuIDU4MjpcXHRcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRzdHJ1Y3QgZG1hX3Bvb2wgKmNic19wb29sO1xcbiA1ODU6XFx0XFx0ZG1hX2FkZHJfdCBjYnNfZG1hX2FkZHI7XFxuIDU4NjpcXHRcXHR1OCBhZGFwdGl2ZV9pZnM7XFxuIDU4NzpcXHRcXHR1OCB0eF90aHJlc2hvbGQ7XFxuIDU4ODpcXHRcXHR1MzIgdHhfZnJhbWVzO1xcbiA1ODk6XFx0XFx0dTMyIHR4X2NvbGxpc2lvbnM7XFxuIDU5MDpcXHRcXHR1MzIgdHhfZGVmZXJyZWQ7XFxuIDU5MTpcXHRcXHR1MzIgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuIDU5MjpcXHRcXHR1MzIgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcXG4gNTkzOlxcdFxcdHUzMiB0eF9mY19wYXVzZTtcXG4gNTk0OlxcdFxcdHUzMiB0eF90Y29fZnJhbWVzO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHR1MzIgcnhfZmNfcGF1c2U7XFxuIDU5NzpcXHRcXHR1MzIgcnhfZmNfdW5zdXBwb3J0ZWQ7XFxuIDU5ODpcXHRcXHR1MzIgcnhfdGNvX2ZyYW1lcztcXG4gNTk5OlxcdFxcdHUzMiByeF9zaG9ydF9mcmFtZV9lcnJvcnM7XFxuIDYwMDpcXHRcXHR1MzIgcnhfb3Zlcl9sZW5ndGhfZXJyb3JzO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHR1MTYgZWVwcm9tX3djO1xcbiA2MDM6XFx0XFx0X19sZTE2IGVlcHJvbVsyNTZdO1xcbiA2MDQ6XFx0XFx0c3BpbmxvY2tfdCBtZGlvX2xvY2s7XFxuIDYwNTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbiA2MDY6XFx0fTtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGlubGluZSB2b2lkIGUxMDBfd3JpdGVfZmx1c2goc3RydWN0IG5pYyAqbmljKVxcbiA2MDk6XFx0e1xcbiA2MTA6XFx0XFx0LyogRmx1c2ggcHJldmlvdXMgUENJIHdyaXRlcyB0aHJvdWdoIGludGVybWVkaWF0ZSBicmlkZ2VzXFxuIDYxMTpcXHRcXHQgKiBieSBkb2luZyBhIGJlbmlnbiByZWFkICovXFxuIDYxMjpcXHRcXHQodm9pZClpb3JlYWQ4KFxcdTAwMjZuaWMtXFx1MDAzZWNzci1cXHUwMDNlc2NiLnN0YXR1cyk7XFxuIDYxMzpcXHR9XFxuIDYxNDpcXHRcXG4gNjE1OlxcdHN0YXRpYyB2b2lkIGUxMDBfZW5hYmxlX2lycShzdHJ1Y3QgbmljICpuaWMpXFxuIDYxNjpcXHR7XFxuIDYxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MjA6XFx0XFx0aW93cml0ZTgoaXJxX21hc2tfbm9uZSwgXFx1MDAyNm5pYy1cXHUwMDNlY3NyLVxcdTAwM2VzY2IuY21kX2hpKTtcXG4gNjIxOlxcdFxcdGUxMDBfd3JpdGVfZmx1c2gobmljKTtcXG4gNjIyOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm5pYy1cXHUwMDNlY21kX2xvY2ssIGZsYWdzKTtcXG4gNjIzOlxcdH1cXG4gNjI0OlxcdFxcbiA2MjU6XFx0c3RhdGljIHZvaWQgZTEwMF9kaXNhYmxlX2lycShzdHJ1Y3QgbmljICpuaWMpXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MzA6XFx0XFx0aW93cml0ZTgoaXJxX21hc2tfYWxsLCBcXHUwMDI2bmljLVxcdTAwM2Vjc3ItXFx1MDAzZXNjYi5jbWRfaGkpO1xcbiA2MzE6XFx0XFx0ZTEwMF93cml0ZV9mbHVzaChuaWMpO1xcbiA2MzI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bmljLVxcdTAwM2VjbWRfbG9jaywgZmxhZ3MpO1xcbiA2MzM6XFx0fVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHRzdGF0aWMgdm9pZCBlMTAwX2h3X3Jlc2V0KHN0cnVjdCBuaWMgKm5pYylcXG4gNjM2OlxcdHtcXG4gNjM3OlxcdFxcdC8qIFB1dCBDVSBhbmQgUlUgaW50byBpZGxlIHdpdGggYSBzZWxlY3RpdmUgcmVzZXQgdG8gZ2V0XFxuIDYzODpcXHRcXHQgKiBkZXZpY2Ugb2ZmIG9mIFBDSSBidXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTA6MjI6MTcuMDI5NDAwMDc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY0NTU4MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZTEwMCBEcml2ZXIgRUVQUk9NIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGUxMDBgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFRVBST00gaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYGFkZHJfbGVuYCBhbmQgaG93IGl0J3MgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBib3VuZHMgY2hlY2tpbmcgdG8gYGFkZHJfbGVuYCBpbiB0aGUgYGUxMDBfZWVwcm9tX3JlYWRgLCBgZTEwMF9lZXByb21fbG9hZGAsIGFuZCBgZTEwMF9lZXByb21fc2F2ZWAgZnVuY3Rpb25zLiBTZWVtcyBsaWtlIHRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIG91dCBvZiB3aGFjay5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZTEwMF9lZXByb21fcmVhZGAsIGBhZGRyX2xlbmAgaXMgbW9kaWZpZWQgYmFzZWQgb24gc29tZSBFRVBST00gY29udHJvbCBiaXRzIGFuZCBhbiBpdGVyYXRpb24gY291bnRlci4gSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjaGVjaywgYW5kIGlmIGEgY2VydGFpbiBjb25kaXRpb24gaXMgbWV0LCBgYWRkcl9sZW5gIGdldHMgcmVkdWNlZC4gTXkgY29uY2VybiBpcywgdGhhdCB0aGVyZSBpcyBhIGNoZWNrIGlmIGBsZW4gXHUwMDNlICphZGRyX2xlbmAsIGluIHdoaWNoIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYCphZGRyX2xlbiA9IDA7YCBicmVha3MgdGhlIGxvb3AuIEluIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgZTEwMF9lZXByb21fbG9hZGAgYW5kIGBlMTAwX2VlcHJvbV9zYXZlYCwgaXQgY2hlY2tzIGlmIGBhZGRyX2xlbmAgaXMgemVybywgb3IgZ3JlYXRlciB0aGFuIDgsIGFuZCByZXR1cm5zIGFuIGVycm9yLiBUaGUga2V5IGlzIGluIGhvdyBgYWRkcl9sZW5gIGlzIHVzZWQuXG5cbkkgaW1tZWRpYXRlbHkgc2VlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUuIFRoZSBjb2RlIHJlYWRzIGBhZGRyX2xlbmAgYW5kIHRoZW4gY2FsY3VsYXRlcyBgbmljLVx1MDAzZWVlcHJvbV93YyA9IDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYC4gSWYgYGFkZHJfbGVuYCBiZWNvbWVzIHRvbyBsYXJnZSwgdGhpcyBiaXQtc2hpZnQgb3BlcmF0aW9uIGNvdWxkIHJlc3VsdCBpbiBhIG1hc3NpdmUgbnVtYmVyIG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gSWYgYGFkZHJfbGVuYCBiZWNvbWVzIDEwIChvciBsYXJnZXIpLCB0aGVuIGAxIFx1MDAzY1x1MDAzYyBhZGRyX2xlbmAgaXMgMTAyNCwgd2hpY2ggaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBgbmljLVx1MDAzZWVlcHJvbWAgYXJyYXksIHdoaWNoIGlzIG9ubHkgc2l6ZSAyNTYuIFRoaXMgbWVhbnMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpcyBnb2luZyB0byBoYXBwZW4uXG5cbmBuaWMtXHUwMDNlZWVwcm9tX3djYCBjb250cm9scyB0aGUgbG9vcCBib3VuZCBmb3IgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEuIFRoZSBjb2RlIGl0ZXJhdGVzIHVwIHRvIGBuaWMtXHUwMDNlZWVwcm9tX3djYCwgd3JpdGluZyB0byBgbmljLVx1MDAzZWVlcHJvbVthZGRyXWAuIElmIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBleGNlZWRzIDI1NiwgaXQncyBhIGd1YXJhbnRlZWQgb3V0LW9mLWJvdW5kcyB3cml0ZS4gQmluZ28hIENsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGNhdWdodCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKS5cblxuTm93LCBsZXQgbWUgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaXNzdWUgdG8gZG8gd2l0aCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSB2aWEgZXRodG9vbC4gV2VsbCwgdGhlIHBhdGNoIHJlc3RyaWN0cyBgYWRkcl9sZW5gIHRvIGJlIFx1MDAzYz0gOC4gTWVhbmluZywgdGhhdCBgZWVwcm9tX3djIFx1MDAzYz0gMjU2YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIHJlYWQgaXMgYW4gaXNzdWUuIFRoZSBjb3JlIGZpeCBpcyBwcmV2ZW50aW5nIGBhZGRyX2xlbmAgZnJvbSBiZWNvbWluZyBhIGh1Z2UgbnVtYmVyLCBsZWFkaW5nIHRvIGFuIE9PQiBhY2Nlc3MuXG5cbldhaXQsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCEgSWYgYGFkZHJfbGVuYCBpcyByZWR1Y2VkIGJ5IHRvbyBtdWNoLCBjb3VsZCBpdCB3cmFwIGFyb3VuZD8gWWVzLCB0aGUgYCphZGRyX2xlbiAtPSBsZW5gIGNvdWxkIHVuZGVyZmxvdywgbGVhZGluZyB0byBsYXJnZSBgYWRkcl9sZW5gLiBBaCwgYnV0IGBlMTAwX2VlcHJvbV9sb2FkYCBhY3R1YWxseSBpbml0aWFsaXplcyBgYWRkcl9sZW5gIHRvIDggYW5kIHRoZW4gaXQncyB1c2VkIGluIGBlMTAwX2VlcHJvbV9yZWFkYC4gSWYgYW4gdW5kZXJmbG93IGhhcHBlbnMsIHRoZW4gYDEgXHUwMDNjXHUwMDNjIGFkZHJfbGVuYCByZXN1bHRzIGluIGEgaHVnZSBudW1iZXIuXG5cblRoZSB0aGluZyBpcywgYGFkZHJfbGVuYCBpcyBgdTE2YC4gSWYgaXQgYmVjb21lcyA2NTUzNSwgYDEgXHUwMDNjXHUwMDNjIDY1NTM1YCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gVGhhdCdzIGEgc2hpZnQgY291bnQgdGhhdCdzIHRvbyBsYXJnZSwgYnV0IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU0FOaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy5cblxuU28sIGZvciBleGFtcGxlLCBsZXQncyBzYXkgYGFkZHJfbGVuYCBiZWNvbWVzIDEwLiBUaGVuIGBuaWMtXHUwMDNlZWVwcm9tX3djID0gMTAyNGAsIGFuZCB3cml0aW5nIHVwIHRvIDEwMjQgdG8gYW4gYXJyYXkgb2Ygc2l6ZSAyNTYgaXMgYW4gT09CIHdyaXRlLiBUaGlzIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5Ob3csIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpc3N1ZT8gTm8sIHRoaXMgaXMgYW4gT09CIHdyaXRlIGR1ZSB0byBhIGJpdCBzaGlmdCB0aGF0IGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgdGhhdCBLQVNBTiBhbmQgVUJTQU4gYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nLiBObyBtZW1vcnkgbGVha3Mgb3IgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IEtNU0FOIHNwZWNpYWxpemVzIGluLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciBzaGlmdCB0aGF0IGNhbiBiZSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gLiBJZiBgYWRkcl9sZW5gIGlzIGxhcmdlciB0aGFuIDgsIGBuaWMtXHUwMDNlZWVwcm9tX3djYCBleGNlZWRzIHRoZSBzaXplIG9mIGBuaWMtXHUwMDNlZWVwcm9tYC4gS0FTQU4gZGV0ZWN0cyB0aGUgYnVmZmVyIG92ZXJmbG93LCBVQlNBTiBkZXRlY3RzIHRoZSB1bmRlZmluZWQgYml0LXNoaWZ0LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrLCB0aGVyZWZvcmUsIG5vIG5lZWQgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDI3LCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMDoyMjo0Ny4xOTM5NjQ0OThaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQgb3V0IG9mIGJvdW5kcykgY2F1c2VkIGJ5IGFuIGludmFsaWQgYGFkZHJfbGVuYCByZWFkIGZyb20gdGhlIEVFUFJPTS4gSWYgYGFkZHJfbGVuYCB3YXMgZ3JlYXRlciB0aGFuIDgsIGBuaWMtXFx1MDAzZWVlcHJvbV93Y2Agd291bGQgZXhjZWVkIHRoZSAyNTYtZWxlbWVudCBzaXplIG9mIHRoZSBgbmljLVxcdTAwM2VlZXByb21gIGFycmF5LCBsZWFkaW5nIHRvIGEgYnVmZmVyIG92ZXJmbG93IGR1cmluZyB0aGUgRUVQUk9NIHJlYWQgbG9vcC4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gQWRkaXRpb25hbGx5LCB0aGUgc2hpZnQgYDEgXFx1MDAzY1xcdTAwM2MgYWRkcl9sZW5gIHdpdGggYSBsYXJnZSBgYWRkcl9sZW5gIGlzIHVuZGVmaW5lZCBiZWhhdmlvciwgd2hpY2ggaXMgY2F1Z2h0IGJ5IFVCU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdCBvdXQgb2YgYm91bmRzKSBjYXVzZWQgYnkgYW4gaW52YWxpZCBgYWRkcl9sZW5gIHJlYWQgZnJvbSB0aGUgRUVQUk9NLiBJZiBgYWRkcl9sZW5gIHdhcyBncmVhdGVyIHRoYW4gOCwgYG5pYy1cXHUwMDNlZWVwcm9tX3djYCB3b3VsZCBleGNlZWQgdGhlIDI1Ni1lbGVtZW50IHNpemUgb2YgdGhlIGBuaWMtXFx1MDAzZWVlcHJvbWAgYXJyYXksIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIHRoZSBFRVBST00gcmVhZCBsb29wLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBBZGRpdGlvbmFsbHksIHRoZSBzaGlmdCBgMSBcXHUwMDNjXFx1MDAzYyBhZGRyX2xlbmAgd2l0aCBhIGxhcmdlIGBhZGRyX2xlbmAgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBpcyBjYXVnaHQgYnkgVUJTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludm9sdmVkIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvtnh7[1] Phase: Succeeded StartedAt: 2026-08-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 10:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 10:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2] Phase: Succeeded StartedAt: 2026-08-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 10:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:22:59 +0000 UTC FinishedAt: 2026-08-20 10:23:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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-workflowvtnh7/series-workflowvtnh7-convert-artifact-2887161989/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:23:09 +0000 UTC FinishedAt: 2026-08-20 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:23:09 +0000 UTC FinishedAt: 2026-08-20 10:42:19 +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:*0216d980-12bc-476f-b86c-2cae1d7e4015,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-workflowvtnh7/series-workflowvtnh7-convert-artifact-2887161989/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": "1d41a080-86df-4b95-a4b3-456f854b9402", "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-workflowvtnh7/series-workflowvtnh7-build-action-2631226411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:23:09 +0000 UTC FinishedAt: 2026-08-20 10:42:09 +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:*0216d980-12bc-476f-b86c-2cae1d7e4015,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-workflowvtnh7/series-workflowvtnh7-convert-artifact-2887161989/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": "1d41a080-86df-4b95-a4b3-456f854b9402", "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-workflowvtnh7/series-workflowvtnh7-build-action-2631226411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:19 +0000 UTC FinishedAt: 2026-08-20 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:19 +0000 UTC FinishedAt: 2026-08-20 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:19 +0000 UTC FinishedAt: 2026-08-20 10:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:19 +0000 UTC FinishedAt: 2026-08-20 10:42:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-workflowvtnh7/series-workflowvtnh7-convert-artifact-1357791072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:29 +0000 UTC FinishedAt: 2026-08-20 10:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:42:29 +0000 UTC FinishedAt: 2026-08-20 10:44:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d41a080-86df-4b95-a4b3-456f854b9402,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-workflowvtnh7/series-workflowvtnh7-build-action-2631226411/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-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:44:30 +0000 UTC FinishedAt: 2026-08-20 10:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:44:30 +0000 UTC FinishedAt: 2026-08-20 10:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:44:30 +0000 UTC FinishedAt: 2026-08-20 11:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:44:30 +0000 UTC FinishedAt: 2026-08-20 11:04:05 +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:*0216d980-12bc-476f-b86c-2cae1d7e4015,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-workflowvtnh7/series-workflowvtnh7-convert-artifact-1357791072/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": "289ef74b-7363-43db-af9b-d107298508ba", "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-workflowvtnh7/series-workflowvtnh7-build-action-2875239452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 10:44:30 +0000 UTC FinishedAt: 2026-08-20 11:03:55 +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:*0216d980-12bc-476f-b86c-2cae1d7e4015,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-workflowvtnh7/series-workflowvtnh7-convert-artifact-1357791072/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": "289ef74b-7363-43db-af9b-d107298508ba", "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-workflowvtnh7/series-workflowvtnh7-build-action-2875239452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:04:05 +0000 UTC FinishedAt: 2026-08-20 11:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:04:05 +0000 UTC FinishedAt: 2026-08-20 11:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:04:05 +0000 UTC FinishedAt: 2026-08-20 11:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:04:05 +0000 UTC FinishedAt: 2026-08-20 11:05:56 +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:*289ef74b-7363-43db-af9b-d107298508ba,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-workflowvtnh7/series-workflowvtnh7-build-action-2875239452/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-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +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":["e100_probe","e100_set_eeprom","e100_diag_test"],"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:*1d41a080-86df-4b95-a4b3-456f854b9402,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*289ef74b-7363-43db-af9b-d107298508ba,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-workflowvtnh7/series-workflowvtnh7-build-action-2631226411/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-workflowvtnh7/series-workflowvtnh7-build-action-2875239452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 11:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 11:06:12 +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":["e100_probe","e100_set_eeprom","e100_diag_test"],"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-workflowvtnh7/series-workflowvtnh7-convert-artifact-1629955001/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 11:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 11:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:06 +0000 UTC FinishedAt: 2026-08-20 11:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:16 +0000 UTC FinishedAt: 2026-08-20 12:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtnh7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"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":["e100_probe","e100_set_eeprom","e100_diag_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["E100"],"series_id":"ecd03f40-5ec8-4a9c-be98-e75dc18e14a8","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-20 11:06:16 +0000 UTC FinishedAt: 2026-08-20 12:03:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d41a080-86df-4b95-a4b3-456f854b9402,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*289ef74b-7363-43db-af9b-d107298508ba,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-workflowvtnh7/series-workflowvtnh7-build-action-2631226411/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-workflowvtnh7/series-workflowvtnh7-build-action-2875239452/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-workflowvtnh7/series-workflowvtnh7-convert-artifact-1629955001/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,}