Name: series-workflowbldjz Phase: Succeeded StartedAt: 2026-08-25 10:10:00 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[0] Phase: Succeeded StartedAt: 2026-08-25 10:10:00 +0000 UTC FinishedAt: 2026-08-25 10:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 10:10:00 +0000 UTC FinishedAt: 2026-08-25 10:29:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "2a6bbd3f-016b-4619-9f1e-de98140e9b96" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gro_cells_receive", "gtp_encap_recv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjI0OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmZiZjYxN2IxYWNjOTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiAmIzQzOzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bylcbiB7XG4mIzQzO1x0aWYgKHNrYl9pc19nc28oc2tiKSkge1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCYjMzQ7R1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkge1xuIFx0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICYjNDM7MzA4MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgYW5kIGFkZHMgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCB0byBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHByZXZlbnQgYWNjZXNzaW5nIGFuIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29yayBzdGFjayBhbmQgdGhlIEdUUCBkcml2ZXIgdGhhdCBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcuIFRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBzZW5kaW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIChlLmcuLCB2aWEgVURQIGZvciBHVFApIG9yIGJ5IHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHV0aWxpemUgR1JPIGNlbGxzIChlLmcuLCBWWExBTikuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4YTUzYWRlOWNmOWM3OTI4YjUyNTc5ZWUyNWMxMzdlZjYyNDJjZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uZmJmNjE3YjFhY2M5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sCiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pCiB7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O0dTTyBpcyBub3Qgc3VwcG9ydCBpbiBHVFBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkgewogCQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXG4mIzM0Oyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMDgyLDYgJiM0MzszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwppbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwpAQCAtMjIsNiAmIzQzOzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAodW5saWtlbHkoIShkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsKIAlpZiAoIWdjZWxscy0mZ3Q7Y2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7CiAJCXJlcyA9IG5ldGlmX3J4KHNrYik7CiAJCWdvdG8gdW5sb2NrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHRoZSBHVFAgYW5kIEdSTyBTdWJzeXN0ZW1zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBkcml2ZXJzL25ldC9ndHAuY2AsIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEdUUCAoR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wpIGVuY2Fwc3VsYXRpb24uCgpTcGVjaWZpY2FsbHksIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIHRoZSBgZ3RwX3J4YCBmdW5jdGlvbiBpcyBub3cgZHJvcHBpbmcgR1NPIHNrYnMgKGBza2JfaXNfZ3NvKHNrYilgKS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZm9yIEdUUCB0cmFmZmljLiBUaGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgYW5vdGhlciBzaWduYWwuIEFuZCwgdGhlIGNhbGwgdG8gdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCBzdWdnZXN0cyB3ZSYjMzk7cmUgYWRqdXN0aW5nIGhvdyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBoYW5kbGVzIHRyYW5zcG9ydCBoZWFkZXJzLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgZW5jYXBzdWxhdGVkIHBhY2tldHMuCgpTbywgbGV0JiMzOTtzIGRyaWxsIGRvd246IGBndHBfcnhgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1RQIGRyaXZlciwgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gd2l0aGluIHRoZSBHUk8gc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLgoKQWxyaWdodCwgYSBxdWljayBzZWFyY2ggY29uZmlybXMgYGd0cF9yeGAgaXMgY2FsbGVkIGZyb20gYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgR1RQLWVuY2Fwc3VsYXRlZCBVRFAgdHJhZmZpYy4gYGdyb19jZWxsc19yZWNlaXZlYCBpcyBtdWNoIG1vcmUgd2lkZWx5IHVzZWQsIGJlaW5nIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZHJpdmVycyBsaWtlIGdlbmV2ZSwgdnhsYW4sIG1hY3NlYywgaXB2bGFuIGFuZCBvdGhlcnMsIGluZGljYXRpbmcgYSBtb3JlIGdlbmVyYWwgYWRqdXN0bWVudCB0byBob3cgR1JPIHdvcmtzLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgR1RQIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIEdST19DRUxMUyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGBHUk9fQ0VMTFNgIHN5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGljaCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gaXQgbWlnaHQgYWZmZWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucywgYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHksIGFuZCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGltcGxpY2l0bHkgZW5hYmxlIGl0IHRocm91Z2ggYW5vdGhlciBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIGluIHRoZSBjb2RlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZWZhdWx0IHNldHRpbmdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgbXkgcGFydGljdWxhciB1c2UgY2FzZS4gVWx0aW1hdGVseSBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBjdXN0b21pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHUk9fQ0VMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NjE9Y29uZmlnIERTVF9DQUNIRVxuLS1cbm5ldC9LY29uZmlnLTQ2NC1cbm5ldC9LY29uZmlnOjQ2NTpjb25maWcgR1JPX0NFTExTXG5uZXQvS2NvbmZpZy00NjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgb2YgR1JPX0NFTExTKioKCkFscmlnaHQsIHNvIGBHUk9fQ0VMTFNgLiBJdCYjMzk7cyBhIGJvb2xlYW4gY29uZmlnLCB3aGljaCBtZWFucyBpdCYjMzk7cyBlaXRoZXIgb24gb3Igb2ZmLCBhIHNpbXBsZSBmbGFnLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgYXJlIGZyZXF1ZW50bHkgdG9nZ2xlZCBieSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zLCBtZWFuaW5nIGl0cyBhY3RpdmF0aW9uIChvciBkZWFjdGl2YXRpb24pIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIHN0YW5kLWFsb25lIGNob2ljZS4gSXQmIzM5O3MgdXN1YWxseSBhIGRlcGVuZGVuY3kuIFJpZ2h0IG5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgcGljdHVyZSBhIGxpdHRsZSBiZXR0ZXIsIGVzcGVjaWFsbHkgdGhlIGNvbnRleHQgd2hlcmUgYEdST19DRUxMU2AgaXMgZGVmaW5lZCBhcyBhIGRlcGVuZGVuY3kuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMsIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgc2VsZWN0aW5nLCBhbmQgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcyBgR1JPX0NFTExTYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgcGFydGljdWxhciBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBHUk9fQ0VMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzMtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjM0Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbmRyaXZlcnMvbmV0L0tjb25maWctMjUwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjMtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjY0Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzIyLVx0c2VsZWN0IENSWVBUT19HQ01cbmRyaXZlcnMvbmV0L0tjb25maWc6MzIzOlx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZz02PW1lbnVjb25maWcgUk1ORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTgtXHRkZWZhdWx0IG5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc6OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctMTAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTctXHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVERFVklDRVNcbm5ldC9kc2EvS2NvbmZpZzo4Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L2RzYS9LY29uZmlnLTktXHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xODgtXHRzZWxlY3QgRFNUX0NBQ0hFXG5uZXQvaXB2NC9LY29uZmlnOjE4OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC9pcHY0L0tjb25maWctMTkwLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDItXHRzZWxlY3QgRFNUX0NBQ0hFXG5uZXQvaXB2Ni9LY29uZmlnOjIwMzpcdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC9pcHY2L0tjb25maWctMjA0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctNy1cdGRlcGVuZHMgb24gSU5FVFxubmV0L3hmcm0vS2NvbmZpZzo4Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L3hmcm0vS2NvbmZpZy05LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogR1JPX0NFTExTIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdGhlIGNoYW5nZSB0b3VjaGVzIGBHUk9fQ0VMTFNgLCBzcGVjaWZpY2FsbHkgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aHJvdWdoIHRoZSBjb250ZXh0IG9mIGBWWExBTmAsIGBHRU5FVkVgLCBgQkFSRVVEUGAsIGBNQUNTRUNgLCBgUk1ORVRgLCBgTkVUX0RTQWAsIGBORVRfSVBfVFVOTkVMYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBYRlJNYC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCBgZ3RwX3J4YCBhbmQgYGdyb19jZWxsc19yZWNlaXZlYC4KCmBndHBfcnhgLCB3aGljaCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIGlzIG9ubHkgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX0dUUGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZC4gVGhlbiwgYGdyb19jZWxsc19yZWNlaXZlYCBzaXRzIGluIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AsIGFuZCBpdCBpcyBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfR1JPX0NFTExTYCBpcyBlbmFibGVkLgoKTXkgZmlyc3QgY2hlY2sgaXMgdG8gY29uZmlybSBpZiBgZ3RwX3J4YCBpcyBldmVuIHJlYWNoYWJsZS4gSXQgaXMgY2FsbGVkIGZyb20gYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgLiBUaGVzZSBhcmUgVURQIGVuY2Fwc3VsYXRpb24gcmVjZWl2ZSBjYWxsYmFja3MsIHdoaWNoIGNvbmZpcm1zIGl0ICppcyogcmVhY2hhYmxlLgoKVGhlbiBJIGNoZWNrZWQgYGdyb19jZWxsc19yZWNlaXZlYC4gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhcyBpdCYjMzk7cyB1c2VkIGJ5IHZhcmlvdXMgZHJpdmVycyBsaWtlIGB2eGxhbl9yY3ZgLCBgZ2VuZXZlX3J4YCwgYG1hY3NlY19oYW5kbGVfZnJhbWVgLCBhbmQgbW9yZS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKVGhlIHJvb3Qgb2YgdGhpcyBwYXRjaCBpcyBhIGJ1ZyB3aGVyZSBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGlzIGJlaW5nIGFjY2Vzc2VkIGF0IHRoZSB3cm9uZyB0aW1lIG9yIEdTTyBwYWNrZXRzIGFyZSBiZWluZyBkcm9wcGVkIGluIEdUUC4gSSYjMzk7bSBzZWVpbmcgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGltcGFjdGluZyB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGd0cF9yeGA6IG5hbWVseSBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIHR3byBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC9ndHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cFswMV11P191ZHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTU2OT1zdGF0aWMgaW50IGd0cF9wcm90b190b19mYW1pbHkoX191MTYgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtNTg0LS8qIDEgbWVhbnMgcGFzcyB1cCB0byB0aGUgc3RhY2ssIC0xIG1lYW5zIGRyb3AgYW5kIDAgbWVhbnMgZGVjYXBzdWxhdGVkLiAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6NTg1OnN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtNTg2LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz03NTY9c3RhdGljIGludCBndHBfcGFyc2VfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmhkcmxlbilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy03OTItXG5kcml2ZXJzL25ldC9ndHAuYzo3OTM6c3RhdGljIGludCBndHAxdV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtNzk0LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz05MDg9c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTIxLVx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3JlY2VpdmVkIEdUUDAgcGFja2V0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMjpcdFx0cmV0ID0gZ3RwMF91ZHBfZW5jYXBfcmVjdihndHAsIHNrYik7XG5kcml2ZXJzL25ldC9ndHAuYy05MjMtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyNS1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAxVSBwYWNrZXRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZ3RwLmM6OTI2Olx0XHRyZXQgPSBndHAxdV91ZHBfZW5jYXBfcmVjdihndHAsIHNrYik7XG5kcml2ZXJzL25ldC9ndHAuYy05MjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb2RlJiMzOTtzICYjMzQ7bWluZCYjMzQ7OgoKKipHVFAgRW5jYXBzdWxhdGlvbiBSZWNlcHRpb24gRmxvdyoqCgpPa2F5LCBzbyBJIHNlZSBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIEhtbSwgdGhleSYjMzk7cmUgc3RhdGljIGZ1bmN0aW9ucy4gSW50ZXJlc3RpbmcuIFRoYXQgdGVsbHMgbWUgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gdGhpcyBtb2R1bGUsIGEgbG9jYWxpemVkIGRldGFpbCwgYW5kIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUuIFRoZXkmIzM5O3JlIGxpa2UgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLgoKTm93LCB3aGVyZSBhcmUgdGhleSBiZWluZyB1c2VkPyBBaCwgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20gYGd0cF9lbmNhcF9yZWN2YC4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlICYjMzQ7bWFpbiBlbnRyeSBwb2ludCYjMzQ7IGZvciByZWNlaXZpbmcgZW5jYXBzdWxhdGVkIEdUUCB0cmFmZmljLCBhbmQgdGhlc2UgdHdvIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRoZSB3b3JraG9yc2VzIHRoYXQgaGFuZGxlIHRoZSBhY3R1YWwgZGUtZW5jYXBzdWxhdGlvbiwgdGhlIHVucGFja2luZy4gSSYjMzk7bSBndWVzc2luZyBlYWNoIG9uZSBvZiB0aGVtIHByb2JhYmx5IGhhbmRsZXMgdGhlIFVEUCBlbmNhcHN1bGF0aW9uIG9mIGEgcGFydGljdWxhciBHVFAgdmVyc2lvbiBvciBmbG93LCBiYXNlZCBvbiB3aGF0IEkgd291bGQgZXhwZWN0IHRoZSBuYW1pbmcgdG8gaW1wbHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIG9mIGBndHBfZW5jYXBfcmVjdmAgdG8gdHJ1bHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlbSBhbmQgYmFzZWQgb24gd2hhdCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTg5MT1zdGF0aWMgdm9pZCBndHBfZW5jYXBfZGlzYWJsZShzdHJ1Y3QgZ3RwX2RldiAqZ3RwKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkwNy0gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjkwODpzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTkwOS17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwOT1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM5LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTQ0MDpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDEtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTY1ND1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5NC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE2OTU6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNjk2LVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR1RQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZ3RwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBUaGUgY29kZSBkZWZpbmVzIGl0IGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGV4cG9zZSBhIGZ1bmN0aW9uYWwgQVBJIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHdoZW4gd2UgY29uc2lkZXIgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIEkgc2VlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGB0dW5jZmcuZW5jYXBfcmN2YC4gVGhlbiwgSSYjMzk7bSByZW1pbmRlZCBieSB0aGUgcHJvbXB0IHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4KCkFoYSEgU2luY2UgYGd0cF9lbmNhcF9yZWN2YCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGF0JiMzOTtzIGdvb2QsIHNvIGl0JiMzOTtzIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIEkgYW0gY3VyaW91cyBhcyB0byB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHRoZSBiZXN0IGRlc2lnbiBjaG9pY2UuCgpOb3csIGxldCYjMzk7cyBjb250cmFzdCB0aGF0LiBXZSBoYXZlIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIEkgcmVjYWxsIHdvcmtpbmcgd2l0aCB0aGF0IGF0IHNvbWUgcG9pbnQuIEl0IG1pZ2h0IGJlIGJldHRlciBzaW5jZSBpdCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBtb2R1bGVzIGFuZCBkb2VzIG5vdCByZWx5IG9uIGEgZnVuY3Rpb24gcG9pbnRlci4KCkkgdGhpbmsgSSB3aWxsIHRha2UgYSBsb29rIGF0IGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ncm9fY2VsbHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ncm9fY2VsbHMuYz04PXN0cnVjdCBncm9fY2VsbCB7XG4tLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTMtXG5uZXQvY29yZS9ncm9fY2VsbHMuYzoxNDppbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTUte1xuLS1cbm5ldC9jb3JlL2dyb19jZWxscy5jLTU1LX1cbm5ldC9jb3JlL2dyb19jZWxscy5jOjU2OkVYUE9SVF9TWU1CT0woZ3JvX2NlbGxzX3JlY2VpdmUpO1xubmV0L2NvcmUvZ3JvX2NlbGxzLmMtNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgR1RQIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgc28gYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGFib3V0IHRoZSBHVFAgcGF0aCBpdHNlbGY/IFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gSG1tLCBpcyB0aGVyZSBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHN5c2NhbGwgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmVsYXRlZCB0byBHVFA/IEdpdmVuIHRoYXQgR1RQIHBhY2tldHMgY29tZSBpbiB2aWEgVURQIGVuY2Fwc3VsYXRpb24sIHRoZSByZWFsIGVudHJ5IHBvaW50IGlzIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBndHBfZW5jYXBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgYGd0cF9lbmNhcF9yZWN2YCBpcyBvdXIgcHJpbWFyeSBmb2N1cyBzaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBndHBfcnhgIGlzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LiBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYyB0b28sIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudC4gQW5kLCBhZ2FpbiwgYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuYWJsZSBgR1RQYCwgb2J2aW91c2x5LiBBbHNvLCB3ZSBuZWVkIGBHUk9fQ0VMTFNgLiBMb29raW5nIGF0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLCBgR1JPX0NFTExTYCBpcyBzZWxlY3RlZCBieSB0aGluZ3MgbGlrZSBgVlhMQU5gLCBgR0VORVZFYCwgYW5kIG90aGVycy4gU28sIGVuYWJsaW5nIGBHVFBgIGFuZCBgVlhMQU5gIHNob3VsZCBkbyB0aGUgdHJpY2ssIHNpbmNlIGBWWExBTmAgc2VsZWN0cyBgR1JPX0NFTExTYC4gT3IsIGFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGV4cGxpY2l0bHkgc3BlY2lmeSBgR1RQYCBhbmQgYFZYTEFOYC4gV2FpdCwgaG9sZCBvbi4gYEdST19DRUxMU2AgaXMgYSBib29sZWFuIGNvbmZpZywgc28gaXQgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IGVuYWJsZWQuIFdlIG5lZWQgdG8gZW5hYmxlIGEgY29uZmlnIHRoYXQgKnNlbGVjdHMqIGl0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcsIGFzIEkgc2VlbSB0byByZWNhbGwuCgpZZXAsIGBHUk9fQ0VMTFNgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBzbyBpdCYjMzk7cyBub3QgdXNlci1zZWxlY3RhYmxlLiBMb29rcyBsaWtlIHdlICptdXN0KiBlbmFibGUgYSBjb25maWcgdGhhdCBzZWxlY3RzIGl0LCBsaWtlIGBWWExBTmAgb3IgYEdFTkVWRWAuIEl0IHNlZW1zIGxpa2UgYFZYTEFOYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBhcyBpdCB3b3VsZCBiZSBtb3JlIHdpZGVseSBkZXBsb3llZCB0aGFuIGBHRU5FVkVgLCBzbyBsZXQmIzM5O3MgdmVyaWZ5IGBWWExBTmAmIzM5O3MgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlhMQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipWWExBTiBDb25maWd1cmF0aW9uIGFuZCBHVFAgRGVwZW5kZW5jeSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IHNldHVwIGFsbG93cyBmb3IgdXNlciBzZWxlY3Rpb24gb2YgYFZYTEFOYCBlbmNhcHN1bGF0aW9uLCB3aGljaCBpcyBncmVhdCDigJMgZ2l2ZXMgdXMgZmxleGliaWxpdHkuIEJ1dCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGUgcm9hZCB3aXRoIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYEdUUGAuIEkga25vdyB3ZSYjMzk7dmUgZ290IGEgbG90IHJpZGluZyBvbiBob3cgdGhpcyBhbGwgd29ya3MgdG9nZXRoZXIsIHNvIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgR1RQYCBpbnRlcmFjdGlvbnMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBsYXRlci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgaW1wbGVtZW50YXRpb24gcmVtYWlucyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEdUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYEdUUGAgY29uZmlndXJhdGlvbiBibG9jay4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgd2hhdCBJIGV4cGVjdCB0byBmaW5kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFudGljaXBhdGluZyBlbGVtZW50cyByZWxhdGVkIHRvIGl0cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGZ1bmN0aW9ucywgdGhlIGRhdGEgcGxhbmUgYXNwZWN0cywgcGVyaGFwcyBRb1MgY29uc2lkZXJhdGlvbnMsIGFuZCBkZWZpbml0ZWx5IGFueSByZWxldmFudCB0dW5uZWwgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBkaXNjcmVwYW5jaWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIEdUUCBpbXBsZW1lbnRhdGlvbiBiZXN0IHByYWN0aWNlcyBhbmQgdHlwaWNhbCBuZXR3b3JrIGRlc2lnbiBnb2Fscy4gSSYjMzk7bGwgYmUgcXVpY2tseSBpZGVudGlmeWluZyBob3cgdGhpcyBzZWN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgYW55IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBoYXZlIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGV0YWlscywgYnV0IG15IHVuZGVyc3RhbmRpbmcgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHJlY29nbml6ZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzI6XHRjb25maWcgR1RQXG4gMjczOlx0XHR0cmlzdGF0ZSBcJiMzNDtHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXCYjMzQ7XG4gMjc0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAyNzU6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDI3NjpcdFx0aGVscFxuIDI3NzpcdFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIGd0cCB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXG4gMjc4Olx0XHQgIHRoZSBHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpLiBUaGlzIHR1bm5lbGluZyBwcm90b2NvbFxuIDI3OTpcdFx0ICBpcyB1c2VkIHRvIHByZXZlbnQgc3Vic2NyaWJlcnMgZnJvbSBhY2Nlc3NpbmcgbW9iaWxlIGNhcnJpZXIgY29yZVxuIDI4MDpcdFx0ICBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHVzZXJzcGFjZSBzb2Z0d2FyZSB0aGF0XG4gMjgxOlx0XHQgIGltcGxlbWVudHMgdGhlIHNpZ25hbGluZyBwcm90b2NvbCAoR1RQLUMpIHRvIHVwZGF0ZSBpdHMgUERQIGNvbnRleHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyByaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBgR1RQYCByZWxpZXMgb24gYElORVRgIOKAkyB0aGF0JiMzOTtzIHRoZSBiYXNlIGxheWVyLCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJdCYjMzk7cyBhIHByb3RvY29sIGJ1aWx0IHRvIHJ1biBvbiB0b3Agb2YgSVAuIE5vdywgZ2l2ZW4gdGhhdCB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGVyZWZvcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYFZYTEFOYCBjb25maWd1cmF0aW9uIGJsb2NrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzA6XHRjb25maWcgVlhMQU5cbiAyMzE6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuIDIzMjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjMzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyMzQ6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyMzU6XHRcdGhlbHBcbiAyMzY6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSB2eGxhbiB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXG4gMjM3Olx0XHQgIExheWVyIDIgTmV0d29ya3Mgb3ZlciBMYXllciAzIE5ldHdvcmtzLiBWWExBTiBpcyBvZnRlbiB1c2VkXG4gMjM4Olx0XHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuIDIzOTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JrIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBob3cgVlhMQU4gaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIEdUUCwgd2hpY2ggSSBmaW5kIGludHJpZ3VpbmcgZ2l2ZW4gaXRzIHJvbGUgaW4gdHVubmVsaW5nLiBJdCBoaW5nZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBWWExBTiBkZXBlbmRzIG9uIElORVQuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuIEkga25vdyBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFuZCBpdCYjMzk7cyB1c2VkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBidWcgaW52b2x2ZXMgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTywgYW5kIGhvdyBpdCBoYW5kbGVzIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGlzIGFjY2Vzc2VkIHdoZW4gaXQmIzM5O3Mgbm90IHNldCwgb3IgZHJvcHMgR1NPIHBhY2tldHMgaW4gR1RQLiBTb3VuZHMgbGlrZSBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBlcnJvciBvciBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdHJhbnNwb3J0IGhlYWRlciBzdGF0ZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBlbmNhcHN1bGF0aW9uIGFuZCBvZmZsb2FkaW5nLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBhdCB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGxldmVsIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoLgoKSXQmIzM5O3MgZGVlbWVkIHdvcnRoeSBvZiBmdXp6aW5nLCB3aGljaCBpcyBhIGdvb2QgY2FsbCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZGF0YSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhlIG5ldHdvcmsuCgpJIG5lZWQgdG8ga2VlcCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgIGluIG1pbmQgYXMgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKUmVtZW1iZXIgdGhhdCBgVlhMQU5gIGlzbiYjMzk7dCB0aGUgb25seSBjb25maWcgdGhhdCByZWxpZXMgb24gYEdST19DRUxMU2AuIGBNQUNTRUNgLCBgR0VORVZFYCwgYW5kIGBCQVJFVURQYCBhbHNvIHVzZSBpdC4gR2l2ZW4gdGhhdCBpdCByZWxpZXMgb24gR1JPLCB0aGlzIGlzIGEgbXVjaCBtb3JlIGdlbmVyYWxseSByZWxldmFudCBwaWVjZSBvZiB3b3JrIHRoYW4gSSBmaXJzdCB0aG91Z2h0LiBXaGlsZSBgVlhMQU5gIGlzIGEgZ29vZCBjaG9pY2UgZm9yIHRlc3RpbmcsIHRoZSBmaXggaGFzIHdpZGVyIGltcGxpY2F0aW9ucy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgZ3RwX3J4YCBpcyBpbmxpbmVkIGFzIHdlbGwuIFllcywgYGd0cF9yeGAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2d0cC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBndHBfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz0yODg9c3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0zMTEtXG5kcml2ZXJzL25ldC9ndHAuYzozMTI6c3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ndHAuYy0zMTMtXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBHVFAgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBmdXp6LXdvcnRoeS4gVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCwgdGhvdWdoIHRob3NlICptaWdodCogYmUgaW5saW5lZCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MuIEkmIzM5O20gbm90aW5nIHRoYXQgYGd0cF9lbmNhcF9yZWN2YCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIG1lYW5pbmcgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCAtIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzIG9uLiBUaGVuIHRoZXJlJiMzOTtzIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUsIGFsc28gbm90IGlubGluZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBydWxlIG91dCBvdGhlciBmdW5jdGlvbnMgLSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGlzIGlubGluZSwgc28gaXQgd2lsbCBnZXQgb3B0aW1pemVkIGF3YXkuCgpBbHJpZ2h0LCBzbyB0aGUgc3RhbmQtb3V0IHN5bWJvbHMgYXJlIGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIGBndHBfZW5jYXBfcmVjdmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlIHBhdGNoIGl0c2VsZiBkZWFscyB3aXRoIGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRpbmcgdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgY2FsbCB3aXRoaW4gYGdyb19jZWxsc19yZWNlaXZlYCB0byBhdm9pZCB0aGUgdHJhbnNwb3J0IGhlYWRlciBpc3N1ZS4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhleSBkZWZpbml0ZWx5IGltcGFjdCBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZTogZW5jYXBzdWxhdGVkIHBhY2tldHMgYXJlIHNlbmRhYmxlIHZpYSBVRFAgZm9yIEdUUCwgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyB1c2luZyBHUk8gY2VsbHMgKGxpa2UgVlhMQU4pIGNhbiBkaXJlY3RseSBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZS4gVGhhdCBjb21iaW5hdGlvbiDigJMgY29yZSBjaGFuZ2VzLCB1c2VyLXJlYWNoYWJsZSBmdW5jdGlvbmFsaXR5IOKAkyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0LiBMZXQmIzM5O3MgZ2V0IHRoZXNlIGNoYW5nZXMgb250byB0aGUgZnV6emluZyBsaXN0LiBUaW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1RQJiMzNDssCiAgICAmIzM0O1ZYTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjI0OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuYwppbmRleCA5YTEyY2M1M2RhMDAyLi5mYmY2MTdiMWFjYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ndHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ndHAuYwpAQCAtMzEyLDYgJiM0MzszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbiwKIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bykKIHsKJiM0MzsJaWYgKHNrYl9pc19nc28oc2tiKSkgewomIzQzOwkJbmV0ZGV2X2RiZyhwY3R4LSZndDtkZXYsICYjMzQ7R1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxuJiMzNDspOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7CiAJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O05vIFBEUCBjdHggZm9yIHRoaXMgTVNcbiYjMzQ7KTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCURFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jCmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2dyb19jZWxscy5jCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmICh1bmxpa2VseSghKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwogCWlmICghZ2NlbGxzLSZndDtjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHsKIAkJcmVzID0gbmV0aWZfcngoc2tiKTsKIAkJZ290byB1bmxvY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIwCgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDUxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE5ldHdvcmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRocmVlIGFyZWFzOiBgZ3RwX3J4YCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIsIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLCBhbmQgYSBtb2RpZmljYXRpb24gdG8gYGdyb19jZWxsc19yZWNlaXZlYC4KCkZpcnN0LCB0aGUgYGd0cF9yeGAgY2hhbmdlOiBpdCBleHBsaWNpdGx5IGRyb3BzIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgcGFja2V0cy4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZXhwbGljaXRseSBjaGVja2luZyBpZiBgc2tiX2lzX2dzb2AgaXMgdHJ1ZS4gV2UmIzM5O3JlIHJlamVjdGluZyB0aGVtIHdpdGggYSBgZ290byBlcnJgLiBJJiMzOTttIGd1ZXNzaW5nIEdTTyBpcyBjYXVzaW5nIHByb2JsZW1zIGluIHRoZSBHVFAgaW1wbGVtZW50YXRpb24uIEdvb2QsIHNhZmUsIGFuZCBkZWxpYmVyYXRlLgoKU2Vjb25kLCBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOiBUaGlzIGlzIGEgc2ltcGxlIGlubGluZSB0aGF0JiMzOTtzIGFzc2lnbmluZyBgfjBVYCB0byBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYC4gRWZmZWN0aXZlbHksIGl0JiMzOTtzIG1hcmtpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgYXMgdW5zZXQuIFRoaXMgbGlrZWx5IHNpZ25hbHMgdG8gc3Vic2VxdWVudCBwcm9jZXNzaW5nIHN0YWdlcyB0aGF0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIGlzbiYjMzk7dCB2YWxpZCBvciBzaG91bGRuJiMzOTt0IGJlIHJlbGllZCB1cG9uLiBUaGUgY2FzdCB0byBgdHlwZW9mYCBlbnN1cmVzIGl0IGlzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHVuc2lnbmVkIHZhbHVlIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSB0cmFuc3BvcnQgaGVhZGVyLgoKVGhpcmQsIGBncm9fY2VsbHNfcmVjZWl2ZWA6IFRoaXMgaXMgd2hlcmUgd2UmIzM5O3JlIGFjdHVhbGx5ICp1c2luZyogdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJlZm9yZSBzb21lIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBjbGVhbmluZyB1cCB0aGUgU0tCIHN0cnVjdHVyZSBwcmlvciB0byBpdCYjMzk7cyB1c2UgaW4gR1JPLgoKTm93IHRoZSBjcnVjaWFsIHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBOby4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFueXRoaW5nIHRoYXQmIzM5O3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3QgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIG5vdCBkb2luZyBhbnl0aGluZyBjb21wbGV4IHdpdGggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2luZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIG9wZXJhdGlvbiBpcyBqdXN0IGFzc2lnbmluZyBgfjBVYCB3aGljaCBpcyB3ZWxsLWRlZmluZWQuIFdlJiMzOTtyZSBqdXN0IHNldHRpbmcgYW4gb2Zmc2V0OyBpdCBkb2VzbiYjMzk7dCBsZWFrIGFueXRoaW5nIGZyb20ga2VybmVsIG1lbW9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYC4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHBlcmZlY3RseSBzdWZmaWNpZW50IGZvciBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuIFdlIGRvbiYjMzk7dCBuZWVkIHRoZSBleHRyYSBvdmVyaGVhZCBvZiBLTVNBTiBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgYnkgZHJvcHBpbmcgR1NPIHBhY2tldHMgaW4gR1RQIGFuZCB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaW4gR1JPIGNlbGxzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIG1lcmVseSBzZXRzIGFuIG9mZnNldCB0byB+MFUuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDo1Ni40NDgwNDEwMzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE1MDgxMzA0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjU2LjQ0ODA0NTg3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMjQ3MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuaW5kZXggOWExMmNjNTNkYTAwMi4uZmJmNjE3YjFhY2M5NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuQEAgLTMxMiw2ICszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxcbiB7XFxuK1xcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhwY3R4LVxcdTAwM2VkZXYsIFxcXCJHU08gaXMgbm90IHN1cHBvcnQgaW4gR1RQXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhwY3R4LVxcdTAwM2VkZXYsIFxcXCJObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbkBAIC0zMDgyLDYgKzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xcbkBAIC0yMiw2ICsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4rXFx0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGlmICghZ2NlbGxzLVxcdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcXG4gXFx0XFx0cmVzID0gbmV0aWZfcngoc2tiKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjU2Ljk5OTI0ODAxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMTc0ODczMzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OGE1M2FkZTljZjljNzkyOGI1MjU3OWVlMjVjMTM3ZWY2MjQyY2U5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjQ6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5pbmRleCA5YTEyY2M1M2RhMDAyLi5mYmY2MTdiMWFjYzk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5AQCAtMzEyLDYgKzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bylcbiB7XG4rXHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4rXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiR1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxcblwiKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4gXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XG4gXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwiKTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgKzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4rXG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDo1Ni45OTkyNDk3NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyMzc3MDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byB0aGUgR1RQIGFuZCBHUk8gU3Vic3lzdGVtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzOiBgZHJpdmVycy9uZXQvZ3RwLmNgLCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEdUUCAoR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wpIGVuY2Fwc3VsYXRpb24uXG5cblNwZWNpZmljYWxseSwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgdGhlIGBndHBfcnhgIGZ1bmN0aW9uIGlzIG5vdyBkcm9wcGluZyBHU08gc2ticyAoYHNrYl9pc19nc28oc2tiKWApLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZm9yIEdUUCB0cmFmZmljLiBUaGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgYW5vdGhlciBzaWduYWwuIEFuZCwgdGhlIGNhbGwgdG8gdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCBzdWdnZXN0cyB3ZSdyZSBhZGp1c3RpbmcgaG93IEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGhhbmRsZXMgdHJhbnNwb3J0IGhlYWRlcnMsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBlbmNhcHN1bGF0ZWQgcGFja2V0cy5cblxuU28sIGxldCdzIGRyaWxsIGRvd246IGBndHBfcnhgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1RQIGRyaXZlciwgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gd2l0aGluIHRoZSBHUk8gc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2VhcmNoIGNvbmZpcm1zIGBndHBfcnhgIGlzIGNhbGxlZCBmcm9tIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIEdUUC1lbmNhcHN1bGF0ZWQgVURQIHRyYWZmaWMuIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgbXVjaCBtb3JlIHdpZGVseSB1c2VkLCBiZWluZyBjYWxsZWQgYnkgYSB2YXJpZXR5IG9mIGRyaXZlcnMgbGlrZSBnZW5ldmUsIHZ4bGFuLCBtYWNzZWMsIGlwdmxhbiBhbmQgb3RoZXJzLCBpbmRpY2F0aW5nIGEgbW9yZSBnZW5lcmFsIGFkanVzdG1lbnQgdG8gaG93IEdSTyB3b3Jrcy5cblxuTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgR1RQIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNTowNy40MjMwMjMzNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Nzc4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzI6Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNTowNy41Mzc4MDc4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTIzMjgxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgR1JPX0NFTExTKipcblxuT2theSwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGBHUk9fQ0VMTFNgIHN5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGljaCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gaXQgbWlnaHQgYWZmZWN0LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb25zLCBhbnkgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSwgYW5kIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW1wbGljaXRseSBlbmFibGUgaXQgdGhyb3VnaCBhbm90aGVyIG9wdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSBpbiB0aGUgY29kZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVmYXVsdCBzZXR0aW5ncyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIG15IHBhcnRpY3VsYXIgdXNlIGNhc2UuIFVsdGltYXRlbHkgSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBjdXN0b21pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjU6MTAuOTUwMTM4MDU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTA1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHUk9fQ0VMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDYxPWNvbmZpZyBEU1RfQ0FDSEVcXG4tLVxcbm5ldC9LY29uZmlnLTQ2NC1cXG5uZXQvS2NvbmZpZzo0NjU6Y29uZmlnIEdST19DRUxMU1xcbm5ldC9LY29uZmlnLTQ2Ni1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI1OjExLjA0MDA0OTQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MjMzNzkyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIEdST19DRUxMUyoqXG5cbkFscmlnaHQsIHNvIGBHUk9fQ0VMTFNgLiBJdCdzIGEgYm9vbGVhbiBjb25maWcsIHdoaWNoIG1lYW5zIGl0J3MgZWl0aGVyIG9uIG9yIG9mZiwgYSBzaW1wbGUgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIGFyZSBmcmVxdWVudGx5IHRvZ2dsZWQgYnkgKm90aGVyKiBjb25maWd1cmF0aW9ucywgbWVhbmluZyBpdHMgYWN0aXZhdGlvbiAob3IgZGVhY3RpdmF0aW9uKSBpc24ndCBuZWNlc3NhcmlseSBhIHN0YW5kLWFsb25lIGNob2ljZS4gSXQncyB1c3VhbGx5IGEgZGVwZW5kZW5jeS4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBwaWN0dXJlIGEgbGl0dGxlIGJldHRlciwgZXNwZWNpYWxseSB0aGUgY29udGV4dCB3aGVyZSBgR1JPX0NFTExTYCBpcyBkZWZpbmVkIGFzIGEgZGVwZW5kZW5jeS4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzLCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGluZywgYW5kIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMgYEdST19DRUxMU2AgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGRyaXZpbmcgdGhpcyBwYXJ0aWN1bGFyIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNzozOC4yNzM4NDUyODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDk1NDkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR1JPX0NFTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjMzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjM0OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0OC1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0OTpcXHRzZWxlY3QgR1JPX0NFTExTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjY0OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyMi1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzIzOlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBSTU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy04LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc6OTpcXHRzZWxlY3QgR1JPX0NFTExTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5uZXQvZHNhL0tjb25maWc9Mz1tZW51Y29uZmlnIE5FVF9EU0FcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTXFxubmV0L2RzYS9LY29uZmlnOjg6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9kc2EvS2NvbmZpZy05LVxcdHNlbGVjdCBORVRfU1dJVENIREVWXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xODgtXFx0c2VsZWN0IERTVF9DQUNIRVxcbm5ldC9pcHY0L0tjb25maWc6MTg5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5uZXQvaXB2NC9LY29uZmlnLTE5MC1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk5PWNvbmZpZyBJUFY2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDItXFx0c2VsZWN0IERTVF9DQUNIRVxcbm5ldC9pcHY2L0tjb25maWc6MjAzOlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5uZXQvaXB2Ni9LY29uZmlnLTIwNC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIElORVRcXG5uZXQveGZybS9LY29uZmlnOjg6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC94ZnJtL0tjb25maWctOS1cXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjc6NDAuNTM4ODA1MTk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyMTk0MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogR1JPX0NFTExTIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2UgdG91Y2hlcyBgR1JPX0NFTExTYCwgc3BlY2lmaWNhbGx5IGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCB0aGUgY29udGV4dCBvZiBgVlhMQU5gLCBgR0VORVZFYCwgYEJBUkVVRFBgLCBgTUFDU0VDYCwgYFJNTkVUYCwgYE5FVF9EU0FgLCBgTkVUX0lQX1RVTk5FTGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgWEZSTWAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYGd0cF9yeGAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbmBndHBfcnhgLCB3aGljaCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIGlzIG9ubHkgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX0dUUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGVuLCBgZ3JvX2NlbGxzX3JlY2VpdmVgIHNpdHMgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCwgYW5kIGl0IGlzIGNvbXBpbGVkIGluIHdoZW4gYENPTkZJR19HUk9fQ0VMTFNgIGlzIGVuYWJsZWQuXG5cbk15IGZpcnN0IGNoZWNrIGlzIHRvIGNvbmZpcm0gaWYgYGd0cF9yeGAgaXMgZXZlbiByZWFjaGFibGUuIEl0IGlzIGNhbGxlZCBmcm9tIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4gVGhlc2UgYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgY2FsbGJhY2tzLCB3aGljaCBjb25maXJtcyBpdCAqaXMqIHJlYWNoYWJsZS5cblxuVGhlbiBJIGNoZWNrZWQgYGdyb19jZWxsc19yZWNlaXZlYC4gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhcyBpdCdzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzIGxpa2UgYHZ4bGFuX3JjdmAsIGBnZW5ldmVfcnhgLCBgbWFjc2VjX2hhbmRsZV9mcmFtZWAsIGFuZCBtb3JlLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSByb290IG9mIHRoaXMgcGF0Y2ggaXMgYSBidWcgd2hlcmUgYHNrYl90cmFuc3BvcnRfaGVhZGVyYCBpcyBiZWluZyBhY2Nlc3NlZCBhdCB0aGUgd3JvbmcgdGltZSBvciBHU08gcGFja2V0cyBhcmUgYmVpbmcgZHJvcHBlZCBpbiBHVFAuIEknbSBzZWVpbmcgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGltcGFjdGluZyB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGBncm9fY2VsbHNfcmVjZWl2ZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZ3RwX3J4YDogbmFtZWx5IGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSB0d28gZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvZ3RwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjQ4LjI2MDc1MDc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE1Nzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBbMDFddT9fdWRwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9NTY5PXN0YXRpYyBpbnQgZ3RwX3Byb3RvX3RvX2ZhbWlseShfX3UxNiBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTU4NC0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo1ODU6c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTc1Nj1zdGF0aWMgaW50IGd0cF9wYXJzZV9leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCAqaGRybGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNzkyLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjc5MzpzdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTkwOD1zdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMS1cXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicmVjZWl2ZWQgR1RQMCBwYWNrZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMjpcXHRcXHRyZXQgPSBndHAwX3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy05MjUtXFx0XFx0bmV0ZGV2X2RiZyhndHAtXFx1MDAzZWRldiwgXFxcInJlY2VpdmVkIEdUUDFVIHBhY2tldFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZ3RwLmM6OTI2OlxcdFxcdHJldCA9IGd0cDF1X3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjQ4LjM0MDkxNTI1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3MjYwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb2RlJ3MgXCJtaW5kXCI6XG5cbioqR1RQIEVuY2Fwc3VsYXRpb24gUmVjZXB0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIEhtbSwgdGhleSdyZSBzdGF0aWMgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSB0aGV5J3JlIHNwZWNpZmljIHRvIHRoaXMgbW9kdWxlLCBhIGxvY2FsaXplZCBkZXRhaWwsIGFuZCBub3QgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlLiBUaGV5J3JlIGxpa2UgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGV5IGJlaW5nIHVzZWQ/IEFoLCB0aGV5J3JlIGJlaW5nIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAuIFNvLCBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHRoZSBcIm1haW4gZW50cnkgcG9pbnRcIiBmb3IgcmVjZWl2aW5nIGVuY2Fwc3VsYXRlZCBHVFAgdHJhZmZpYywgYW5kIHRoZXNlIHR3byBzdGF0aWMgZnVuY3Rpb25zIGFyZSB0aGUgd29ya2hvcnNlcyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRlLWVuY2Fwc3VsYXRpb24sIHRoZSB1bnBhY2tpbmcuIEknbSBndWVzc2luZyBlYWNoIG9uZSBvZiB0aGVtIHByb2JhYmx5IGhhbmRsZXMgdGhlIFVEUCBlbmNhcHN1bGF0aW9uIG9mIGEgcGFydGljdWxhciBHVFAgdmVyc2lvbiBvciBmbG93LCBiYXNlZCBvbiB3aGF0IEkgd291bGQgZXhwZWN0IHRoZSBuYW1pbmcgdG8gaW1wbHkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYGd0cF9lbmNhcF9yZWN2YCB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBjYWxsaW5nIHRoZW0gYW5kIGJhc2VkIG9uIHdoYXQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjUyLjU0ODIxNjMwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODczMDg4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9ODkxPXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy05MDctICovXFxuZHJpdmVycy9uZXQvZ3RwLmM6OTA4OnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xNDA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTQzOS1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTQ0MDpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MS1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xNjU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTQtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE2OTU6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTYtXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjc6NTIuNjM1NTMyODM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzMyMjg3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHVFAgRW5jYXBzdWxhdGlvbiBSZWNlaXZlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ3RwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBUaGUgY29kZSBkZWZpbmVzIGl0IGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gZXhwb3NlIGEgZnVuY3Rpb25hbCBBUEkgZW50cnkgcG9pbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSBjb25zaWRlciBwZXJmb3JtYW5jZS4gSG93ZXZlciwgSSBzZWUgaXQncyBhc3NpZ25lZCB0byBgdHVuY2ZnLmVuY2FwX3JjdmAuIFRoZW4sIEknbSByZW1pbmRlZCBieSB0aGUgcHJvbXB0IHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy5cblxuQWhhISBTaW5jZSBgZ3RwX2VuY2FwX3JlY3ZgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKndvbid0KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCdzIGdvb2QsIHNvIGl0J3MgYSBkaXN0aW5jdCBzeW1ib2wuIEJ1dCwgSSBhbSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGJlc3QgZGVzaWduIGNob2ljZS5cblxuTm93LCBsZXQncyBjb250cmFzdCB0aGF0LiBXZSBoYXZlIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIEkgcmVjYWxsIHdvcmtpbmcgd2l0aCB0aGF0IGF0IHNvbWUgcG9pbnQuIEl0IG1pZ2h0IGJlIGJldHRlciBzaW5jZSBpdCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBtb2R1bGVzIGFuZCBkb2VzIG5vdCByZWx5IG9uIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSB0aGluayBJIHdpbGwgdGFrZSBhIGxvb2sgYXQgYGdyb19jZWxsc19yZWNlaXZlYCBpbiBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjA5Ljk2NzgyMzU0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2ODM0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmM9OD1zdHJ1Y3QgZ3JvX2NlbGwge1xcbi0tXFxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTMtXFxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6MTQ6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9ncm9fY2VsbHMuYy0xNS17XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01NS19XFxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6NTY6RVhQT1JUX1NZTUJPTChncm9fY2VsbHNfcmVjZWl2ZSk7XFxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjEwLjA1MjUxMDc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzIzMjAzMjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBHVFAgUGFja2V0IFJlY2VwdGlvbioqXG5cbk9rYXksIHNvIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGFib3V0IHRoZSBHVFAgcGF0aCBpdHNlbGY/IFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gSG1tLCBpcyB0aGVyZSBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHN5c2NhbGwgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmVsYXRlZCB0byBHVFA/IEdpdmVuIHRoYXQgR1RQIHBhY2tldHMgY29tZSBpbiB2aWEgVURQIGVuY2Fwc3VsYXRpb24sIHRoZSByZWFsIGVudHJ5IHBvaW50IGlzIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBndHBfZW5jYXBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgYGd0cF9lbmNhcF9yZWN2YCBpcyBvdXIgcHJpbWFyeSBmb2N1cyBzaW5jZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBndHBfcnhgIGlzIHN0YXRpYywgc28gaXQncyBub3QgYSBkaXJlY3QgZW50cnkgcG9pbnQuIGBndHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljIHRvbywgYnV0IGl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBpdCBpbXBvcnRhbnQuIEFuZCwgYWdhaW4sIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgZXhwb3J0ZWQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdG8gZW5hYmxlIGBHVFBgLCBvYnZpb3VzbHkuIEFsc28sIHdlIG5lZWQgYEdST19DRUxMU2AuIExvb2tpbmcgYXQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGBHUk9fQ0VMTFNgIGlzIHNlbGVjdGVkIGJ5IHRoaW5ncyBsaWtlIGBWWExBTmAsIGBHRU5FVkVgLCBhbmQgb3RoZXJzLiBTbywgZW5hYmxpbmcgYEdUUGAgYW5kIGBWWExBTmAgc2hvdWxkIGRvIHRoZSB0cmljaywgc2luY2UgYFZYTEFOYCBzZWxlY3RzIGBHUk9fQ0VMTFNgLiBPciwgYWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZXhwbGljaXRseSBzcGVjaWZ5IGBHVFBgIGFuZCBgVlhMQU5gLiBXYWl0LCBob2xkIG9uLiBgR1JPX0NFTExTYCBpcyBhIGJvb2xlYW4gY29uZmlnLCBzbyBpdCBjYW4ndCBiZSBkaXJlY3RseSBlbmFibGVkLiBXZSBuZWVkIHRvIGVuYWJsZSBhIGNvbmZpZyB0aGF0ICpzZWxlY3RzKiBpdC4gTGV0J3MgbWFrZSBzdXJlIGl0J3Mgbm90IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgYXMgSSBzZWVtIHRvIHJlY2FsbC5cblxuWWVwLCBgR1JPX0NFTExTYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgc28gaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLiBMb29rcyBsaWtlIHdlICptdXN0KiBlbmFibGUgYSBjb25maWcgdGhhdCBzZWxlY3RzIGl0LCBsaWtlIGBWWExBTmAgb3IgYEdFTkVWRWAuIEl0IHNlZW1zIGxpa2UgYFZYTEFOYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBhcyBpdCB3b3VsZCBiZSBtb3JlIHdpZGVseSBkZXBsb3llZCB0aGFuIGBHRU5FVkVgLCBzbyBsZXQncyB2ZXJpZnkgYFZYTEFOYCdzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODoyMy4yODQ1NDY2NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTc4MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjI5LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMjMxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjIzLjM1NDcyODI2N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5Mzk5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqVlhMQU4gQ29uZmlndXJhdGlvbiBhbmQgR1RQIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IHNldHVwIGFsbG93cyBmb3IgdXNlciBzZWxlY3Rpb24gb2YgYFZYTEFOYCBlbmNhcHN1bGF0aW9uLCB3aGljaCBpcyBncmVhdCDigJMgZ2l2ZXMgdXMgZmxleGliaWxpdHkuIEJ1dCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGUgcm9hZCB3aXRoIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgR1RQYC4gSSBrbm93IHdlJ3ZlIGdvdCBhIGxvdCByaWRpbmcgb24gaG93IHRoaXMgYWxsIHdvcmtzIHRvZ2V0aGVyLCBzbyB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEdUUGAgaW50ZXJhY3Rpb25zIHRvIGF2b2lkIGFueSBuYXN0eSBzdXJwcmlzZXMgbGF0ZXIuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgaW1wbGVtZW50YXRpb24gcmVtYWlucyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjI2LjgxNDEzNjM0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNTA3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzMtXFx0dHJpc3RhdGUgXFxcIkdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjI2Ljg5NjM5MjU1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY1MjUwNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBHVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaGVyZSBpcyB0byBleGFtaW5lIHRoZSBgR1RQYCBjb25maWd1cmF0aW9uIGJsb2NrLiBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFudGljaXBhdGluZyBlbGVtZW50cyByZWxhdGVkIHRvIGl0cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcGxhbmUgZnVuY3Rpb25zLCB0aGUgZGF0YSBwbGFuZSBhc3BlY3RzLCBwZXJoYXBzIFFvUyBjb25zaWRlcmF0aW9ucywgYW5kIGRlZmluaXRlbHkgYW55IHJlbGV2YW50IHR1bm5lbCBwYXJhbWV0ZXJzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gbG9vayBmb3IgcG90ZW50aWFsIGRpc2NyZXBhbmNpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBiYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgR1RQIGltcGxlbWVudGF0aW9uIGJlc3QgcHJhY3RpY2VzIGFuZCB0eXBpY2FsIG5ldHdvcmsgZGVzaWduIGdvYWxzLiBJJ2xsIGJlIHF1aWNrbHkgaWRlbnRpZnlpbmcgaG93IHRoaXMgc2VjdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBhcmNoaXRlY3R1cmUgYW5kIHdoYXQgaW1wbGljYXRpb25zIGFueSBjb25maWd1cmF0aW9uIGNob2ljZXMgaGF2ZSBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEknbSBmb2N1c2luZyBvbiB0aGUgZGV0YWlscywgYnV0IG15IHVuZGVyc3RhbmRpbmcgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHJlY29nbml6ZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjMxLjQ2MTY0OTk3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MjpcXHRjb25maWcgR1RQXFxuIDI3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG4gMjc0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNzU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI3NjpcXHRcXHRoZWxwXFxuIDI3NzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjc4OlxcdFxcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXFxuIDI3OTpcXHRcXHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXFxuIDI4MDpcXHRcXHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcXG4gMjgxOlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODozMS40NjE3MjkzNDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NjcxMTk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gcmlnaHQgb2ZmIHRoZSBiYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBgR1RQYCByZWxpZXMgb24gYElORVRgIOKAkyB0aGF0J3MgdGhlIGJhc2UgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0J3MgYSBwcm90b2NvbCBidWlsdCB0byBydW4gb24gdG9wIG9mIElQLiBOb3csIGdpdmVuIHRoYXQgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhlcmVmb3JlLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBWWExBTmAgY29uZmlndXJhdGlvbiBibG9jay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc3BlY2lmaWNzIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6MzQuODI4NDQ0Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRjb25maWcgVlhMQU5cXG4gMjMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuIDIzMjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyMzQ6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMzU6XFx0XFx0aGVscFxcbiAyMzY6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjM3OlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcXG4gMjM4OlxcdFxcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXFxuIDIzOTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6MzQuODI4NjE5ODI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzkzMTY4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JrIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gaG93IFZYTEFOIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBHVFAsIHdoaWNoIEkgZmluZCBpbnRyaWd1aW5nIGdpdmVuIGl0cyByb2xlIGluIHR1bm5lbGluZy4gSXQgaGluZ2VzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgVlhMQU4gZGVwZW5kcyBvbiBJTkVULlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuIEkga25vdyBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaXQncyB1c2VkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBidWcgaW52b2x2ZXMgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTywgYW5kIGhvdyBpdCBoYW5kbGVzIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gZml4IGEgYnVnIHdoZXJlIGBza2JfdHJhbnNwb3J0X2hlYWRlcmAgaXMgYWNjZXNzZWQgd2hlbiBpdCdzIG5vdCBzZXQsIG9yIGRyb3BzIEdTTyBwYWNrZXRzIGluIEdUUC4gU291bmRzIGxpa2UgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igb3IgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRyYW5zcG9ydCBoZWFkZXIgc3RhdGUsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBoYXBwZW4gd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBlbmNhcHN1bGF0aW9uIGFuZCBvZmZsb2FkaW5nLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBhdCB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGxldmVsIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoLlxuXG5JdCdzIGRlZW1lZCB3b3J0aHkgb2YgZnV6emluZywgd2hpY2ggaXMgYSBnb29kIGNhbGwsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBuZXR3b3JrLlxuXG5JIG5lZWQgdG8ga2VlcCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgIGluIG1pbmQgYXMgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLlxuXG5SZW1lbWJlciB0aGF0IGBWWExBTmAgaXNuJ3QgdGhlIG9ubHkgY29uZmlnIHRoYXQgcmVsaWVzIG9uIGBHUk9fQ0VMTFNgLiBgTUFDU0VDYCwgYEdFTkVWRWAsIGFuZCBgQkFSRVVEUGAgYWxzbyB1c2UgaXQuIEdpdmVuIHRoYXQgaXQgcmVsaWVzIG9uIEdSTywgdGhpcyBpcyBhIG11Y2ggbW9yZSBnZW5lcmFsbHkgcmVsZXZhbnQgcGllY2Ugb2Ygd29yayB0aGFuIEkgZmlyc3QgdGhvdWdodC4gV2hpbGUgYFZYTEFOYCBpcyBhIGdvb2QgY2hvaWNlIGZvciB0ZXN0aW5nLCB0aGUgZml4IGhhcyB3aWRlciBpbXBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgZ3RwX3J4YCBpcyBpbmxpbmVkIGFzIHdlbGwuIFllcywgYGd0cF9yeGAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZ3RwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6NDEuMjA3OTM5MDg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGd0cF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ndHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz0yODg9c3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTMxMS1cXG5kcml2ZXJzL25ldC9ndHAuYzozMTI6c3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMzEzLVxcdFxcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODo0MS4yNzE1MjE2NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyMDM1NjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gdGhlIEdUUCBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGZ1enotd29ydGh5LiBUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgLCB0aG91Z2ggdGhvc2UgKm1pZ2h0KiBiZSBpbmxpbmVkIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncy4gSSdtIG5vdGluZyB0aGF0IGBndHBfZW5jYXBfcmVjdmAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBtZWFuaW5nIGl0ICp3b24ndCogYmUgaW5saW5lZCAtIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUncyBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgdGhlcmVmb3JlLCBhbHNvIG5vdCBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIGZ1bmN0aW9ucyAtIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgaXMgaW5saW5lLCBzbyBpdCB3aWxsIGdldCBvcHRpbWl6ZWQgYXdheS5cblxuQWxyaWdodCwgc28gdGhlIHN0YW5kLW91dCBzeW1ib2xzIGFyZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgLiBUaGlzIG1ha2VzIHNlbnNlLCBiZWNhdXNlIHRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkaW5nIHRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGNhbGwgd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gYXZvaWQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaXNzdWUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBhbmQgdGhlIEdUUCBkcml2ZXIuIFRoZXkgZGVmaW5pdGVseSBpbXBhY3QgcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U6IGVuY2Fwc3VsYXRlZCBwYWNrZXRzIGFyZSBzZW5kYWJsZSB2aWEgVURQIGZvciBHVFAsIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMgdXNpbmcgR1JPIGNlbGxzIChsaWtlIFZYTEFOKSBjYW4gZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUuIFRoYXQgY29tYmluYXRpb24g4oCTIGNvcmUgY2hhbmdlcywgdXNlci1yZWFjaGFibGUgZnVuY3Rpb25hbGl0eSDigJMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldC4gTGV0J3MgZ2V0IHRoZXNlIGNoYW5nZXMgb250byB0aGUgZnV6emluZyBsaXN0LiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6NDguNTkxODgyMDA2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDk2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiLFxuICAgIFwiVlhMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiLFxuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0Nzk4NDgwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIwODE3NTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0ODQyMjA3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjA3NzM0MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4YTUzYWRlOWNmOWM3OTI4YjUyNTc5ZWUyNWMxMzdlZjYyNDJjZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmZiZjYxN2IxYWNjOTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiArMzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJHU08gaXMgbm90IHN1cHBvcnQgaW4gR1RQXFxuXCIpO1xuK1x0XHRnb3RvIGVycjtcbitcdH1cbitcbiBcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcbiBcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxuXCIpO1xuIFx0XHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC0zMDgyLDYgKzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jXG5pbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbisrKyBiL25ldC9jb3JlL2dyb19jZWxscy5jXG5AQCAtMjIsNiArMjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHVubGlrZWx5KCEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcbiBcdGlmICghZ2NlbGxzLVx1MDAzZWNlbGxzIHx8IHNrYl9jbG9uZWQoc2tiKSB8fCBuZXRpZl9lbGlkZV9ncm8oZGV2KSkge1xuIFx0XHRyZXMgPSBuZXRpZl9yeChza2IpO1xuIFx0XHRnb3RvIHVubG9jaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0ODQyNDc3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjA3NzAyNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRocmVlIGFyZWFzOiBgZ3RwX3J4YCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIsIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLCBhbmQgYSBtb2RpZmljYXRpb24gdG8gYGdyb19jZWxsc19yZWNlaXZlYC5cblxuRmlyc3QsIHRoZSBgZ3RwX3J4YCBjaGFuZ2U6IGl0IGV4cGxpY2l0bHkgZHJvcHMgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBwYWNrZXRzLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHNrYl9pc19nc29gIGlzIHRydWUuIFdlJ3JlIHJlamVjdGluZyB0aGVtIHdpdGggYSBgZ290byBlcnJgLiBJJ20gZ3Vlc3NpbmcgR1NPIGlzIGNhdXNpbmcgcHJvYmxlbXMgaW4gdGhlIEdUUCBpbXBsZW1lbnRhdGlvbi4gR29vZCwgc2FmZSwgYW5kIGRlbGliZXJhdGUuXG5cblNlY29uZCwgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYDogVGhpcyBpcyBhIHNpbXBsZSBpbmxpbmUgdGhhdCdzIGFzc2lnbmluZyBgfjBVYCB0byBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgLiBFZmZlY3RpdmVseSwgaXQncyBtYXJraW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGFzIHVuc2V0LiBUaGlzIGxpa2VseSBzaWduYWxzIHRvIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBzdGFnZXMgdGhhdCB0aGUgdHJhbnNwb3J0IGhlYWRlciBpc24ndCB2YWxpZCBvciBzaG91bGRuJ3QgYmUgcmVsaWVkIHVwb24uIFRoZSBjYXN0IHRvIGB0eXBlb2ZgIGVuc3VyZXMgaXQgaXMgdGhlIGxhcmdlc3QgcG9zc2libGUgdW5zaWduZWQgdmFsdWUgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIHRyYW5zcG9ydCBoZWFkZXIuXG5cblRoaXJkLCBgZ3JvX2NlbGxzX3JlY2VpdmVgOiBUaGlzIGlzIHdoZXJlIHdlJ3JlIGFjdHVhbGx5ICp1c2luZyogdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgYmVmb3JlIHNvbWUgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgY2xlYW5pbmcgdXAgdGhlIFNLQiBzdHJ1Y3R1cmUgcHJpb3IgdG8gaXQncyB1c2UgaW4gR1JPLlxuXG5Ob3cgdGhlIGNydWNpYWwgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyB0aGF0J3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3QgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIG5vdCBkb2luZyBhbnl0aGluZyBjb21wbGV4IHdpdGggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2luZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIG9wZXJhdGlvbiBpcyBqdXN0IGFzc2lnbmluZyBgfjBVYCB3aGljaCBpcyB3ZWxsLWRlZmluZWQuIFdlJ3JlIGp1c3Qgc2V0dGluZyBhbiBvZmZzZXQ7IGl0IGRvZXNuJ3QgbGVhayBhbnl0aGluZyBmcm9tIGtlcm5lbCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBgTmVlZHNLTVNBTiA9IHRydWVgLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGV0Yy4gV2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgb3ZlcmhlYWQgb2YgS01TQU4gaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjU3Ljk1NjEzMDkzOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbldjz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 10:10:00 +0000 UTC FinishedAt: 2026-08-25 10:28:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "2a6bbd3f-016b-4619-9f1e-de98140e9b96" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gro_cells_receive", "gtp_encap_recv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjI0OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmZiZjYxN2IxYWNjOTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiAmIzQzOzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bylcbiB7XG4mIzQzO1x0aWYgKHNrYl9pc19nc28oc2tiKSkge1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCYjMzQ7R1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkge1xuIFx0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICYjNDM7MzA4MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgYW5kIGFkZHMgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCB0byBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHByZXZlbnQgYWNjZXNzaW5nIGFuIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29yayBzdGFjayBhbmQgdGhlIEdUUCBkcml2ZXIgdGhhdCBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcuIFRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBzZW5kaW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIChlLmcuLCB2aWEgVURQIGZvciBHVFApIG9yIGJ5IHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHV0aWxpemUgR1JPIGNlbGxzIChlLmcuLCBWWExBTikuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4YTUzYWRlOWNmOWM3OTI4YjUyNTc5ZWUyNWMxMzdlZjYyNDJjZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uZmJmNjE3YjFhY2M5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sCiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pCiB7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O0dTTyBpcyBub3Qgc3VwcG9ydCBpbiBHVFBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkgewogCQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXG4mIzM0Oyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMDgyLDYgJiM0MzszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwppbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwpAQCAtMjIsNiAmIzQzOzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAodW5saWtlbHkoIShkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsKIAlpZiAoIWdjZWxscy0mZ3Q7Y2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7CiAJCXJlcyA9IG5ldGlmX3J4KHNrYik7CiAJCWdvdG8gdW5sb2NrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHRoZSBHVFAgYW5kIEdSTyBTdWJzeXN0ZW1zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBkcml2ZXJzL25ldC9ndHAuY2AsIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEdUUCAoR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wpIGVuY2Fwc3VsYXRpb24uCgpTcGVjaWZpY2FsbHksIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIHRoZSBgZ3RwX3J4YCBmdW5jdGlvbiBpcyBub3cgZHJvcHBpbmcgR1NPIHNrYnMgKGBza2JfaXNfZ3NvKHNrYilgKS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZm9yIEdUUCB0cmFmZmljLiBUaGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgYW5vdGhlciBzaWduYWwuIEFuZCwgdGhlIGNhbGwgdG8gdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCBzdWdnZXN0cyB3ZSYjMzk7cmUgYWRqdXN0aW5nIGhvdyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBoYW5kbGVzIHRyYW5zcG9ydCBoZWFkZXJzLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgZW5jYXBzdWxhdGVkIHBhY2tldHMuCgpTbywgbGV0JiMzOTtzIGRyaWxsIGRvd246IGBndHBfcnhgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1RQIGRyaXZlciwgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gd2l0aGluIHRoZSBHUk8gc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLgoKQWxyaWdodCwgYSBxdWljayBzZWFyY2ggY29uZmlybXMgYGd0cF9yeGAgaXMgY2FsbGVkIGZyb20gYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgR1RQLWVuY2Fwc3VsYXRlZCBVRFAgdHJhZmZpYy4gYGdyb19jZWxsc19yZWNlaXZlYCBpcyBtdWNoIG1vcmUgd2lkZWx5IHVzZWQsIGJlaW5nIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZHJpdmVycyBsaWtlIGdlbmV2ZSwgdnhsYW4sIG1hY3NlYywgaXB2bGFuIGFuZCBvdGhlcnMsIGluZGljYXRpbmcgYSBtb3JlIGdlbmVyYWwgYWRqdXN0bWVudCB0byBob3cgR1JPIHdvcmtzLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgR1RQIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIEdST19DRUxMUyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGBHUk9fQ0VMTFNgIHN5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGljaCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gaXQgbWlnaHQgYWZmZWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucywgYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHksIGFuZCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGltcGxpY2l0bHkgZW5hYmxlIGl0IHRocm91Z2ggYW5vdGhlciBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIGluIHRoZSBjb2RlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZWZhdWx0IHNldHRpbmdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgbXkgcGFydGljdWxhciB1c2UgY2FzZS4gVWx0aW1hdGVseSBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBjdXN0b21pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHUk9fQ0VMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NjE9Y29uZmlnIERTVF9DQUNIRVxuLS1cbm5ldC9LY29uZmlnLTQ2NC1cbm5ldC9LY29uZmlnOjQ2NTpjb25maWcgR1JPX0NFTExTXG5uZXQvS2NvbmZpZy00NjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgb2YgR1JPX0NFTExTKioKCkFscmlnaHQsIHNvIGBHUk9fQ0VMTFNgLiBJdCYjMzk7cyBhIGJvb2xlYW4gY29uZmlnLCB3aGljaCBtZWFucyBpdCYjMzk7cyBlaXRoZXIgb24gb3Igb2ZmLCBhIHNpbXBsZSBmbGFnLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgYXJlIGZyZXF1ZW50bHkgdG9nZ2xlZCBieSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zLCBtZWFuaW5nIGl0cyBhY3RpdmF0aW9uIChvciBkZWFjdGl2YXRpb24pIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIHN0YW5kLWFsb25lIGNob2ljZS4gSXQmIzM5O3MgdXN1YWxseSBhIGRlcGVuZGVuY3kuIFJpZ2h0IG5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgcGljdHVyZSBhIGxpdHRsZSBiZXR0ZXIsIGVzcGVjaWFsbHkgdGhlIGNvbnRleHQgd2hlcmUgYEdST19DRUxMU2AgaXMgZGVmaW5lZCBhcyBhIGRlcGVuZGVuY3kuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMsIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgc2VsZWN0aW5nLCBhbmQgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcyBgR1JPX0NFTExTYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgcGFydGljdWxhciBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBHUk9fQ0VMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzMtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjM0Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbmRyaXZlcnMvbmV0L0tjb25maWctMjUwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjMtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjY0Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzIyLVx0c2VsZWN0IENSWVBUT19HQ01cbmRyaXZlcnMvbmV0L0tjb25maWc6MzIzOlx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZz02PW1lbnVjb25maWcgUk1ORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTgtXHRkZWZhdWx0IG5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc6OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctMTAtXHRoZWxwXG4tLVxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTctXHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVERFVklDRVNcbm5ldC9kc2EvS2NvbmZpZzo4Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L2RzYS9LY29uZmlnLTktXHRzZWxlY3QgTkVUX1NXSVRDSERFVlxuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xODgtXHRzZWxlY3QgRFNUX0NBQ0hFXG5uZXQvaXB2NC9LY29uZmlnOjE4OTpcdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC9pcHY0L0tjb25maWctMTkwLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDItXHRzZWxlY3QgRFNUX0NBQ0hFXG5uZXQvaXB2Ni9LY29uZmlnOjIwMzpcdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC9pcHY2L0tjb25maWctMjA0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctNy1cdGRlcGVuZHMgb24gSU5FVFxubmV0L3hmcm0vS2NvbmZpZzo4Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L3hmcm0vS2NvbmZpZy05LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogR1JPX0NFTExTIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdGhlIGNoYW5nZSB0b3VjaGVzIGBHUk9fQ0VMTFNgLCBzcGVjaWZpY2FsbHkgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aHJvdWdoIHRoZSBjb250ZXh0IG9mIGBWWExBTmAsIGBHRU5FVkVgLCBgQkFSRVVEUGAsIGBNQUNTRUNgLCBgUk1ORVRgLCBgTkVUX0RTQWAsIGBORVRfSVBfVFVOTkVMYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBYRlJNYC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCBgZ3RwX3J4YCBhbmQgYGdyb19jZWxsc19yZWNlaXZlYC4KCmBndHBfcnhgLCB3aGljaCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIGlzIG9ubHkgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX0dUUGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZC4gVGhlbiwgYGdyb19jZWxsc19yZWNlaXZlYCBzaXRzIGluIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AsIGFuZCBpdCBpcyBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfR1JPX0NFTExTYCBpcyBlbmFibGVkLgoKTXkgZmlyc3QgY2hlY2sgaXMgdG8gY29uZmlybSBpZiBgZ3RwX3J4YCBpcyBldmVuIHJlYWNoYWJsZS4gSXQgaXMgY2FsbGVkIGZyb20gYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgLiBUaGVzZSBhcmUgVURQIGVuY2Fwc3VsYXRpb24gcmVjZWl2ZSBjYWxsYmFja3MsIHdoaWNoIGNvbmZpcm1zIGl0ICppcyogcmVhY2hhYmxlLgoKVGhlbiBJIGNoZWNrZWQgYGdyb19jZWxsc19yZWNlaXZlYC4gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhcyBpdCYjMzk7cyB1c2VkIGJ5IHZhcmlvdXMgZHJpdmVycyBsaWtlIGB2eGxhbl9yY3ZgLCBgZ2VuZXZlX3J4YCwgYG1hY3NlY19oYW5kbGVfZnJhbWVgLCBhbmQgbW9yZS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKVGhlIHJvb3Qgb2YgdGhpcyBwYXRjaCBpcyBhIGJ1ZyB3aGVyZSBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGlzIGJlaW5nIGFjY2Vzc2VkIGF0IHRoZSB3cm9uZyB0aW1lIG9yIEdTTyBwYWNrZXRzIGFyZSBiZWluZyBkcm9wcGVkIGluIEdUUC4gSSYjMzk7bSBzZWVpbmcgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGltcGFjdGluZyB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGd0cF9yeGA6IG5hbWVseSBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIHR3byBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC9ndHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cFswMV11P191ZHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTU2OT1zdGF0aWMgaW50IGd0cF9wcm90b190b19mYW1pbHkoX191MTYgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtNTg0LS8qIDEgbWVhbnMgcGFzcyB1cCB0byB0aGUgc3RhY2ssIC0xIG1lYW5zIGRyb3AgYW5kIDAgbWVhbnMgZGVjYXBzdWxhdGVkLiAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6NTg1OnN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtNTg2LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz03NTY9c3RhdGljIGludCBndHBfcGFyc2VfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmhkcmxlbilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy03OTItXG5kcml2ZXJzL25ldC9ndHAuYzo3OTM6c3RhdGljIGludCBndHAxdV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtNzk0LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz05MDg9c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTIxLVx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3JlY2VpdmVkIEdUUDAgcGFja2V0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMjpcdFx0cmV0ID0gZ3RwMF91ZHBfZW5jYXBfcmVjdihndHAsIHNrYik7XG5kcml2ZXJzL25ldC9ndHAuYy05MjMtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyNS1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAxVSBwYWNrZXRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZ3RwLmM6OTI2Olx0XHRyZXQgPSBndHAxdV91ZHBfZW5jYXBfcmVjdihndHAsIHNrYik7XG5kcml2ZXJzL25ldC9ndHAuYy05MjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb2RlJiMzOTtzICYjMzQ7bWluZCYjMzQ7OgoKKipHVFAgRW5jYXBzdWxhdGlvbiBSZWNlcHRpb24gRmxvdyoqCgpPa2F5LCBzbyBJIHNlZSBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIEhtbSwgdGhleSYjMzk7cmUgc3RhdGljIGZ1bmN0aW9ucy4gSW50ZXJlc3RpbmcuIFRoYXQgdGVsbHMgbWUgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gdGhpcyBtb2R1bGUsIGEgbG9jYWxpemVkIGRldGFpbCwgYW5kIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUuIFRoZXkmIzM5O3JlIGxpa2UgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLgoKTm93LCB3aGVyZSBhcmUgdGhleSBiZWluZyB1c2VkPyBBaCwgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20gYGd0cF9lbmNhcF9yZWN2YC4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlICYjMzQ7bWFpbiBlbnRyeSBwb2ludCYjMzQ7IGZvciByZWNlaXZpbmcgZW5jYXBzdWxhdGVkIEdUUCB0cmFmZmljLCBhbmQgdGhlc2UgdHdvIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRoZSB3b3JraG9yc2VzIHRoYXQgaGFuZGxlIHRoZSBhY3R1YWwgZGUtZW5jYXBzdWxhdGlvbiwgdGhlIHVucGFja2luZy4gSSYjMzk7bSBndWVzc2luZyBlYWNoIG9uZSBvZiB0aGVtIHByb2JhYmx5IGhhbmRsZXMgdGhlIFVEUCBlbmNhcHN1bGF0aW9uIG9mIGEgcGFydGljdWxhciBHVFAgdmVyc2lvbiBvciBmbG93LCBiYXNlZCBvbiB3aGF0IEkgd291bGQgZXhwZWN0IHRoZSBuYW1pbmcgdG8gaW1wbHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIG9mIGBndHBfZW5jYXBfcmVjdmAgdG8gdHJ1bHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlbSBhbmQgYmFzZWQgb24gd2hhdCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTg5MT1zdGF0aWMgdm9pZCBndHBfZW5jYXBfZGlzYWJsZShzdHJ1Y3QgZ3RwX2RldiAqZ3RwKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkwNy0gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjkwODpzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTkwOS17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwOT1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM5LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTQ0MDpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDEtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTY1ND1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5NC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE2OTU6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNjk2LVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR1RQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZ3RwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBUaGUgY29kZSBkZWZpbmVzIGl0IGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGV4cG9zZSBhIGZ1bmN0aW9uYWwgQVBJIGVudHJ5IHBvaW50LCBlc3BlY2lhbGx5IHdoZW4gd2UgY29uc2lkZXIgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIEkgc2VlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGB0dW5jZmcuZW5jYXBfcmN2YC4gVGhlbiwgSSYjMzk7bSByZW1pbmRlZCBieSB0aGUgcHJvbXB0IHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4KCkFoYSEgU2luY2UgYGd0cF9lbmNhcF9yZWN2YCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGF0JiMzOTtzIGdvb2QsIHNvIGl0JiMzOTtzIGEgZGlzdGluY3Qgc3ltYm9sLiBCdXQsIEkgYW0gY3VyaW91cyBhcyB0byB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHRoZSBiZXN0IGRlc2lnbiBjaG9pY2UuCgpOb3csIGxldCYjMzk7cyBjb250cmFzdCB0aGF0LiBXZSBoYXZlIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIEkgcmVjYWxsIHdvcmtpbmcgd2l0aCB0aGF0IGF0IHNvbWUgcG9pbnQuIEl0IG1pZ2h0IGJlIGJldHRlciBzaW5jZSBpdCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBtb2R1bGVzIGFuZCBkb2VzIG5vdCByZWx5IG9uIGEgZnVuY3Rpb24gcG9pbnRlci4KCkkgdGhpbmsgSSB3aWxsIHRha2UgYSBsb29rIGF0IGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ncm9fY2VsbHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ncm9fY2VsbHMuYz04PXN0cnVjdCBncm9fY2VsbCB7XG4tLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTMtXG5uZXQvY29yZS9ncm9fY2VsbHMuYzoxNDppbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTUte1xuLS1cbm5ldC9jb3JlL2dyb19jZWxscy5jLTU1LX1cbm5ldC9jb3JlL2dyb19jZWxscy5jOjU2OkVYUE9SVF9TWU1CT0woZ3JvX2NlbGxzX3JlY2VpdmUpO1xubmV0L2NvcmUvZ3JvX2NlbGxzLmMtNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgR1RQIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgc28gYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGFib3V0IHRoZSBHVFAgcGF0aCBpdHNlbGY/IFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gSG1tLCBpcyB0aGVyZSBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHN5c2NhbGwgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmVsYXRlZCB0byBHVFA/IEdpdmVuIHRoYXQgR1RQIHBhY2tldHMgY29tZSBpbiB2aWEgVURQIGVuY2Fwc3VsYXRpb24sIHRoZSByZWFsIGVudHJ5IHBvaW50IGlzIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBndHBfZW5jYXBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgYGd0cF9lbmNhcF9yZWN2YCBpcyBvdXIgcHJpbWFyeSBmb2N1cyBzaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBndHBfcnhgIGlzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGVudHJ5IHBvaW50LiBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYyB0b28sIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudC4gQW5kLCBhZ2FpbiwgYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuYWJsZSBgR1RQYCwgb2J2aW91c2x5LiBBbHNvLCB3ZSBuZWVkIGBHUk9fQ0VMTFNgLiBMb29raW5nIGF0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLCBgR1JPX0NFTExTYCBpcyBzZWxlY3RlZCBieSB0aGluZ3MgbGlrZSBgVlhMQU5gLCBgR0VORVZFYCwgYW5kIG90aGVycy4gU28sIGVuYWJsaW5nIGBHVFBgIGFuZCBgVlhMQU5gIHNob3VsZCBkbyB0aGUgdHJpY2ssIHNpbmNlIGBWWExBTmAgc2VsZWN0cyBgR1JPX0NFTExTYC4gT3IsIGFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGV4cGxpY2l0bHkgc3BlY2lmeSBgR1RQYCBhbmQgYFZYTEFOYC4gV2FpdCwgaG9sZCBvbi4gYEdST19DRUxMU2AgaXMgYSBib29sZWFuIGNvbmZpZywgc28gaXQgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IGVuYWJsZWQuIFdlIG5lZWQgdG8gZW5hYmxlIGEgY29uZmlnIHRoYXQgKnNlbGVjdHMqIGl0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcsIGFzIEkgc2VlbSB0byByZWNhbGwuCgpZZXAsIGBHUk9fQ0VMTFNgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBzbyBpdCYjMzk7cyBub3QgdXNlci1zZWxlY3RhYmxlLiBMb29rcyBsaWtlIHdlICptdXN0KiBlbmFibGUgYSBjb25maWcgdGhhdCBzZWxlY3RzIGl0LCBsaWtlIGBWWExBTmAgb3IgYEdFTkVWRWAuIEl0IHNlZW1zIGxpa2UgYFZYTEFOYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBhcyBpdCB3b3VsZCBiZSBtb3JlIHdpZGVseSBkZXBsb3llZCB0aGFuIGBHRU5FVkVgLCBzbyBsZXQmIzM5O3MgdmVyaWZ5IGBWWExBTmAmIzM5O3MgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlhMQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipWWExBTiBDb25maWd1cmF0aW9uIGFuZCBHVFAgRGVwZW5kZW5jeSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IHNldHVwIGFsbG93cyBmb3IgdXNlciBzZWxlY3Rpb24gb2YgYFZYTEFOYCBlbmNhcHN1bGF0aW9uLCB3aGljaCBpcyBncmVhdCDigJMgZ2l2ZXMgdXMgZmxleGliaWxpdHkuIEJ1dCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGUgcm9hZCB3aXRoIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYEdUUGAuIEkga25vdyB3ZSYjMzk7dmUgZ290IGEgbG90IHJpZGluZyBvbiBob3cgdGhpcyBhbGwgd29ya3MgdG9nZXRoZXIsIHNvIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgR1RQYCBpbnRlcmFjdGlvbnMgdG8gYXZvaWQgYW55IG5hc3R5IHN1cnByaXNlcyBsYXRlci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgaW1wbGVtZW50YXRpb24gcmVtYWlucyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEdUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGhlcmUgaXMgdG8gZXhhbWluZSB0aGUgYEdUUGAgY29uZmlndXJhdGlvbiBibG9jay4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgd2hhdCBJIGV4cGVjdCB0byBmaW5kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFudGljaXBhdGluZyBlbGVtZW50cyByZWxhdGVkIHRvIGl0cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGZ1bmN0aW9ucywgdGhlIGRhdGEgcGxhbmUgYXNwZWN0cywgcGVyaGFwcyBRb1MgY29uc2lkZXJhdGlvbnMsIGFuZCBkZWZpbml0ZWx5IGFueSByZWxldmFudCB0dW5uZWwgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBkaXNjcmVwYW5jaWVzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIEdUUCBpbXBsZW1lbnRhdGlvbiBiZXN0IHByYWN0aWNlcyBhbmQgdHlwaWNhbCBuZXR3b3JrIGRlc2lnbiBnb2Fscy4gSSYjMzk7bGwgYmUgcXVpY2tseSBpZGVudGlmeWluZyBob3cgdGhpcyBzZWN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgYW55IGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBoYXZlIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGV0YWlscywgYnV0IG15IHVuZGVyc3RhbmRpbmcgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHJlY29nbml6ZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzI6XHRjb25maWcgR1RQXG4gMjczOlx0XHR0cmlzdGF0ZSBcJiMzNDtHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXCYjMzQ7XG4gMjc0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAyNzU6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDI3NjpcdFx0aGVscFxuIDI3NzpcdFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIGd0cCB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXG4gMjc4Olx0XHQgIHRoZSBHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpLiBUaGlzIHR1bm5lbGluZyBwcm90b2NvbFxuIDI3OTpcdFx0ICBpcyB1c2VkIHRvIHByZXZlbnQgc3Vic2NyaWJlcnMgZnJvbSBhY2Nlc3NpbmcgbW9iaWxlIGNhcnJpZXIgY29yZVxuIDI4MDpcdFx0ICBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHVzZXJzcGFjZSBzb2Z0d2FyZSB0aGF0XG4gMjgxOlx0XHQgIGltcGxlbWVudHMgdGhlIHNpZ25hbGluZyBwcm90b2NvbCAoR1RQLUMpIHRvIHVwZGF0ZSBpdHMgUERQIGNvbnRleHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyByaWdodCBvZmYgdGhlIGJhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBgR1RQYCByZWxpZXMgb24gYElORVRgIOKAkyB0aGF0JiMzOTtzIHRoZSBiYXNlIGxheWVyLCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJdCYjMzk7cyBhIHByb3RvY29sIGJ1aWx0IHRvIHJ1biBvbiB0b3Agb2YgSVAuIE5vdywgZ2l2ZW4gdGhhdCB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGVyZWZvcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYFZYTEFOYCBjb25maWd1cmF0aW9uIGJsb2NrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzA6XHRjb25maWcgVlhMQU5cbiAyMzE6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuIDIzMjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjMzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyMzQ6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyMzU6XHRcdGhlbHBcbiAyMzY6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSB2eGxhbiB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXG4gMjM3Olx0XHQgIExheWVyIDIgTmV0d29ya3Mgb3ZlciBMYXllciAzIE5ldHdvcmtzLiBWWExBTiBpcyBvZnRlbiB1c2VkXG4gMjM4Olx0XHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuIDIzOTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JrIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBob3cgVlhMQU4gaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIEdUUCwgd2hpY2ggSSBmaW5kIGludHJpZ3VpbmcgZ2l2ZW4gaXRzIHJvbGUgaW4gdHVubmVsaW5nLiBJdCBoaW5nZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBWWExBTiBkZXBlbmRzIG9uIElORVQuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuIEkga25vdyBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFuZCBpdCYjMzk7cyB1c2VkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBidWcgaW52b2x2ZXMgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTywgYW5kIGhvdyBpdCBoYW5kbGVzIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGlzIGFjY2Vzc2VkIHdoZW4gaXQmIzM5O3Mgbm90IHNldCwgb3IgZHJvcHMgR1NPIHBhY2tldHMgaW4gR1RQLiBTb3VuZHMgbGlrZSBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBlcnJvciBvciBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdHJhbnNwb3J0IGhlYWRlciBzdGF0ZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGhhcHBlbiB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBlbmNhcHN1bGF0aW9uIGFuZCBvZmZsb2FkaW5nLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBhdCB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGxldmVsIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoLgoKSXQmIzM5O3MgZGVlbWVkIHdvcnRoeSBvZiBmdXp6aW5nLCB3aGljaCBpcyBhIGdvb2QgY2FsbCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZGF0YSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhlIG5ldHdvcmsuCgpJIG5lZWQgdG8ga2VlcCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgIGluIG1pbmQgYXMgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKUmVtZW1iZXIgdGhhdCBgVlhMQU5gIGlzbiYjMzk7dCB0aGUgb25seSBjb25maWcgdGhhdCByZWxpZXMgb24gYEdST19DRUxMU2AuIGBNQUNTRUNgLCBgR0VORVZFYCwgYW5kIGBCQVJFVURQYCBhbHNvIHVzZSBpdC4gR2l2ZW4gdGhhdCBpdCByZWxpZXMgb24gR1JPLCB0aGlzIGlzIGEgbXVjaCBtb3JlIGdlbmVyYWxseSByZWxldmFudCBwaWVjZSBvZiB3b3JrIHRoYW4gSSBmaXJzdCB0aG91Z2h0LiBXaGlsZSBgVlhMQU5gIGlzIGEgZ29vZCBjaG9pY2UgZm9yIHRlc3RpbmcsIHRoZSBmaXggaGFzIHdpZGVyIGltcGxpY2F0aW9ucy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgZ3RwX3J4YCBpcyBpbmxpbmVkIGFzIHdlbGwuIFllcywgYGd0cF9yeGAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2d0cC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBndHBfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz0yODg9c3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0zMTEtXG5kcml2ZXJzL25ldC9ndHAuYzozMTI6c3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ndHAuYy0zMTMtXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBHVFAgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBmdXp6LXdvcnRoeS4gVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCwgdGhvdWdoIHRob3NlICptaWdodCogYmUgaW5saW5lZCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MuIEkmIzM5O20gbm90aW5nIHRoYXQgYGd0cF9lbmNhcF9yZWN2YCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIG1lYW5pbmcgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCAtIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZvY3VzIG9uLiBUaGVuIHRoZXJlJiMzOTtzIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUsIGFsc28gbm90IGlubGluZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBydWxlIG91dCBvdGhlciBmdW5jdGlvbnMgLSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGlzIGlubGluZSwgc28gaXQgd2lsbCBnZXQgb3B0aW1pemVkIGF3YXkuCgpBbHJpZ2h0LCBzbyB0aGUgc3RhbmQtb3V0IHN5bWJvbHMgYXJlIGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIGBndHBfZW5jYXBfcmVjdmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlIHBhdGNoIGl0c2VsZiBkZWFscyB3aXRoIGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRpbmcgdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgY2FsbCB3aXRoaW4gYGdyb19jZWxsc19yZWNlaXZlYCB0byBhdm9pZCB0aGUgdHJhbnNwb3J0IGhlYWRlciBpc3N1ZS4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhleSBkZWZpbml0ZWx5IGltcGFjdCBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZTogZW5jYXBzdWxhdGVkIHBhY2tldHMgYXJlIHNlbmRhYmxlIHZpYSBVRFAgZm9yIEdUUCwgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcyB1c2luZyBHUk8gY2VsbHMgKGxpa2UgVlhMQU4pIGNhbiBkaXJlY3RseSBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZS4gVGhhdCBjb21iaW5hdGlvbiDigJMgY29yZSBjaGFuZ2VzLCB1c2VyLXJlYWNoYWJsZSBmdW5jdGlvbmFsaXR5IOKAkyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0LiBMZXQmIzM5O3MgZ2V0IHRoZXNlIGNoYW5nZXMgb250byB0aGUgZnV6emluZyBsaXN0LiBUaW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1RQJiMzNDssCiAgICAmIzM0O1ZYTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjI0OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuYwppbmRleCA5YTEyY2M1M2RhMDAyLi5mYmY2MTdiMWFjYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ndHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ndHAuYwpAQCAtMzEyLDYgJiM0MzszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbiwKIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bykKIHsKJiM0MzsJaWYgKHNrYl9pc19nc28oc2tiKSkgewomIzQzOwkJbmV0ZGV2X2RiZyhwY3R4LSZndDtkZXYsICYjMzQ7R1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxuJiMzNDspOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7CiAJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O05vIFBEUCBjdHggZm9yIHRoaXMgTVNcbiYjMzQ7KTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCURFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jCmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2dyb19jZWxscy5jCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmICh1bmxpa2VseSghKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwogCWlmICghZ2NlbGxzLSZndDtjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHsKIAkJcmVzID0gbmV0aWZfcngoc2tiKTsKIAkJZ290byB1bmxvY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIwCgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDUxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIE5ldHdvcmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRocmVlIGFyZWFzOiBgZ3RwX3J4YCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIsIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLCBhbmQgYSBtb2RpZmljYXRpb24gdG8gYGdyb19jZWxsc19yZWNlaXZlYC4KCkZpcnN0LCB0aGUgYGd0cF9yeGAgY2hhbmdlOiBpdCBleHBsaWNpdGx5IGRyb3BzIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgcGFja2V0cy4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZXhwbGljaXRseSBjaGVja2luZyBpZiBgc2tiX2lzX2dzb2AgaXMgdHJ1ZS4gV2UmIzM5O3JlIHJlamVjdGluZyB0aGVtIHdpdGggYSBgZ290byBlcnJgLiBJJiMzOTttIGd1ZXNzaW5nIEdTTyBpcyBjYXVzaW5nIHByb2JsZW1zIGluIHRoZSBHVFAgaW1wbGVtZW50YXRpb24uIEdvb2QsIHNhZmUsIGFuZCBkZWxpYmVyYXRlLgoKU2Vjb25kLCBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOiBUaGlzIGlzIGEgc2ltcGxlIGlubGluZSB0aGF0JiMzOTtzIGFzc2lnbmluZyBgfjBVYCB0byBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYC4gRWZmZWN0aXZlbHksIGl0JiMzOTtzIG1hcmtpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgYXMgdW5zZXQuIFRoaXMgbGlrZWx5IHNpZ25hbHMgdG8gc3Vic2VxdWVudCBwcm9jZXNzaW5nIHN0YWdlcyB0aGF0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIGlzbiYjMzk7dCB2YWxpZCBvciBzaG91bGRuJiMzOTt0IGJlIHJlbGllZCB1cG9uLiBUaGUgY2FzdCB0byBgdHlwZW9mYCBlbnN1cmVzIGl0IGlzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHVuc2lnbmVkIHZhbHVlIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSB0cmFuc3BvcnQgaGVhZGVyLgoKVGhpcmQsIGBncm9fY2VsbHNfcmVjZWl2ZWA6IFRoaXMgaXMgd2hlcmUgd2UmIzM5O3JlIGFjdHVhbGx5ICp1c2luZyogdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJlZm9yZSBzb21lIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBjbGVhbmluZyB1cCB0aGUgU0tCIHN0cnVjdHVyZSBwcmlvciB0byBpdCYjMzk7cyB1c2UgaW4gR1JPLgoKTm93IHRoZSBjcnVjaWFsIHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBOby4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFueXRoaW5nIHRoYXQmIzM5O3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3QgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIG5vdCBkb2luZyBhbnl0aGluZyBjb21wbGV4IHdpdGggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2luZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIG9wZXJhdGlvbiBpcyBqdXN0IGFzc2lnbmluZyBgfjBVYCB3aGljaCBpcyB3ZWxsLWRlZmluZWQuIFdlJiMzOTtyZSBqdXN0IHNldHRpbmcgYW4gb2Zmc2V0OyBpdCBkb2VzbiYjMzk7dCBsZWFrIGFueXRoaW5nIGZyb20ga2VybmVsIG1lbW9yeS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYC4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHBlcmZlY3RseSBzdWZmaWNpZW50IGZvciBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuIFdlIGRvbiYjMzk7dCBuZWVkIHRoZSBleHRyYSBvdmVyaGVhZCBvZiBLTVNBTiBoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgYnkgZHJvcHBpbmcgR1NPIHBhY2tldHMgaW4gR1RQIGFuZCB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaW4gR1JPIGNlbGxzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIG1lcmVseSBzZXRzIGFuIG9mZnNldCB0byB+MFUuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDo1Ni40NDgwNDEwMzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE1MDgxMzA0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjU2LjQ0ODA0NTg3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMjQ3MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNThhNTNhZGU5Y2Y5Yzc5MjhiNTI1NzllZTI1YzEzN2VmNjI0MmNlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuaW5kZXggOWExMmNjNTNkYTAwMi4uZmJmNjE3YjFhY2M5NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuQEAgLTMxMiw2ICszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxcbiB7XFxuK1xcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhwY3R4LVxcdTAwM2VkZXYsIFxcXCJHU08gaXMgbm90IHN1cHBvcnQgaW4gR1RQXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhwY3R4LVxcdTAwM2VkZXYsIFxcXCJObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbkBAIC0zMDgyLDYgKzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xcbkBAIC0yMiw2ICsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4rXFx0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGlmICghZ2NlbGxzLVxcdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcXG4gXFx0XFx0cmVzID0gbmV0aWZfcngoc2tiKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjU2Ljk5OTI0ODAxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMTc0ODczMzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1OGE1M2FkZTljZjljNzkyOGI1MjU3OWVlMjVjMTM3ZWY2MjQyY2U5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjQ6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5pbmRleCA5YTEyY2M1M2RhMDAyLi5mYmY2MTdiMWFjYzk0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5AQCAtMzEyLDYgKzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuIHN0YXRpYyBpbnQgZ3RwX3J4KHN0cnVjdCBwZHBfY3R4ICpwY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgIHVuc2lnbmVkIGludCBoZHJsZW4sIHVuc2lnbmVkIGludCByb2xlLCBfX3UxNiBpbm5lcl9wcm90bylcbiB7XG4rXHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4rXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiR1NPIGlzIG5vdCBzdXBwb3J0IGluIEdUUFxcblwiKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4gXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XG4gXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwiKTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgKzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4rXG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDo1Ni45OTkyNDk3NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyMzc3MDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byB0aGUgR1RQIGFuZCBHUk8gU3Vic3lzdGVtcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzOiBgZHJpdmVycy9uZXQvZ3RwLmNgLCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEdUUCAoR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wpIGVuY2Fwc3VsYXRpb24uXG5cblNwZWNpZmljYWxseSwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgdGhlIGBndHBfcnhgIGZ1bmN0aW9uIGlzIG5vdyBkcm9wcGluZyBHU08gc2ticyAoYHNrYl9pc19nc28oc2tiKWApLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZm9yIEdUUCB0cmFmZmljLiBUaGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgaXMgYW5vdGhlciBzaWduYWwuIEFuZCwgdGhlIGNhbGwgdG8gdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCBzdWdnZXN0cyB3ZSdyZSBhZGp1c3RpbmcgaG93IEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGhhbmRsZXMgdHJhbnNwb3J0IGhlYWRlcnMsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBlbmNhcHN1bGF0ZWQgcGFja2V0cy5cblxuU28sIGxldCdzIGRyaWxsIGRvd246IGBndHBfcnhgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1RQIGRyaXZlciwgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gd2l0aGluIHRoZSBHUk8gc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2VhcmNoIGNvbmZpcm1zIGBndHBfcnhgIGlzIGNhbGxlZCBmcm9tIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIEdUUC1lbmNhcHN1bGF0ZWQgVURQIHRyYWZmaWMuIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgbXVjaCBtb3JlIHdpZGVseSB1c2VkLCBiZWluZyBjYWxsZWQgYnkgYSB2YXJpZXR5IG9mIGRyaXZlcnMgbGlrZSBnZW5ldmUsIHZ4bGFuLCBtYWNzZWMsIGlwdmxhbiBhbmQgb3RoZXJzLCBpbmRpY2F0aW5nIGEgbW9yZSBnZW5lcmFsIGFkanVzdG1lbnQgdG8gaG93IEdSTyB3b3Jrcy5cblxuTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgR1RQIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNTowNy40MjMwMjMzNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Nzc4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzI6Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNTowNy41Mzc4MDc4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTIzMjgxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgR1JPX0NFTExTKipcblxuT2theSwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGBHUk9fQ0VMTFNgIHN5bWJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGljaCBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gaXQgbWlnaHQgYWZmZWN0LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb25zLCBhbnkgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGF2YWlsYWJpbGl0eSwgYW5kIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW1wbGljaXRseSBlbmFibGUgaXQgdGhyb3VnaCBhbm90aGVyIG9wdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSBpbiB0aGUgY29kZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZGVmYXVsdCBzZXR0aW5ncyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIG15IHBhcnRpY3VsYXIgdXNlIGNhc2UuIFVsdGltYXRlbHkgSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBjdXN0b21pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjU6MTAuOTUwMTM4MDU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTA1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHUk9fQ0VMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDYxPWNvbmZpZyBEU1RfQ0FDSEVcXG4tLVxcbm5ldC9LY29uZmlnLTQ2NC1cXG5uZXQvS2NvbmZpZzo0NjU6Y29uZmlnIEdST19DRUxMU1xcbm5ldC9LY29uZmlnLTQ2Ni1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI1OjExLjA0MDA0OTQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MjMzNzkyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIEdST19DRUxMUyoqXG5cbkFscmlnaHQsIHNvIGBHUk9fQ0VMTFNgLiBJdCdzIGEgYm9vbGVhbiBjb25maWcsIHdoaWNoIG1lYW5zIGl0J3MgZWl0aGVyIG9uIG9yIG9mZiwgYSBzaW1wbGUgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIGFyZSBmcmVxdWVudGx5IHRvZ2dsZWQgYnkgKm90aGVyKiBjb25maWd1cmF0aW9ucywgbWVhbmluZyBpdHMgYWN0aXZhdGlvbiAob3IgZGVhY3RpdmF0aW9uKSBpc24ndCBuZWNlc3NhcmlseSBhIHN0YW5kLWFsb25lIGNob2ljZS4gSXQncyB1c3VhbGx5IGEgZGVwZW5kZW5jeS4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBwaWN0dXJlIGEgbGl0dGxlIGJldHRlciwgZXNwZWNpYWxseSB0aGUgY29udGV4dCB3aGVyZSBgR1JPX0NFTExTYCBpcyBkZWZpbmVkIGFzIGEgZGVwZW5kZW5jeS4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSByZWxhdGlvbnNoaXBzLCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGluZywgYW5kIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMgYEdST19DRUxMU2AgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGRyaXZpbmcgdGhpcyBwYXJ0aWN1bGFyIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNzozOC4yNzM4NDUyODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDk1NDkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR1JPX0NFTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjMzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjM0OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0OC1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0OTpcXHRzZWxlY3QgR1JPX0NFTExTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjY0OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyMi1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzIzOlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBSTU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy04LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc6OTpcXHRzZWxlY3QgR1JPX0NFTExTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5uZXQvZHNhL0tjb25maWc9Mz1tZW51Y29uZmlnIE5FVF9EU0FcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTXFxubmV0L2RzYS9LY29uZmlnOjg6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9kc2EvS2NvbmZpZy05LVxcdHNlbGVjdCBORVRfU1dJVENIREVWXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xODgtXFx0c2VsZWN0IERTVF9DQUNIRVxcbm5ldC9pcHY0L0tjb25maWc6MTg5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5uZXQvaXB2NC9LY29uZmlnLTE5MC1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk5PWNvbmZpZyBJUFY2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDItXFx0c2VsZWN0IERTVF9DQUNIRVxcbm5ldC9pcHY2L0tjb25maWc6MjAzOlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5uZXQvaXB2Ni9LY29uZmlnLTIwNC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIElORVRcXG5uZXQveGZybS9LY29uZmlnOjg6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC94ZnJtL0tjb25maWctOS1cXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjc6NDAuNTM4ODA1MTk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyMTk0MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogR1JPX0NFTExTIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2UgdG91Y2hlcyBgR1JPX0NFTExTYCwgc3BlY2lmaWNhbGx5IGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCB0aGUgY29udGV4dCBvZiBgVlhMQU5gLCBgR0VORVZFYCwgYEJBUkVVRFBgLCBgTUFDU0VDYCwgYFJNTkVUYCwgYE5FVF9EU0FgLCBgTkVUX0lQX1RVTk5FTGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgWEZSTWAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGJvdGggYGd0cF9yeGAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbmBndHBfcnhgLCB3aGljaCBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ndHAuY2AsIGlzIG9ubHkgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX0dUUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGVuLCBgZ3JvX2NlbGxzX3JlY2VpdmVgIHNpdHMgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYCwgYW5kIGl0IGlzIGNvbXBpbGVkIGluIHdoZW4gYENPTkZJR19HUk9fQ0VMTFNgIGlzIGVuYWJsZWQuXG5cbk15IGZpcnN0IGNoZWNrIGlzIHRvIGNvbmZpcm0gaWYgYGd0cF9yeGAgaXMgZXZlbiByZWFjaGFibGUuIEl0IGlzIGNhbGxlZCBmcm9tIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4gVGhlc2UgYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgY2FsbGJhY2tzLCB3aGljaCBjb25maXJtcyBpdCAqaXMqIHJlYWNoYWJsZS5cblxuVGhlbiBJIGNoZWNrZWQgYGdyb19jZWxsc19yZWNlaXZlYC4gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhcyBpdCdzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzIGxpa2UgYHZ4bGFuX3JjdmAsIGBnZW5ldmVfcnhgLCBgbWFjc2VjX2hhbmRsZV9mcmFtZWAsIGFuZCBtb3JlLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSByb290IG9mIHRoaXMgcGF0Y2ggaXMgYSBidWcgd2hlcmUgYHNrYl90cmFuc3BvcnRfaGVhZGVyYCBpcyBiZWluZyBhY2Nlc3NlZCBhdCB0aGUgd3JvbmcgdGltZSBvciBHU08gcGFja2V0cyBhcmUgYmVpbmcgZHJvcHBlZCBpbiBHVFAuIEknbSBzZWVpbmcgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGltcGFjdGluZyB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGBncm9fY2VsbHNfcmVjZWl2ZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZ3RwX3J4YDogbmFtZWx5IGBndHAxdV91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSB0d28gZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvZ3RwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjQ4LjI2MDc1MDc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE1Nzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBbMDFddT9fdWRwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9NTY5PXN0YXRpYyBpbnQgZ3RwX3Byb3RvX3RvX2ZhbWlseShfX3UxNiBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTU4NC0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo1ODU6c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTc1Nj1zdGF0aWMgaW50IGd0cF9wYXJzZV9leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCAqaGRybGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNzkyLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjc5MzpzdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTkwOD1zdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMS1cXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicmVjZWl2ZWQgR1RQMCBwYWNrZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMjpcXHRcXHRyZXQgPSBndHAwX3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy05MjUtXFx0XFx0bmV0ZGV2X2RiZyhndHAtXFx1MDAzZWRldiwgXFxcInJlY2VpdmVkIEdUUDFVIHBhY2tldFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZ3RwLmM6OTI2OlxcdFxcdHJldCA9IGd0cDF1X3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjQ4LjM0MDkxNTI1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3MjYwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb2RlJ3MgXCJtaW5kXCI6XG5cbioqR1RQIEVuY2Fwc3VsYXRpb24gUmVjZXB0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIEhtbSwgdGhleSdyZSBzdGF0aWMgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSB0aGV5J3JlIHNwZWNpZmljIHRvIHRoaXMgbW9kdWxlLCBhIGxvY2FsaXplZCBkZXRhaWwsIGFuZCBub3QgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlLiBUaGV5J3JlIGxpa2UgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGV5IGJlaW5nIHVzZWQ/IEFoLCB0aGV5J3JlIGJlaW5nIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAuIFNvLCBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHRoZSBcIm1haW4gZW50cnkgcG9pbnRcIiBmb3IgcmVjZWl2aW5nIGVuY2Fwc3VsYXRlZCBHVFAgdHJhZmZpYywgYW5kIHRoZXNlIHR3byBzdGF0aWMgZnVuY3Rpb25zIGFyZSB0aGUgd29ya2hvcnNlcyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRlLWVuY2Fwc3VsYXRpb24sIHRoZSB1bnBhY2tpbmcuIEknbSBndWVzc2luZyBlYWNoIG9uZSBvZiB0aGVtIHByb2JhYmx5IGhhbmRsZXMgdGhlIFVEUCBlbmNhcHN1bGF0aW9uIG9mIGEgcGFydGljdWxhciBHVFAgdmVyc2lvbiBvciBmbG93LCBiYXNlZCBvbiB3aGF0IEkgd291bGQgZXhwZWN0IHRoZSBuYW1pbmcgdG8gaW1wbHkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYGd0cF9lbmNhcF9yZWN2YCB0byB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBjYWxsaW5nIHRoZW0gYW5kIGJhc2VkIG9uIHdoYXQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI3OjUyLjU0ODIxNjMwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODczMDg4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9ODkxPXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy05MDctICovXFxuZHJpdmVycy9uZXQvZ3RwLmM6OTA4OnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xNDA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTQzOS1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTQ0MDpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MS1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xNjU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTQtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE2OTU6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTYtXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjc6NTIuNjM1NTMyODM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzMyMjg3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHVFAgRW5jYXBzdWxhdGlvbiBSZWNlaXZlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ3RwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBUaGUgY29kZSBkZWZpbmVzIGl0IGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gZXhwb3NlIGEgZnVuY3Rpb25hbCBBUEkgZW50cnkgcG9pbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSBjb25zaWRlciBwZXJmb3JtYW5jZS4gSG93ZXZlciwgSSBzZWUgaXQncyBhc3NpZ25lZCB0byBgdHVuY2ZnLmVuY2FwX3JjdmAuIFRoZW4sIEknbSByZW1pbmRlZCBieSB0aGUgcHJvbXB0IHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy5cblxuQWhhISBTaW5jZSBgZ3RwX2VuY2FwX3JlY3ZgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKndvbid0KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCdzIGdvb2QsIHNvIGl0J3MgYSBkaXN0aW5jdCBzeW1ib2wuIEJ1dCwgSSBhbSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGJlc3QgZGVzaWduIGNob2ljZS5cblxuTm93LCBsZXQncyBjb250cmFzdCB0aGF0LiBXZSBoYXZlIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIEkgcmVjYWxsIHdvcmtpbmcgd2l0aCB0aGF0IGF0IHNvbWUgcG9pbnQuIEl0IG1pZ2h0IGJlIGJldHRlciBzaW5jZSBpdCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBtb2R1bGVzIGFuZCBkb2VzIG5vdCByZWx5IG9uIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSB0aGluayBJIHdpbGwgdGFrZSBhIGxvb2sgYXQgYGdyb19jZWxsc19yZWNlaXZlYCBpbiBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjA5Ljk2NzgyMzU0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2ODM0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmM9OD1zdHJ1Y3QgZ3JvX2NlbGwge1xcbi0tXFxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtMTMtXFxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6MTQ6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9ncm9fY2VsbHMuYy0xNS17XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01NS19XFxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6NTY6RVhQT1JUX1NZTUJPTChncm9fY2VsbHNfcmVjZWl2ZSk7XFxubmV0L2NvcmUvZ3JvX2NlbGxzLmMtNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjEwLjA1MjUxMDc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzIzMjAzMjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBHVFAgUGFja2V0IFJlY2VwdGlvbioqXG5cbk9rYXksIHNvIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGFib3V0IHRoZSBHVFAgcGF0aCBpdHNlbGY/IFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gSG1tLCBpcyB0aGVyZSBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHN5c2NhbGwgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmVsYXRlZCB0byBHVFA/IEdpdmVuIHRoYXQgR1RQIHBhY2tldHMgY29tZSBpbiB2aWEgVURQIGVuY2Fwc3VsYXRpb24sIHRoZSByZWFsIGVudHJ5IHBvaW50IGlzIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBndHBfZW5jYXBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgYGd0cF9lbmNhcF9yZWN2YCBpcyBvdXIgcHJpbWFyeSBmb2N1cyBzaW5jZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBndHBfcnhgIGlzIHN0YXRpYywgc28gaXQncyBub3QgYSBkaXJlY3QgZW50cnkgcG9pbnQuIGBndHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljIHRvbywgYnV0IGl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBpdCBpbXBvcnRhbnQuIEFuZCwgYWdhaW4sIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgZXhwb3J0ZWQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdG8gZW5hYmxlIGBHVFBgLCBvYnZpb3VzbHkuIEFsc28sIHdlIG5lZWQgYEdST19DRUxMU2AuIExvb2tpbmcgYXQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGBHUk9fQ0VMTFNgIGlzIHNlbGVjdGVkIGJ5IHRoaW5ncyBsaWtlIGBWWExBTmAsIGBHRU5FVkVgLCBhbmQgb3RoZXJzLiBTbywgZW5hYmxpbmcgYEdUUGAgYW5kIGBWWExBTmAgc2hvdWxkIGRvIHRoZSB0cmljaywgc2luY2UgYFZYTEFOYCBzZWxlY3RzIGBHUk9fQ0VMTFNgLiBPciwgYWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZXhwbGljaXRseSBzcGVjaWZ5IGBHVFBgIGFuZCBgVlhMQU5gLiBXYWl0LCBob2xkIG9uLiBgR1JPX0NFTExTYCBpcyBhIGJvb2xlYW4gY29uZmlnLCBzbyBpdCBjYW4ndCBiZSBkaXJlY3RseSBlbmFibGVkLiBXZSBuZWVkIHRvIGVuYWJsZSBhIGNvbmZpZyB0aGF0ICpzZWxlY3RzKiBpdC4gTGV0J3MgbWFrZSBzdXJlIGl0J3Mgbm90IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgYXMgSSBzZWVtIHRvIHJlY2FsbC5cblxuWWVwLCBgR1JPX0NFTExTYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgc28gaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLiBMb29rcyBsaWtlIHdlICptdXN0KiBlbmFibGUgYSBjb25maWcgdGhhdCBzZWxlY3RzIGl0LCBsaWtlIGBWWExBTmAgb3IgYEdFTkVWRWAuIEl0IHNlZW1zIGxpa2UgYFZYTEFOYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBhcyBpdCB3b3VsZCBiZSBtb3JlIHdpZGVseSBkZXBsb3llZCB0aGFuIGBHRU5FVkVgLCBzbyBsZXQncyB2ZXJpZnkgYFZYTEFOYCdzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODoyMy4yODQ1NDY2NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTc4MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjI5LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMjMxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjIzLjM1NDcyODI2N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5Mzk5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqVlhMQU4gQ29uZmlndXJhdGlvbiBhbmQgR1RQIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IHNldHVwIGFsbG93cyBmb3IgdXNlciBzZWxlY3Rpb24gb2YgYFZYTEFOYCBlbmNhcHN1bGF0aW9uLCB3aGljaCBpcyBncmVhdCDigJMgZ2l2ZXMgdXMgZmxleGliaWxpdHkuIEJ1dCBiZWZvcmUgd2UgZ2V0IHRvbyBmYXIgZG93biB0aGUgcm9hZCB3aXRoIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgR1RQYC4gSSBrbm93IHdlJ3ZlIGdvdCBhIGxvdCByaWRpbmcgb24gaG93IHRoaXMgYWxsIHdvcmtzIHRvZ2V0aGVyLCBzbyB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEdUUGAgaW50ZXJhY3Rpb25zIHRvIGF2b2lkIGFueSBuYXN0eSBzdXJwcmlzZXMgbGF0ZXIuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgaW1wbGVtZW50YXRpb24gcmVtYWlucyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjI2LjgxNDEzNjM0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNTA3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzMtXFx0dHJpc3RhdGUgXFxcIkdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjI2Ljg5NjM5MjU1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY1MjUwNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBHVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaGVyZSBpcyB0byBleGFtaW5lIHRoZSBgR1RQYCBjb25maWd1cmF0aW9uIGJsb2NrLiBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFudGljaXBhdGluZyBlbGVtZW50cyByZWxhdGVkIHRvIGl0cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgcGxhbmUgZnVuY3Rpb25zLCB0aGUgZGF0YSBwbGFuZSBhc3BlY3RzLCBwZXJoYXBzIFFvUyBjb25zaWRlcmF0aW9ucywgYW5kIGRlZmluaXRlbHkgYW55IHJlbGV2YW50IHR1bm5lbCBwYXJhbWV0ZXJzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gbG9vayBmb3IgcG90ZW50aWFsIGRpc2NyZXBhbmNpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBiYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgR1RQIGltcGxlbWVudGF0aW9uIGJlc3QgcHJhY3RpY2VzIGFuZCB0eXBpY2FsIG5ldHdvcmsgZGVzaWduIGdvYWxzLiBJJ2xsIGJlIHF1aWNrbHkgaWRlbnRpZnlpbmcgaG93IHRoaXMgc2VjdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBhcmNoaXRlY3R1cmUgYW5kIHdoYXQgaW1wbGljYXRpb25zIGFueSBjb25maWd1cmF0aW9uIGNob2ljZXMgaGF2ZSBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEknbSBmb2N1c2luZyBvbiB0aGUgZGV0YWlscywgYnV0IG15IHVuZGVyc3RhbmRpbmcgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IHJlY29nbml6ZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjMxLjQ2MTY0OTk3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MjpcXHRjb25maWcgR1RQXFxuIDI3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG4gMjc0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNzU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI3NjpcXHRcXHRoZWxwXFxuIDI3NzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjc4OlxcdFxcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXFxuIDI3OTpcXHRcXHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXFxuIDI4MDpcXHRcXHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcXG4gMjgxOlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODozMS40NjE3MjkzNDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NjcxMTk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gcmlnaHQgb2ZmIHRoZSBiYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBgR1RQYCByZWxpZXMgb24gYElORVRgIOKAkyB0aGF0J3MgdGhlIGJhc2UgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0J3MgYSBwcm90b2NvbCBidWlsdCB0byBydW4gb24gdG9wIG9mIElQLiBOb3csIGdpdmVuIHRoYXQgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhlcmVmb3JlLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBWWExBTmAgY29uZmlndXJhdGlvbiBibG9jay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc3BlY2lmaWNzIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6MzQuODI4NDQ0Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRjb25maWcgVlhMQU5cXG4gMjMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuIDIzMjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyMzQ6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMzU6XFx0XFx0aGVscFxcbiAyMzY6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjM3OlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcXG4gMjM4OlxcdFxcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXFxuIDIzOTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6MzQuODI4NjE5ODI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzkzMTY4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JrIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gaG93IFZYTEFOIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBHVFAsIHdoaWNoIEkgZmluZCBpbnRyaWd1aW5nIGdpdmVuIGl0cyByb2xlIGluIHR1bm5lbGluZy4gSXQgaGluZ2VzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgVlhMQU4gZGVwZW5kcyBvbiBJTkVULlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB3aXRoIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuIEkga25vdyBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaXQncyB1c2VkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBidWcgaW52b2x2ZXMgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTywgYW5kIGhvdyBpdCBoYW5kbGVzIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gZml4IGEgYnVnIHdoZXJlIGBza2JfdHJhbnNwb3J0X2hlYWRlcmAgaXMgYWNjZXNzZWQgd2hlbiBpdCdzIG5vdCBzZXQsIG9yIGRyb3BzIEdTTyBwYWNrZXRzIGluIEdUUC4gU291bmRzIGxpa2UgYSBjbGFzc2ljIG9mZi1ieS1vbmUgZXJyb3Igb3IgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRyYW5zcG9ydCBoZWFkZXIgc3RhdGUsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBoYXBwZW4gd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBlbmNhcHN1bGF0aW9uIGFuZCBvZmZsb2FkaW5nLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBhdCB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGxldmVsIGFuZCB0aGUgR1RQIGRyaXZlci4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoLlxuXG5JdCdzIGRlZW1lZCB3b3J0aHkgb2YgZnV6emluZywgd2hpY2ggaXMgYSBnb29kIGNhbGwsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBuZXR3b3JrLlxuXG5JIG5lZWQgdG8ga2VlcCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgIGluIG1pbmQgYXMgdGhlIGtleSBhcmVhcyBvZiBjb25jZXJuLlxuXG5SZW1lbWJlciB0aGF0IGBWWExBTmAgaXNuJ3QgdGhlIG9ubHkgY29uZmlnIHRoYXQgcmVsaWVzIG9uIGBHUk9fQ0VMTFNgLiBgTUFDU0VDYCwgYEdFTkVWRWAsIGFuZCBgQkFSRVVEUGAgYWxzbyB1c2UgaXQuIEdpdmVuIHRoYXQgaXQgcmVsaWVzIG9uIEdSTywgdGhpcyBpcyBhIG11Y2ggbW9yZSBnZW5lcmFsbHkgcmVsZXZhbnQgcGllY2Ugb2Ygd29yayB0aGFuIEkgZmlyc3QgdGhvdWdodC4gV2hpbGUgYFZYTEFOYCBpcyBhIGdvb2QgY2hvaWNlIGZvciB0ZXN0aW5nLCB0aGUgZml4IGhhcyB3aWRlciBpbXBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgZ3RwX3J4YCBpcyBpbmxpbmVkIGFzIHdlbGwuIFllcywgYGd0cF9yeGAgaXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZ3RwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6NDEuMjA3OTM5MDg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3NDcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGd0cF9yeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ndHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz0yODg9c3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTMxMS1cXG5kcml2ZXJzL25ldC9ndHAuYzozMTI6c3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMzEzLVxcdFxcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyODo0MS4yNzE1MjE2NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyMDM1NjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gdGhlIEdUUCBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGZ1enotd29ydGh5LiBUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgLCB0aG91Z2ggdGhvc2UgKm1pZ2h0KiBiZSBpbmxpbmVkIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncy4gSSdtIG5vdGluZyB0aGF0IGBndHBfZW5jYXBfcmVjdmAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBtZWFuaW5nIGl0ICp3b24ndCogYmUgaW5saW5lZCAtIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUncyBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgdGhlcmVmb3JlLCBhbHNvIG5vdCBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIGZ1bmN0aW9ucyAtIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgaXMgaW5saW5lLCBzbyBpdCB3aWxsIGdldCBvcHRpbWl6ZWQgYXdheS5cblxuQWxyaWdodCwgc28gdGhlIHN0YW5kLW91dCBzeW1ib2xzIGFyZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX2VuY2FwX3JlY3ZgLiBUaGlzIG1ha2VzIHNlbnNlLCBiZWNhdXNlIHRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkaW5nIHRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGNhbGwgd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gYXZvaWQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaXNzdWUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBhbmQgdGhlIEdUUCBkcml2ZXIuIFRoZXkgZGVmaW5pdGVseSBpbXBhY3QgcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U6IGVuY2Fwc3VsYXRlZCBwYWNrZXRzIGFyZSBzZW5kYWJsZSB2aWEgVURQIGZvciBHVFAsIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMgdXNpbmcgR1JPIGNlbGxzIChsaWtlIFZYTEFOKSBjYW4gZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUuIFRoYXQgY29tYmluYXRpb24g4oCTIGNvcmUgY2hhbmdlcywgdXNlci1yZWFjaGFibGUgZnVuY3Rpb25hbGl0eSDigJMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldC4gTGV0J3MgZ2V0IHRoZXNlIGNoYW5nZXMgb250byB0aGUgZnV6emluZyBsaXN0LiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6Mjg6NDguNTkxODgyMDA2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDk2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JvX2NlbGxzX3JlY2VpdmVcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCBhbmQgYWRkcyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIHRvIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gcHJldmVudCBhY2Nlc3NpbmcgYW4gdW5zZXQgdHJhbnNwb3J0IGhlYWRlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgR1RQIGRyaXZlciB0aGF0IGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHNlbmRpbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMgKGUuZy4sIHZpYSBVRFAgZm9yIEdUUCkgb3IgYnkgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXRpbGl6ZSBHUk8gY2VsbHMgKGUuZy4sIFZYTEFOKS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiLFxuICAgIFwiVlhMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiLFxuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIGFuZCBhZGRzIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgdG8gYGdyb19jZWxsc19yZWNlaXZlYCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhbiB1bnNldCB0cmFuc3BvcnQgaGVhZGVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgYW5kIHRoZSBHVFAgZHJpdmVyIHRoYXQgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyAoZS5nLiwgdmlhIFVEUCBmb3IgR1RQKSBvciBieSB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB1dGlsaXplIEdSTyBjZWxscyAoZS5nLiwgVlhMQU4pLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0Nzk4NDgwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIwODE3NTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0ODQyMjA3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjA3NzM0MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4YTUzYWRlOWNmOWM3OTI4YjUyNTc5ZWUyNWMxMzdlZjYyNDJjZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyNDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmZiZjYxN2IxYWNjOTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiArMzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJHU08gaXMgbm90IHN1cHBvcnQgaW4gR1RQXFxuXCIpO1xuK1x0XHRnb3RvIGVycjtcbitcdH1cbitcbiBcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcbiBcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJObyBQRFAgY3R4IGZvciB0aGlzIE1TXFxuXCIpO1xuIFx0XHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC0zMDgyLDYgKzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jXG5pbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbisrKyBiL25ldC9jb3JlL2dyb19jZWxscy5jXG5AQCAtMjIsNiArMjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHVubGlrZWx5KCEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcbiBcdGlmICghZ2NlbGxzLVx1MDAzZWNlbGxzIHx8IHNrYl9jbG9uZWQoc2tiKSB8fCBuZXRpZl9lbGlkZV9ncm8oZGV2KSkge1xuIFx0XHRyZXMgPSBuZXRpZl9yeChza2IpO1xuIFx0XHRnb3RvIHVubG9jaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjQ4Ljc0ODQyNDc3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjA3NzAyNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRocmVlIGFyZWFzOiBgZ3RwX3J4YCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIsIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLCBhbmQgYSBtb2RpZmljYXRpb24gdG8gYGdyb19jZWxsc19yZWNlaXZlYC5cblxuRmlyc3QsIHRoZSBgZ3RwX3J4YCBjaGFuZ2U6IGl0IGV4cGxpY2l0bHkgZHJvcHMgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBwYWNrZXRzLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHNrYl9pc19nc29gIGlzIHRydWUuIFdlJ3JlIHJlamVjdGluZyB0aGVtIHdpdGggYSBgZ290byBlcnJgLiBJJ20gZ3Vlc3NpbmcgR1NPIGlzIGNhdXNpbmcgcHJvYmxlbXMgaW4gdGhlIEdUUCBpbXBsZW1lbnRhdGlvbi4gR29vZCwgc2FmZSwgYW5kIGRlbGliZXJhdGUuXG5cblNlY29uZCwgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYDogVGhpcyBpcyBhIHNpbXBsZSBpbmxpbmUgdGhhdCdzIGFzc2lnbmluZyBgfjBVYCB0byBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgLiBFZmZlY3RpdmVseSwgaXQncyBtYXJraW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGFzIHVuc2V0LiBUaGlzIGxpa2VseSBzaWduYWxzIHRvIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBzdGFnZXMgdGhhdCB0aGUgdHJhbnNwb3J0IGhlYWRlciBpc24ndCB2YWxpZCBvciBzaG91bGRuJ3QgYmUgcmVsaWVkIHVwb24uIFRoZSBjYXN0IHRvIGB0eXBlb2ZgIGVuc3VyZXMgaXQgaXMgdGhlIGxhcmdlc3QgcG9zc2libGUgdW5zaWduZWQgdmFsdWUgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIHRyYW5zcG9ydCBoZWFkZXIuXG5cblRoaXJkLCBgZ3JvX2NlbGxzX3JlY2VpdmVgOiBUaGlzIGlzIHdoZXJlIHdlJ3JlIGFjdHVhbGx5ICp1c2luZyogdGhlIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgYmVmb3JlIHNvbWUgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgY2xlYW5pbmcgdXAgdGhlIFNLQiBzdHJ1Y3R1cmUgcHJpb3IgdG8gaXQncyB1c2UgaW4gR1JPLlxuXG5Ob3cgdGhlIGNydWNpYWwgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBXZSdyZSBub3QgYWxsb2NhdGluZyBhbnl0aGluZyB0aGF0J3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3QgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIG5vdCBkb2luZyBhbnl0aGluZyBjb21wbGV4IHdpdGggZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2luZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIG9wZXJhdGlvbiBpcyBqdXN0IGFzc2lnbmluZyBgfjBVYCB3aGljaCBpcyB3ZWxsLWRlZmluZWQuIFdlJ3JlIGp1c3Qgc2V0dGluZyBhbiBvZmZzZXQ7IGl0IGRvZXNuJ3QgbGVhayBhbnl0aGluZyBmcm9tIGtlcm5lbCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBgTmVlZHNLTVNBTiA9IHRydWVgLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGV0Yy4gV2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgb3ZlcmhlYWQgb2YgS01TQU4gaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI4OjU3Ljk1NjEzMDkzOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyBieSBkcm9wcGluZyBHU08gcGFja2V0cyBpbiBHVFAgYW5kIHVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBpbiBHUk8gY2VsbHMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBVbnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWVyZWx5IHNldHMgYW4gb2Zmc2V0IHRvIH4wVS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIGJ5IGRyb3BwaW5nIEdTTyBwYWNrZXRzIGluIEdUUCBhbmQgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIEdSTyBjZWxscy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFVuc2V0dGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlciBtZXJlbHkgc2V0cyBhbiBvZmZzZXQgdG8gfjBVLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbldjz[1] Phase: Succeeded StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 10:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 10:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2] Phase: Succeeded StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 10:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 10:29:09 +0000 UTC FinishedAt: 2026-08-25 10:29:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbldjz/series-workflowbldjz-convert-artifact-3523749747/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 10:29:19 +0000 UTC FinishedAt: 2026-08-25 10:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 10:29:19 +0000 UTC FinishedAt: 2026-08-25 10:46:07 +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:*d5eb6109-ff5a-4d25-9b67-8c9670c08989,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-workflowbldjz/series-workflowbldjz-convert-artifact-3523749747/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": "fc3a1e2e-ed82-41cb-aa78-7a6faa3ec431", "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-workflowbldjz/series-workflowbldjz-build-action-144869921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:29:19 +0000 UTC FinishedAt: 2026-08-25 10:45:57 +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:*d5eb6109-ff5a-4d25-9b67-8c9670c08989,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-workflowbldjz/series-workflowbldjz-convert-artifact-3523749747/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": "fc3a1e2e-ed82-41cb-aa78-7a6faa3ec431", "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-workflowbldjz/series-workflowbldjz-build-action-144869921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 10:46:07 +0000 UTC FinishedAt: 2026-08-25 10:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 10:46:07 +0000 UTC FinishedAt: 2026-08-25 10:46:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 10:46:07 +0000 UTC FinishedAt: 2026-08-25 10:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 10:46:07 +0000 UTC FinishedAt: 2026-08-25 10:46:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbldjz/series-workflowbldjz-convert-artifact-3829959786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 10:46:17 +0000 UTC FinishedAt: 2026-08-25 10:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 10:46:17 +0000 UTC FinishedAt: 2026-08-25 10:48:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc3a1e2e-ed82-41cb-aa78-7a6faa3ec431,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-workflowbldjz/series-workflowbldjz-build-action-144869921/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-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 10:48:26 +0000 UTC FinishedAt: 2026-08-25 10:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 10:48:26 +0000 UTC FinishedAt: 2026-08-25 10:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 10:48:26 +0000 UTC FinishedAt: 2026-08-25 11:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 10:48:26 +0000 UTC FinishedAt: 2026-08-25 11:07:47 +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:*d5eb6109-ff5a-4d25-9b67-8c9670c08989,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-workflowbldjz/series-workflowbldjz-convert-artifact-3829959786/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": "3bbc1dfe-c033-4098-9736-52c47a99a972", "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-workflowbldjz/series-workflowbldjz-build-action-1456519310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:48:26 +0000 UTC FinishedAt: 2026-08-25 11:07:37 +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:*d5eb6109-ff5a-4d25-9b67-8c9670c08989,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-workflowbldjz/series-workflowbldjz-convert-artifact-3829959786/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": "3bbc1dfe-c033-4098-9736-52c47a99a972", "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-workflowbldjz/series-workflowbldjz-build-action-1456519310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 11:07:47 +0000 UTC FinishedAt: 2026-08-25 11:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 11:07:47 +0000 UTC FinishedAt: 2026-08-25 11:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 11:07:47 +0000 UTC FinishedAt: 2026-08-25 11:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 11:07:47 +0000 UTC FinishedAt: 2026-08-25 11:09:41 +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:*3bbc1dfe-c033-4098-9736-52c47a99a972,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-workflowbldjz/series-workflowbldjz-build-action-1456519310/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-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +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":["gro_cells_receive","gtp_encap_recv"],"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:*fc3a1e2e-ed82-41cb-aa78-7a6faa3ec431,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bbc1dfe-c033-4098-9736-52c47a99a972,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-workflowbldjz/series-workflowbldjz-build-action-144869921/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-workflowbldjz/series-workflowbldjz-build-action-1456519310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 11:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 11:09:58 +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":["gro_cells_receive","gtp_encap_recv"],"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-workflowbldjz/series-workflowbldjz-convert-artifact-3801300991/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 11:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 11:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 11:09:50 +0000 UTC FinishedAt: 2026-08-25 11:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 11:10:00 +0000 UTC FinishedAt: 2026-08-25 14:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbldjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gro_cells_receive","gtp_encap_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"2a6bbd3f-016b-4619-9f1e-de98140e9b96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 11:10:00 +0000 UTC FinishedAt: 2026-08-25 14:12:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc3a1e2e-ed82-41cb-aa78-7a6faa3ec431,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bbc1dfe-c033-4098-9736-52c47a99a972,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-workflowbldjz/series-workflowbldjz-build-action-144869921/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-workflowbldjz/series-workflowbldjz-build-action-1456519310/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-workflowbldjz/series-workflowbldjz-convert-artifact-3801300991/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,}