Name: series-workflowldphp Phase: Succeeded StartedAt: 2026-08-18 11:56:27 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[0] Phase: Succeeded StartedAt: 2026-08-18 11:56:27 +0000 UTC FinishedAt: 2026-08-18 12:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 11:56:27 +0000 UTC FinishedAt: 2026-08-18 12:45:28 +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": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "9890a91d-273a-487b-8a48-879ba5410f64" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_modify_qdisc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcblxuSW4gcWRpc2NzIHRoYXQgdXNlIGRlZmljaXQgcm91bmQtcm9iaW4gc2NoZWR1bGluZywgc3VjaCBhcyBEUlIgKGBkcnJfZGVxdWV1ZWApIGFuZCBFVFMgKGBldHNfcWRpc2NfZGVxdWV1ZWApLCB0aGUgZGVxdWV1ZSBsb2dpYyBjaGVja3MgaWYgdGhlIHBhY2tldCBsZW5ndGggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjbGFzcyYjMzk7cyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYCB0byBwcmV2ZW50IGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgaXMgYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIGV4cGxpY2l0bHkgdXNlIHRoZSBEUlIgYW5kIEVUUyBxZGlzY3MsIHNvIGVuYWJsaW5nIHRoZW0gYWxvbmcgd2l0aCB0aGUgY29yZSBORVRfU0NIRUQgY29uZmlnIGlzIHJlY29tbWVuZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbmluZGV4IDE4YTQxOWNkOWQ5NDkuLmE0YzFiN2IwMjYzZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cdDEwMDBcbiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXHQzMFxuJiM0MzsjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuIFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xuIFx0aW50XHRzdG9wO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5jZGNmODYxYzg1ZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTU0NCw2ICYjNDM7NTQ0LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTtcbiBcdGlmICghc3RhYilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuQEAgLTg2LDUgJiM0Mzs4NiwyNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZDFlMlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtkcnJcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRyclwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBkcnJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgIF1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5pbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5AQCAtMTAwNyw1ICYjNDM7MTAwNywyNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDtlY2hvIFxcXCYjMzQ7MVxcXCYjMzQ7IFx1MDAzZSAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZjNhNFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtldHNcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGV0cyBiYW5kcyAxIHN0cmljdCAwIHF1YW50YSAxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDsyXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGV0c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgXVxuICAgICB9XG4gXVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYCB0byBwcmV2ZW50IGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgaXMgYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIGV4cGxpY2l0bHkgdXNlIHRoZSBEUlIgYW5kIEVUUyBxZGlzY3MsIHNvIGVuYWJsaW5nIHRoZW0gYWxvbmcgd2l0aCB0aGUgY29yZSBORVRfU0NIRUQgY29uZmlnIGlzIHJlY29tbWVuZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCAxOGE0MTljZDlkOTQ5Li5hNGMxYjdiMDI2M2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKIAogI2RlZmluZSBERUZBVUxUX1RYX1FVRVVFX0xFTgkxMDAwCiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYCTMwCiYjNDM7I2RlZmluZSBTVEFCX09WRVJIRUFEX01BWAk2NTUzNQogCiBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyIHsKIAlpbnQJc3RvcDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNTQ0LDYgJiM0Mzs1NDQsMTEgQEAgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAomIzQzOwlpZiAoYWJzKHMtJmd0O292ZXJoZWFkKSAmZ3Q7IFNUQUJfT1ZFUkhFQURfTUFYKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkJiMzNDspOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKIAlzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7CiAJaWYgKCFzdGFiKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KQEAgLTg2LDUgJiM0Mzs4NiwyNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIHJvb3QmIzM0OwogICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkMWUyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtkcnImIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGRyciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICBdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgppbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgpAQCAtMTAwNyw1ICYjNDM7MTAwNywyNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7ZWNobyBcJiMzNDsxXCYjMzQ7ICZndDsgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2UmIzM0OwogICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtmM2E0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtldHMmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZXRzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgdG91Y2hpbmcgYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFuZCBgaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjayB3aXRoaW4gYHFkaXNjX2dldF9zdGFiYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB2YWxpZGF0aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy0mZ3Q7b3ZlcmhlYWRgIGFnYWluc3QgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgZGVmaW5lZCBhcyA2NTUzNS4gSWYgdGhpcyBjaGVjayBmYWlscyDigJMgbWVhbmluZyB0aGUgb3ZlcmhlYWQgaXMgZXhjZXNzaXZlbHkgbGFyZ2Ug4oCTIGl0IG5vdyByZXR1cm5zIGAtRUlOVkFMYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBJdCYjMzk7cyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbSDigJMgd2hpY2ggSSYjMzk7bSB2ZXJ5IGZhbWlsaWFyIHdpdGguIFRoaXMgYHFkaXNjX2dldF9zdGFiYCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcXVldWVpbmcgZGlzY2lwbGluZSAocWRpc2MpIHdoZW4gdXNpbmcgYSBzaXplIHRhYmxlIChzdGFiKS4gVGhpcyBjaGFuZ2UgYWRkcyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCByZWFjaGFibGUgaW4gdGhlIGtlcm5lbC4KCk5vdywgYmVjYXVzZSBJ4oCZbSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaGUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2Agc2F5cyBgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBJIHNlZSBpdCYjMzk7cyAqc3RhdGljKiwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gRmluZGluZyB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIG5leHQgaW1wb3J0YW50IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZ2V0X3N0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTUtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ5NjpzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk3LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3Nj1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNDEtXHRpZiAodGNhW1RDQV9TVEFCXSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzQyOlx0XHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM0My1cdFx0aWYgKElTX0VSUihzdGFiKSkge1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTM5OD1zdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE0MTgtXHRpZiAodGNhW1RDQV9TVEFCXSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxNDE5Olx0XHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQyMC1cdFx0aWYgKElTX0VSUihzdGFiKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBBbmFseXNpcyBvZiBxZGlzYyBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljYWxseSBkZWZpbmVkPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCBxdWVzdGlvbiBJIHdhbnQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vdC4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgcmVzdCBvZiB0aGUgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTIzNj1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3NjpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Ny1cdFx0XHRcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3NS1cdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc2Olx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc3LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4MS1cdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzgyOlx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzgzLVx0ICovXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNjEzPXN0YXRpYyBpbnQgX190Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Ny1cdFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2ODpcdFx0XHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2OS1cdFx0XHRcdFx0IHRjbS1cdTAwM2V0Y21fcGFyZW50LCB0Y20tXHUwMDNldGNtX3BhcmVudCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODU6XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfcXVldWUsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODYtXHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21faGFuZGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUWRpc2MgQ29kZSoqCgpPa2F5LCBzbyBgcWRpc2NfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbGltaXRpbmcgaXRzIHNjb3BlLiBOb3csIHRoZSBjb250ZXh0IEkgaGF2ZSBpcyB0aGF0IGBfX3RjX21vZGlmeV9xZGlzY2AgY2FsbHMgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgX190Y19tb2RpZnlfcWRpc2NgIGlzIGFsc28gc3RhdGljLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y19tb2RpZnlfcWRpc2NgIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgd2F5IHRoZSBxZGlzYyBpcyBjcmVhdGVkIGFuZCBtb2RpZmllZCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoYXQgcGFydCBgX190Y19tb2RpZnlfcWRpc2NgIHBsYXlzIGluIHRoZSBvdmVyYWxsIHF1ZXVlaW5nIGRpc2NpcGxpbmUgbWFuaXB1bGF0aW9uIHByb2Nlc3MuIElzIHRoaXMgbWVhbnQgdG8gYmUgYSBsb3ctbGV2ZWwgcm91dGluZSB0aGF0JiMzOTtzIG9ubHkgY2FsbGVkIGludGVybmFsbHksIG9yIGlzIGl0IGEgaGVscGVyIHVzZWQgYnkgb3RoZXJzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE2MTItXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE2MTQtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODI2LSAqL1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTgyOC1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4NDk6XHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NTAtXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjUyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcHNjaGVkX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1Mjk6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjUzMC1cdHsubXNndHlwZSA9IFJUTV9ERUxRRElTQywgLmRvaXQgPSB0Y19nZXRfcWRpc2N9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sICh0YykgU3Vic3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBuZXcgcWRpc2NzIGdldCBjcmVhdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlaW5nIGEgbmV0bGluayBoYW5kbGVyLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgSSBrbm93IHRoZSBmdW5kYW1lbnRhbCBjb25maWcgb3B0aW9uIGZvciB0cmFmZmljIHNoYXBpbmcgaXMgYENPTkZJR19ORVRfU0NIRURgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZmlsZSAoYG5ldC9zY2hlZC9LY29uZmlnYCkgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gU29tZXRpbWVzIHRob3NlIGRlcGVuZGVuY2llcyBjYW4gYmUgYSBsaXR0bGUgdGFuZ2xlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgYEtjb25maWdgIGhhcyB0byBvZmZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgTkVUX1NDSEVEYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gc3BlY2lmaWMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSB0aGUgcGF0Y2ggYWZmZWN0cyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBpcyBhIGNvcmUgcGllY2UuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBjaGFuZ2UgcmVxdWlyZSBvciBhc3N1bWUgYSBwYXJ0aWN1bGFyIHF1ZXVpbmcgZGlzY2lwbGluZSAocWRpc2MpPyBUaGUgdGVzdCBjYXNlcywgYGRycmAgYW5kIGBldHNgLCBhcmUgYSBjbHVlLiBSaWdodCwgYGRycmAgaXMgbGlua2VkIHRvIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgZXRzYCB0byBgQ09ORklHX05FVF9TQ0hfRVRTYC4gQnV0IHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAsIHdoaWNoIGxpdmVzIGluIGBzY2hfYXBpLmNgLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBhIGdlbmVyaWMgY2hhbmdlLCBhcHBseWluZyB0byAqYW55KiBxZGlzYyB0aGF0IGxldmVyYWdlcyBzaXplIHRhYmxlcy4gU2l6ZSB0YWJsZXMgYXJlIGhhbmRsZWQgZ2VuZXJpY2FsbHkgd2l0aGluIGBzY2hfYXBpLmNgLCBzbyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGFmZmVjdHMgdGhlIGJyb2FkZXIgcWRpc2MgbGlmZWN5Y2xlLiBJJiMzOTtsbCBjaGVjayBgdGNfbW9kaWZ5X3FkaXNjYCwgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgcWRpc2NfY2hhbmdlYCB0byBzZWUgaG93IHRob3NlIGFyZSBhZmZlY3RlZC4gSG1tLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbTsgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0IGFzIGEgc3ltYm9sIGZvciB0aGlzIGFuYWx5c2lzLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIHN0YXRpYyEgQXJlIGFueSBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zICpub3QqIHN0YXRpYz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgcnRuZXRsaW5rX3JjdmAg4oCTIG5ldGxpbmsgaGFuZGxlcnMgYXJlIG9mdGVuIHN0YXRpYywgYnV0IGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IGBzdGF0aWMgaW50IHRjX21vZGlmeV9xZGlzYyguLi4pYC4gV2hhdCBhYm91dCBgcWRpc2NfY3JlYXRlYD8gVGhhdCYjMzk7cyBhbHNvIHN0YXRpYy4gSG93IGFib3V0IGBxZGlzY19nZXRfc3RhYmA/IEFsc28gc3RhdGljLiBEYW1uLiBJcyB0aGVyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIGluIGBzY2hfYXBpLmNgIHRoYXQgcHJvdmlkZXMgYSBob29rIHBvaW50IGhlcmU/IEkgbmVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGNoYW5nZSBpbiByZWxhdGlvbiB0byBvdGhlciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyOT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyAqcWRpc2NfYmFzZTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzMi1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTMzOmludCByZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjA1PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzICpxZGlzY19sb29rdXBfZGVmYXVsdChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjIwLS8qIFNldCBuZXcgZGVmYXVsdCBxZGlzYyB0byB1c2UgKi9cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjIxOmludCBxZGlzY19zZXRfZGVmYXVsdChjb25zdCBjaGFyICpuYW1lKVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMjIte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzMzPUVYUE9SVF9TWU1CT0wocWRpc2NfY2xhc3NfaGFzaF9ncm93KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzM0LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3MzU6aW50IHFkaXNjX2NsYXNzX2hhc2hfaW5pdChzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqY2xoYXNoKVxubmV0L3NjaGVkL3NjaF9hcGkuYy03MzYte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODMzPUVYUE9SVF9TWU1CT0wocWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTgzNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODM1OmludCBxZGlzY19vZmZsb2FkX2R1bXBfaGVscGVyKHN0cnVjdCBRZGlzYyAqc2NoLCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM2LVx0XHRcdCAgICAgIHZvaWQgKnR5cGVfZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTmV0d29yayBQbHVtYmluZyoqCgpIbW0sIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXR3b3JraW5nIGlzc3VlPyBBaCwgcmlnaHQsIGBydG5ldGxpbmtfcmN2X21zZ2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3Igcm91dGluZyBhbmQgaW50ZXJmYWNlIGNoYW5nZXMsIGFuZCBpdCYjMzk7cyBvdmVyIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoYXQgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMuICpDaGVja3MgbWVtb3J5Li4uIEkgcmVjYWxsIGl0IGhhbmRsZXMgaW5jb21pbmcgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgaW5mb3JtYXRpb24sIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50Ki4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIHNlZSBob3cgc2NoZWR1bGluZyBpcyBpbnZvbHZlZCwgSSBzaG91bGQgc2VhcmNoIGZvciBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGV4dGVybmFsbHkgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGF0IHRoZSBzY2hlZHVsZXIgZXhwb3Nlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdG8gdmlzdWFsaXplIHRoZSBzY2hlZHVsaW5nIGhvb2tzIGludG8gdGhlIG92ZXJhbGwgY29udHJvbCBwbGFuZS4gKlllcywgSSBrbm93IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbi4qIFJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgcG9wcyB1cCB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEzMz1pbnQgcmVnaXN0ZXJfcWRpc2Moc3RydWN0IFFkaXNjX29wcyAqcW9wcylcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NC19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3NTpFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3FkaXNjKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2LVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNzc9dm9pZCB1bnJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTU6RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3FkaXNjKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTk2LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjgyPXZvaWQgcWRpc2NfaGFzaF9hZGQoc3RydWN0IFFkaXNjICpxLCBib29sIGludmlzaWJsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5MC19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI5MTpFWFBPUlRfU1lNQk9MKHFkaXNjX2hhc2hfYWRkKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjkyLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yOTM9dm9pZCBxZGlzY19oYXNoX2RlbChzdHJ1Y3QgUWRpc2MgKnEpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yOTktfVxubmV0L3NjaGVkL3NjaF9hcGkuYzozMDA6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2RlbCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTMwMS1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQyMD1zdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcWRpc2NfZ2V0X3J0YWIoc3RydWN0IHRjX3JhdGVzcGVjICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDYwLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDYxOkVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy00NjItXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ2Mz12b2lkIHFkaXNjX3B1dF9ydGFiKHN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICp0YWIpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy00ODYtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo0ODc6RVhQT1JUX1NZTUJPTChxZGlzY19wdXRfcnRhYik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ4OC1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTU2Nj12b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01NzUtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1NzY6RVhQT1JUX1NZTUJPTChxZGlzY19wdXRfc3RhYik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU3Ny1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTYzNT12b2lkIHFkaXNjX3dhdGNoZG9nX2luaXRfY2xvY2tpZChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCBzdHJ1Y3QgUWRpc2MgKnFkaXNjLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQwLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjQxOkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDM9dm9pZCBxZGlzY193YXRjaGRvZ19pbml0KHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDYtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo2NDc6RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQ4LVxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDk9dm9pZCBxZGlzY193YXRjaGRvZ19zY2hlZHVsZV9yYW5nZV9ucyhzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCB1NjQgZXhwaXJlcyxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY3Ni19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY3NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlX3JhbmdlX25zKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjc4LVxubmV0L3NjaGVkL3NjaF9hcGkuYz02Nzk9dm9pZCBxZGlzY193YXRjaGRvZ19jYW5jZWwoc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4Mi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY4MzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX2NhbmNlbCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4NC1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTY5OT12b2lkIHFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczMi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjczMzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfZ3Jvdyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzM1PWludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0Ni19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc0NzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfaW5pdCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0OC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzQ5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy03NTItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NTM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3kpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy03NTQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc1NT12b2lkIHFkaXNjX2NsYXNzX2hhc2hfaW5zZXJ0KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy03NjQtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NjU6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luc2VydCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc2Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzY3PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc3Mi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc3MzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzc0LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9Nzk1PXZvaWQgcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50IG4sIGludCBsZW4pXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo4MzM6RVhQT1JUX1NZTUJPTChxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM0LVxubmV0L3NjaGVkL3NjaF9hcGkuYz04MzU9aW50IHFkaXNjX29mZmxvYWRfZHVtcF9oZWxwZXIoc3RydWN0IFFkaXNjICpzY2gsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtODUzLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODU0OkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9kdW1wX2hlbHBlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg1NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODU2PXZvaWQgcWRpc2Nfb2ZmbG9hZF9ncmFmdF9oZWxwZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04ODItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo4ODM6RVhQT1JUX1NZTUJPTChxZGlzY19vZmZsb2FkX2dyYWZ0X2hlbHBlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg4NC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODg1PXZvaWQgcWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04OTktfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo5MDA6RVhQT1JUX1NZTUJPTChxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy05MDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBRZGlzYyBNb2RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIYW5nIG9uLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc2AuJiMzNDsgVGhhdCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24sIGdpdmVuIHRoYXQgdGhlIHBhdGNoIGRlYWxzIHdpdGggYFRDQV9TVEFCYC4gSXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0JiMzOTtzIGludm9sdmVkIGhlcmU/IFBlcmhhcHMgYHFkaXNjX2NyZWF0ZWA/CgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgdGhpbmsuICpJZiogYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLCB0aGF0IHdvdWxkIG1lYW4gaXQmIzM5O3MgaW5saW5lZC4uLiBCdXQgd2FpdCwgbm8sIGl0JiMzOTtzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGB7IC5tc2d0eXBlID0gUlRNX05FV1FESVNDLCAuZG9pdCA9IHRjX21vZGlmeV9xZGlzYyB9YC4gVGhhdCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUgdG8gdGFyZ2V0LgoKTm93LCB3aGF0IGFib3V0IGBydG5ldGxpbmtfcmN2X21zZ2A/IFRoYXQmIzM5O3MgdG9vIGdlbmVyaWMsIHRvbyBoaWdoLWxldmVsLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBpbiBgc2NoX2FwaS5jYCB0aGF0JiMzOTtzICpyZWxhdGVkKiBhbmQsIGNydWNpYWxseSwgbm9uLXN0YXRpYz8gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgbmV0bGluayBoYW5kbGVycyBhcmUgYWN0dWFsbHkgc3RhdGljLCB0aG91Z2ggdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIGBxZGlzY19jcmVhdGVgIGlzIGFsc28gbm90IGlubGluZWQuIEl0JiMzOTtzIGEgcHJldHR5IGxhcmdlIGZ1bmN0aW9uLiBCdXQsIEkgc2hvdWxkIHN0aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIGJldHRlciBub24tc3RhdGljIG9wdGlvbi4gTWF5YmUgc29tZXRoaW5nIGxpa2UgYHJlZ2lzdGVyX3FkaXNjYD8gTm9wZSwgdGhhdCYjMzk7cyBmb3IgcmVnaXN0cmF0aW9uLiBJIHNlZSB0aGF0IGBxZGlzY19nZXRfc3RhYmAgaXMgc3RhdGljLCBidXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtb2RpZmllZCEKClVsdGltYXRlbHksIGB0Y19tb2RpZnlfcWRpc2NgICppcyogdGhlIG5ldGxpbmsgZW50cnkgcG9pbnQgYW5kIGlzIG5vdCBpbmxpbmVkLCB0aGVyZWZvcmUsIGl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gdGFyZ2V0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpdCBhZ2FpbiBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYz0xNjA2PXN0YXRpYyBib29sIHJlcV9jaGFuZ2Uoc3RydWN0IG5sbXNnaGRyICpuKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTYxMzpzdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxNC1cdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE4MDM9c3RhdGljIHZvaWQgcmVxdWVzdF9xZGlzY19tb2R1bGUoc3RydWN0IG5sYXR0ciAqa2luZClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4Mjc6c3RhdGljIGludCB0Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODI4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NDgtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcdGVyciA9IF9fdGNfbW9kaWZ5X3FkaXNjKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTg1MC1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ORVdRRElTQywgLmRvaXQgPSB0Y19tb2RpZnlfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTMwLVx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHRjX21vZGlmeV9xZGlzY2AgQ2FsbGJhY2sqKgoKT2theSwgc28gdGhpcyBgdGNfbW9kaWZ5X3FkaXNjYCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IGlzbiYjMzk7dCBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIGNsZWFuIGVudHJ5IHBvaW50LCBhIGRpc3RpbmN0IGJvdW5kYXJ5IHRoYXQgd2UgY2FuIHByb2JlLgoKTm93LCBiZWZvcmUgSSBkaXZlIGludG8gZnV6emluZyBkaXJlY3RseSwgSSB3YW50IHRvIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBhcmVhcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBzZWUgdGhlIHRlc3QgY2FzZXMgYXJlIHVzaW5nIGBkcnJgIGFuZCBgZXRzYC4gVGhhdCBnaXZlcyBtZSBhIGRpcmVjdGlvbi4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIGNvbnRleHQsIGFuZCBhbGxvdyBtZSB0byBkZXZlbG9wIHN0cm9uZ2VyIGZ1enppbmcgaGFybmVzc2VzLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gdGhlIGZ1enppbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9EUlImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xOTU9Y29uZmlnIE5FVF9TQ0hfTkVURU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9TQ0hfRFJSXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtEZWZpY2l0IFJvdW5kIFJvYmluIHNjaGVkdWxlciAoRFJSKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgTmV0d29yayBTY2hlZHVsZXIgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG1lbnRpb24gb2YgYE5FVF9TQ0hfRVRTYCBpbW1lZGlhdGVseSB0aHJvd3MgbWUgaW50byBhIHNwZWNpZmljIHN1YnNldCBvZiBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gQmFzZWQgb24gdGhlIG5hbWUsIEkmIzM5O20gdGhpbmtpbmcgKkVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24qIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIHBvaW50cyB0b3dhcmRzIGFuIEV2ZW50IFRyaWdnZXJlZCBTY2hlZHVsaW5nIHByb3RvY29sLCBwb3NzaWJseSB3aXRoaW4gYSBkZXRlcm1pbmlzdGljIG5ldHdvcmsgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGVyZm9ybWFuY2UgbW9kZWxpbmcgYW5kIHNpbXVsYXRpb24gb2YgYSBkZXRlcm1pbmlzdGljIG5ldHdvcmsgYmFzZWQgb24gdGhlc2UgcHJvdG9jb2xzLgoKTXkgbWluZCBpbW1lZGlhdGVseSByYWNlcyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IHRoZSByZWFsLXRpbWUgY29uc3RyYWludHMsIGhvdyB0aGUgZXZlbnQgdHJpZ2dlcnMgd2lsbCBpbmZsdWVuY2UgcGFja2V0IHNjaGVkdWxpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGppdHRlciwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgY2hhbGxlbmdlIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgcHJvYmxlbXMgLSBwYWNrZXQgcHJpb3JpdGllcywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb24gZW5kLXRvLWVuZCBsYXRlbmN5LiBBcmUgd2UgdGFsa2luZyBhYm91dCBwcmlvcml0aXppbmcgdHJhZmZpYyBvbiBhIHBlci1mbG93IG9yIGEgbW9yZSBhZ2dyZWdhdGVkIGFwcHJvYWNoPyBJcyB0aGVyZSB0cmFmZmljIHNoYXBpbmcgb3IgcG9saWNpbmcgYXQgdGhlIHNvdXJjZSBvciB0aGUgaW5ncmVzcyByb3V0ZXI/CgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29udGV4dC4gSXMgdGhpcyBhIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciBhbiBleGlzdGluZyBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGVkIG9uIGNvbW1lcmNpYWwgaGFyZHdhcmU/IFRoYXQgZHJhc3RpY2FsbHkgYWZmZWN0cyB0aGUgYW5hbHl0aWNhbCBhbmQgZGVzaWduIG9wdGlvbnMuIFRoZW4sIEkgYW0gbG9va2luZyBhdCBob3cgdG8gaW1wcm92ZSB0aGUgY3VycmVudCBkZXNpZ24uCkVzc2VudGlhbGx5LCBJIGFtIGltbWVkaWF0ZWx5IHdhbnRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgb3BlcmF0aW9uYWwgY29udGV4dCBhbmQgcGVyZm9ybWFuY2Ugb2JqZWN0aXZlcyBvZiBhIHN5c3RlbSB1c2luZyBgTkVUX1NDSF9FVFNgIGJlY2F1c2UgdGhlcmUgaXMgYSB3aWRlIHZhcmlldHkgb2Ygc2NlbmFyaW9zIHRoaXMgbmFtZSByZWZlcnMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBpbiBgcWRpc2NfZ2V0X3N0YWJgIGZvciBleGNlc3NpdmUgb3ZlcmhlYWQgdXNpbmcgYGFicyhzLSZndDtvdmVyaGVhZCkgJmd0OyBTVEFCX09WRVJIRUFEX01BWGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGEgc2FmZXR5IGNoZWNrIHJlYWxseSwgYW5kIGl0JiMzOTtzIGFwcGxpY2FibGUgYWNyb3NzIHRoZSBib2FyZCBmb3IgYW55IHFkaXNjIHdpdGggc2l6ZSB0YWJsZSBzdXBwb3J0LiBOb3csIHdoZXJlIHRvIHB1dCB0aGlzIGluIHRoZSBjb25maWc/IEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBgTkVUX1NDSF9EUlJgIG9yIGBORVRfU0NIX0VUU2Agc3BlY2lmaWNhbGx5LCBidXQgaW5jbHVkaW5nIHRoZW0gd291bGRuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZS4uLiBzaW5jZSB0aGlzIGlzIGdlbmVyaWMsIEkgcHJvYmFibHkgb25seSBuZWVkIHRoZSBtYWluIGNvbmZpZywgYE5FVF9TQ0hFRGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQuIEFoLCB5ZXMsIGBORVRfU0NIRURgIGVuYWJsZXMgdGhlIFFvUyBhbmQgZmFpciBxdWV1ZWluZyBzdWJzeXN0ZW0sIHdoaWNoIGluY2x1ZGVzIGBzY2hfYXBpLmNgLiBUaGF0IGhhbmRsZXMgYWxsIG9mIHRoaXMuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCBmaWxlIHRvIG1ha2UgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2FwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IHNjaF9mcmFnLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfU0NIRUQpXHRcdCYjNDM7PSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9DTFMpXHRcdCYjNDM7PSBjbHNfYXBpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU2l6ZSBUYWJsZSBPdmVyaGVhZCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGBDT05GSUdfTkVUX1NDSEVEYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50LCB3aGljaCBpcyBleHBlY3RlZCBmb3IgYW55IG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHJldmlldyB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGVkIHZhbGlkYXRpb24gY2hlY2suCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgU1RBQl9PVkVSSEVBRF9NQVhgIHdpdGhpbiBgcWRpc2NfZ2V0X3N0YWJgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwsIGFzIGl0IGhhbmRsZXMgc2l6ZSB0YWJsZSByZXRyaWV2YWwsIGFuZCBub3csIGVuc3VyZXMgdGhlIG92ZXJoZWFkIHZhbHVlLCBgcy0mZ3Q7b3ZlcmhlYWRgLCBzdGF5cyB3aXRoaW4gdGhlIGRlZmluZWQgYm91bmRhcmllcy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBleGNlc3NpdmVseSBsYXJnZSBvdmVyaGVhZCB2YWx1ZXMsIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgUlRNX05FV1FESVNDYCBuZXRsaW5rIG1lc3NhZ2UuCgpOb3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgd2lsbCBiZSBjYWxsZWQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIGVudHJ5IHBvaW50IGlzIGB0Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgY2FsbGJhY2sgZm9yIGBSVE1fTkVXUURJU0NgLiBPa2F5LCB0aGF0JiMzOTtzIGNsZWFuLgoKQnV0IGxldCBtZSB0aGluayBmdXJ0aGVyOiBpcyB0aGlzIHRoZSBvbmx5IGVudHJ5IHBvaW50PyBXaGF0IGFib3V0IG90aGVyIHBvdGVudGlhbCBjYWxsZXJzIG9mIGBxZGlzY19nZXRfc3RhYmA/IFdlbGwsIHRoZSBjb2RlIHNob3dzIHRoYXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBgcWRpc2NfY2hhbmdlYCwgaG93ZXZlciwgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHRjX21vZGlmeV9xZGlzY2AsIHNvIHdlJiMzOTtyZSBzdGlsbCBlZmZlY3RpdmVseSBjb3ZlcmVkLiBUaGlzIG1lYW5zIHRoYXQgYHRjX21vZGlmeV9xZGlzY2AgaGFuZGxlcyBib3RoIHRoZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBxdWV1ZSBkaXNjaXBsaW5lLCB3aGljaCBpcyBnb29kLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgYmVzdCBzeW1ib2wgZm9yIHRoaXMuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0IGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjaywgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIEkgYW0gbG9va2luZyBmb3IgdGhlICYjMzQ7YmVzdCYjMzQ7IHN5bWJvbCwgYXMgdGhlIGd1aWRlbGluZXMgc3RhdGU6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgbW9zdCBzcGVjaWZpYy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjYWxsIGNoYWluLCBgcnRuZXRsaW5rX3Jjdl9tc2dgIGNhbGxzIHRoZSBjYWxsYmFjay4uLiB3aGljaCBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gYHJ0bmV0bGlua19yY3ZfbXNnYCBpcyB0b28gZ2VuZXJpYywgYW5kIHRoZXJlIGFyZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAoYHFkaXNjX2NyZWF0ZWAsIGBfX3RjX21vZGlmeV9xZGlzY2ApIGluIHRoZSBjYWxsIGNoYWluLiBTbywgYHRjX21vZGlmeV9xZGlzY2AgaXMgdGhlIGJlc3QgaGVyZS4KCkFscmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCBmb2N1c2luZyBvbiBgdGNfbW9kaWZ5X3FkaXNjYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTm93IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX1NDSEVEYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBSZWZpbmVtZW50KioKCk9rYXksIHNvIHRoaXMgaGFzIGEgcHJldHR5IGNsZWFuIHByb2ZpbGUgLSBqdXN0IGEgYE5FVGAgZGVwZW5kZW5jeSwgd2hpY2ggaXMgZ29vZC4gQnV0IGJlZm9yZSBJIGRlY2xhcmUgdmljdG9yeSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJIHNlZSB0aGUgdGVzdCBjYXNlcyBhcmUgdXNpbmcgYGRycmAgYW5kIGBldHNgLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSB0aG9zZSBxZGlzY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGVzdGluZywgSSYjMzk7bGwgYWRkIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24uCgpBaCwgcmlnaHQsIHRoZSBkZWZhdWx0IHFkaXNjLi4uIGl0JiMzOTtzIGVpdGhlciBgcGZpZm9fZmFzdGAgb3IgYGZxX2NvZGVsYCwgZGVwZW5kaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWx0LWluIHFkaXNjcy4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIG9yIGEgc2ltaWxhciBmaWxlIHRoYXQgaGFuZGxlcyB0aGUgc2NoZWR1bGluZyBhc3BlY3RzLiBUaW1lIHRvIGdvIGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BmaWZvX2Zhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0zNi0vKiBRZGlzYyB0byB1c2UgYnkgZGVmYXVsdCAqL1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6Mzc6Y29uc3Qgc3RydWN0IFFkaXNjX29wcyAqZGVmYXVsdF9xZGlzY19vcHMgPSBcdTAwMjZwZmlmb19mYXN0X29wcztcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTM4LUVYUE9SVF9TWU1CT0woZGVmYXVsdF9xZGlzY19vcHMpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTc1Nz1FWFBPUlRfU1lNQk9MKHNjaF9kZWZhdWx0X3ByaW8yYmFuZCk7XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzY1LS8qXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3NjY6ICogUHJpdmF0ZSBkYXRhIGZvciBhIHBmaWZvX2Zhc3Qgc2NoZWR1bGVyIGNvbnRhaW5pbmc6XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjctICpcdC0gcmluZ3MgZm9yIHByaW9yaXR5IGJhbmRzXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjgtICovXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Njk6c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzAtXHRzdHJ1Y3Qgc2tiX2FycmF5IHFbUEZJRk9fRkFTVF9CQU5EU107XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzcyLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzczOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9hcnJheSAqYmFuZDJsaXN0KHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzQtXHRcdFx0XHRcdCAgaW50IGJhbmQpXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzc4LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6Nzc5OnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc4Mi1cdGludCBiYW5kID0gc2NoX2RlZmF1bHRfcHJpbzJiYW5kW3NrYi1cdTAwM2Vwcmlvcml0eSBcdTAwMjYgVENfUFJJT19NQVhdO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzgzOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzg0LVx0c3RydWN0IHNrYl9hcnJheSAqcSA9IGJhbmQybGlzdChwcml2LCBiYW5kKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDItXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDM6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgwNC17XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDU6XHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDMtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NDQ6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X3BlZWsoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg0NS17XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NDY6XHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDctXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NTgtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NTk6c3RhdGljIHZvaWQgcGZpZm9fZmFzdF9yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODYwLXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2MS1cdGludCBpLCBiYW5kO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODYyOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODYzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2OC1cdFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg2OTpcdFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODcwLVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04ODgtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4ODk6c3RhdGljIGludCBwZmlmb19mYXN0X2R1bXAoc3RydWN0IFFkaXNjICpxZGlzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg5MC17XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTAxLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTAyOnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9pbml0KHN0cnVjdCBRZGlzYyAqcWRpc2MsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkwMy1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA1LVx0dW5zaWduZWQgaW50IHFsZW4gPSBxZGlzY19kZXYocWRpc2MpLVx1MDAzZXR4X3F1ZXVlX2xlbjtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkwNjpcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkwNy1cdGludCBwcmlvO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkyNi1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkyNzpzdGF0aWMgdm9pZCBwZmlmb19mYXN0X2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05Mjgte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTI5Olx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzMC1cdGludCBwcmlvO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzNS1cdFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkzNjpcdFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTM3LVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDAtXHRcdC8qIERlc3Ryb3kgcmluZyBidXQgbm8gbmVlZCB0byBrZnJlZV9za2IgYmVjYXVzZSBhIGNhbGwgdG9cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk0MTpcdFx0ICogcGZpZm9fZmFzdF9yZXNldCgpIGhhcyBhbHJlYWR5IGRvbmUgdGhhdCB3b3JrLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTQyLVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDYtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NDc6c3RhdGljIGludCBwZmlmb19mYXN0X2NoYW5nZV90eF9xdWV1ZV9sZW4oc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDgtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5ld19sZW4pXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDkte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTUwOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk1MS1cdHN0cnVjdCBza2JfYXJyYXkgKmJhbmRzW1BGSUZPX0ZBU1RfQkFORFNdO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk2My1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NDpzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NjU6XHQuaWRcdFx0PVx0XCYjMzQ7cGZpZm9fZmFzdFwmIzM0Oyxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NjpcdC5wcml2X3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2KSxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NzpcdC5lbnF1ZXVlXHQ9XHRwZmlmb19mYXN0X2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Njg6XHQuZGVxdWV1ZVx0PVx0cGZpZm9fZmFzdF9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY5Olx0LnBlZWtcdFx0PVx0cGZpZm9fZmFzdF9wZWVrLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcwOlx0LmluaXRcdFx0PVx0cGZpZm9fZmFzdF9pbml0LFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcxOlx0LmRlc3Ryb3lcdD1cdHBmaWZvX2Zhc3RfZGVzdHJveSxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk3MjpcdC5yZXNldFx0XHQ9XHRwZmlmb19mYXN0X3Jlc2V0LFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTczOlx0LmR1bXBcdFx0PVx0cGZpZm9fZmFzdF9kdW1wLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTc0Olx0LmNoYW5nZV90eF9xdWV1ZV9sZW4gPSAgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc1LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk3Ny19O1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTc4OkVYUE9SVF9TWU1CT0wocGZpZm9fZmFzdF9vcHMpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc5LVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEyMDc9c3RhdGljIHZvaWQgYXR0YWNoX29uZV9kZWZhdWx0X3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTIxNi1cdGVsc2UgaWYoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTilcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEyMTc6XHRcdG9wcyA9IFx1MDAyNnBmaWZvX2Zhc3Rfb3BzO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTIxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMDUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgcGZpZm9fZmFzdGAsIHNpbmNlIHRoYXQmIzM5O3MgYSBidWlsdC1pbiBxZGlzYy4gQnV0IHRoZW4gSSBzYXcgdGhlIG1lbnRpb24gb2YgYHFkaXNjX2dldF9zdGFiYCBpbiB0aGUgcGF0Y2ggYW5kIHJlYWxpemVkIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzaXplIHRhYmxlcy4gVGhvc2UgdGFibGVzIGFyZSBoYW5kbGVkIGdlbmVyaWNhbGx5IGluIGBzY2hfYXBpLmNgIHZpYSBgcWRpc2NfY3JlYXRlYCBhbmQgYHFkaXNjX2NoYW5nZWAsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY29yZSB0cmFmZmljIGNvbnRyb2wgZmVhdHVyZS4gYE5FVF9TQ0hFRGAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4KCk15IGluaXRpYWwgc3RyYXRlZ3kgbG9va3MgbGlrZSB0aGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBvYnZpb3VzbHkhCiogICAqKkZvY3VzU3ltYm9sczoqKiBgdGNfbW9kaWZ5X3FkaXNjYAoqICAgKipFbmFibGVDb25maWdzOioqIGBORVRfU0NIRURgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtJmd0O292ZXJoZWFkYCkgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYnkgZW5zdXJpbmcgb3ZlcmhlYWQgaXMgd2l0aGluIGV4cGVjdGVkIGxpbWl0cywgYW5kIGlzIHJlYWNoZWQgdGhyb3VnaCBuZXRsaW5rLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGZ1enppbmcgaXQgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gcGlja2luZyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuIFRoZSBpbnN0cnVjdGlvbnMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBub3RpY2VkIGB0Y19tb2RpZnlfcWRpc2NgIGlzIHN0YXRpYy4gSG1tLi4uIHdoaWxlIGl0JiMzOTtzIGEgY2FsbGJhY2ssIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IGlubGluZWQsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGNoZWNrZWQgYHJ0bmV0bGlua19yY3ZfbXNnYCwgYnV0IHRoYXQmIzM5O3MgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggZmVlbHMgbGVzcyB0YXJnZXRlZC4gYHJlZ2lzdGVyX3FkaXNjYCBpcyBmb3IgbW9kdWxlIGluaXQsIHNvIHRoYXQmIzM5O3Mgb3V0LiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggYHRjX21vZGlmeV9xZGlzY2AsIGJlY2F1c2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIHRoaXMgZmVhdHVyZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgY2FzZXMuIFRoZSB0ZXN0IGNhc2VzIHVzZSBgZHJyYCBhbmQgYGV0c2AuIEkgd2lsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHNhZmUsIHNpbmNlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgdGVzdGVkLiBZZXAsIHRoZSBwYXRjaCBhY3R1YWxseSBtb2RpZmllcyBgZHJyLmpzb25gIGFuZCBgZXRzLmpzb25gLCBzbyB0aGF0IHNlYWxzIHRoZSBkZWFsLgoKU28sIGxldCYjMzk7cyByZXZpZXc6CgoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYE5FVF9TQ0hFRGAKICAgICogICBgTkVUX1NDSF9EUlJgCiAgICAqICAgYE5FVF9TQ0hfRVRTYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYHRjX21vZGlmeV9xZGlzY2AKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtJmd0O292ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYC4gVGhpcyBzYWZlZ3VhcmQgcHJldmVudHMgaW52YWxpZCBjb25maWd1cmF0aW9ucyBhbmQgaXMgdHJpZ2dlcmVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgYWNjZXNzIGlzIHRocm91Z2ggYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIG1ha2Ugc3BlY2lmaWMgdXNlIG9mIERSUiBhbmQgRVRTIHFkaXNjcywgbWFraW5nIHRoZXNlIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjRlMzRjNmQ4ODMxMDExOWZhNGJjYzZkOGU3ZWM1YTc3OTJmYjJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTI6NDA6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDE4YTQxOWNkOWQ5NDkuLmE0YzFiN2IwMjYzZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjZGVmaW5lIERFRkFVTFRfVFhfUVVFVUVfTEVOCTEwMDAKICNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVgJMzAKJiM0MzsjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYCTY1NTM1CiAKIHN0cnVjdCBxZGlzY193YWxrZXIgewogCWludAlzdG9wOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggNjViMzU1MjhkMTI1Zi4uY2RjZjg2MWM4NWY1YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC01NDQsNiAmIzQzOzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCiYjNDM7CWlmIChhYnMocy0mZ3Q7b3ZlcmhlYWQpICZndDsgU1RBQl9PVkVSSEVBRF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQomIzQzOwogCXN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTsKIAlpZiAoIXN0YWIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgppbmRleCAyYjYxZDhkNzliZGU4Li43NzEzZWIzNWFhZWJjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgpAQCAtODYsNSAmIzQzOzg2LDI1IEBACiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwogICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdCYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2QxZTImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlamVjdCBEUlIgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2RyciYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBkcnImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZHJyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCmluZGV4IGVlMDllNmQ2ZmRmM2MuLmRhN2FlNjI2ZjdlMWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCkBAIC0xMDA3LDUgJiM0MzsxMDA3LDI1IEBACiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwogICAgICAgICAgICAgJiMzNDtlY2hvIFwmIzM0OzFcJiMzNDsgJmd0OyAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZSYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2YzYTQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlamVjdCBFVFMgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2V0cyYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBldHMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgXQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY2hlZHVsZXIgT3ZlcmhlYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2sgZm9yIHRoZSBgcy0mZ3Q7b3ZlcmhlYWRgIHZhbHVlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGFuIGVycm9yIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy0mZ3Q7b3ZlcmhlYWRgIGV4Y2VlZHMgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgZGVmaW5lZCBhcyA2NTUzNS4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBjb21tb24gcHJhY3RpY2UgdG8gaW5jbHVkZSBzYW5pdHkgY2hlY2tzIGxpa2UgdGhpcyB3aGVuIGhhbmRsaW5nIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgaXNzdWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLgoKSSYjMzk7bSBtYWtpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCBgc2AgaW4gdGhlIGNvZGUgaXMgbW9zdCBsaWtlbHkgYSBwb2ludGVyIHRvIHNvbWUgc3RydWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGluY2x1ZGVzIGBvdmVyaGVhZGAgYXMgYSBtZW1iZXIuIFRoZSBjaGVjayBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgYHFkaXNjX2dldF9zdGFiYCBmdW5jdGlvbiwgbG9jYXRlZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgYXJvdW5kIGxpbmUgNTQ0LiBUbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiA1MjE6XHRcdFx0fVxuIDUyMjpcdFx0XHR0YWIgPSBubGFfZGF0YSh0YltUQ0FfU1RBQl9EQVRBXSk7XG4gNTIzOlx0XHRcdHRzaXplID0gbmxhX2xlbih0YltUQ0FfU1RBQl9EQVRBXSkgLyBzaXplb2YodTE2KTtcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdGlmICh0c2l6ZSAhPSBzLVx1MDAzZXRzaXplIHx8ICghdGFiIFx1MDAyNlx1MDAyNiB0c2l6ZSBcdTAwM2UgMCkpIHtcbiA1Mjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgb2Ygc2l6ZSB0YWJsZVwmIzM0Oyk7XG4gNTI4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDUyOTpcdFx0fVxuIDUzMDpcdFxuIDUzMTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzdGFiLCBcdTAwMjZxZGlzY19zdGFiX2xpc3QsIGxpc3QpIHtcbiA1MzI6XHRcdFx0aWYgKG1lbWNtcChcdTAwMjZzdGFiLVx1MDAzZXN6b3B0cywgcywgc2l6ZW9mKCpzKSkpXG4gNTMzOlx0XHRcdFx0Y29udGludWU7XG4gNTM0Olx0XHRcdGlmICh0c2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiA1MzU6XHRcdFx0ICAgIG1lbWNtcChzdGFiLVx1MDAzZWRhdGEsIHRhYiwgZmxleF9hcnJheV9zaXplKHN0YWIsIGRhdGEsIHRzaXplKSkpXG4gNTM2Olx0XHRcdFx0Y29udGludWU7XG4gNTM3Olx0XHRcdHN0YWItXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiA1Mzg6XHRcdFx0cmV0dXJuIHN0YWI7XG4gNTM5Olx0XHR9XG4gNTQwOlx0XG4gNTQxOlx0XHRpZiAocy1cdTAwM2VzaXplX2xvZyBcdTAwM2UgU1RBQl9TSVpFX0xPR19NQVggfHxcbiA1NDI6XHRcdCAgICBzLVx1MDAzZWNlbGxfbG9nIFx1MDAzZSBTVEFCX1NJWkVfTE9HX01BWCkge1xuIDU0MzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgbG9nYXJpdGhtaWMgc2l6ZSBvZiBzaXplIHRhYmxlXCYjMzQ7KTtcbiA1NDQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XG4gNTQ3Olx0XHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuIDU0ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwmIzM0Oyk7XG4gNTQ5Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDU1MDpcdFx0fVxuIDU1MTpcdFxuIDU1MjpcdFx0c3RhYiA9IGttYWxsb2NfZmxleCgqc3RhYiwgZGF0YSwgdHNpemUpO1xuIDU1MzpcdFx0aWYgKCFzdGFiKVxuIDU1NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA1NTU6XHRcbiA1NTY6XHRcdHN0YWItXHUwMDNlcmVmY250ID0gMTtcbiA1NTc6XHRcdHN0YWItXHUwMDNlc3pvcHRzID0gKnM7XG4gNTU4Olx0XHRpZiAodHNpemUgXHUwMDNlIDApXG4gNTU5Olx0XHRcdG1lbWNweShzdGFiLVx1MDAzZWRhdGEsIHRhYiwgZmxleF9hcnJheV9zaXplKHN0YWIsIGRhdGEsIHRzaXplKSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YWItXHUwMDNlbGlzdCwgXHUwMDI2cWRpc2Nfc3RhYl9saXN0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHJldHVybiBzdGFiO1xuIDU2NDpcdH1cbiA1NjU6XHRcbiA1NjY6XHR2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXG4gNTY3Olx0e1xuIDU2ODpcdFx0aWYgKCF0YWIpXG4gNTY5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgT3ZlcmhlYWQgaW4gYHRjX3NpemVzcGVjYCBmb3IgU2FuaXR5KioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGNoZWNrIG9uIGBzLSZndDtvdmVyaGVhZGAsIGxpa2VseSB3aXRoaW4gc29tZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBjb250ZXh0LiBUaGUgcHJpbWFyeSBjb25jZXJuIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhpcyBgb3ZlcmhlYWRgIHZhbHVlIGZyb20gZ29pbmcgaGF5d2lyZSDigJMgZWl0aGVyIGJlY29taW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIG9yLCB1c2luZyBgYWJzKClgLCBleGNlc3NpdmVseSBzbWFsbCAob3IgbmVnYXRpdmUsIHdoaWNoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGNvdWxkIGJlIGVxdWFsbHkgcHJvYmxlbWF0aWMpLiBUaGUgdXNlIG9mIGBhYnMoKWAgaXMgYSBrZXkgaW5kaWNhdG9yIHRoYXQgd2UgYXJlIHByb2JhYmx5IGNvbmNlcm5lZCB3aXRoIGFic29sdXRlIHZhbHVlcywgbm90IHJhdyBzaWduZWQgaW50ZWdlcnMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdoYXQgYHN0cnVjdCB0Y19zaXplc3BlY2AgYWN0dWFsbHkgKmlzKi4gS25vd2luZyB0aGF0IHN0cnVjdCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCB0byBhc3Nlc3MgKndoeSogdGhpcyBvdmVyaGVhZCB2YWx1ZSBtYXR0ZXJzLCB3aGF0IGl0IHJlcHJlc2VudHMgKGJ5dGVzLCBwYWNrZXRzLCBzb21lIG90aGVyIG1ldHJpYz8pLCBhbmQgd2hhdCByZWFzb25hYmxlIGJvdW5kcyBhcmUgZm9yIGl0IHdpdGhpbiB0aGlzIFRDIHN1YnN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoZWFkZXIgc2l6ZXMsIHBhZGRpbmcsIGZyYW1lIG92ZXJoZWFkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBzYCB2YXJpYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QsIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBjb21wcmlzZXMgdGhhdCBzdHJ1Y3R1cmUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjX3NpemVzcGVjYCBhbmQgc2VlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgVEMgcGljdHVyZS4gT25jZSBJIGtub3cgdGhhdCwgSSBjYW4gZXZhbHVhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgaW1wb3NlZCBjb25zdHJhaW50cyBhbmQgaXRzIGltcGxpY2F0aW9ucyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y19zaXplc3BlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTUzPXN0cnVjdCBxZGlzY19zaXplX3RhYmxlIHtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTU1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6NTY6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWNcdHN6b3B0cztcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNTctXHRpbnRcdFx0XHRyZWZjbnQ7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkxPXN0cnVjdCB0Y19yYXRlc3BlYyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oLTEwMS1cbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDI6c3RydWN0IHRjX3NpemVzcGVjIHtcbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDMtXHR1bnNpZ25lZCBjaGFyXHRjZWxsX2xvZztcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc3RhYl9wb2xpY3lbVENBX1NUQUJfTUFYICYjNDM7IDFdID0ge1xubmV0L3NjaGVkL3NjaF9hcGkuYzo0OTI6XHRbVENBX1NUQUJfQkFTRV1cdD0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19zaXplc3BlYykgfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDkzLVx0W1RDQV9TVEFCX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTUwMC1cdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiO1xubmV0L3NjaGVkL3NjaF9hcGkuYzo1MDE6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWMgKnM7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTUwMi1cdHVuc2lnbmVkIGludCB0c2l6ZSA9IDA7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkwPXN0cnVjdCB0Y19yYXRlc3BlYyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oLTEwMC1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDE6c3RydWN0IHRjX3NpemVzcGVjIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDItXHR1bnNpZ25lZCBjaGFyXHRjZWxsX2xvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgYHN0cnVjdCB0Y19zaXplc3BlY2AgZGVmaW5pdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0IGlzIGl0IHNpemluZz8gSXMgaXQgaW52b2x2ZWQgaW4gcmF0ZSBsaW1pdGluZywgc2hhcGluZywgY2xhc3NpZmljYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBiYW5kd2lkdGggbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgbWVtYmVycyBhbmQgd2hhdCB0aGV5IHJlcHJlc2VudCBpbiB0ZXJtcyBvZiBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZmllbGRzIGFyZSBpbiB0aGlzPyBJcyBpdCBkZWZpbmluZyBwYWNrZXQgc2l6ZXMsIHF1ZXVlIGRlcHRocywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGVyZSBtdWx0aXBsZSBtZW1iZXJzPyBBcmUgdGhleSBpbnRlZ2VycywgYml0ZmllbGRzLCBvciBvdGhlciBzdHJ1Y3RzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBhYmxlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlIGRlc2lnbiB3aWxsIHJldmVhbCB0aGUgaW50ZW50IG9mIHRoaXMgc3RydWN0dXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0I2RlZmluZSBUQ19SVEFCX1NJWkVcdDEwMjRcbiAxMDE6XHRcbiAxMDI6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWMge1xuIDEwMzpcdFx0dW5zaWduZWQgY2hhclx0Y2VsbF9sb2c7XG4gMTA0Olx0XHR1bnNpZ25lZCBjaGFyXHRzaXplX2xvZztcbiAxMDU6XHRcdHNob3J0XHRcdGNlbGxfYWxpZ247XG4gMTA2Olx0XHRpbnRcdFx0b3ZlcmhlYWQ7XG4gMTA3Olx0XHR1bnNpZ25lZCBpbnRcdGxpbmtsYXllcjtcbiAxMDg6XHRcdHVuc2lnbmVkIGludFx0bXB1O1xuIDEwOTpcdFx0dW5zaWduZWQgaW50XHRtdHU7XG4gMTEwOlx0XHR1bnNpZ25lZCBpbnRcdHRzaXplO1xuIDExMTpcdH07XG4gMTEyOlx0XG4gMTEzOlx0ZW51bSB7XG4gMTE0Olx0XHRUQ0FfU1RBQl9VTlNQRUMsXG4gMTE1Olx0XHRUQ0FfU1RBQl9CQVNFLFxuIDExNjpcdFx0VENBX1NUQUJfREFUQSxcbiAxMTc6XHRcdF9fVENBX1NUQUJfTUFYXG4gMTE4Olx0fTtcbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3ZlcmhlYWQgTGltaXQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBvc2luZyBhIGhhcmQgbGltaXQgb24gdGhlIGBvdmVyaGVhZGAgdmFsdWUsIHNwZWNpZmljYWxseSBjYXBwaW5nIGl0IGF0IGBTVEFCX09WRVJIRUFEX01BWGAsIHdoaWNoIGlzIDY1NTM1LiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3aHkgdGhpcyByZXN0cmljdGlvbj8gV2hhdCYjMzk7cyB0aGUgcHJvYmxlbSBpdCYjMzk7cyBhZGRyZXNzaW5nPyBDbGVhcmx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lLiBXZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIG9yIHBvc3NpYmx5IGV2ZW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMg4oCTIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG92ZXJoZWFkYCB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FwLiBJIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXgsIGEgY291bnRlciwgb3IgaW4gYW55IG90aGVyIGNyaXRpY2FsIGFyaXRobWV0aWMgb3BlcmF0aW9uIHRoYXQgY291bGQgYmUgdnVsbmVyYWJsZSB0byB0aGVzZSBraW5kcyBvZiBlcnJvcnMuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdmVyaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ2MC1cdFx0ZW50cnktXHUwMDNlcG9saWNlLmF2cmF0ZSA9IHRjZl9wb2xpY2VfdGNmcF9ld21hX3JhdGUoYWN0KTtcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDYxOlx0XHRlbnRyeS1cdTAwM2Vwb2xpY2Uub3ZlcmhlYWQgPSB0Y2ZfcG9saWNlX3JhdGVfb3ZlcmhlYWQoYWN0KTtcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDYyLVx0XHRlbnRyeS1cdTAwM2Vwb2xpY2UuYnVyc3RfcGt0ID0gdGNmX3BvbGljZV9idXJzdF9wa3QoYWN0KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ3Olx0aWYgKGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz01OTU9dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTktXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjYwMDpcdHBrdF9sZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IHN0YWItXHUwMDNlc3pvcHRzLm92ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF9hcGkuYy02MDEtXHRpZiAodW5saWtlbHkoIXN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSlcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yMDE9c3RydWN0IGNha2Vfc2NoZWRfY29uZmlnIHtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yMDgtXHR1MTZcdFx0ZndtYXJrX3NoZnQ7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyMDk6XHRzMTZcdFx0cmF0ZV9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTIxMC1cdHUxNlx0XHRyYXRlX21wdTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xMzcyPXN0YXRpYyB1NjQgY2FrZV9ld21hKHU2NCBhdmcsIHU2NCBzYW1wbGUsIHUzMiBzaGlmdClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMzc4LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTM3OTpzdGF0aWMgdTMyIGNha2VfY2FsY19vdmVyaGVhZChzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxZCwgdTMyIGxlbiwgdTMyIG9mZilcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzODAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTAtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzkxOlx0bGVuID0gbWF4KChzMzIpbGVuICYjNDM7IHEtXHUwMDNlcmF0ZV9vdmVyaGVhZCwgKHMzMilxLVx1MDAzZXJhdGVfbXB1KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTItXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQxMi1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MTM6c3RhdGljIHUzMiBjYWtlX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDE0LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDIzLVx0aWYgKHNlZ3MgPT0gMSlcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MjQ6XHRcdHJldHVybiBjYWtlX2NhbGNfb3ZlcmhlYWQocSwgbGVuLCBvZmYpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQyNS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDUyLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTQ1MzpcdHJldHVybiAoY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKSAqIChzZWdzIC0gMSkgJiM0Mztcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0NTQ6XHRcdGNha2VfY2FsY19vdmVyaGVhZChxLCBsYXN0X2xlbiwgb2ZmKSk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDU1LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU1PXN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4MTYtXHRcdFx0Y29iYWx0X3NldF9lbnF1ZXVlX3RpbWUoc2Vncywgbm93KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE4MTc6XHRcdFx0Z2V0X2NvYmFsdF9jYihzZWdzKS1cdTAwM2VhZGp1c3RlZF9sZW4gPSBjYWtlX292ZXJoZWFkKHEsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODE4LVx0XHRcdFx0XHRcdFx0XHRcdCAgc2Vncyk7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg0MS1cdFx0Y29iYWx0X3NldF9lbnF1ZXVlX3RpbWUoc2tiLCBub3cpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTg0MjpcdFx0Z2V0X2NvYmFsdF9jYihza2IpLVx1MDAzZWFkanVzdGVkX2xlbiA9IGNha2Vfb3ZlcmhlYWQocSwgc2tiKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NDMtXHRcdGZsb3dfcXVldWVfYWRkKGZsb3csIHNrYik7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjY0OT1zdGF0aWMgaW50IGNha2VfY29uZmlnX2NoYW5nZShzdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcgKnEsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI2NTA6XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLCBib29sICpvdmVyaGVhZF9jaGFuZ2VkKVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjY1MS17XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMS1cdGlmICh0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MTI6XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VyYXRlX292ZXJoZWFkLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMy1cdFx0XHQgICBubGFfZ2V0X3MzMih0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MTQtXHRcdHJhdGVfZmxhZ3MgfD0gQ0FLRV9GTEFHX09WRVJIRUFEO1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcxNTpcdFx0Km92ZXJoZWFkX2NoYW5nZWQgPSB0cnVlO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxNi1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzE5LVx0XHRyYXRlX2ZsYWdzIFx1MDAyNj0gfkNBS0VfRkxBR19PVkVSSEVBRDtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MjA6XHRcdCpvdmVyaGVhZF9jaGFuZ2VkID0gdHJ1ZTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MjEtXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9Mjc3Mz1zdGF0aWMgaW50IGNha2VfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjc3Ny1cdHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSA9IHFkLVx1MDAzZWNvbmZpZztcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3Nzg6XHRib29sIG92ZXJoZWFkX2NoYW5nZWQgPSBmYWxzZTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzktXHRpbnQgcmV0O1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODUtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzg2Olx0cmV0ID0gY2FrZV9jb25maWdfY2hhbmdlKHEsIG9wdCwgZXh0YWNrLCBcdTAwMjZvdmVyaGVhZF9jaGFuZ2VkKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODctXHRpZiAocmV0KVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODktXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzkwOlx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3OTEtXHRcdFdSSVRFX09OQ0UocWQtXHUwMDNlbWF4X25ldGxlbiwgMCk7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjkwOD1zdGF0aWMgaW50IGNha2VfY29uZmlnX2R1bXAoc3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NTgtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyOTU5Olx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX0NBS0VfT1ZFUkhFQUQsIFJFQURfT05DRShxLVx1MDAzZXJhdGVfb3ZlcmhlYWQpKSlcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NjAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTMzMDE9c3RhdGljIGludCBjYWtlX21xX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMDUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzA2Olx0Ym9vbCBvdmVyaGVhZF9jaGFuZ2VkID0gZmFsc2U7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzA3LVx0dW5zaWduZWQgaW50IG50eDtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzA5LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzMxMDpcdHJldCA9IGNha2VfY29uZmlnX2NoYW5nZShcdTAwMjZwcml2LVx1MDAzZWNha2VfY29uZmlnLCBvcHQsIGV4dGFjaywgXHUwMDI2b3ZlcmhlYWRfY2hhbmdlZCk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzExLVx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzE3LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzMxODpcdFx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMTktXHRcdFx0V1JJVEVfT05DRShxZC1cdTAwM2VtYXhfbmV0bGVuLCAwKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03MTA9c3RhdGljIHUzMiBnZXRfbWVtb3J5X2xpbWl0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbGltaXQpXG4tLVxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzEyLVx0LyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3MTM6XHQgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy03MTQtXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz04MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MjMtXHRcdC8qIERlbGF5IGNsZWFyaW5nIHRoZSBTVEFURV9NSVNTRUQgaGVyZSB0byByZWR1Y2Vcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjgyNDpcdFx0ICogdGhlIG92ZXJoZWFkIG9mIHRoZSBzZWNvbmQgc3Bpbl90cnlsb2NrKCkgaW5cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgyNS1cdFx0ICogcWRpc2NfcnVuX2JlZ2luKCkgYW5kIF9fbmV0aWZfc2NoZWR1bGUoKSBjYWxsaW5nXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTU2Mz12b2lkIHBzY2hlZF9yYXRlY2ZnX3ByZWNvbXB1dGUoc3RydWN0IHBzY2hlZF9yYXRlY2ZnICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE1NjctXHRtZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxNTY4Olx0ci1cdTAwM2VvdmVyaGVhZCA9IGNvbmYtXHUwMDNlb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNTY5LVx0ci1cdTAwM2VtcHUgPSBjb25mLVx1MDAzZW1wdTtcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjI9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3OTgtXHRcdC8qIE9wdGlvbnMgbm90IHN1cHBvcnRlZCBieSB0aGUgb2ZmbG9hZC4gKi9cbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc5OTpcdFx0aWYgKGhvcHQtXHUwMDNlcmF0ZS5vdmVyaGVhZCB8fCBob3B0LVx1MDAzZWNlaWwub3ZlcmhlYWQpIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTgwMDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0hUQiBvZmZsb2FkIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIG92ZXJoZWFkIHBhcmFtZXRlclwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE4MDEtXHRcdFx0Z290byBmYWlsdXJlO1xuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYz05Mz1zdHJ1Y3QgbmV0ZW1fc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzNS1cdCAqL1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzNjpcdHMzMlx0XHRcdHBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzctXHR1MzJcdFx0XHRjZWxsX3NpemU7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTM4LVx0c3RydWN0IHJlY2lwcm9jYWxfdmFsdWVcdGNlbGxfc2l6ZV9yZWNpcHJvY2FsO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzOTpcdHMzMlx0XHRcdGNlbGxfb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTQwLVx0dTMyXHRcdFx0bGltaXQ7XG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTM2Nz1zdGF0aWMgdTY0IHBhY2tldF90aW1lX25zKHU2NCBsZW4sIGNvbnN0IHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxKVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM2OC17XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MzY5Olx0bGVuICYjNDM7PSBxLVx1MDAzZXBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0zNzAtXG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3NS1cdFx0XHRjZWxscyYjNDM7JiM0Mzs7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6Mzc2Olx0XHRsZW4gPSBjZWxscyAqIChxLVx1MDAzZWNlbGxfc2l6ZSAmIzQzOyBxLVx1MDAzZWNlbGxfb3ZlcmhlYWQpO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3Ny1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM9OTM2PXN0YXRpYyB2b2lkIGdldF9yYXRlKHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDAtXHRxLVx1MDAzZXJhdGUgPSByLVx1MDAzZXJhdGU7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQxOlx0cS1cdTAwM2VwYWNrZXRfb3ZlcmhlYWQgPSByLVx1MDAzZXBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDItXHRxLVx1MDAzZWNlbGxfc2l6ZSA9IHItXHUwMDNlY2VsbF9zaXplO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjk0MzpcdHEtXHUwMDNlY2VsbF9vdmVyaGVhZCA9IHItXHUwMDNlY2VsbF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDQtXHRpZiAocS1cdTAwM2VjZWxsX3NpemUpXG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTEyNTA9c3RhdGljIGludCBuZXRlbV9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzAxLVx0fVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzMDI6XHRyYXRlLnBhY2tldF9vdmVyaGVhZCA9IHEtXHUwMDNlcGFja2V0X292ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzMDMtXHRyYXRlLmNlbGxfc2l6ZSA9IHEtXHUwMDNlY2VsbF9zaXplO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzMDQ6XHRyYXRlLmNlbGxfb3ZlcmhlYWQgPSBxLVx1MDAzZWNlbGxfb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTMwNS1cdGlmIChubGFfcHV0KHNrYiwgVENBX05FVEVNX1JBVEUsIHNpemVvZihyYXRlKSwgXHUwMDI2cmF0ZSkpXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYz0zODM9c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODgtXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjM4OTpcdC8qICYjMzk7bG1heCYjMzk7IGNhbiByYW5nZSBmcm9tIFtRRlFfTUlOX0xNQVgsIHBrdGxlbiAmIzQzOyBzdGFiIG92ZXJoZWFkXSAqL1xubmV0L3NjaGVkL3NjaF9xZnEuYy0zOTAtXHRpZiAobG1heCBcdTAwM2UgUUZRX01BWF9MTUFYKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjcxPXN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjkzLVx0XHRcdG1heF9mcm1fbGVuID0gZHVyYXRpb25fdG9fbGVuZ3RoKHEsIHNjaGVkLVx1MDAzZW1heF9vcGVuX2dhdGVfZHVyYXRpb25bdGNdKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjk0Olx0XHRcdC8qIENvbXBlbnNhdGUgZm9yIEwxIG92ZXJoZWFkIGZyb20gc2l6ZSB0YWJsZSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjk1LVx0XHRcdCAqIGJ1dCBkb24mIzM5O3QgbGV0IHRoZSBmcmFtZSBzaXplIGdvIG5lZ2F0aXZlXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTctXHRcdFx0aWYgKHN0YWIpIHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjk4Olx0XHRcdFx0bWF4X2ZybV9sZW4gLT0gc3RhYi1cdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI5OS1cdFx0XHRcdG1heF9mcm1fbGVuID0gbWF4X3QoaW50LCBtYXhfZnJtX2xlbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RiZi5jPTExOT1zdGF0aWMgdTY0IHBzY2hlZF9uc190MmwoY29uc3Qgc3RydWN0IHBzY2hlZF9yYXRlY2ZnICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGJmLmMtMTMzLVxubmV0L3NjaGVkL3NjaF90YmYuYzoxMzQ6XHRpZiAobGVuIFx1MDAzZSByLVx1MDAzZW92ZXJoZWFkKVxubmV0L3NjaGVkL3NjaF90YmYuYzoxMzU6XHRcdGxlbiAtPSByLVx1MDAzZW92ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF90YmYuYy0xMzYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgc28gYG92ZXJoZWFkYCBpcyBkZWZpbmVkIGFzIGFuIGludGVnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBiZWNvbWVzIGV4Y2Vzc2l2ZWx5IGxhcmdlLCB0aGVyZSYjMzk7cyBhIHJlYWwgcmlzayBvZiBhbiBpbnRlZ2VyIG92ZXJmbG93IGhhcHBlbmluZyByaWdodCBoZXJlOiBgcGt0X2xlbiA9IHNrYi0mZ3Q7bGVuICYjNDM7IHN0YWItJmd0O3N6b3B0cy5vdmVyaGVhZDtgIGluc2lkZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0IGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjb25zdHJhaW50cyBhbmQgY2FsY3VsYXRpb25zIGludm9sdmVkLiBJIG5lZWQgdG8gc2VlIGhvdyBgcGt0X2xlbmAgaXMgdXNlZCBkb3duc3RyZWFtIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBpZiB0aGlzIG92ZXJmbG93IG9jY3Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdGlmIChubGFfcHV0KHNrYiwgVENBX1NUQUJfQkFTRSwgc2l6ZW9mKHN0YWItXHUwMDNlc3pvcHRzKSwgXHUwMDI2c3RhYi1cdTAwM2Vzem9wdHMpKVxuIDU4NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1ODc6XHRcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xuIDU4ODpcdFxuIDU4OTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNTkwOlx0XG4gNTkxOlx0bmxhX3B1dF9mYWlsdXJlOlxuIDU5MjpcdFx0cmV0dXJuIC0xO1xuIDU5MzpcdH1cbiA1OTQ6XHRcbiA1OTU6XHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1OTY6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4gNTk3Olx0e1xuIDU5ODpcdFx0aW50IHBrdF9sZW4sIHNsb3Q7XG4gNTk5Olx0XG4gNjAwOlx0XHRwa3RfbGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBzdGFiLVx1MDAzZXN6b3B0cy5vdmVyaGVhZDtcbiA2MDE6XHRcdGlmICh1bmxpa2VseSghc3RhYi1cdTAwM2Vzem9wdHMudHNpemUpKVxuIDYwMjpcdFx0XHRnb3RvIG91dDtcbiA2MDM6XHRcbiA2MDQ6XHRcdHNsb3QgPSBwa3RfbGVuICYjNDM7IHN0YWItXHUwMDNlc3pvcHRzLmNlbGxfYWxpZ247XG4gNjA1Olx0XHRpZiAodW5saWtlbHkoc2xvdCBcdTAwM2MgMCkpXG4gNjA2Olx0XHRcdHNsb3QgPSAwO1xuIDYwNzpcdFxuIDYwODpcdFx0c2xvdCBcdTAwM2VcdTAwM2U9IHN0YWItXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xuIDYwOTpcdFx0aWYgKGxpa2VseShzbG90IFx1MDAzYyBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZSkpXG4gNjEwOlx0XHRcdHBrdF9sZW4gPSBzdGFiLVx1MDAzZWRhdGFbc2xvdF07XG4gNjExOlx0XHRlbHNlXG4gNjEyOlx0XHRcdHBrdF9sZW4gPSBzdGFiLVx1MDAzZWRhdGFbc3RhYi1cdTAwM2Vzem9wdHMudHNpemUgLSAxXSAqXG4gNjEzOlx0XHRcdFx0XHQoc2xvdCAvIHN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSAmIzQzO1xuIDYxNDpcdFx0XHRcdFx0c3RhYi1cdTAwM2VkYXRhW3Nsb3QgJSBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZV07XG4gNjE1Olx0XG4gNjE2Olx0XHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gNjE3Olx0b3V0OlxuIDYxODpcdFx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuIDYxOTpcdFx0XHRwa3RfbGVuID0gMTtcbiA2MjA6XHRcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIDYyMTpcdH1cbiA2MjI6XHRcbiA2MjM6XHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcWRpc2Nfd2F0Y2hkb2coc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIDYyNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIFBhY2tldCBMZW5ndGggQ2FsY3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJZiB0aGUgYG92ZXJoZWFkYCB2YWx1ZSBpcyBzdWJzdGFudGlhbCwgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gb2YgYHBrdF9sZW5gIGNhbiBiZWNvbWUgZW5vcm1vdXMsIG9yIGV2ZW4gbmVnYXRpdmUuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBUaGUgY29kZSB0aGVuIGNhbGN1bGF0ZXMgYHNsb3RgIGJhc2VkIG9uIGBwa3RfbGVuYCBhbmQgY2VsbCBhbGlnbm1lbnQuIEEgdmVyeSBsYXJnZSBgcGt0X2xlbmAgbGVhZHMgdG8gYSBsYXJnZSBgc2xvdGAsIHdoaWNoIGlzIHRoZW4gcmlnaHQtc2hpZnRlZC4KCkkgc2VlIGEgY2hlY2sgdG8gZW5zdXJlIGBzbG90YCBkb2VzbiYjMzk7dCBleGNlZWQgYHN0YWItJmd0O3N6b3B0cy50c2l6ZWAsIGFuZCBpZiBpdCBkb2VzLCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGNhbGN1bGF0aW9uIGZvciBgcGt0X2xlbmAgd2l0aGluIHRoYXQgY29uZGl0aW9uIHVzaW5nIHRoZSBtb2R1bG8gb3BlcmF0b3IuIE15IGZpcnN0IGluc3RpbmN0IGlzLCB0aGF0IG1vZHVsbyBvcGVyYXRpb24gbG9va3Mgc2FmZSBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgYHNsb3RgIGJlaW5nIG5lZ2F0aXZlLiBUaGUgY29kZSBpbmNsdWRlcyBhIGNoZWNrIGFuZCBjbGFtcHMgYHNsb3RgIHRvIDAgaWYgaXQmIzM5O3MgbmVnYXRpdmUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoYXQgb2NjdXJzLgoKVGhlIGtleSBpbnNpZ2h0IGlzIHRoZSBpbnRlZ2VyIG92ZXJmbG93LiBJZiBgcGt0X2xlbmAgaXMgbGFyZ2UgZW5vdWdoIGFmdGVyIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIGFzIGFuIGBpbnRgLCB3aGVuIHdlIGFkZCBgY2VsbF9hbGlnbmAgdG8gaXQsIHRoZSB2YWx1ZSBjb3VsZCB3cmFwIGFyb3VuZCwgcmVzdWx0aW5nIGluIGEgbmVnYXRpdmUgYHNsb3RgLiBUaGUgY29kZSBoYW5kbGVzIG5lZ2F0aXZlIGBzbG90YCB0aHJvdWdoIGNsYW1waW5nLgoKTXkgbWluZCBpbW1lZGlhdGVseSBjb25zaWRlcnMgYSBzY2VuYXJpby4gSWYgYG92ZXJoZWFkYCBpcyBlZmZlY3RpdmVseSBgSU5UX01BWGAsIGFuZCBgc2tiLSZndDtsZW5gIGlzIGFyb3VuZCAxNTAwLCBgcGt0X2xlbmAgd2lsbCB3cmFwIGFyb3VuZCB0byBuZWdhdGl2ZS4gQW5kIHRoZXJlZm9yZSBgc2xvdGAgY2FuIGJlIG5lZ2F0aXZlIGFuZCBiZSBjbGFtcGVkIHRvIDAuCgpIb3dldmVyLCBhIGRpZmZlcmVudCBzY2VuYXJpbyBhbHNvIGVtZXJnZXM6IHdoYXQgaWYgYG92ZXJoZWFkYCBpcyBqdXN0IHNsaWdodGx5IGxlc3MgdGhhbiBgSU5UX01BWGAsIHNvIHRoYXQgdGhlIG92ZXJmbG93IGRvZXNuJiMzOTt0IG9jY3VyIGluaXRpYWxseSwgYW5kIGBwa3RfbGVuYCBpcyBzdGlsbCBhIHBvc2l0aXZlIGJ1dCB2ZXJ5IGxhcmdlIGludGVnZXI/IFRoZW4gYHNsb3RgIHdvdWxkIGFsc28gYmUgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFdlIGNvdWxkIHN0aWxsIHJ1biBpbnRvIHByb2JsZW1zIGxhdGVyLgoKV2hlbiBgc2xvdCAvIHRzaXplYCBpcyBsYXJnZSwgaXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93IHdoZW4gYHBrdF9sZW5gIGlzIGNhbGN1bGF0ZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYHBrdF9sZW5gIGNhbiBiZSBsYXJnZSBlbm91Z2ggdG8gb3ZlcmZsb3cgZHVyaW5nIHRoZSBgcGt0X2xlbiAmbHQ7Jmx0Oz0gc3RhYi0mZ3Q7c3pvcHRzLnNpemVfbG9nO2Agb3BlcmF0aW9uLiBXaGljaCBjb3VsZCByZXN1bHQgaW4gc3RvcmluZyBhbiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBpbiBgcWRpc2Nfc2tiX2NiKHNrYiktJmd0O3BrdF9sZW5gLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgdHJpY2t5IG9uZSB0byBleHBsb2l0LCBidXQgdGhlIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhhdCBvcmlnaW5hbCBjb21taXQgb3IgcGF0Y2ggZGVzY3JpcHRpb24uIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbnRleHQgdG8gY2xlYXIgdGhpcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UmVqZWN0IERSUiBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbi05MS0gICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkMWUyXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb246OTI6ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24tOTMtICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrKioKCk9rYXksIHNvIEkmIzM5O20gc3VzcGVjdGluZyBzb21lIGtpbmQgb2Ygb3ZlcmhlYWQgaXNzdWUuIFRoZSBuYW1lIGBTVEFCX09WRVJIRUFEX01BWGAga2VlcHMgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgaGVhZCBhcyBhIHBvdGVudGlhbCBjdWxwcml0LiBJdCBzdWdnZXN0cyBhIG1heGltdW0gYWxsb3dlZCB2YWx1ZSByZWxhdGVkIHRvIHNvbWV0aGluZyDigJMgc3RhYiwgd2hhdGV2ZXIgdGhhdCByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGNvbnN0YW50IHdhcyBpbnRyb2R1Y2VkLCBhbnkgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBhbnkgYXNzb2NpYXRlZCBjb21taXQgbWVzc2FnZXMuIFRob3NlIGNvbW1pdHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmNvdmVyaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2UuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdpdCBsb2dgIHNlYXJjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBTVEFCX09WRVJIRUFEX01BWGAuIEhvcGVmdWxseSwgdGhlIGhpc3Rvcnkgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBpdCB3YXMgZGVzaWduZWQgdG8gYWRkcmVzcywgYW5kIHVsdGltYXRlbHkgaGVscCBtZSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgY29udHJpYnV0aW5nIHRvIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlLiBJJiMzOTttIGhvcGluZyBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBldmVuIGxpbmtlZCB0byBzb21lIHBlcmZvcm1hbmNlIGJlbmNobWFya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NUQUJfT1ZFUkhFQURfTUFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oLTE0LSNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVhcdDMwXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDoxNTojZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgtMTYtXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz00OTY9c3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01NDYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU0NzpcdGlmIChhYnMocy1cdTAwM2VvdmVyaGVhZCkgXHUwMDNlIFNUQUJfT1ZFUkhFQURfTUFYKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OC1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUQUIgT3ZlcmhlYWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTVEFCX09WRVJIRUFEX01BWGAgYW5kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHMtJmd0O292ZXJoZWFkYCBleGNlZWRzIHRoaXMgbGltaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIHJlc3RyaWN0aW9uPyBXaGF0JiMzOTtzIHRoZSBwcmFjdGljYWwgaW1wYWN0IG9mIGEgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgY2xlYXJseSBhbGxvd3MgZm9yIGl0IHRvIGJlIHF1aXRlIGxhcmdlIHVwIHRvIHRoaXMgcG9pbnQsIHNvIGl0IGlzIHByb2JhYmx5IG5vdCBhIHBlcmZvcm1hbmNlIGlzc3VlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBleGlzdGluZyBxZGlzY3MgdGhhdCBtaWdodCBiZSBhZmZlY3RlZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZHJyYCBhbmQgYGV0c2AsIHNpbmNlIHRoZXkgYXJlIG1lbnRpb25lZC4gSSBzZWUgaW4gYGRyci5qc29uYCB0aGV5IGFyZSB0ZXN0aW5nIHdpdGggYSByYXRoZXIgZXh0cmVtZSBvdmVyaGVhZCB2YWx1ZTogYCRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyYC4gVGhhdCB2YWx1ZSwgYDIxNDc0ODMwMDBgLCBpcyBoZXggYDB4N0ZGRkZENzhgLiBUaGUgc2FtZSBleHRyZW1lIHZhbHVlIGlzIGFsc28gYmVpbmcgdXNlZCBpbiB0aGUgYGV0c2AgdGVzdCBpbiBgZXRzLmpzb25gOiBgJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMWAuCgpTbyBjbGVhcmx5LCB0aGVzZSBleHRyZW1lIHZhbHVlcyBhcmUgYmVpbmcgKnRlc3RlZCouIFdoeSB3b3VsZCB0aGV5IHRlc3Qgc3VjaCBsYXJnZSB2YWx1ZXM/IElzIGl0IGludGVuZGVkIG9yIGFjY2lkZW50YWw/IEFuZCBpZiBpbnRlbmRlZCwgd2hhdCYjMzk7cyB0aGUgdXNlIGNhc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc2VlbWluZ2x5IGFyYml0cmFyeSBsaW1pdCBpcyBiZWluZyBpbXBvc2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBuZXQvc2NoZWQvc2NoX2Ryci5jYCBjb2RlIHRvIHNlZSBob3cgYG92ZXJoZWFkYCBpcyB1c2VkIGluIHRoYXQgcWRpc2Mgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0fVxuIDM1MTpcdFxuIDM1MjpcdFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVx1MDAzZXFkaXNjLCB0b19mcmVlKTtcbiAzNTM6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHtcbiAzNTQ6XHRcdFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xuIDM1NTpcdFx0XHRcdGNsLVx1MDAzZXFzdGF0cy5kcm9wcyYjNDM7JiM0Mzs7XG4gMzU2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbiAzNTc6XHRcdFx0fVxuIDM1ODpcdFx0XHRyZXR1cm4gZXJyO1xuIDM1OTpcdFx0fVxuIDM2MDpcdFxuIDM2MTpcdFx0aWYgKCFjbF9pc19hY3RpdmUoY2wpKSB7XG4gMzYyOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2wtXHUwMDNlYWxpc3QsIFx1MDAyNnEtXHUwMDNlYWN0aXZlKTtcbiAzNjM6XHRcdFx0V1JJVEVfT05DRShjbC1cdTAwM2VkZWZpY2l0LCBSRUFEX09OQ0UoY2wtXHUwMDNlcXVhbnR1bSkpO1xuIDM2NDpcdFx0fVxuIDM2NTpcdFxuIDM2NjpcdFx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgbGVuKTtcbiAzNjc6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4gMzY4Olx0XHRyZXR1cm4gZXJyO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM3MjpcdHtcbiAzNzM6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gMzc0Olx0XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbiAzNzU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMzc2Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDM3NzpcdFxuIDM3ODpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cS1cdTAwM2VhY3RpdmUpKVxuIDM3OTpcdFx0XHRnb3RvIG91dDtcbiAzODA6XHRcdHdoaWxlICgxKSB7XG4gMzgxOlx0XHRcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxLVx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xuIDM4MjpcdFx0XHRza2IgPSBjbC1cdTAwM2VxZGlzYy1cdTAwM2VvcHMtXHUwMDNlcGVlayhjbC1cdTAwM2VxZGlzYyk7XG4gMzgzOlx0XHRcdGlmIChza2IgPT0gTlVMTCkge1xuIDM4NDpcdFx0XHRcdHFkaXNjX3dhcm5fbm9ud2MoX19mdW5jX18sIGNsLVx1MDAzZXFkaXNjKTtcbiAzODU6XHRcdFx0XHRnb3RvIG91dDtcbiAzODY6XHRcdFx0fVxuIDM4NzpcdFxuIDM4ODpcdFx0XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gMzg5Olx0XHRcdGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KSB7XG4gMzkwOlx0XHRcdFx0V1JJVEVfT05DRShjbC1cdTAwM2VkZWZpY2l0LCBjbC1cdTAwM2VkZWZpY2l0IC0gbGVuKTtcbiAzOTE6XHRcdFx0XHRza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC1cdTAwM2VxZGlzYyk7XG4gMzkyOlx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSlcbiAzOTM6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDM5NDpcdFx0XHRcdGlmIChjbC1cdTAwM2VxZGlzYy1cdTAwM2VxLnFsZW4gPT0gMClcbiAzOTU6XHRcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Y2wtXHUwMDNlYWxpc3QpO1xuIDM5NjpcdFxuIDM5NzpcdFx0XHRcdGJzdGF0c191cGRhdGUoXHUwMDI2Y2wtXHUwMDNlYnN0YXRzLCBza2IpO1xuIDM5ODpcdFx0XHRcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xuIDM5OTpcdFx0XHRcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlIGluIGRycl9kZXF1ZXVlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcnJfZGVxdWV1ZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBsaW5lOiBgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpO2AuIGBxZGlzY19wa3RfbGVuKHNrYilgIGlzIHJldHVybmluZyB0aGUgcGFja2V0IGxlbmd0aCB1c2luZyBgcWRpc2Nfc2tiX2NiKHNrYiktJmd0O3BrdF9sZW5gLiBOb3csIGlmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGlzIGBsZW5gIGNhbiBwb3RlbnRpYWxseSBiZWNvbWUgcXVpdGUgbGFyZ2UuCgpUaGF0JiMzOTtzIHdoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb25hbCBgaWYgKGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdClgIGNvdWxkIGZhaWwgYmVjYXVzZSBgbGVuYCBpcyB0b28gbGFyZ2Ugb3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgYGxlbmAgc29tZWhvdyBiZWNhbWUgbmVnYXRpdmU/IEl0IGxvb2tzIGxpa2UgSSB3YXMgYSBsaXR0bGUgaGFzdHksIGFzIGBsZW5gIGlzIGFuIGB1bnNpZ25lZCBpbnRgLgoKSG9sZCBvbi4gU2luY2UgYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgYWxzbyByZXR1cm5pbmcgYW4gYHVuc2lnbmVkIGludGAgdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciBgbGVuYCB0byBhY3R1YWxseSBiZWNvbWUgbmVnYXRpdmUsIGl0IGNvdWxkIGp1c3Qgb3ZlcmZsb3cuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhIHN1YnRyYWN0aW9uIHJlc3VsdGluZyBpbiBhbiBpbmNyZWFzZWQgYGRlZmljaXRgIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHRob3VnaCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgcWRpc2NfcGt0X2xlbmAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oPTI5Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wZWVrX2xlbihzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0zMDYtXHR9XG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDozMDc6XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0zMDgtXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD04OTI9c3RhdGljIGlubGluZSBib29sIHFkaXNjX3R4X2lzX25vb3AoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkwMy1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTA1LXtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTk2NT1zdGF0aWMgaW5saW5lIHZvaWQgYnN0YXRzX3VwZGF0ZShzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19zeW5jICpic3RhdHMsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05Njcte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5Njg6XHRfYnN0YXRzX3VwZGF0ZShic3RhdHMsIHFkaXNjX3BrdF9sZW4oc2tiKSwgcWRpc2NfcGt0X3NlZ3Moc2tiKSk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk2OS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05ODg9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5MC17XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjk5MTpcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5Mi19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05OTQ9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19jcHVfYmFja2xvZ19kZWMoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTYte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5OTc6XHR0aGlzX2NwdV9zdWIoc2NoLVx1MDAzZWNwdV9xc3RhdHMtXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTk4LX1cbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEwMDU9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEwMDcte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDA4Olx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAwOS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD0xMDExPXN0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19xc3RhdHNfY3B1X2JhY2tsb2dfaW5jKHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxMy17XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEwMTQ6XHR0aGlzX2NwdV9hZGQoc2NoLVx1MDAzZWNwdV9xc3RhdHMtXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxNS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD0xMjY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3My1cdGlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEyNzQ6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEyNzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBxZGlzY19wa3RfbGVuYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcGFja2V0IGxlbmd0aHMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBxdWV1aW5nIGRpc2NpcGxpbmUgY29udGV4dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBjb3JlIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb24gb2YgYHFkaXNjX3BrdF9sZW5gIHJlc2lkZT8gQWgsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgc2NoZWR1bGluZyBoZWFkZXJzLCBgaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaGAgc291bmRzIGxpa2UgdGhlIHJpZ2h0IHNwb3QuIExldCBtZSBwdWxsIHRoYXQgdXAgYW5kIGNvbmZpcm0gbXkgaW50dWl0aW9uLiYjMzQ7IFRpbWUgdG8gZ2V0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBoYXMgdG8gc2F5LiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHR9XG4gOTAxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcWRpc2NfcGt0X2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkwNTpcdHtcbiA5MDY6XHRcdHJldHVybiBxZGlzY19za2JfY2Ioc2tiKS1cdTAwM2Vwa3RfbGVuO1xuIDkwNzpcdH1cbiA5MDg6XHRcbiA5MDk6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3Rfc2Vncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkxMDpcdHtcbiA5MTE6XHRcdHUzMiBwa3Rfc2VncyA9IHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9zZWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShwa3Rfc2VncyAhPVxuIDkxNDpcdFx0XHRcdChza2JfaXNfZ3NvKHNrYikgPyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3MgOiAxKSk7XG4gOTE1Olx0XHRyZXR1cm4gcGt0X3NlZ3M7XG4gOTE2Olx0fVxuIDkxNzpcdFxuIDkxODpcdC8qIGFkZGl0aW9uYWwgcWRpc2MgeG1pdCBmbGFncyAoTkVUX1hNSVRfTUFTSyBpbiBsaW51eC9uZXRkZXZpY2UuaCkgKi9cbiA5MTk6XHRlbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gRFJSIFF1ZXVlaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxZGlzY19wa3RfbGVuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBEUlIgKERlZmljaXQgUm91bmQgUm9iaW4pIHF1ZXVlaW5nIGRpc2NpcGxpbmUuIGBxZGlzY19wa3RfbGVuYCB1bHRpbWF0ZWx5IHJldHVybnMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFRoZSBjcnV4IG9mIG15IGNvbmNlcm4gaXMgaG93IHBhY2tldCBsZW5ndGggaXMgY2FsY3VsYXRlZCBhbmQgdXNlZCBpbiBgZHJyX2RlcXVldWVgLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYWRkcyB0aGUgYHNrYi0mZ3Q7bGVuYCAobGlrZWx5IGFyb3VuZCAxNTAwIGJ5dGVzKSB0byBgc3RhYi0mZ3Q7c3pvcHRzLm92ZXJoZWFkYC4gTGV0JiMzOTtzIHNheSBgb3ZlcmhlYWRgIGlzIGEgbGFyZ2UgbnVtYmVyLCBzcGVjaWZpY2FsbHkgYDIxNDc0ODMwMDBgICh3aGljaCBpcyBgMHg3RkZGRkQ3OGApLiAgSW4gdGhpcyBzY2VuYXJpbywgYHBrdF9sZW5gIChhbiBgaW50YCkgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGAyMTQ3NDg0NTAwYCwgYSAqcG9zaXRpdmUqIG51bWJlciwgYW5kIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQuCgpUaGUgY2FsY3VsYXRpb24gcHJvY2VlZHMgd2l0aCBgc2xvdCA9IHBrdF9sZW4gJiM0Mzsgc3RhYi0mZ3Q7c3pvcHRzLmNlbGxfYWxpZ247YC4gIFdpdGggYGNlbGxfYWxpZ25gIGF0IDAsIGBzbG90YCBpcyBhbHNvIGAyMTQ3NDg0NTAwYC4gVGhlbiwgYHNsb3RgIGlzIHJpZ2h0LXNoaWZ0ZWQgYnkgYGNlbGxfbG9nYC4gIElmIGBjZWxsX2xvZ2AgaXMgMCwgYHNsb3RgIHJlbWFpbnMgdW5jaGFuZ2VkLiAgSWYgYHRzaXplYCBpcyAwLCB0aGUgY29kZSBqdW1wcyB0byBgb3V0OmAuCgpBdCBgb3V0OmAsIGlmIGBwa3RfbGVuYCBpcyBsZXNzIHRoYW4gMSwgaXQmIzM5O3Mgc2V0IHRvIDEuIEhvd2V2ZXIsIGluIG91ciBleGFtcGxlLCAgYHBrdF9sZW5gIGlzIGAyMTQ3NDg0NTAwYCwgc28gdGhpcyBjaGVjayBkb2VzbiYjMzk7dCB0cmlnZ2VyLiBUaGUgY3JpdGljYWwgbGluZSBpcyB0aGVuIGBxZGlzY19za2JfY2Ioc2tiKS0mZ3Q7cGt0X2xlbiA9IHBrdF9sZW47YC4gIFRoaXMgc2V0cyB0aGUgcGFja2V0IGxlbmd0aCBpbiB0aGUgU0tCIGNvbnRyb2wgYmxvY2sgdG8gb3VyIGxhcmdlIHBvc2l0aXZlIG51bWJlciwgYDIxNDc0ODQ1MDBgLgoKTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBpbiBgZHJyX2RlcXVldWVgLCBpdCBmZXRjaGVzIHRoZSBwYWNrZXQgbGVuZ3RoIHVzaW5nIGBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7YC4gU28sIGBsZW5gIHdpbGwgYmUgYDIxNDc0ODQ1MDBgLiBUaGlzIHZhbHVlIGlzIHRoZW4gY29tcGFyZWQgdG8gYGNsLSZndDtkZWZpY2l0YC4gTm93LCBgY2wtJmd0O2RlZmljaXRgIGlzIGEgYHUzMmAsIGFuZCBpcyB1c3VhbGx5IGFyb3VuZCBhIHF1YW50dW0sIGxpa2UgMTUwMCBieXRlcy4gVGhpcyBtZWFucyBvdXIgY2FsY3VsYXRlZCBgbGVuYCB3aWxsICphbG1vc3QgYWx3YXlzKiBiZSBsYXJnZXIgdGhhbiBgY2wtJmd0O2RlZmljaXRgLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnRseSBzby4gVGhlIGV4cHJlc3Npb24gYGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdGAgd2lsbCBldmFsdWF0ZSB0byBmYWxzZSBpbiBhbG1vc3QgZXZlcnkgY2FzZS4gU28sIHRoZSBwYWNrZXQgd29uJiMzOTt0IGJlIGRlcXVldWVkLgoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgYXJlIHRyaWNreSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIGlmIGl0IGxlYWRzIHRvIHRoZSBxdWV1ZSBiZWluZyBibG9ja2VkLiBJdCBzZWVtcyBsaWtlIHRoZSBsYXJnZSBvdmVyaGVhZCBtYXkgYmUgY2F1c2luZyB0aGUgcXVldWUgdG8gc3RhcnZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHRcdFdSSVRFX09OQ0UoY2wtXHUwMDNlZGVmaWNpdCwgY2wtXHUwMDNlZGVmaWNpdCAtIGxlbik7XG4gMzkxOlx0XHRcdFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXHUwMDNlcWRpc2MpO1xuIDM5MjpcdFx0XHRcdGlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpXG4gMzkzOlx0XHRcdFx0XHRnb3RvIG91dDtcbiAzOTQ6XHRcdFx0XHRpZiAoY2wtXHUwMDNlcWRpc2MtXHUwMDNlcS5xbGVuID09IDApXG4gMzk1Olx0XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNsLVx1MDAzZWFsaXN0KTtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0XHRic3RhdHNfdXBkYXRlKFx1MDAyNmNsLVx1MDAzZWJzdGF0cywgc2tiKTtcbiAzOTg6XHRcdFx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiAzOTk6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19kZWMoc2NoLCBza2IpO1xuIDQwMDpcdFx0XHRcdHFkaXNjX3FsZW5fZGVjKHNjaCk7XG4gNDAxOlx0XHRcdFx0cmV0dXJuIHNrYjtcbiA0MDI6XHRcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0XHRXUklURV9PTkNFKGNsLVx1MDAzZWRlZmljaXQsIGNsLVx1MDAzZWRlZmljaXQgJiM0MzsgUkVBRF9PTkNFKGNsLVx1MDAzZXF1YW50dW0pKTtcbiA0MDU6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Y2wtXHUwMDNlYWxpc3QsIFx1MDAyNnEtXHUwMDNlYWN0aXZlKTtcbiA0MDY6XHRcdH1cbiA0MDc6XHRvdXQ6XG4gNDA4Olx0XHRyZXR1cm4gTlVMTDtcbiA0MDk6XHR9XG4gNDEwOlx0XG4gNDExOlx0c3RhdGljIGludCBkcnJfaW5pdF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIDQxMjpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gNDE1Olx0XHRpbnQgZXJyO1xuIDQxNjpcdFxuIDQxNzpcdFx0ZXJyID0gdGNmX2Jsb2NrX2dldChcdTAwMjZxLVx1MDAzZWJsb2NrLCBcdTAwMjZxLVx1MDAzZWZpbHRlcl9saXN0LCBzY2gsIGV4dGFjayk7XG4gNDE4Olx0XHRpZiAoZXJyKVxuIDQxOTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMDpcdFx0ZXJyID0gcWRpc2NfY2xhc3NfaGFzaF9pbml0KFx1MDAyNnEtXHUwMDNlY2xoYXNoKTtcbiA0MjE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDIyOlx0XHRcdHJldHVybiBlcnI7XG4gNDIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxLVx1MDAzZWFjdGl2ZSk7XG4gNDI0Olx0XHRyZXR1cm4gMDtcbiA0MjU6XHR9XG4gNDI2Olx0XG4gNDI3Olx0c3RhdGljIHZvaWQgZHJyX3Jlc2V0X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDQyODpcdHtcbiA0Mjk6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRSUiBTY2hlZHVsaW5nIEJ1ZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUlIgc2NoZWR1bGVyIGNvZGUsIGFuZCBJIHNlZSB0aGlzIGxvb3AgY29uZGl0aW9uOiBgbGVuICZsdDs9IGNsLSZndDtkZWZpY2l0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaWYgYGxlbmAgKHRoZSBwYWNrZXQgbGVuZ3RoKSBpcyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIHRoZSBpbml0aWFsIGBjbC0mZ3Q7ZGVmaWNpdGAsIHRoZSBjb2RlIGFkZHMgYGNsLSZndDtxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBtb3ZlcyB0aGUgY2xhc3MgdG8gdGhlIHRhaWwgb2YgdGhlIGFjdGl2ZSBxdWV1ZS4gU2VlbXMgcmVhc29uYWJsZSwgYnV0IGlmIHRoZXJlJiMzOTtzIG9ubHkgb25lIGFjdGl2ZSBjbGFzcywgdGhpcyBjb3VsZCBsb29wIGluZGVmaW5pdGVseS4KClRoZW4gdGhlIGFsYXJtIGJlbGxzIHN0YXJ0ZWQgcmluZ2luZyEgSSByZWFsaXplZCBgY2wtJmd0O2RlZmljaXRgIGlzIGEgYHUzMmAuIE9rYXksIHNvIGl0IHdpbGwgb3ZlcmZsb3cuIEJ1dCB3aWxsIHRoYXQgKnNvbHZlKiB0aGUgcHJvYmxlbT8gSWYgYGxlbmAgaXMgYSBsYXJnZSBudW1iZXIsIGxpa2UgYDIxNDc0ODQ1MDBgLCB0aGUgbG9vcCB3aWxsIGl0ZXJhdGUgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgdGltZXMsIGxpa2UgMS40IG1pbGxpb24uIFRoYXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYnV0IG5vdCBhbiAqaW5maW5pdGUqIGxvb3AsIGJlY2F1c2UgdGhlIG92ZXJmbG93IHdpbGwgZXZlbnR1YWxseSBtYWtlIHRoZSBgZGVmaWNpdGAgc21hbGxlciB0aGFuIGBsZW5gIGFnYWluLiAgVGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgd2hvbGUgdGhpbmcgaXMgcHJvdGVjdGVkIGJ5IGEgc3BpbmxvY2shIFRoZSBsb29wIHdvdWxkIGNvbnN1bWUgc2lnbmlmaWNhbnQgQ1BVIHRpbWUgd2hpbGUgaXQgaXMgcnVubmluZy4KCk9rYXksIGxldCYjMzk7cyBidW1wIGl0IHVwLiBXaGF0IGhhcHBlbnMgaWYgYGxlbmAgaXMgKnJlYWxseSogbGFyZ2UsIGxpa2UgY2xvc2UgdG8gdGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYDB4RkZGRkZGRkZgKT8gVGhlIGBkZWZpY2l0YCB3aWxsIHN0aWxsIG92ZXJmbG93LCBidXQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHdvdWxkIGJlIGV2ZW4gaGlnaGVyLCBwZXJoYXBzIGluIHRoZSBtaWxsaW9ucywgYnV0IHN0aWxsIG5vdCBpbmZpbml0ZS4gQnV0IHRoZW4gSSBzYXcgaXQhIElmIGBsZW5gIGlzIHZlcnkgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIGFuZCBgZGVmaWNpdGAgaW5jcmVhc2VzIGJ5IGBxdWFudHVtYCBlYWNoIHRpbWUsIGBkZWZpY2l0YCB3aWxsIE5FVkVSIHJlYWNoIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gIGJlZm9yZSBvdmVyZmxvd2luZy4gTW9yZSBwcmVjaXNlbHksIGZvciBgbGVuYCB0byBldmVudHVhbGx5IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYGRlZmljaXRgLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2R1bHVzIHdoZW4gZGl2aWRlZCBieSBgcXVhbnR1bWAhCgpJZiBgbGVuYCBpcyBgMHhGRkZGRkZGRmAsIHRoZSBgZGVmaWNpdGAgd2lsbCB3cmFwIGFyb3VuZCBiZWZvcmUgaXQgcmVhY2hlcyBgMHhGRkZGRkZGRmAgdW5sZXNzIGBkZWZpY2l0YCBpcyBleGFjdGx5IGAweEZGRkZGRkZGYCEgSWYgdGhlIGBxdWFudHVtYCBpcywgc2F5LCAxNTAwLCBgMHhGRkZGRkZGRiAlIDE1MDAgIT0gMGAgc28gdGhlIHdyYXAgYXJvdW5kIGhhcHBlbnMuIFRoYXQgbWVhbnMgdGhpcyBsb29wICp3aWxsKiBydW4gZm9yZXZlciEgVGhlIGBsZW4gJmx0Oz0gY2wtJmd0O2RlZmljaXRgIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGJlIHRydWUsIGFuZCB0aGUgY29kZSB3aWxsIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiBgZHJyX2RlcXVldWVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgY2wtJmd0O2RlZmljaXRgIGlzLCBpbiBmYWN0LCBhIGB1MzJgLCBidXQgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGRycl9jbGFzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9kcnIuYy0xNy1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTg6c3RydWN0IGRycl9jbGFzcyB7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5LVx0c3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vblx0Y29tbW9uO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MzE9c3RydWN0IGRycl9zY2hlZCB7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNy1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mzg6c3RhdGljIGJvb2wgY2xfaXNfYWN0aXZlKHN0cnVjdCBkcnJfY2xhc3MgKmNsKVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zOS17XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00Mi1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDM6c3RhdGljIHN0cnVjdCBkcnJfY2xhc3MgKmRycl9maW5kX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQte1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTAtXHRcdHJldHVybiBOVUxMO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo1MTpcdHJldHVybiBjb250YWluZXJfb2YoY2xjLCBzdHJ1Y3QgZHJyX2NsYXNzLCBjb21tb24pO1xubmV0L3NjaGVkL3NjaF9kcnIuYy01Mi19XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz01OD1zdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy02Mi1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjYzOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKSphcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTY0LVx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTEwNS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTA2Olx0Y2wgPSBremFsbG9jX29iaihzdHJ1Y3QgZHJyX2NsYXNzKTtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTA3LVx0aWYgKGNsID09IE5VTEwpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNDItXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjE0MzpzdGF0aWMgdm9pZCBkcnJfZGVzdHJveV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGRycl9jbGFzcyAqY2wpXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE0NC17XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0xNTA9c3RhdGljIGludCBkcnJfZGVsZXRlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1My1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjE1NDpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1NS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkcnJfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTkyLXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTkzOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSBkcnJfZmluZF9jbGFzcyhzY2gsIGNsYXNzaWQpO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0xOTQtXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMDE9c3RhdGljIHZvaWQgZHJyX3VuYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yMDIte1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyMDM6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0yMDQtXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMDg9c3RhdGljIGludCBkcnJfZ3JhZnRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjExLXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjEyOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjEzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjI1PXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmRycl9jbGFzc19sZWFmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI2LXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjI3Olx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI4LVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjMyPXN0YXRpYyB2b2lkIGRycl9xbGVuX25vdGlmeShzdHJ1Y3QgUWRpc2MgKmNzaCwgdW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzMy17XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIzNDpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzNS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTIzOT1zdGF0aWMgaW50IGRycl9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI0MS17XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI0MjpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI0My1cdHN0cnVjdCBubGF0dHIgKm5lc3Q7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yNjE9c3RhdGljIGludCBkcnJfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjMte1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyNjQ6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjUtXHRfX3UzMiBxbGVuID0gcWRpc2NfcWxlbl9zdW0oY2wtXHUwMDNlcWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjgxPXN0YXRpYyB2b2lkIGRycl93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yODMtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyODQ6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjg1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTctXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI5ODpzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTktXHRcdFx0XHQgICAgICBpbnQgKnFlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zMDEtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzozMDI6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzAzLVx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzI3LSNlbmRpZlxubmV0L3NjaGVkL3NjaF9kcnIuYzozMjg6XHRcdGNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilyZXMuY2xhc3M7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMyOS1cdFx0aWYgKGNsID09IE5VTEwpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0zMzY9c3RhdGljIGludCBkcnJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM0MC1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM0MTpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0zNDItXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTM3MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzczLVx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mzc0Olx0c3RydWN0IGRycl9jbGFzcyAqY2w7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM3NS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zODAtXHR3aGlsZSAoMSkge1xubmV0L3NjaGVkL3NjaF9kcnIuYzozODE6XHRcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxLVx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0zODItXHRcdHNrYiA9IGNsLVx1MDAzZXFkaXNjLVx1MDAzZW9wcy1cdTAwM2VwZWVrKGNsLVx1MDAzZXFkaXNjKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTQyNz1zdGF0aWMgdm9pZCBkcnJfcmVzZXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00MjktXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo0MzA6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDMxLVx0dW5zaWduZWQgaW50IGk7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz00NDI9c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00NDQtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo0NDU6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQ2LVx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYGRycl9jbGFzc2AgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGRycl9jbGFzc2AgZGVmaW5pdGlvbi4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaXRzIG1lbWJlcnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBrbm93IHRoZSBmaWVsZHMgdGhhdCBjb250cm9sIHRoZSBEUlIgKERlZmljaXQgUm91bmQgUm9iaW4pIHNjaGVkdWxpbmcgYW5kIHdoYXQgb3RoZXIgZGF0YSBpdCBtaWdodCBjb250YWluLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQsIGNyZWRpdCBhbGxvY2F0aW9uLCBhbnkgcGVyLWNsYXNzIHN0YXRlLCBwZXJoYXBzIHNvbWUgdGltZXN0YW1wLXJlbGF0ZWQgZWxlbWVudHMsIG9yIGFueXRoaW5nIHRoYXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBzY2hlZHVsaW5nIGRlY2lzaW9uLW1ha2luZy4gSSB3aWxsIGRlZmluaXRlbHkgbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbTsgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBxdWV1ZXMgb3IgZmxvdyBkZXNjcmlwdG9ycyB3aXRoaW4gdGhpcyBgZHJyX2NsYXNzYC4gSXQgaXMgdml0YWwgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBoYW5kbGUgdGhlIGRlZmljaXQgYW5kIGNyZWRpdC4gSSBhbHNvIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMsIGxpa2UgY2FjaGUtbGluZSBhbGlnbm1lbnQgb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2Ryci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHRzdHJ1Y3QgZHJyX2NsYXNzIHtcbiAgMTk6XHRcdHN0cnVjdCBRZGlzY19jbGFzc19jb21tb25cdGNvbW1vbjtcbiAgMjA6XHRcbiAgMjE6XHRcdHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX3N5bmNcdFx0YnN0YXRzO1xuICAyMjpcdFx0c3RydWN0IGduZXRfc3RhdHNfcXVldWVcdFx0cXN0YXRzO1xuICAyMzpcdFx0c3RydWN0IG5ldF9yYXRlX2VzdGltYXRvciBfX3JjdSAqcmF0ZV9lc3Q7XG4gIDI0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFsaXN0O1xuICAyNTpcdFx0c3RydWN0IFFkaXNjXHRcdFx0KnFkaXNjO1xuICAyNjpcdFxuICAyNzpcdFx0dTMyXHRcdFx0XHRxdWFudHVtO1xuICAyODpcdFx0dTMyXHRcdFx0XHRkZWZpY2l0O1xuICAyOTpcdH07XG4gIDMwOlx0XG4gIDMxOlx0c3RydWN0IGRycl9zY2hlZCB7XG4gIDMyOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFjdGl2ZTtcbiAgMzM6XHRcdHN0cnVjdCB0Y2ZfcHJvdG8gX19yY3VcdFx0KmZpbHRlcl9saXN0O1xuICAzNDpcdFx0c3RydWN0IHRjZl9ibG9ja1x0XHQqYmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTb2Z0IExvY2t1cCBpbiBEUlIgUXVldWVpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRlZmljaXRgIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgYSBgdTMyYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBxdWV1ZWluZyBsb2dpYy4gSWYgYGxlbmAgKHdoaWNoIGlzIGFsc28gYSBgdTMyYCkgaXMgYSBsYXJnZSB2YWx1ZSwgbGlrZSwgc2F5LCBgMjE0NzQ4NDUwMGAsIHRoZSBgZGVmaWNpdGAgaW5jcmVtZW50cyBieSBgcXVhbnR1bWAgKGxldCYjMzk7cyBzYXkgMTUwMCkgZWFjaCB0aW1lLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMsICp3aGVuKiB3aWxsIGBkZWZpY2l0YCBiZWNvbWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gPwoKSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGlzIHdvdWxkIGxlYWQgdG8gYW4gZXZlbnR1YWwgY29tcGFyaXNvbiB3aGVyZSBpdCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgbGVuYC4gSSBmaWd1cmVkIGl0IHdvdWxkIHJlYWNoIGAyMTQ3NDg0NTAwYCBvciBtb3JlLiBTaW5jZSBgbGVuYCBpcyBgMjE0NzQ4NDUwMGAsIGFuZCBgZGVmaWNpdGAgc3RhcnRzIGF0IGAxNTAwYCwgYWRkaW5nIGAxNTAwYCBpdCB3b3VsZCBldmVudHVhbGx5IGdldCB0aGVyZS4gYGRlZmljaXRgIHdvdWxkIHJlYWNoIGAyMTQ3NDg1NTAwYCwgd2hpY2ggKmlzKiBncmVhdGVyIHRoYW4gYGxlbmAsIHdoaWNoIGlzIGAyMTQ3NDg0NTAwYC4gU28gaXQgd2lsbCB0YWtlIGxpa2UgMS40IG1pbGxpb24gaXRlcmF0aW9ucy4KClNvLCBpbiB0aGF0IGNhc2UsIHRoZSBjb25kaXRpb24gYGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdGAgKndvdWxkKiBldmVudHVhbGx5IGJlY29tZSB0cnVlLCB0aGUgZGVmaWNpdCB3b3VsZCBiZSB1cGRhdGVkLCBhbmQgdGhlIHBhY2tldCBkZXF1ZXVlZC4gTm90IGFuIGluZmluaXRlIGxvb3AsIGp1c3QgYSAqdmVyeSogbG9uZyBzdGFsbC4KCkJ1dCB0aGVuIEkgdGhvdWdodCwgd2hhdCBpZiBgbGVuYCBpcyAqcmVhbGx5KiBiaWcsIGxpa2UgYDB4RkZGRkZGRkZgPyBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIElmIGBkZWZpY2l0YCBpcywgc2F5LCBgMHhGRkZGRkYwMGAgYW5kIHdlIGFkZCBgMTUwMGAsIGl0IHdyYXBzIGFyb3VuZCEgSXQgYmVjb21lcyBgMHgwMDAwMDREQ2AuIEl0IHdpbGwgKm5ldmVyKiBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYDB4RkZGRkZGRkZgLCB1bmxlc3MgaXQgaGl0cyBpdCAqZXhhY3RseSouIElmIGl0IG1pc3NlcyBgMHhGRkZGRkZGRmAsIGl0IHdyYXBzIGFyb3VuZCwgYW5kIHdlIGdldCBhbiBpbmZpbml0ZSBsb29wISBUaGF0JiMzOTtzIGJhZC4KCkhvd2V2ZXIsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgYGxlbmAgKmFjdHVhbGx5KiBpcy4gSXQmIzM5O3MgYHNrYi0mZ3Q7bGVuICYjNDM7IG92ZXJoZWFkYC4gYHNrYi0mZ3Q7bGVuYCBpcyB0eXBpY2FsbHkgYXJvdW5kIDE1MDAsIGFuZCBgb3ZlcmhlYWRgIGNhbiBiZSB1cCB0byBgSU5UX01BWGAuIFNvIHRoZSBtYXhpbXVtIGBsZW5gIGNvdWxkIGJlIGAweDdGRkZGRkZGICYjNDM7IDE1MDAgPSAweDgwMDAwNURDYC4gSG1tLCBzbyBpdCBjYW4mIzM5O3QgcmVhY2ggYDB4RkZGRkZGRkZgPyBXZWxsLCB0aGUgc2l6ZSBvZiBgc2tiLSZndDtsZW5gIGlzIGxpbWl0ZWQgYnkgTVRVIChlLmcuIDY0SykuIFNvIGV2ZW4gd2l0aCB0aGUgbWF4IG9mIGBpbnRgLCBgbGVuYCBpcyBhdCBtb3N0IGAweDdGRkZGRkZGICYjNDM7IDY1NTM1ID0gMHg4MDAwRkZGRmAuIFNvIHdlIGFyZSBsb29raW5nIGF0IHJvdWdobHkgMiAqIDEwXjkuIFRoaXMgbWVhbnMgaXQgd2lsbCB0YWtlIDEuNCAqIDEwXjYgaXRlcmF0aW9ucy4gVGhhdCYjMzk7cyBzdGlsbCBhIHN0YWxsLCBidXQgbm90IGFuIGluZmluaXRlIG9uZS4KClRoZW4gSSBoYWQgYW5vdGhlciB0aG91Z2h0OiB3aGF0IGlmIGBvdmVyaGVhZGAgaXMgbmVnYXRpdmU/IGBhYnMocy0mZ3Q7b3ZlcmhlYWQpICZndDsgU1RBQl9PVkVSSEVBRF9NQVhgIGNoZWNrcyB0aGF0LiBUaGlzIG1lYW5zIGBvdmVyaGVhZGAgY2FuIGJlIGAtMjE0NzQ4MzY0OGAuIElmIHdlIGFkZCBgLTIxNDc0ODM2NDhgIHRvIGBza2ItJmd0O2xlbmAgd2hpY2ggaXMgMTUwMCwgd2UgZ2V0IGEgbmVnYXRpdmUgdmFsdWUhCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgcGt0X2xlbmAgaXMgY2FsY3VsYXRlZCwgYW5kIHRoZW4gaWYgaXQgaXMgdW5saWtlbHkgdG8gYmUgbGVzcyB0aGFuIDEsIGBwa3RfbGVuID0gMWAuICpBaCEqIElmIGBsZW5gIGVuZHMgdXAgbmVnYXRpdmUsIGl0IGdldHMgY2xhbXBlZCB0byAxLiBXaGljaCBzaG91bGQgcHJldmVudCBhbiBpbmZpbml0ZSBsb29wISBPa2F5LCBzbyB0aGlzIHNob3VsZG4mIzM5O3QgYmUgYSBwcm9ibGVtIGluIGBkcnJfZGVxdWV1ZWAuCgpOb3csIEkgc2hvdWxkIGNoZWNrIHRoZSBgZXRzYCBxZGlzYy4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUgaW4gYG5ldC9zY2hlZC9zY2hfZXRzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZXRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0XHRjbC1cdTAwM2VkZWZpY2l0ICYjNDM7PSBSRUFEX09OQ0UoY2wtXHUwMDNlcXVhbnR1bSk7XG4gNTAxOlx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmNsLVx1MDAzZWFsaXN0LCBcdTAwMjZxLVx1MDAzZWFjdGl2ZSk7XG4gNTAyOlx0XHR9XG4gNTAzOlx0b3V0OlxuIDUwNDpcdFx0cmV0dXJuIE5VTEw7XG4gNTA1Olx0fVxuIDUwNjpcdFxuIDUwNzpcdHN0YXRpYyBpbnQgZXRzX3FkaXNjX3ByaW9tYXBfcGFyc2Uoc3RydWN0IG5sYXR0ciAqcHJpb21hcF9hdHRyLFxuIDUwODpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5iYW5kcywgdTggKnByaW9tYXAsXG4gNTA5Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTEwOlx0e1xuIDUxMTpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cjtcbiA1MTI6XHRcdGludCBwcmlvID0gMDtcbiA1MTM6XHRcdHU4IGJhbmQ7XG4gNTE0Olx0XHRpbnQgcmVtO1xuIDUxNTpcdFx0aW50IGVycjtcbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IF9fbmxhX3ZhbGlkYXRlX25lc3RlZChwcmlvbWFwX2F0dHIsIFRDQV9FVFNfTUFYLFxuIDUxODpcdFx0XHRcdFx0ICAgIGV0c19wcmlvbWFwX3BvbGljeSwgTkxfVkFMSURBVEVfU1RSSUNULFxuIDUxOTpcdFx0XHRcdFx0ICAgIGV4dGFjayk7XG4gNTIwOlx0XHRpZiAoZXJyKVxuIDUyMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMjpcdFxuIDUyMzpcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBwcmlvbWFwX2F0dHIsIHJlbSkge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG5sYV90eXBlKGF0dHIpKSB7XG4gNTI1Olx0XHRcdGNhc2UgVENBX0VUU19QUklPTUFQX0JBTkQ6XG4gNTI2Olx0XHRcdFx0aWYgKHByaW8gXHUwMDNlIFRDX1BSSU9fTUFYKSB7XG4gNTI3Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtUb28gbWFueSBwcmlvcml0aWVzIGluIEVUUyBwcmlvbWFwXCYjMzQ7KTtcbiA1Mjg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyOTpcdFx0XHRcdH1cbiA1MzA6XHRcdFx0XHRiYW5kID0gbmxhX2dldF91OChhdHRyKTtcbiA1MzE6XHRcdFx0XHRpZiAoYmFuZCBcdTAwM2U9IG5iYW5kcykge1xuIDUzMjpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBiYW5kIG51bWJlciBpbiBFVFMgcHJpb21hcFwmIzM0Oyk7XG4gNTMzOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzQ6XHRcdFx0XHR9XG4gNTM1Olx0XHRcdFx0cHJpb21hcFtwcmlvJiM0MzsmIzQzO10gPSBiYW5kO1xuIDUzNjpcdFx0XHRcdGJyZWFrO1xuIDUzNzpcdFx0XHRkZWZhdWx0OlxuIDUzODpcdFx0XHRcdFdBUk5fT05fT05DRSgxKTsgLyogVmFsaWRhdGUgc2hvdWxkIGhhdmUgY2F1Z2h0IHRoaXMuICovXG4gNTM5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQwOlx0XHRcdH1cbiA1NDE6XHRcdH1cbiA1NDI6XHRcbiA1NDM6XHRcdHJldHVybiAwO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW50IGV0c19xZGlzY19xdWFudGFfcGFyc2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKnF1YW50YV9hdHRyLFxuIDU0NzpcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmJhbmRzLCB1bnNpZ25lZCBpbnQgbnN0cmljdCxcbiA1NDg6XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50ICpxdWFudGEsXG4gNTQ5Olx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYWZmaWMgc2hhcGluZyBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIGlzc3VlIGxpa2VseSBsaWVzIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGRlcXVldWUgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgcGFja2V0cyBvZmYgdGhlIEVUUyAoRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24pIHF1ZXVlLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBJIHNob3VsZCBzdGFydCBieSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGBldHNfcWRpc2NfZGVxdWV1ZWAsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBpZiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGhhdmUgZXZvbHZlZCBzaW5jZSBteSBsYXN0IGRlZXAgZGl2ZS4gVGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSwgb3IgYXQgbGVhc3QgYSBwYXRod2F5IHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2V0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4gNDUxOlx0XHRyZXR1cm4gZXJyO1xuIDQ1MjpcdH1cbiA0NTM6XHRcbiA0NTQ6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIDQ1NTpcdGV0c19xZGlzY19kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NTY6XHR7XG4gNDU3Olx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiA0NTg6XHRcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XG4gNDU5Olx0XHRxZGlzY19xbGVuX2RlYyhzY2gpO1xuIDQ2MDpcdFx0cmV0dXJuIHNrYjtcbiA0NjE6XHR9XG4gNDYyOlx0XG4gNDYzOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpldHNfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiA0NjQ6XHR7XG4gNDY1Olx0XHRzdHJ1Y3QgZXRzX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDQ2NjpcdFx0c3RydWN0IGV0c19jbGFzcyAqY2w7XG4gNDY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQ2ODpcdFx0dW5zaWduZWQgaW50IGJhbmQ7XG4gNDY5Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0d2hpbGUgKDEpIHtcbiA0NzI6XHRcdFx0Zm9yIChiYW5kID0gMDsgYmFuZCBcdTAwM2MgcS1cdTAwM2Vuc3RyaWN0OyBiYW5kJiM0MzsmIzQzOykge1xuIDQ3MzpcdFx0XHRcdGNsID0gXHUwMDI2cS1cdTAwM2VjbGFzc2VzW2JhbmRdO1xuIDQ3NDpcdFx0XHRcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVx1MDAzZXFkaXNjKTtcbiA0NzU6XHRcdFx0XHRpZiAoc2tiKVxuIDQ3NjpcdFx0XHRcdFx0cmV0dXJuIGV0c19xZGlzY19kZXF1ZXVlX3NrYihzY2gsIHNrYik7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcbiA0Nzk6XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cS1cdTAwM2VhY3RpdmUpKVxuIDQ4MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDQ4MTpcdFxuIDQ4MjpcdFx0XHRjbCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cS1cdTAwM2VhY3RpdmUsIHN0cnVjdCBldHNfY2xhc3MsIGFsaXN0KTtcbiA0ODM6XHRcdFx0c2tiID0gY2wtXHUwMDNlcWRpc2MtXHUwMDNlb3BzLVx1MDAzZXBlZWsoY2wtXHUwMDNlcWRpc2MpO1xuIDQ4NDpcdFx0XHRpZiAoIXNrYikge1xuIDQ4NTpcdFx0XHRcdHFkaXNjX3dhcm5fbm9ud2MoX19mdW5jX18sIGNsLVx1MDAzZXFkaXNjKTtcbiA0ODY6XHRcdFx0XHRnb3RvIG91dDtcbiA0ODc6XHRcdFx0fVxuIDQ4ODpcdFxuIDQ4OTpcdFx0XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gNDkwOlx0XHRcdGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KSB7XG4gNDkxOlx0XHRcdFx0Y2wtXHUwMDNlZGVmaWNpdCAtPSBsZW47XG4gNDkyOlx0XHRcdFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXHUwMDNlcWRpc2MpO1xuIDQ5MzpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA0OTQ6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDQ5NTpcdFx0XHRcdGlmIChjbC1cdTAwM2VxZGlzYy1cdTAwM2VxLnFsZW4gPT0gMClcbiA0OTY6XHRcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Y2wtXHUwMDNlYWxpc3QpO1xuIDQ5NzpcdFx0XHRcdHJldHVybiBldHNfcWRpc2NfZGVxdWV1ZV9za2Ioc2NoLCBza2IpO1xuIDQ5ODpcdFx0XHR9XG4gNDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTQ1CgkJCQkJCQlvdXRwdXQ6IDM0NAoJCQkJCQkJdGhvdWdodHM6IDEyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERSUi9FVFMgUWRpc2MgU29mdCBMb2NrdXAgQnVnKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgY2xlYXIgdGhlIHJvb3QgY2F1c2UgaXMgcmlnaHQgaGVyZTogYGV0c19xZGlzY19kZXF1ZXVlYCAoYW5kIGBkcnJfZGVxdWV1ZWAsIHNpbmNlIGl0IHNoYXJlcyB0aGUgbG9naWMpIHVzZXMgdGhlIHNhbWUgcGF0dGVybi4gVGhlIGNydWNpYWwgY29kZSBzbmlwcGV0IHdpdGggYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGFuIG92ZXJseSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlIGluZmxhdGluZyBgbGVuYC4gVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgbGVuICZsdDs9IGNsLSZndDtkZWZpY2l0YCBpcyBhbHdheXMgZmFsc2UsIGNhdXNpbmcgdGhlIHdoaWxlIGxvb3AgdG8gc3BpbiBpbmRlZmluaXRlbHkuIFRoZSBsYXJnZSBgb3ZlcmhlYWRgIGNhdXNlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYHBrdF9sZW5gLiBUaGlzIG1lYW5zIHRoZSBjbGFzcyYjMzk7cyBkZWZpY2l0IG11c3QgZ3JvdyBpbW1lbnNlbHksIGFkZGluZyB0aGUgcXVhbnR1bSBlYWNoIHRpbWUsIGxlYWRpbmcgdG8gYSBsb25nIGxvb3AuCgpUaGUga2V5IGlzIHRoYXQgdGhlIGxhcmdlIGBwa3RfbGVuYCBzdGVtcyBmcm9tIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gTG9va2luZyBhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIGFkZGVkIHRvIGBza2ItJmd0O2xlbmAuIEZ1cnRoZXIgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCBpcyBkb25lIGFuZCBpdCBzZWVtcyB0byBpbmRleCB0aGUgYHN0YWItJmd0O2RhdGFgLiBIb3dldmVyLCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCB1c2luZyBhIG1vZHVsbyBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBgc3RhYi0mZ3Q7ZGF0YWAgYXJyYXkgYWNjZXNzIGlzIGFsd2F5cyB3aXRoaW4gYm91bmRzLiBUaGUgYHN0YWItJmd0O2RhdGFgIGFycmF5IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBzdGFiYCBjcmVhdGlvbiB3aXRoIHVzZXIgc3BhY2UgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhlcmUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGBzdGFiLSZndDtkYXRhYCB1c2luZyB1c2VyIHNwYWNlIGB0YWJgLCBzbyBubyBjb25jZXJuIHRoZXJlLgoKTGV0JiMzOTtzIHF1aWNrbHkgc2NhbiBvdGhlciB1c2VzIG9mIGBvdmVyaGVhZGAuIGBzY2hfY2FrZS5jYCBhbmQgYHNjaF90YmYuY2AganVzdCBhZGp1c3QgdGhlIHBhY2tldCBsZW5ndGgsIHNvIHRoZXkgZG9uJiMzOTt0IHNlZW0gbGlrZSByZWxldmFudCBhcmVhcy4KCkluIHN1bW1hcnksIHRoZSBidWcgaXMgYSBDUFUgc3RhbGwgb3Igc29mdCBsb2NrdXAgaW4gYGRycmAgYW5kIGBldHNgIHFkaXNjcy4gVGhpcyBpcyBkdWUgdG8gYSB2ZXJ5IGxhcmdlIGBwa3RfbGVuYCwgcmVzdWx0aW5nIGZyb20gYSBiaWcgYG92ZXJoZWFkYCB2YWx1ZSwgd2hpY2ggbWFrZXMgdGhlIGRlZmljaXQgcm91bmQtcm9iaW4gbG9naWMgbG9vcCBleGNlc3NpdmVseS4gVGhpcyBpcyBlYXNpbHkgY2F1Z2h0IGJ5IGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24sIGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgc2VsZnRlc3RzIGFuZCBzeXprYWxsZXImIzM5O3MgZmluZGluZ3MuIFRoZSB2dWxuZXJhYmlsaXR5IGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBvciBpbmZvLWxlYWtzLCBidXQgYSBsb2dpYyBlcnJvci4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljLWJhc2VkIERvUyB2dWxuZXJhYmlsaXR5IHRoYXQgY2FuIGJlIGNhdWdodCB0aHJvdWdoIGV4aXN0aW5nIGZ1enppbmcgYW5kIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBtZWNoYW5pc21zIChsaWtlIHN5emthbGxlciksIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIGFkZGVkIHBhdGNoLCB0aGF0IGxpbWl0cyBgb3ZlcmhlYWRgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAsIGlzIGEgZ29vZCBtaXRpZ2F0aW9uIHRvIHRoZSBEb1MuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGluZyB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDozMy4yOTU2NDkyMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQzNDM3MDY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0RSUlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcXG5cXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJ3MgYGRlZmljaXRgLiBJZiBpdCBpcyBub3QsIHRoZSBjb2RlIGFkZHMgYSBgcXVhbnR1bWAgdG8gdGhlIGBkZWZpY2l0YCBhbmQgbG9vcHMuIFdpdGggYSBodWdlIGBwa3RfbGVuYCwgdGhpcyBgd2hpbGUgKDEpYCBsb29wIGV4ZWN1dGVzIG1pbGxpb25zIG9mIHRpbWVzIGJlZm9yZSB0aGUgYGRlZmljaXRgIGdyb3dzIGxhcmdlIGVub3VnaCwgcmVzdWx0aW5nIGluIGEgQ1BVIHN0YWxsIC8gc29mdCBsb2NrdXAgKERlbmlhbCBvZiBTZXJ2aWNlKS5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZWApLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBpc3N1ZSwgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6MzMuMjk1NjU0MDIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5MDg5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMjo0MDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXFxuaW5kZXggMThhNDE5Y2Q5ZDk0OS4uYTRjMWI3YjAyNjNkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cXHQxMDAwXFxuICNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVhcXHQzMFxcbisjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXFx0NjU1MzVcXG4gXFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xcbiBcXHRpbnRcXHRzdG9wO1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5AQCAtNTQ0LDYgKzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhYnMocy1cXHUwMDNlb3ZlcmhlYWQpIFxcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXFxcIik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbiBcXHRzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7XFxuIFxcdGlmICghc3RhYilcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cXG5pbmRleCAyYjYxZDhkNzliZGU4Li43NzEzZWIzNWFhZWJjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cXG5AQCAtODYsNSArODYsMjUgQEBcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuICAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFxcXCJcXG4gICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkMWUyXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJkcnJcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRyclxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjJcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBkcnJcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICBdXFxuICAgICB9XFxuIF1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxcbmluZGV4IGVlMDllNmQ2ZmRmM2MuLmRhN2FlNjI2ZjdlMWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxcbkBAIC0xMDA3LDUgKzEwMDcsMjUgQEBcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuICAgICAgICAgICAgIFxcXCJlY2hvIFxcXFxcXFwiMVxcXFxcXFwiIFxcdTAwM2UgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcXFwiXFxuICAgICAgICAgXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiZjNhNFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiUmVqZWN0IEVUUyBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXRzXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjJcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBldHNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICBdXFxuICAgICB9XFxuIF1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6MzQuNjg1NDM5MTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2NjU5MjE0NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfbW9kaWZ5X3FkaXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuaW5kZXggMThhNDE5Y2Q5ZDk0OS4uYTRjMWI3YjAyNjNkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiBcbiAjZGVmaW5lIERFRkFVTFRfVFhfUVVFVUVfTEVOXHQxMDAwXG4gI2RlZmluZSBTVEFCX1NJWkVfTE9HX01BWFx0MzBcbisjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuIFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xuIFx0aW50XHRzdG9wO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5jZGNmODYxYzg1ZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTU0NCw2ICs1NDQsMTEgQEAgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuK1x0aWYgKGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwiKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4rXG4gXHRzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7XG4gXHRpZiAoIXN0YWIpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cbmluZGV4IDJiNjFkOGQ3OWJkZTguLjc3MTNlYjM1YWFlYmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cbkBAIC04Niw1ICs4NiwyNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkMWUyXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJkcnJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGRyclwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMFwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxuaW5kZXggZWUwOWU2ZDZmZGYzYy4uZGE3YWU2MjZmN2UxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxuQEAgLTEwMDcsNSArMTAwNywyNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCJlY2hvIFxcXCIxXFxcIiBcdTAwM2UgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcIlxuICAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZjNhNFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVqZWN0IEVUUyBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZXRzXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGV0cyBiYW5kcyAxIHN0cmljdCAwIHF1YW50YSAxXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGV0c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMFwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDozNC42ODU0NDA2MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc4MDk5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU2NoZWR1bGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgYW5kIGBpbmNsdWRlL25ldC9wa3Rfc2NoZWQuaGAuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgY2hlY2sgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFNwZWNpZmljYWxseSwgaXQncyB2YWxpZGF0aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy1cdTAwM2VvdmVyaGVhZGAgYWdhaW5zdCBgU1RBQl9PVkVSSEVBRF9NQVhgLCB3aGljaCBpcyBkZWZpbmVkIGFzIDY1NTM1LiBJZiB0aGlzIGNoZWNrIGZhaWxzIOKAkyBtZWFuaW5nIHRoZSBvdmVyaGVhZCBpcyBleGNlc3NpdmVseSBsYXJnZSDigJMgaXQgbm93IHJldHVybnMgYC1FSU5WQUxgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbSDigJMgd2hpY2ggSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gVGhpcyBgcWRpc2NfZ2V0X3N0YWJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBxdWV1ZWluZyBkaXNjaXBsaW5lIChxZGlzYykgd2hlbiB1c2luZyBhIHNpemUgdGFibGUgKHN0YWIpLiBUaGlzIGNoYW5nZSBhZGRzIGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgZGVmaW5pdGVseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlIGluIHRoZSBrZXJuZWwuXG5cbk5vdywgYmVjYXVzZSBJ4oCZbSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaGUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2Agc2F5cyBgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBJIHNlZSBpdCdzICpzdGF0aWMqLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGludm9rZWQuIEZpbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBuZXh0IGltcG9ydGFudCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6NDIuMjYzNTQzMzQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2dldF9zdGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN0YWJfcG9saWN5W1RDQV9TVEFCX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTUtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo0OTY6c3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3Nj1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM0MS1cXHRpZiAodGNhW1RDQV9TVEFCXSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM0MjpcXHRcXHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNDMtXFx0XFx0aWYgKElTX0VSUihzdGFiKSkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMzk4PXN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNDE4LVxcdGlmICh0Y2FbVENBX1NUQUJdKSB7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxNDE5OlxcdFxcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQyMC1cXHRcXHRpZiAoSVNfRVJSKHN0YWIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo0Mi4zMDg2MzY1MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUyMjQ4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqU3RhdGljIEFuYWx5c2lzIG9mIHFkaXNjIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljYWxseSBkZWZpbmVkPyBUaGF0J3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkgd2FudCB0byBhbnN3ZXIuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGV5J3JlIHN0YXRpYyBvciBub3QuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIHJlc3Qgb2YgdGhlIGFuYWx5c2lzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgc2NvcGUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo0NS40NjA4ODY1ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDMxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTIzNj1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMjc1LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3NjpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzUtXFx0cWRpc2NfaGFzaF9hZGQoc2NoLCBmYWxzZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc2OlxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzctXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzODEtXFx0LyogRXZlbiBpZiBvcHMtXFx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVxcdTAwM2VkZXN0cm95KClcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzODI6XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4My1cXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYxMz1zdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Ny1cXHRcXHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2ODpcXHRcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjktXFx0XFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21fcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzg0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4NTpcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X3F1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4Ni1cXHRcXHRcXHRcXHQgdGNtLVxcdTAwM2V0Y21fcGFyZW50LCB0Y20tXFx1MDAzZXRjbV9oYW5kbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjQ1Ljg5MjkyMzg2MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ0MDQ3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRZGlzYyBDb2RlKipcblxuT2theSwgc28gYHFkaXNjX2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbGltaXRpbmcgaXRzIHNjb3BlLiBOb3csIHRoZSBjb250ZXh0IEkgaGF2ZSBpcyB0aGF0IGBfX3RjX21vZGlmeV9xZGlzY2AgY2FsbHMgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgX190Y19tb2RpZnlfcWRpc2NgIGlzIGFsc28gc3RhdGljLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y19tb2RpZnlfcWRpc2NgIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgd2F5IHRoZSBxZGlzYyBpcyBjcmVhdGVkIGFuZCBtb2RpZmllZCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoYXQgcGFydCBgX190Y19tb2RpZnlfcWRpc2NgIHBsYXlzIGluIHRoZSBvdmVyYWxsIHF1ZXVlaW5nIGRpc2NpcGxpbmUgbWFuaXB1bGF0aW9uIHByb2Nlc3MuIElzIHRoaXMgbWVhbnQgdG8gYmUgYSBsb3ctbGV2ZWwgcm91dGluZSB0aGF0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSwgb3IgaXMgaXQgYSBoZWxwZXIgdXNlZCBieSBvdGhlcnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6NTAuMjA3MzMwOTMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTQwNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX21vZGlmeV9xZGlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNjE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjgtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODUwLVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzAtXFx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjUwLjI1MzI3NDc3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODIzNTU1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBuZXcgcWRpc2NzIGdldCBjcmVhdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlaW5nIGEgbmV0bGluayBoYW5kbGVyLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgSSBrbm93IHRoZSBmdW5kYW1lbnRhbCBjb25maWcgb3B0aW9uIGZvciB0cmFmZmljIHNoYXBpbmcgaXMgYENPTkZJR19ORVRfU0NIRURgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZmlsZSAoYG5ldC9zY2hlZC9LY29uZmlnYCkgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBTb21ldGltZXMgdGhvc2UgZGVwZW5kZW5jaWVzIGNhbiBiZSBhIGxpdHRsZSB0YW5nbGVkLiBMZXQncyBzZWUgd2hhdCBlbHNlIGBLY29uZmlnYCBoYXMgdG8gb2ZmZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo1My45MzU2MzI2MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzM1OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjUzLjk4MDM3NzI0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5MDE5OTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBORVRfU0NIRURgIGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBzcGVjaWZpYyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBpbi4gSSBzZWUgdGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBpcyBhIGNvcmUgcGllY2UuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBEb2VzIHRoaXMgY2hhbmdlIHJlcXVpcmUgb3IgYXNzdW1lIGEgcGFydGljdWxhciBxdWV1aW5nIGRpc2NpcGxpbmUgKHFkaXNjKT8gVGhlIHRlc3QgY2FzZXMsIGBkcnJgIGFuZCBgZXRzYCwgYXJlIGEgY2x1ZS4gUmlnaHQsIGBkcnJgIGlzIGxpbmtlZCB0byBgQ09ORklHX05FVF9TQ0hfRFJSYCBhbmQgYGV0c2AgdG8gYENPTkZJR19ORVRfU0NIX0VUU2AuIEJ1dCB0aGUgY2hhbmdlIGlzIHdpdGhpbiBgcWRpc2NfZ2V0X3N0YWJgLCB3aGljaCBsaXZlcyBpbiBgc2NoX2FwaS5jYC4gVGhhdCBpbXBsaWVzIHRoaXMgaXMgYSBnZW5lcmljIGNoYW5nZSwgYXBwbHlpbmcgdG8gKmFueSogcWRpc2MgdGhhdCBsZXZlcmFnZXMgc2l6ZSB0YWJsZXMuIFNpemUgdGFibGVzIGFyZSBoYW5kbGVkIGdlbmVyaWNhbGx5IHdpdGhpbiBgc2NoX2FwaS5jYCwgc28gaXQncyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyB0aGUgYnJvYWRlciBxZGlzYyBsaWZlY3ljbGUuIEknbGwgY2hlY2sgYHRjX21vZGlmeV9xZGlzY2AsIGBxZGlzY19jcmVhdGVgLCBhbmQgYHFkaXNjX2NoYW5nZWAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYWZmZWN0ZWQuIEhtbSwgYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLiBUaGF0J3MgYSBwb3RlbnRpYWwgcHJvYmxlbTsgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQgYXMgYSBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMuIFdhaXQgYSBtaW51dGUuLi4gdGhhdCdzIHJpZ2h0LCBpdCdzIHN0YXRpYyEgQXJlIGFueSBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zICpub3QqIHN0YXRpYz8gSSdsbCBxdWlja2x5IGNoZWNrIGBydG5ldGxpbmtfcmN2YCDigJMgbmV0bGluayBoYW5kbGVycyBhcmUgb2Z0ZW4gc3RhdGljLCBidXQgaXQncyB3b3J0aCBjaGVja2luZy5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMuIGB0Y19tb2RpZnlfcWRpc2NgIGlzIGRlZmluaXRlbHkgYHN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKC4uLilgLiBXaGF0IGFib3V0IGBxZGlzY19jcmVhdGVgPyBUaGF0J3MgYWxzbyBzdGF0aWMuIEhvdyBhYm91dCBgcWRpc2NfZ2V0X3N0YWJgPyBBbHNvIHN0YXRpYy4gRGFtbi4gSXMgdGhlcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbiBpbiBgc2NoX2FwaS5jYCB0aGF0IHByb3ZpZGVzIGEgaG9vayBwb2ludCBoZXJlPyBJIG5lZWQgYSBub24tc3RhdGljIHN5bWJvbCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MDQuMzcwNTc5MDc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQwNTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzICpxZGlzY19iYXNlO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzItXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzM6aW50IHJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yMDU9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgKnFkaXNjX2xvb2t1cF9kZWZhdWx0KGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIyMC0vKiBTZXQgbmV3IGRlZmF1bHQgcWRpc2MgdG8gdXNlICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMjE6aW50IHFkaXNjX3NldF9kZWZhdWx0KGNvbnN0IGNoYXIgKm5hbWUpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz03MzM9RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2dyb3cpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzM0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NzM1OmludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNi17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTgzMz1FWFBPUlRfU1lNQk9MKHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2cpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODM1OmludCBxZGlzY19vZmZsb2FkX2R1bXBfaGVscGVyKHN0cnVjdCBRZGlzYyAqc2NoLCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTgzNi1cXHRcXHRcXHQgICAgICB2b2lkICp0eXBlX2RhdGEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjA0LjQxNDk5MjI3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY3NjY5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgTmV0d29yayBQbHVtYmluZyoqXG5cbkhtbSwgd2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgbmV0d29ya2luZyBpc3N1ZT8gQWgsIHJpZ2h0LCBgcnRuZXRsaW5rX3Jjdl9tc2dgLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3Igcm91dGluZyBhbmQgaW50ZXJmYWNlIGNoYW5nZXMsIGFuZCBpdCdzIG92ZXIgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gKkNoZWNrcyBtZW1vcnkuLi4gSSByZWNhbGwgaXQgaGFuZGxlcyBpbmNvbWluZyBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyBpbmZvcm1hdGlvbiwgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQqLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBob3cgc2NoZWR1bGluZyBpcyBpbnZvbHZlZCwgSSBzaG91bGQgc2VhcmNoIGZvciBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGV4dGVybmFsbHkgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGF0IHRoZSBzY2hlZHVsZXIgZXhwb3Nlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdG8gdmlzdWFsaXplIHRoZSBzY2hlZHVsaW5nIGhvb2tzIGludG8gdGhlIG92ZXJhbGwgY29udHJvbCBwbGFuZS4gKlllcywgSSBrbm93IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uLiogUmlnaHQsIGxldCdzIHNlZSB3aGF0IHBvcHMgdXAgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjA4LjU4MjY2NDcxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5OTYxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTMzPWludCByZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzQtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc1OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfcWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTc3PXZvaWQgdW5yZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTk1OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9xZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTYtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI4Mj12b2lkIHFkaXNjX2hhc2hfYWRkKHN0cnVjdCBRZGlzYyAqcSwgYm9vbCBpbnZpc2libGUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5MC19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyOTE6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2FkZCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yOTItXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yOTM9dm9pZCBxZGlzY19oYXNoX2RlbChzdHJ1Y3QgUWRpc2MgKnEpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5OS19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzozMDA6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2RlbCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0zMDEtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQyMD1zdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcWRpc2NfZ2V0X3J0YWIoc3RydWN0IHRjX3JhdGVzcGVjICpyLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00NjAtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDYxOkVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDYyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDYzPXZvaWQgcWRpc2NfcHV0X3J0YWIoc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDg2LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ4NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3B1dF9ydGFiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ4OC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTY2PXZvaWQgcWRpc2NfcHV0X3N0YWIoc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnRhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTc1LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU3NjpFWFBPUlRfU1lNQk9MKHFkaXNjX3B1dF9zdGFiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU3Ny1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NjM1PXZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY0MC19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo2NDE6RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NjQzPXZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDYtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjQ3OkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDgtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDk9dm9pZCBxZGlzY193YXRjaGRvZ19zY2hlZHVsZV9yYW5nZV9ucyhzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCB1NjQgZXhwaXJlcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjc2LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY3NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlX3JhbmdlX25zKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY3OC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTY3OT12b2lkIHFkaXNjX3dhdGNoZG9nX2NhbmNlbChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy02ODItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjgzOkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9Njk5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9ncm93KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqY2xoYXNoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy03MzItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NzMzOkVYUE9SVF9TWU1CT0wocWRpc2NfY2xhc3NfaGFzaF9ncm93KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTczNT1pbnQgcWRpc2NfY2xhc3NfaGFzaF9pbml0KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0Ni19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NDc6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luaXQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzQ4LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzQ5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc1Mi19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NTM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3kpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzU0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzU1PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9pbnNlcnQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzY0LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc2NTpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfaW5zZXJ0KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc2Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc2Nz12b2lkIHFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc3Mi19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NzM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX3JlbW92ZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy03NzQtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc5NT12b2lkIHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc3RydWN0IFFkaXNjICpzY2gsIGludCBuLCBpbnQgbGVuKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODMzOkVYUE9SVF9TWU1CT0wocWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzQtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz04MzU9aW50IHFkaXNjX29mZmxvYWRfZHVtcF9oZWxwZXIoc3RydWN0IFFkaXNjICpzY2gsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04NTMtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODU0OkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9kdW1wX2hlbHBlcik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy04NTUtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz04NTY9dm9pZCBxZGlzY19vZmZsb2FkX2dyYWZ0X2hlbHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODgyLX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjg4MzpFWFBPUlRfU1lNQk9MKHFkaXNjX29mZmxvYWRfZ3JhZnRfaGVscGVyKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg4NC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTg4NT12b2lkIHFkaXNjX29mZmxvYWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04OTktfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6OTAwOkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MDguNjI2NjY0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2OTI2MTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCAodGMpIFFkaXNjIE1vZGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIYW5nIG9uLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IGl0J3MgcmVnaXN0ZXJlZCBpbiBgcHNjaGVkX3J0bmxfbXNnX2hhbmRsZXJzYC5cIiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBgVENBX1NUQUJgLiBJcyB0aGVyZSBhbm90aGVyIGZ1bmN0aW9uIHRoYXQncyBpbnZvbHZlZCBoZXJlPyBQZXJoYXBzIGBxZGlzY19jcmVhdGVgP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgdGhpbmsuICpJZiogYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLCB0aGF0IHdvdWxkIG1lYW4gaXQncyBpbmxpbmVkLi4uIEJ1dCB3YWl0LCBubywgaXQncyAqbm90KiBpbmxpbmVkLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGB7IC5tc2d0eXBlID0gUlRNX05FV1FESVNDLCAuZG9pdCA9IHRjX21vZGlmeV9xZGlzYyB9YC4gVGhhdCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUgdG8gdGFyZ2V0LlxuXG5Ob3csIHdoYXQgYWJvdXQgYHJ0bmV0bGlua19yY3ZfbXNnYD8gVGhhdCdzIHRvbyBnZW5lcmljLCB0b28gaGlnaC1sZXZlbC4gSXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgaW4gYHNjaF9hcGkuY2AgdGhhdCdzICpyZWxhdGVkKiBhbmQsIGNydWNpYWxseSwgbm9uLXN0YXRpYz8gSSdtIHNlZWluZyB0aGF0IHRoZSBuZXRsaW5rIGhhbmRsZXJzIGFyZSBhY3R1YWxseSBzdGF0aWMsIHRob3VnaCB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIGBxZGlzY19jcmVhdGVgIGlzIGFsc28gbm90IGlubGluZWQuIEl0J3MgYSBwcmV0dHkgbGFyZ2UgZnVuY3Rpb24uIEJ1dCwgSSBzaG91bGQgc3RpbGwgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24uIE1heWJlIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9xZGlzY2A/IE5vcGUsIHRoYXQncyBmb3IgcmVnaXN0cmF0aW9uLiBJIHNlZSB0aGF0IGBxZGlzY19nZXRfc3RhYmAgaXMgc3RhdGljLCBidXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtb2RpZmllZCFcblxuVWx0aW1hdGVseSwgYHRjX21vZGlmeV9xZGlzY2AgKmlzKiB0aGUgbmV0bGluayBlbnRyeSBwb2ludCBhbmQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB0YXJnZXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGl0IGFnYWluIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MToxNS41OTU5Mjg0NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU4ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX21vZGlmeV9xZGlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNjE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjgtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODUwLVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzAtXFx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjE1LjY0MzM5MDI1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjYxMDk3MTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgdGNfbW9kaWZ5X3FkaXNjYCBDYWxsYmFjayoqXG5cbk9rYXksIHNvIHRoaXMgYHRjX21vZGlmeV9xZGlzY2AgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBpc24ndCBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEgY2xlYW4gZW50cnkgcG9pbnQsIGEgZGlzdGluY3QgYm91bmRhcnkgdGhhdCB3ZSBjYW4gcHJvYmUuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcgZGlyZWN0bHksIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgYXJlYXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgc2VlIHRoZSB0ZXN0IGNhc2VzIGFyZSB1c2luZyBgZHJyYCBhbmQgYGV0c2AuIFRoYXQgZ2l2ZXMgbWUgYSBkaXJlY3Rpb24uXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEknbGwgc2VhcmNoIGZvciBgTkVUX1NDSF9EUlJgIGFuZCBgTkVUX1NDSF9FVFNgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9ucy4gVGhhdCB3aWxsIHByb3ZpZGUgY29udGV4dCwgYW5kIGFsbG93IG1lIHRvIGRldmVsb3Agc3Ryb25nZXIgZnV6emluZyBoYXJuZXNzZXMuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB0aGUgZnV6emluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MzguMjU0MzY0OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDU4NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRFJSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MTozOC4zMDEyMTg1OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5NDEzODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIE5ldHdvcmsgU2NoZWR1bGVyIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgbWVudGlvbiBvZiBgTkVUX1NDSF9FVFNgIGltbWVkaWF0ZWx5IHRocm93cyBtZSBpbnRvIGEgc3BlY2lmaWMgc3Vic2V0IG9mIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSdtIHRoaW5raW5nICpFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKiBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhpcyBwb2ludHMgdG93YXJkcyBhbiBFdmVudCBUcmlnZ2VyZWQgU2NoZWR1bGluZyBwcm90b2NvbCwgcG9zc2libHkgd2l0aGluIGEgZGV0ZXJtaW5pc3RpYyBuZXR3b3JrIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHBlcmZvcm1hbmNlIG1vZGVsaW5nIGFuZCBzaW11bGF0aW9uIG9mIGEgZGV0ZXJtaW5pc3RpYyBuZXR3b3JrIGJhc2VkIG9uIHRoZXNlIHByb3RvY29scy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSByYWNlcyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IHRoZSByZWFsLXRpbWUgY29uc3RyYWludHMsIGhvdyB0aGUgZXZlbnQgdHJpZ2dlcnMgd2lsbCBpbmZsdWVuY2UgcGFja2V0IHNjaGVkdWxpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGppdHRlciwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgY2hhbGxlbmdlIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBwcm9ibGVtcyAtIHBhY2tldCBwcmlvcml0aWVzLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBlbmQtdG8tZW5kIGxhdGVuY3kuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHByaW9yaXRpemluZyB0cmFmZmljIG9uIGEgcGVyLWZsb3cgb3IgYSBtb3JlIGFnZ3JlZ2F0ZWQgYXBwcm9hY2g/IElzIHRoZXJlIHRyYWZmaWMgc2hhcGluZyBvciBwb2xpY2luZyBhdCB0aGUgc291cmNlIG9yIHRoZSBpbmdyZXNzIHJvdXRlcj9cblxuSSdtIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29udGV4dC4gSXMgdGhpcyBhIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciBhbiBleGlzdGluZyBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGVkIG9uIGNvbW1lcmNpYWwgaGFyZHdhcmU/IFRoYXQgZHJhc3RpY2FsbHkgYWZmZWN0cyB0aGUgYW5hbHl0aWNhbCBhbmQgZGVzaWduIG9wdGlvbnMuIFRoZW4sIEkgYW0gbG9va2luZyBhdCBob3cgdG8gaW1wcm92ZSB0aGUgY3VycmVudCBkZXNpZ24uXG5Fc3NlbnRpYWxseSwgSSBhbSBpbW1lZGlhdGVseSB3YW50aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG9wZXJhdGlvbmFsIGNvbnRleHQgYW5kIHBlcmZvcm1hbmNlIG9iamVjdGl2ZXMgb2YgYSBzeXN0ZW0gdXNpbmcgYE5FVF9TQ0hfRVRTYCBiZWNhdXNlIHRoZXJlIGlzIGEgd2lkZSB2YXJpZXR5IG9mIHNjZW5hcmlvcyB0aGlzIG5hbWUgcmVmZXJzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6NDUuNTk1MzU4Njk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYzNjg4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zODgtXFxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xcbm5ldC9zY2hlZC9LY29uZmlnLTM5MC1cXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjQ2LjAyMTczNTUzNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU3MTk0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBpbiBgcWRpc2NfZ2V0X3N0YWJgIGZvciBleGNlc3NpdmUgb3ZlcmhlYWQgdXNpbmcgYGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBhIHNhZmV0eSBjaGVjayByZWFsbHksIGFuZCBpdCdzIGFwcGxpY2FibGUgYWNyb3NzIHRoZSBib2FyZCBmb3IgYW55IHFkaXNjIHdpdGggc2l6ZSB0YWJsZSBzdXBwb3J0LiBOb3csIHdoZXJlIHRvIHB1dCB0aGlzIGluIHRoZSBjb25maWc/IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGBORVRfU0NIX0RSUmAgb3IgYE5FVF9TQ0hfRVRTYCBzcGVjaWZpY2FsbHksIGJ1dCBpbmNsdWRpbmcgdGhlbSB3b3VsZG4ndCBicmVhayBhbnl0aGluZy4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUuLi4gc2luY2UgdGhpcyBpcyBnZW5lcmljLCBJIHByb2JhYmx5IG9ubHkgbmVlZCB0aGUgbWFpbiBjb25maWcsIGBORVRfU0NIRURgLiBMZXQncyBjb25maXJtIHRoYXQuIEFoLCB5ZXMsIGBORVRfU0NIRURgIGVuYWJsZXMgdGhlIFFvUyBhbmQgZmFpciBxdWV1ZWluZyBzdWJzeXN0ZW0sIHdoaWNoIGluY2x1ZGVzIGBzY2hfYXBpLmNgLiBUaGF0IGhhbmRsZXMgYWxsIG9mIHRoaXMuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCBmaWxlIHRvIG1ha2UgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6NTEuODc4OTMyNzM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MTo1MS45MjM1MTk4OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NjI5MjgyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU2l6ZSBUYWJsZSBPdmVyaGVhZCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgQ09ORklHX05FVF9TQ0hFRGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCwgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGFueSBuZXR3b3JraW5nIHNjaGVkdWxlciBjaGFuZ2UuIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIHJldmlldyB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGVkIHZhbGlkYXRpb24gY2hlY2suXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBTVEFCX09WRVJIRUFEX01BWGAgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCwgYXMgaXQgaGFuZGxlcyBzaXplIHRhYmxlIHJldHJpZXZhbCwgYW5kIG5vdywgZW5zdXJlcyB0aGUgb3ZlcmhlYWQgdmFsdWUsIGBzLVx1MDAzZW92ZXJoZWFkYCwgc3RheXMgd2l0aGluIHRoZSBkZWZpbmVkIGJvdW5kYXJpZXMuIEVzc2VudGlhbGx5LCBpdCdzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBleGNlc3NpdmVseSBsYXJnZSBvdmVyaGVhZCB2YWx1ZXMsIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgUlRNX05FV1FESVNDYCBuZXRsaW5rIG1lc3NhZ2UuXG5cbk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHdpbGwgYmUgY2FsbGVkLiBJJ3ZlIG5vdGVkIHRoYXQgdGhlIGVudHJ5IHBvaW50IGlzIGB0Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgY2FsbGJhY2sgZm9yIGBSVE1fTkVXUURJU0NgLiBPa2F5LCB0aGF0J3MgY2xlYW4uXG5cbkJ1dCBsZXQgbWUgdGhpbmsgZnVydGhlcjogaXMgdGhpcyB0aGUgb25seSBlbnRyeSBwb2ludD8gV2hhdCBhYm91dCBvdGhlciBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcWRpc2NfZ2V0X3N0YWJgPyBXZWxsLCB0aGUgY29kZSBzaG93cyB0aGF0IGl0J3MgYWxzbyBjYWxsZWQgYnkgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBgcWRpc2NfY2hhbmdlYCwgaG93ZXZlciwgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHRjX21vZGlmeV9xZGlzY2AsIHNvIHdlJ3JlIHN0aWxsIGVmZmVjdGl2ZWx5IGNvdmVyZWQuIFRoaXMgbWVhbnMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBoYW5kbGVzIGJvdGggdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIHF1ZXVlIGRpc2NpcGxpbmUsIHdoaWNoIGlzIGdvb2QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHRjX21vZGlmeV9xZGlzY2AgaXMgdGhlIGJlc3Qgc3ltYm9sIGZvciB0aGlzLiBJdCdzIHN0YXRpYywgYnV0IGl0IGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjaywgc28gaXQgY2FuJ3QgYmUgaW5saW5lZC4gSSBhbSBsb29raW5nIGZvciB0aGUgXCJiZXN0XCIgc3ltYm9sLCBhcyB0aGUgZ3VpZGVsaW5lcyBzdGF0ZTogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgYnV0IGB0Y19tb2RpZnlfcWRpc2NgIGlzIHRoZSBtb3N0IHNwZWNpZmljLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbiwgYHJ0bmV0bGlua19yY3ZfbXNnYCBjYWxscyB0aGUgY2FsbGJhY2suLi4gd2hpY2ggaXMgYHRjX21vZGlmeV9xZGlzY2AuIGBydG5ldGxpbmtfcmN2X21zZ2AgaXMgdG9vIGdlbmVyaWMsIGFuZCB0aGVyZSBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGBxZGlzY19jcmVhdGVgLCBgX190Y19tb2RpZnlfcWRpc2NgKSBpbiB0aGUgY2FsbCBjaGFpbi4gU28sIGB0Y19tb2RpZnlfcWRpc2NgIGlzIHRoZSBiZXN0IGhlcmUuXG5cbkFscmlnaHQsIEknbSBjb21mb3J0YWJsZSB3aXRoIGZvY3VzaW5nIG9uIGB0Y19tb2RpZnlfcWRpc2NgIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBOb3cgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9TQ0hFRGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjAzLjQ4NjQ1MDI4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjg2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MDMuNTMxNzgwOTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTYyNzY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBSZWZpbmVtZW50KipcblxuT2theSwgc28gdGhpcyBoYXMgYSBwcmV0dHkgY2xlYW4gcHJvZmlsZSAtIGp1c3QgYSBgTkVUYCBkZXBlbmRlbmN5LCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIEkgZGVjbGFyZSB2aWN0b3J5LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJIHNlZSB0aGUgdGVzdCBjYXNlcyBhcmUgdXNpbmcgYGRycmAgYW5kIGBldHNgLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSB0aG9zZSBxZGlzY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGVzdGluZywgSSdsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgY29uZmlndXJhdGlvbi5cblxuQWgsIHJpZ2h0LCB0aGUgZGVmYXVsdCBxZGlzYy4uLiBpdCdzIGVpdGhlciBgcGZpZm9fZmFzdGAgb3IgYGZxX2NvZGVsYCwgZGVwZW5kaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWx0LWluIHFkaXNjcy4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIG9yIGEgc2ltaWxhciBmaWxlIHRoYXQgaGFuZGxlcyB0aGUgc2NoZWR1bGluZyBhc3BlY3RzLiBUaW1lIHRvIGdvIGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjA3Ljk4ODA1OTgzOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMzQ3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZpZm9fZmFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0zNi0vKiBRZGlzYyB0byB1c2UgYnkgZGVmYXVsdCAqL1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjM3OmNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKmRlZmF1bHRfcWRpc2Nfb3BzID0gXFx1MDAyNnBmaWZvX2Zhc3Rfb3BzO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTM4LUVYUE9SVF9TWU1CT0woZGVmYXVsdF9xZGlzY19vcHMpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9NzU3PUVYUE9SVF9TWU1CT0woc2NoX2RlZmF1bHRfcHJpbzJiYW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc2NS0vKlxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjc2NjogKiBQcml2YXRlIGRhdGEgZm9yIGEgcGZpZm9fZmFzdCBzY2hlZHVsZXIgY29udGFpbmluZzpcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjctICpcXHQtIHJpbmdzIGZvciBwcmlvcml0eSBiYW5kc1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc2OC0gKi9cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Njk6c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzcwLVxcdHN0cnVjdCBza2JfYXJyYXkgcVtQRklGT19GQVNUX0JBTkRTXTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc3Mi1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3NzM6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX2FycmF5ICpiYW5kMmxpc3Qoc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdixcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzQtXFx0XFx0XFx0XFx0XFx0ICBpbnQgYmFuZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc3OC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Nzk6c3RhdGljIGludCBwZmlmb19mYXN0X2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxZGlzYyxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzgyLVxcdGludCBiYW5kID0gc2NoX2RlZmF1bHRfcHJpbzJiYW5kW3NrYi1cXHUwMDNlcHJpb3JpdHkgXFx1MDAyNiBUQ19QUklPX01BWF07XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzgzOlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODQtXFx0c3RydWN0IHNrYl9hcnJheSAqcSA9IGJhbmQybGlzdChwcml2LCBiYW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgwMi1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDM6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDQte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjgwNTpcXHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODA2LVxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODQzLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg0NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBmaWZvX2Zhc3RfcGVlayhzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg0NS17XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODQ2OlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDctXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NTgtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODU5OnN0YXRpYyB2b2lkIHBmaWZvX2Zhc3RfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NjAte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2MS1cXHRpbnQgaSwgYmFuZDtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NjI6XFx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2OC1cXHRcXHQvKiBOVUxMIHJpbmcgaXMgcG9zc2libGUgaWYgZGVzdHJveSBwYXRoIGlzIGR1ZSB0byBhIGZhaWxlZFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg2OTpcXHRcXHQgKiBza2JfYXJyYXlfaW5pdCgpIGluIHBmaWZvX2Zhc3RfaW5pdCgpIGNhc2UuXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODcwLVxcdFxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODg4LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg4OTpzdGF0aWMgaW50IHBmaWZvX2Zhc3RfZHVtcChzdHJ1Y3QgUWRpc2MgKnFkaXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg5MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MDEtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTAyOnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9pbml0KHN0cnVjdCBRZGlzYyAqcWRpc2MsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MDMtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA1LVxcdHVuc2lnbmVkIGludCBxbGVuID0gcWRpc2NfZGV2KHFkaXNjKS1cXHUwMDNldHhfcXVldWVfbGVuO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkwNjpcXHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA3LVxcdGludCBwcmlvO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTI2LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkyNzpzdGF0aWMgdm9pZCBwZmlmb19mYXN0X2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTI4LXtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Mjk6XFx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MzAtXFx0aW50IHByaW87XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MzUtXFx0XFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5MzY6XFx0XFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzNy1cXHRcXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0MC1cXHRcXHQvKiBEZXN0cm95IHJpbmcgYnV0IG5vIG5lZWQgdG8ga2ZyZWVfc2tiIGJlY2F1c2UgYSBjYWxsIHRvXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTQxOlxcdFxcdCAqIHBmaWZvX2Zhc3RfcmVzZXQoKSBoYXMgYWxyZWFkeSBkb25lIHRoYXQgd29yay5cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDItXFx0XFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDYtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTQ3OnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0OS17XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTUwOlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTUxLVxcdHN0cnVjdCBza2JfYXJyYXkgKmJhbmRzW1BGSUZPX0ZBU1RfQkFORFNdO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTYzLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NDpzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY1OlxcdC5pZFxcdFxcdD1cXHRcXFwicGZpZm9fZmFzdFxcXCIsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY2OlxcdC5wcml2X3NpemVcXHQ9XFx0c2l6ZW9mKHN0cnVjdCBwZmlmb19mYXN0X3ByaXYpLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NzpcXHQuZW5xdWV1ZVxcdD1cXHRwZmlmb19mYXN0X2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY4OlxcdC5kZXF1ZXVlXFx0PVxcdHBmaWZvX2Zhc3RfZGVxdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Njk6XFx0LnBlZWtcXHRcXHQ9XFx0cGZpZm9fZmFzdF9wZWVrLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk3MDpcXHQuaW5pdFxcdFxcdD1cXHRwZmlmb19mYXN0X2luaXQsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcxOlxcdC5kZXN0cm95XFx0PVxcdHBmaWZvX2Zhc3RfZGVzdHJveSxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NzI6XFx0LnJlc2V0XFx0XFx0PVxcdHBmaWZvX2Zhc3RfcmVzZXQsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTczOlxcdC5kdW1wXFx0XFx0PVxcdHBmaWZvX2Zhc3RfZHVtcCxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NzQ6XFx0LmNoYW5nZV90eF9xdWV1ZV9sZW4gPSAgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk3NS1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NzctfTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Nzg6RVhQT1JUX1NZTUJPTChwZmlmb19mYXN0X29wcyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc5LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTIwNz1zdGF0aWMgdm9pZCBhdHRhY2hfb25lX2RlZmF1bHRfcWRpc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyMTYtXFx0ZWxzZSBpZihkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTilcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMjE3OlxcdFxcdG9wcyA9IFxcdTAwMjZwZmlmb19mYXN0X29wcztcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMjE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjowOC4wMzIxOTg3NzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMjY3MTM4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgcGZpZm9fZmFzdGAsIHNpbmNlIHRoYXQncyBhIGJ1aWx0LWluIHFkaXNjLiBCdXQgdGhlbiBJIHNhdyB0aGUgbWVudGlvbiBvZiBgcWRpc2NfZ2V0X3N0YWJgIGluIHRoZSBwYXRjaCBhbmQgcmVhbGl6ZWQgaXQncyBkZWFsaW5nIHdpdGggc2l6ZSB0YWJsZXMuIFRob3NlIHRhYmxlcyBhcmUgaGFuZGxlZCBnZW5lcmljYWxseSBpbiBgc2NoX2FwaS5jYCB2aWEgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLCB3aGljaCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGEgY29yZSB0cmFmZmljIGNvbnRyb2wgZmVhdHVyZS4gYE5FVF9TQ0hFRGAgaXMgdGhlIGtleSBjb25maWcgaGVyZS5cblxuTXkgaW5pdGlhbCBzdHJhdGVneSBsb29rcyBsaWtlIHRoaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gb2J2aW91c2x5IVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y19tb2RpZnlfcWRpc2NgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBORVRfU0NIRURgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYnkgZW5zdXJpbmcgb3ZlcmhlYWQgaXMgd2l0aGluIGV4cGVjdGVkIGxpbWl0cywgYW5kIGlzIHJlYWNoZWQgdGhyb3VnaCBuZXRsaW5rLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGZ1enppbmcgaXQgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHBpY2tpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBzdGF0aWMuIEhtbS4uLiB3aGlsZSBpdCdzIGEgY2FsbGJhY2ssIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IGlubGluZWQsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGNoZWNrZWQgYHJ0bmV0bGlua19yY3ZfbXNnYCwgYnV0IHRoYXQncyBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCB3aGljaCBmZWVscyBsZXNzIHRhcmdldGVkLiBgcmVnaXN0ZXJfcWRpc2NgIGlzIGZvciBtb2R1bGUgaW5pdCwgc28gdGhhdCdzIG91dC4gSSdtIGdvaW5nIHRvIHN0aWNrIHdpdGggYHRjX21vZGlmeV9xZGlzY2AsIGJlY2F1c2UgaXQncyBhIGNhbGxiYWNrLCBhbmQgaXQncyBiZWluZyB1c2VkIGZvciB0aGlzIGZlYXR1cmUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgY2FzZXMuIFRoZSB0ZXN0IGNhc2VzIHVzZSBgZHJyYCBhbmQgYGV0c2AuIEkgd2lsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHNhZmUsIHNpbmNlIHRoZXkncmUgZXhwbGljaXRseSB0ZXN0ZWQuIFllcCwgdGhlIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIGBkcnIuanNvbmAgYW5kIGBldHMuanNvbmAsIHNvIHRoYXQgc2VhbHMgdGhlIGRlYWwuXG5cblNvLCBsZXQncyByZXZpZXc6XG5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYE5FVF9TQ0hFRGBcbiAgICAqICAgYE5FVF9TQ0hfRFJSYFxuICAgICogICBgTkVUX1NDSF9FVFNgXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHRjX21vZGlmeV9xZGlzY2BcblxuKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGltcGxlbWVudHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBzaXplIHRhYmxlIG92ZXJoZWFkIChgcy1cdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgc2FmZWd1YXJkIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYW5kIGlzIHRyaWdnZXJlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGFjY2VzcyBpcyB0aHJvdWdoIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBtYWtlIHNwZWNpZmljIHVzZSBvZiBEUlIgYW5kIEVUUyBxZGlzY3MsIG1ha2luZyB0aGVzZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucy5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAwNSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjEuMjU4OTE1MTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3MzUxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfbW9kaWZ5X3FkaXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBzaXplIHRhYmxlIG92ZXJoZWFkIChgcy1cXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjIxLjM0NDY1ODExNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2Mjk0Njg3NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjEuMzQ1MjUyMTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NjI5NDA4OTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxcblxcbkluIHFkaXNjcyB0aGF0IHVzZSBkZWZpY2l0IHJvdW5kLXJvYmluIHNjaGVkdWxpbmcsIHN1Y2ggYXMgRFJSIChgZHJyX2RlcXVldWVgKSBhbmQgRVRTIChgZXRzX3FkaXNjX2RlcXVldWVgKSwgdGhlIGRlcXVldWUgbG9naWMgY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY2xhc3MncyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjRlMzRjNmQ4ODMxMDExOWZhNGJjYzZkOGU3ZWM1YTc3OTJmYjJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NDA6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG5pbmRleCAxOGE0MTljZDlkOTQ5Li5hNGMxYjdiMDI2M2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG5AQCAtMTIsNiArMTIsNyBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cdDEwMDBcbiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXHQzMFxuKyNkZWZpbmUgU1RBQl9PVkVSSEVBRF9NQVhcdDY1NTM1XG4gXG4gc3RydWN0IHFkaXNjX3dhbGtlciB7XG4gXHRpbnRcdHN0b3A7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNTQ0LDYgKzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4rXHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXCIpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdH1cbitcbiBcdHN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTtcbiBcdGlmICghc3RhYilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuQEAgLTg2LDUgKzg2LDI1IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSByb290XCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImQxZTJcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlJlamVjdCBEUlIgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImRyclwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBkcnJcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZHJyXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIwXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5pbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5AQCAtMTAwNyw1ICsxMDA3LDI1IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcImVjaG8gXFxcIjFcXFwiIFx1MDAzZSAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJmM2E0XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJldHNcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDFcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZXRzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIwXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjIxLjM0NTI1MzQyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI2NDg2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NoZWR1bGVyIE92ZXJoZWFkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBTZWVtcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIGZvciB0aGUgYHMtXHUwMDNlb3ZlcmhlYWRgIHZhbHVlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGFuIGVycm9yIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy1cdTAwM2VvdmVyaGVhZGAgZXhjZWVkcyBgU1RBQl9PVkVSSEVBRF9NQVhgLCB3aGljaCBpcyBkZWZpbmVkIGFzIDY1NTM1LiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHByYWN0aWNlIHRvIGluY2x1ZGUgc2FuaXR5IGNoZWNrcyBsaWtlIHRoaXMgd2hlbiBoYW5kbGluZyBwYXJhbWV0ZXJzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS5cblxuSSdtIG1ha2luZyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBzYCBpbiB0aGUgY29kZSBpcyBtb3N0IGxpa2VseSBhIHBvaW50ZXIgdG8gc29tZSBzdHJ1Y3R1cmUuIEknbSBndWVzc2luZyB0aGlzIHN0cnVjdHVyZSBpbmNsdWRlcyBgb3ZlcmhlYWRgIGFzIGEgbWVtYmVyLiBUaGUgY2hlY2sgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFyb3VuZCBsaW5lIDU0NC4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHVzZSBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjI2Ljk3MTc0MzM1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDUyMTpcXHRcXHRcXHR9XFxuIDUyMjpcXHRcXHRcXHR0YWIgPSBubGFfZGF0YSh0YltUQ0FfU1RBQl9EQVRBXSk7XFxuIDUyMzpcXHRcXHRcXHR0c2l6ZSA9IG5sYV9sZW4odGJbVENBX1NUQUJfREFUQV0pIC8gc2l6ZW9mKHUxNik7XFxuIDUyNDpcXHRcXHR9XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGlmICh0c2l6ZSAhPSBzLVxcdTAwM2V0c2l6ZSB8fCAoIXRhYiBcXHUwMDI2XFx1MDAyNiB0c2l6ZSBcXHUwMDNlIDApKSB7XFxuIDUyNzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHNpemUgb2Ygc2l6ZSB0YWJsZVxcXCIpO1xcbiA1Mjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDUyOTpcXHRcXHR9XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3RhYiwgXFx1MDAyNnFkaXNjX3N0YWJfbGlzdCwgbGlzdCkge1xcbiA1MzI6XFx0XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2c3RhYi1cXHUwMDNlc3pvcHRzLCBzLCBzaXplb2YoKnMpKSlcXG4gNTMzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHRzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0XFx0ICAgIG1lbWNtcChzdGFiLVxcdTAwM2VkYXRhLCB0YWIsIGZsZXhfYXJyYXlfc2l6ZShzdGFiLCBkYXRhLCB0c2l6ZSkpKVxcbiA1MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNzpcXHRcXHRcXHRzdGFiLVxcdTAwM2VyZWZjbnQrKztcXG4gNTM4OlxcdFxcdFxcdHJldHVybiBzdGFiO1xcbiA1Mzk6XFx0XFx0fVxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRpZiAocy1cXHUwMDNlc2l6ZV9sb2cgXFx1MDAzZSBTVEFCX1NJWkVfTE9HX01BWCB8fFxcbiA1NDI6XFx0XFx0ICAgIHMtXFx1MDAzZWNlbGxfbG9nIFxcdTAwM2UgU1RBQl9TSVpFX0xPR19NQVgpIHtcXG4gNTQzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgbG9nYXJpdGhtaWMgc2l6ZSBvZiBzaXplIHRhYmxlXFxcIik7XFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNTQ1OlxcdFxcdH1cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0aWYgKGFicyhzLVxcdTAwM2VvdmVyaGVhZCkgXFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xcbiA1NDg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXFxcIik7XFxuIDU0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNTUwOlxcdFxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0c3RhYiA9IGttYWxsb2NfZmxleCgqc3RhYiwgZGF0YSwgdHNpemUpO1xcbiA1NTM6XFx0XFx0aWYgKCFzdGFiKVxcbiA1NTQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHN0YWItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDU1NzpcXHRcXHRzdGFiLVxcdTAwM2Vzem9wdHMgPSAqcztcXG4gNTU4OlxcdFxcdGlmICh0c2l6ZSBcXHUwMDNlIDApXFxuIDU1OTpcXHRcXHRcXHRtZW1jcHkoc3RhYi1cXHUwMDNlZGF0YSwgdGFiLCBmbGV4X2FycmF5X3NpemUoc3RhYiwgZGF0YSwgdHNpemUpKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhYi1cXHUwMDNlbGlzdCwgXFx1MDAyNnFkaXNjX3N0YWJfbGlzdCk7XFxuIDU2MjpcXHRcXG4gNTYzOlxcdFxcdHJldHVybiBzdGFiO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHR2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXFxuIDU2NzpcXHR7XFxuIDU2ODpcXHRcXHRpZiAoIXRhYilcXG4gNTY5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjYuOTcxODk2NzE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDI5MDAxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgT3ZlcmhlYWQgaW4gYHRjX3NpemVzcGVjYCBmb3IgU2FuaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hlY2sgb24gYHMtXHUwMDNlb3ZlcmhlYWRgLCBsaWtlbHkgd2l0aGluIHNvbWUgdHJhZmZpYyBjb250cm9sIChUQykgY29udGV4dC4gVGhlIHByaW1hcnkgY29uY2VybiBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBmcm9tIGdvaW5nIGhheXdpcmUg4oCTIGVpdGhlciBiZWNvbWluZyBleGNlc3NpdmVseSBsYXJnZSBvciwgdXNpbmcgYGFicygpYCwgZXhjZXNzaXZlbHkgc21hbGwgKG9yIG5lZ2F0aXZlLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBjb3VsZCBiZSBlcXVhbGx5IHByb2JsZW1hdGljKS4gVGhlIHVzZSBvZiBgYWJzKClgIGlzIGEga2V5IGluZGljYXRvciB0aGF0IHdlIGFyZSBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCBhYnNvbHV0ZSB2YWx1ZXMsIG5vdCByYXcgc2lnbmVkIGludGVnZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdoYXQgYHN0cnVjdCB0Y19zaXplc3BlY2AgYWN0dWFsbHkgKmlzKi4gS25vd2luZyB0aGF0IHN0cnVjdCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCB0byBhc3Nlc3MgKndoeSogdGhpcyBvdmVyaGVhZCB2YWx1ZSBtYXR0ZXJzLCB3aGF0IGl0IHJlcHJlc2VudHMgKGJ5dGVzLCBwYWNrZXRzLCBzb21lIG90aGVyIG1ldHJpYz8pLCBhbmQgd2hhdCByZWFzb25hYmxlIGJvdW5kcyBhcmUgZm9yIGl0IHdpdGhpbiB0aGlzIFRDIHN1YnN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoZWFkZXIgc2l6ZXMsIHBhZGRpbmcsIGZyYW1lIG92ZXJoZWFkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBzYCB2YXJpYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QsIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBjb21wcmlzZXMgdGhhdCBzdHJ1Y3R1cmUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjX3NpemVzcGVjYCBhbmQgc2VlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgVEMgcGljdHVyZS4gT25jZSBJIGtub3cgdGhhdCwgSSBjYW4gZXZhbHVhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgaW1wb3NlZCBjb25zdHJhaW50cyBhbmQgaXRzIGltcGxpY2F0aW9ucyBtb3JlIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMDksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjMxLjQ3NDc5OTQyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzM1OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNfc2l6ZXNwZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD01Mz1zdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTU1LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6NTY6XFx0c3RydWN0IHRjX3NpemVzcGVjXFx0c3pvcHRzO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNTctXFx0aW50XFx0XFx0XFx0cmVmY250O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkxPXN0cnVjdCB0Y19yYXRlc3BlYyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmgtMTAxLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDI6c3RydWN0IHRjX3NpemVzcGVjIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmgtMTAzLVxcdHVuc2lnbmVkIGNoYXJcXHRjZWxsX2xvZztcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggKyAxXSA9IHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ5MjpcXHRbVENBX1NUQUJfQkFTRV1cXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfc2l6ZXNwZWMpIH0sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTMtXFx0W1RDQV9TVEFCX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDk2PXN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01MDAtXFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1MDE6XFx0c3RydWN0IHRjX3NpemVzcGVjICpzO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTAyLVxcdHVuc2lnbmVkIGludCB0c2l6ZSA9IDA7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmg9OTA9c3RydWN0IHRjX3JhdGVzcGVjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDAtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oOjEwMTpzdHJ1Y3QgdGNfc2l6ZXNwZWMge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDItXFx0dW5zaWduZWQgY2hhclxcdGNlbGxfbG9nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjozMy4yMTgxNzgxMjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODgyODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIGRlZmluaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBpcyBpdCBzaXppbmc/IElzIGl0IGludm9sdmVkIGluIHJhdGUgbGltaXRpbmcsIHNoYXBpbmcsIGNsYXNzaWZpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yaz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gYmFuZHdpZHRoIG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgbWVtYmVycyBhbmQgd2hhdCB0aGV5IHJlcHJlc2VudCBpbiB0ZXJtcyBvZiBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZmllbGRzIGFyZSBpbiB0aGlzPyBJcyBpdCBkZWZpbmluZyBwYWNrZXQgc2l6ZXMsIHF1ZXVlIGRlcHRocywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGVyZSBtdWx0aXBsZSBtZW1iZXJzPyBBcmUgdGhleSBpbnRlZ2VycywgYml0ZmllbGRzLCBvciBvdGhlciBzdHJ1Y3RzPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGUgZGVzaWduIHdpbGwgcmV2ZWFsIHRoZSBpbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjozNi42MzcwMDg5NDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0I2RlZmluZSBUQ19SVEFCX1NJWkVcXHQxMDI0XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0cnVjdCB0Y19zaXplc3BlYyB7XFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0Y2VsbF9sb2c7XFxuIDEwNDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0c2l6ZV9sb2c7XFxuIDEwNTpcXHRcXHRzaG9ydFxcdFxcdGNlbGxfYWxpZ247XFxuIDEwNjpcXHRcXHRpbnRcXHRcXHRvdmVyaGVhZDtcXG4gMTA3OlxcdFxcdHVuc2lnbmVkIGludFxcdGxpbmtsYXllcjtcXG4gMTA4OlxcdFxcdHVuc2lnbmVkIGludFxcdG1wdTtcXG4gMTA5OlxcdFxcdHVuc2lnbmVkIGludFxcdG10dTtcXG4gMTEwOlxcdFxcdHVuc2lnbmVkIGludFxcdHRzaXplO1xcbiAxMTE6XFx0fTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0ZW51bSB7XFxuIDExNDpcXHRcXHRUQ0FfU1RBQl9VTlNQRUMsXFxuIDExNTpcXHRcXHRUQ0FfU1RBQl9CQVNFLFxcbiAxMTY6XFx0XFx0VENBX1NUQUJfREFUQSxcXG4gMTE3OlxcdFxcdF9fVENBX1NUQUJfTUFYXFxuIDExODpcXHR9O1xcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjM2LjYzNzEzNzI1NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3Mzc0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3ZlcmhlYWQgTGltaXQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGltcG9zaW5nIGEgaGFyZCBsaW1pdCBvbiB0aGUgYG92ZXJoZWFkYCB2YWx1ZSwgc3BlY2lmaWNhbGx5IGNhcHBpbmcgaXQgYXQgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgNjU1MzUuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHdoeSB0aGlzIHJlc3RyaWN0aW9uPyBXaGF0J3MgdGhlIHByb2JsZW0gaXQncyBhZGRyZXNzaW5nPyBDbGVhcmx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lLiBXZSdyZSBsaWtlbHkgdGFsa2luZyBhYm91dCBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcywgb3IgcG9zc2libHkgZXZlbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhpcyBgb3ZlcmhlYWRgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQgaW4gdGhlIGNvZGUuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYXAuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBiZWluZyB1c2VkIGFzIGFuIGluZGV4LCBhIGNvdW50ZXIsIG9yIGluIGFueSBvdGhlciBjcml0aWNhbCBhcml0aG1ldGljIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGJlIHZ1bG5lcmFibGUgdG8gdGhlc2Uga2luZHMgb2YgZXJyb3JzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0Mjo0MC4yNDQ1MTU0NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjA0MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92ZXJoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDYwLVxcdFxcdGVudHJ5LVxcdTAwM2Vwb2xpY2UuYXZyYXRlID0gdGNmX3BvbGljZV90Y2ZwX2V3bWFfcmF0ZShhY3QpO1xcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDYxOlxcdFxcdGVudHJ5LVxcdTAwM2Vwb2xpY2Uub3ZlcmhlYWQgPSB0Y2ZfcG9saWNlX3JhdGVfb3ZlcmhlYWQoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ2Mi1cXHRcXHRlbnRyeS1cXHUwMDNlcG9saWNlLmJ1cnN0X3BrdCA9IHRjZl9wb2xpY2VfYnVyc3RfcGt0KGFjdCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTQ2LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ3OlxcdGlmIChhYnMocy1cXHUwMDNlb3ZlcmhlYWQpIFxcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU0ODpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTk1PXZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo2MDA6XFx0cGt0X2xlbiA9IHNrYi1cXHUwMDNlbGVuICsgc3RhYi1cXHUwMDNlc3pvcHRzLm92ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjAxLVxcdGlmICh1bmxpa2VseSghc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTIwMT1zdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjA4LVxcdHUxNlxcdFxcdGZ3bWFya19zaGZ0O1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjIwOTpcXHRzMTZcXHRcXHRyYXRlX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTIxMC1cXHR1MTZcXHRcXHRyYXRlX21wdTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTEzNzI9c3RhdGljIHU2NCBjYWtlX2V3bWEodTY0IGF2ZywgdTY0IHNhbXBsZSwgdTMyIHNoaWZ0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTM3OC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzc5OnN0YXRpYyB1MzIgY2FrZV9jYWxjX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnFkLCB1MzIgbGVuLCB1MzIgb2ZmKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzODAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTM5MC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzkxOlxcdGxlbiA9IG1heCgoczMyKWxlbiArIHEtXFx1MDAzZXJhdGVfb3ZlcmhlYWQsIChzMzIpcS1cXHUwMDNlcmF0ZV9tcHUpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDEyLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MTM6c3RhdGljIHUzMiBjYWtlX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQxNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDIzLVxcdGlmIChzZWdzID09IDEpXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTQyNDpcXHRcXHRyZXR1cm4gY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDI1LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQ1Mi1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNDUzOlxcdHJldHVybiAoY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKSAqIChzZWdzIC0gMSkgK1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0NTQ6XFx0XFx0Y2FrZV9jYWxjX292ZXJoZWFkKHEsIGxhc3RfbGVuLCBvZmYpKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDU1LX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE3NTU9c3RhdGljIHMzMiBjYWtlX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODE2LVxcdFxcdFxcdGNvYmFsdF9zZXRfZW5xdWV1ZV90aW1lKHNlZ3MsIG5vdyk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTgxNzpcXHRcXHRcXHRnZXRfY29iYWx0X2NiKHNlZ3MpLVxcdTAwM2VhZGp1c3RlZF9sZW4gPSBjYWtlX292ZXJoZWFkKHEsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTgxOC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNlZ3MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg0MS1cXHRcXHRjb2JhbHRfc2V0X2VucXVldWVfdGltZShza2IsIG5vdyk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTg0MjpcXHRcXHRnZXRfY29iYWx0X2NiKHNrYiktXFx1MDAzZWFkanVzdGVkX2xlbiA9IGNha2Vfb3ZlcmhlYWQocSwgc2tiKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODQzLVxcdFxcdGZsb3dfcXVldWVfYWRkKGZsb3csIHNrYik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yNjQ5PXN0YXRpYyBpbnQgY2FrZV9jb25maWdfY2hhbmdlKHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI2NTA6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLCBib29sICpvdmVyaGVhZF9jaGFuZ2VkKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI2NTEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMS1cXHRpZiAodGJbVENBX0NBS0VfT1ZFUkhFQURdKSB7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcxMjpcXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZXJhdGVfb3ZlcmhlYWQsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMy1cXHRcXHRcXHQgICBubGFfZ2V0X3MzMih0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzE0LVxcdFxcdHJhdGVfZmxhZ3MgfD0gQ0FLRV9GTEFHX09WRVJIRUFEO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MTU6XFx0XFx0Km92ZXJoZWFkX2NoYW5nZWQgPSB0cnVlO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MTYtXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxOS1cXHRcXHRyYXRlX2ZsYWdzIFxcdTAwMjY9IH5DQUtFX0ZMQUdfT1ZFUkhFQUQ7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcyMDpcXHRcXHQqb3ZlcmhlYWRfY2hhbmdlZCA9IHRydWU7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcyMS1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yNzczPXN0YXRpYyBpbnQgY2FrZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzctXFx0c3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxID0gcWQtXFx1MDAzZWNvbmZpZztcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzc4OlxcdGJvb2wgb3ZlcmhlYWRfY2hhbmdlZCA9IGZhbHNlO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzktXFx0aW50IHJldDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODUtXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6Mjc4NjpcXHRyZXQgPSBjYWtlX2NvbmZpZ19jaGFuZ2UocSwgb3B0LCBleHRhY2ssIFxcdTAwMjZvdmVyaGVhZF9jaGFuZ2VkKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzg3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzg5LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3OTA6XFx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzkxLVxcdFxcdFdSSVRFX09OQ0UocWQtXFx1MDAzZW1heF9uZXRsZW4sIDApO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjkwOD1zdGF0aWMgaW50IGNha2VfY29uZmlnX2R1bXAoc3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjk1OC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyOTU5OlxcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9DQUtFX09WRVJIRUFELCBSRUFEX09OQ0UocS1cXHUwMDNlcmF0ZV9vdmVyaGVhZCkpKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NjAtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0zMzAxPXN0YXRpYyBpbnQgY2FrZV9tcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMDUtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjMzMDY6XFx0Ym9vbCBvdmVyaGVhZF9jaGFuZ2VkID0gZmFsc2U7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMwNy1cXHR1bnNpZ25lZCBpbnQgbnR4O1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMwOS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzEwOlxcdHJldCA9IGNha2VfY29uZmlnX2NoYW5nZShcXHUwMDI2cHJpdi1cXHUwMDNlY2FrZV9jb25maWcsIG9wdCwgZXh0YWNrLCBcXHUwMDI2b3ZlcmhlYWRfY2hhbmdlZCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxMS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxNy1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzE4OlxcdFxcdGlmIChvdmVyaGVhZF9jaGFuZ2VkKSB7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxOS1cXHRcXHRcXHRXUklURV9PTkNFKHFkLVxcdTAwM2VtYXhfbmV0bGVuLCAwKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jPTcxMD1zdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTcxMi1cXHQvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCxcXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3MTM6XFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0Llxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTcxNC1cXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTgwMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBmaWZvX2Zhc3RfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODIzLVxcdFxcdC8qIERlbGF5IGNsZWFyaW5nIHRoZSBTVEFURV9NSVNTRUQgaGVyZSB0byByZWR1Y2VcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MjQ6XFx0XFx0ICogdGhlIG92ZXJoZWFkIG9mIHRoZSBzZWNvbmQgc3Bpbl90cnlsb2NrKCkgaW5cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MjUtXFx0XFx0ICogcWRpc2NfcnVuX2JlZ2luKCkgYW5kIF9fbmV0aWZfc2NoZWR1bGUoKSBjYWxsaW5nXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xNTYzPXZvaWQgcHNjaGVkX3JhdGVjZmdfcHJlY29tcHV0ZShzdHJ1Y3QgcHNjaGVkX3JhdGVjZmcgKnIsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNTY3LVxcdG1lbXNldChyLCAwLCBzaXplb2YoKnIpKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxNTY4OlxcdHItXFx1MDAzZW92ZXJoZWFkID0gY29uZi1cXHUwMDNlb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTU2OS1cXHRyLVxcdTAwM2VtcHUgPSBjb25mLVxcdTAwM2VtcHU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjI9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5OC1cXHRcXHQvKiBPcHRpb25zIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG9mZmxvYWQuICovXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzk5OlxcdFxcdGlmIChob3B0LVxcdTAwM2VyYXRlLm92ZXJoZWFkIHx8IGhvcHQtXFx1MDAzZWNlaWwub3ZlcmhlYWQpIHtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjE4MDA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSFRCIG9mZmxvYWQgZG9lc24ndCBzdXBwb3J0IHRoZSBvdmVyaGVhZCBwYXJhbWV0ZXJcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE4MDEtXFx0XFx0XFx0Z290byBmYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTkzPXN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzUtXFx0ICovXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzNjpcXHRzMzJcXHRcXHRcXHRwYWNrZXRfb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzNy1cXHR1MzJcXHRcXHRcXHRjZWxsX3NpemU7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzOC1cXHRzdHJ1Y3QgcmVjaXByb2NhbF92YWx1ZVxcdGNlbGxfc2l6ZV9yZWNpcHJvY2FsO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzoxMzk6XFx0czMyXFx0XFx0XFx0Y2VsbF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTQwLVxcdHUzMlxcdFxcdFxcdGxpbWl0O1xcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTM2Nz1zdGF0aWMgdTY0IHBhY2tldF90aW1lX25zKHU2NCBsZW4sIGNvbnN0IHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxKVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0zNjgte1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzozNjk6XFx0bGVuICs9IHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMzcwLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3NS1cXHRcXHRcXHRjZWxscysrO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzozNzY6XFx0XFx0bGVuID0gY2VsbHMgKiAocS1cXHUwMDNlY2VsbF9zaXplICsgcS1cXHUwMDNlY2VsbF9vdmVyaGVhZCk7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3Ny1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM9OTM2PXN0YXRpYyB2b2lkIGdldF9yYXRlKHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTk0MC1cXHRxLVxcdTAwM2VyYXRlID0gci1cXHUwMDNlcmF0ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQxOlxcdHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZCA9IHItXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtOTQyLVxcdHEtXFx1MDAzZWNlbGxfc2l6ZSA9IHItXFx1MDAzZWNlbGxfc2l6ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQzOlxcdHEtXFx1MDAzZWNlbGxfb3ZlcmhlYWQgPSByLVxcdTAwM2VjZWxsX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDQtXFx0aWYgKHEtXFx1MDAzZWNlbGxfc2l6ZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYz0xMjUwPXN0YXRpYyBpbnQgbmV0ZW1fZHVtcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzAxLVxcdH1cXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MTMwMjpcXHRyYXRlLnBhY2tldF9vdmVyaGVhZCA9IHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTMwMy1cXHRyYXRlLmNlbGxfc2l6ZSA9IHEtXFx1MDAzZWNlbGxfc2l6ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MTMwNDpcXHRyYXRlLmNlbGxfb3ZlcmhlYWQgPSBxLVxcdTAwM2VjZWxsX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzA1LVxcdGlmIChubGFfcHV0KHNrYiwgVENBX05FVEVNX1JBVEUsIHNpemVvZihyYXRlKSwgXFx1MDAyNnJhdGUpKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0zODM9c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM4OC1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjM4OTpcXHQvKiAnbG1heCcgY2FuIHJhbmdlIGZyb20gW1FGUV9NSU5fTE1BWCwgcGt0bGVuICsgc3RhYiBvdmVyaGVhZF0gKi9cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM5MC1cXHRpZiAobG1heCBcXHUwMDNlIFFGUV9NQVhfTE1BWClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjcxPXN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTMtXFx0XFx0XFx0bWF4X2ZybV9sZW4gPSBkdXJhdGlvbl90b19sZW5ndGgocSwgc2NoZWQtXFx1MDAzZW1heF9vcGVuX2dhdGVfZHVyYXRpb25bdGNdKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI5NDpcXHRcXHRcXHQvKiBDb21wZW5zYXRlIGZvciBMMSBvdmVyaGVhZCBmcm9tIHNpemUgdGFibGUsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTUtXFx0XFx0XFx0ICogYnV0IGRvbid0IGxldCB0aGUgZnJhbWUgc2l6ZSBnbyBuZWdhdGl2ZVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTctXFx0XFx0XFx0aWYgKHN0YWIpIHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI5ODpcXHRcXHRcXHRcXHRtYXhfZnJtX2xlbiAtPSBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTktXFx0XFx0XFx0XFx0bWF4X2ZybV9sZW4gPSBtYXhfdChpbnQsIG1heF9mcm1fbGVuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YmYuYz0xMTk9c3RhdGljIHU2NCBwc2NoZWRfbnNfdDJsKGNvbnN0IHN0cnVjdCBwc2NoZWRfcmF0ZWNmZyAqcixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGJmLmMtMTMzLVxcbm5ldC9zY2hlZC9zY2hfdGJmLmM6MTM0OlxcdGlmIChsZW4gXFx1MDAzZSByLVxcdTAwM2VvdmVyaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RiZi5jOjEzNTpcXHRcXHRsZW4gLT0gci1cXHUwMDNlb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF90YmYuYy0xMzYtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0Mjo0MC4zMDQ3MjU0ODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1MjM5NTQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93KipcblxuT2theSwgc28gYG92ZXJoZWFkYCBpcyBkZWZpbmVkIGFzIGFuIGludGVnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBiZWNvbWVzIGV4Y2Vzc2l2ZWx5IGxhcmdlLCB0aGVyZSdzIGEgcmVhbCByaXNrIG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgaGFwcGVuaW5nIHJpZ2h0IGhlcmU6IGBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbiArIHN0YWItXHUwMDNlc3pvcHRzLm92ZXJoZWFkO2AgaW5zaWRlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBsaW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dCBhbmQgd2hhdCdzIGdvaW5nIG9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnN0cmFpbnRzIGFuZCBjYWxjdWxhdGlvbnMgaW52b2x2ZWQuIEkgbmVlZCB0byBzZWUgaG93IGBwa3RfbGVuYCBpcyB1c2VkIGRvd25zdHJlYW0gdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoaXMgb3ZlcmZsb3cgb2NjdXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6NTEuODI4NjgzNTc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHRpZiAobmxhX3B1dChza2IsIFRDQV9TVEFCX0JBU0UsIHNpemVvZihzdGFiLVxcdTAwM2Vzem9wdHMpLCBcXHUwMDI2c3RhYi1cXHUwMDNlc3pvcHRzKSlcXG4gNTg2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1ODc6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gNTkwOlxcdFxcbiA1OTE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA1OTI6XFx0XFx0cmV0dXJuIC0xO1xcbiA1OTM6XFx0fVxcbiA1OTQ6XFx0XFxuIDU5NTpcXHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTk2OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4gNTk3OlxcdHtcXG4gNTk4OlxcdFxcdGludCBwa3RfbGVuLCBzbG90O1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRwa3RfbGVuID0gc2tiLVxcdTAwM2VsZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxuIDYwMTpcXHRcXHRpZiAodW5saWtlbHkoIXN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZSkpXFxuIDYwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0c2xvdCA9IHBrdF9sZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtcXG4gNjA1OlxcdFxcdGlmICh1bmxpa2VseShzbG90IFxcdTAwM2MgMCkpXFxuIDYwNjpcXHRcXHRcXHRzbG90ID0gMDtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0c2xvdCBcXHUwMDNlXFx1MDAzZT0gc3RhYi1cXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xcbiA2MDk6XFx0XFx0aWYgKGxpa2VseShzbG90IFxcdTAwM2Mgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4gNjEwOlxcdFxcdFxcdHBrdF9sZW4gPSBzdGFiLVxcdTAwM2VkYXRhW3Nsb3RdO1xcbiA2MTE6XFx0XFx0ZWxzZVxcbiA2MTI6XFx0XFx0XFx0cGt0X2xlbiA9IHN0YWItXFx1MDAzZWRhdGFbc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxcbiA2MTM6XFx0XFx0XFx0XFx0XFx0KHNsb3QgLyBzdGFiLVxcdTAwM2Vzem9wdHMudHNpemUpICtcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdHN0YWItXFx1MDAzZWRhdGFbc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZV07XFxuIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gNjE3OlxcdG91dDpcXG4gNjE4OlxcdFxcdGlmICh1bmxpa2VseShwa3RfbGVuIFxcdTAwM2MgMSkpXFxuIDYxOTpcXHRcXHRcXHRwa3RfbGVuID0gMTtcXG4gNjIwOlxcdFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gNjI0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6NTEuODI4OTAyNjE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzMyODQxMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIElmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGUgaW5pdGlhbCBjYWxjdWxhdGlvbiBvZiBgcGt0X2xlbmAgY2FuIGJlY29tZSBlbm9ybW91cywgb3IgZXZlbiBuZWdhdGl2ZS4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuIFRoZSBjb2RlIHRoZW4gY2FsY3VsYXRlcyBgc2xvdGAgYmFzZWQgb24gYHBrdF9sZW5gIGFuZCBjZWxsIGFsaWdubWVudC4gQSB2ZXJ5IGxhcmdlIGBwa3RfbGVuYCBsZWFkcyB0byBhIGxhcmdlIGBzbG90YCwgd2hpY2ggaXMgdGhlbiByaWdodC1zaGlmdGVkLlxuXG5JIHNlZSBhIGNoZWNrIHRvIGVuc3VyZSBgc2xvdGAgZG9lc24ndCBleGNlZWQgYHN0YWItXHUwMDNlc3pvcHRzLnRzaXplYCwgYW5kIGlmIGl0IGRvZXMsIHRoZXJlJ3MgYSBzcGVjaWZpYyBjYWxjdWxhdGlvbiBmb3IgYHBrdF9sZW5gIHdpdGhpbiB0aGF0IGNvbmRpdGlvbiB1c2luZyB0aGUgbW9kdWxvIG9wZXJhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgdGhhdCBtb2R1bG8gb3BlcmF0aW9uIGxvb2tzIHNhZmUgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gQnV0IHRoZW4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGBzbG90YCBiZWluZyBuZWdhdGl2ZS4gVGhlIGNvZGUgaW5jbHVkZXMgYSBjaGVjayBhbmQgY2xhbXBzIGBzbG90YCB0byAwIGlmIGl0J3MgbmVnYXRpdmUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoYXQgb2NjdXJzLlxuXG5UaGUga2V5IGluc2lnaHQgaXMgdGhlIGludGVnZXIgb3ZlcmZsb3cuIElmIGBwa3RfbGVuYCBpcyBsYXJnZSBlbm91Z2ggYWZ0ZXIgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gYXMgYW4gYGludGAsIHdoZW4gd2UgYWRkIGBjZWxsX2FsaWduYCB0byBpdCwgdGhlIHZhbHVlIGNvdWxkIHdyYXAgYXJvdW5kLCByZXN1bHRpbmcgaW4gYSBuZWdhdGl2ZSBgc2xvdGAuIFRoZSBjb2RlIGhhbmRsZXMgbmVnYXRpdmUgYHNsb3RgIHRocm91Z2ggY2xhbXBpbmcuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgY29uc2lkZXJzIGEgc2NlbmFyaW8uIElmIGBvdmVyaGVhZGAgaXMgZWZmZWN0aXZlbHkgYElOVF9NQVhgLCBhbmQgYHNrYi1cdTAwM2VsZW5gIGlzIGFyb3VuZCAxNTAwLCBgcGt0X2xlbmAgd2lsbCB3cmFwIGFyb3VuZCB0byBuZWdhdGl2ZS4gQW5kIHRoZXJlZm9yZSBgc2xvdGAgY2FuIGJlIG5lZ2F0aXZlIGFuZCBiZSBjbGFtcGVkIHRvIDAuXG5cbkhvd2V2ZXIsIGEgZGlmZmVyZW50IHNjZW5hcmlvIGFsc28gZW1lcmdlczogd2hhdCBpZiBgb3ZlcmhlYWRgIGlzIGp1c3Qgc2xpZ2h0bHkgbGVzcyB0aGFuIGBJTlRfTUFYYCwgc28gdGhhdCB0aGUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBpbml0aWFsbHksIGFuZCBgcGt0X2xlbmAgaXMgc3RpbGwgYSBwb3NpdGl2ZSBidXQgdmVyeSBsYXJnZSBpbnRlZ2VyPyBUaGVuIGBzbG90YCB3b3VsZCBhbHNvIGJlIGEgbGFyZ2UgcG9zaXRpdmUgbnVtYmVyLiBXZSBjb3VsZCBzdGlsbCBydW4gaW50byBwcm9ibGVtcyBsYXRlci5cblxuV2hlbiBgc2xvdCAvIHRzaXplYCBpcyBsYXJnZSwgaXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93IHdoZW4gYHBrdF9sZW5gIGlzIGNhbGN1bGF0ZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYHBrdF9sZW5gIGNhbiBiZSBsYXJnZSBlbm91Z2ggdG8gb3ZlcmZsb3cgZHVyaW5nIHRoZSBgcGt0X2xlbiBcdTAwM2NcdTAwM2M9IHN0YWItXHUwMDNlc3pvcHRzLnNpemVfbG9nO2Agb3BlcmF0aW9uLiBXaGljaCBjb3VsZCByZXN1bHQgaW4gc3RvcmluZyBhbiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBpbiBgcWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbmAuXG5cbkknbSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgdHJpY2t5IG9uZSB0byBleHBsb2l0LCBidXQgdGhlIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhhdCBvcmlnaW5hbCBjb21taXQgb3IgcGF0Y2ggZGVzY3JpcHRpb24uIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCB0byBjbGVhciB0aGlzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjA0LjE2MTc0Njg2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDU1MDk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uLTkxLSAgICAgICAgXFxcImlkXFxcIjogXFxcImQxZTJcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uOjkyOiAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiUmVqZWN0IERSUiBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24tOTMtICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjA1Ljc1NjMwMjQzMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDIzMjIzNDI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2sqKlxuXG5Pa2F5LCBzbyBJJ20gc3VzcGVjdGluZyBzb21lIGtpbmQgb2Ygb3ZlcmhlYWQgaXNzdWUuIFRoZSBuYW1lIGBTVEFCX09WRVJIRUFEX01BWGAga2VlcHMgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgaGVhZCBhcyBhIHBvdGVudGlhbCBjdWxwcml0LiBJdCBzdWdnZXN0cyBhIG1heGltdW0gYWxsb3dlZCB2YWx1ZSByZWxhdGVkIHRvIHNvbWV0aGluZyDigJMgc3RhYiwgd2hhdGV2ZXIgdGhhdCByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGNvbnN0YW50IHdhcyBpbnRyb2R1Y2VkLCBhbnkgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBhbnkgYXNzb2NpYXRlZCBjb21taXQgbWVzc2FnZXMuIFRob3NlIGNvbW1pdHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmNvdmVyaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2UuIEknbSBnb2luZyB0byBydW4gYSBgZ2l0IGxvZ2Agc2VhcmNoIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYFNUQUJfT1ZFUkhFQURfTUFYYC4gSG9wZWZ1bGx5LCB0aGUgaGlzdG9yeSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGl0IHdhcyBkZXNpZ25lZCB0byBhZGRyZXNzLCBhbmQgdWx0aW1hdGVseSBoZWxwIG1lIGRldGVybWluZSBpZiBpdCdzIGNvbnRyaWJ1dGluZyB0byB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIGRpYWdub3NlLiBJJ20gaG9waW5nIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSB0aGUgY29kZSBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCwgb3IgbWF5YmUgZXZlbiBsaW5rZWQgdG8gc29tZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjI5Ljk4ODUzOTEyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODM3NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVEFCX09WRVJIRUFEX01BWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0xNC0jZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXFx0MzBcXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDoxNTojZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXFx0NjU1MzVcXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0xNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDk2PXN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01NDYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1NDc6XFx0aWYgKGFicyhzLVxcdTAwM2VvdmVyaGVhZCkgXFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTQ4LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MzozMS40NTY5MjAzMTRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwOTQ3MzE1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVEFCIE92ZXJoZWFkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTVEFCX09WRVJIRUFEX01BWGAgYW5kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHMtXHUwMDNlb3ZlcmhlYWRgIGV4Y2VlZHMgdGhpcyBsaW1pdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgcmVzdHJpY3Rpb24/IFdoYXQncyB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiBhIGxhcmdlIGBvdmVyaGVhZGAgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjb2RlIGNsZWFybHkgYWxsb3dzIGZvciBpdCB0byBiZSBxdWl0ZSBsYXJnZSB1cCB0byB0aGlzIHBvaW50LCBzbyBpdCBpcyBwcm9iYWJseSBub3QgYSBwZXJmb3JtYW5jZSBpc3N1ZS5cblxuTGV0J3MgZGlnIGludG8gdGhlIGV4aXN0aW5nIHFkaXNjcyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBJJ2xsIHN0YXJ0IHdpdGggYGRycmAgYW5kIGBldHNgLCBzaW5jZSB0aGV5IGFyZSBtZW50aW9uZWQuIEkgc2VlIGluIGBkcnIuanNvbmAgdGhleSBhcmUgdGVzdGluZyB3aXRoIGEgcmF0aGVyIGV4dHJlbWUgb3ZlcmhlYWQgdmFsdWU6IGAkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRycmAuIFRoYXQgdmFsdWUsIGAyMTQ3NDgzMDAwYCwgaXMgaGV4IGAweDdGRkZGRDc4YC4gVGhlIHNhbWUgZXh0cmVtZSB2YWx1ZSBpcyBhbHNvIGJlaW5nIHVzZWQgaW4gdGhlIGBldHNgIHRlc3QgaW4gYGV0cy5qc29uYDogYCRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDFgLlxuXG5TbyBjbGVhcmx5LCB0aGVzZSBleHRyZW1lIHZhbHVlcyBhcmUgYmVpbmcgKnRlc3RlZCouIFdoeSB3b3VsZCB0aGV5IHRlc3Qgc3VjaCBsYXJnZSB2YWx1ZXM/IElzIGl0IGludGVuZGVkIG9yIGFjY2lkZW50YWw/IEFuZCBpZiBpbnRlbmRlZCwgd2hhdCdzIHRoZSB1c2UgY2FzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBzZWVtaW5nbHkgYXJiaXRyYXJ5IGxpbWl0IGlzIGJlaW5nIGltcG9zZWQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBgbmV0L3NjaGVkL3NjaF9kcnIuY2AgY29kZSB0byBzZWUgaG93IGBvdmVyaGVhZGAgaXMgdXNlZCBpbiB0aGF0IHFkaXNjIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDM6NDYuNTUxNjU5NTI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVxcdTAwM2VxZGlzYywgdG9fZnJlZSk7XFxuIDM1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IE5FVF9YTUlUX1NVQ0NFU1MpKSB7XFxuIDM1NDpcXHRcXHRcXHRpZiAobmV0X3htaXRfZHJvcF9jb3VudChlcnIpKSB7XFxuIDM1NTpcXHRcXHRcXHRcXHRjbC1cXHUwMDNlcXN0YXRzLmRyb3BzKys7XFxuIDM1NjpcXHRcXHRcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbiAzNTc6XFx0XFx0XFx0fVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzU5OlxcdFxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0aWYgKCFjbF9pc19hY3RpdmUoY2wpKSB7XFxuIDM2MjpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjbC1cXHUwMDNlYWxpc3QsIFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUpO1xcbiAzNjM6XFx0XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlZGVmaWNpdCwgUkVBRF9PTkNFKGNsLVxcdTAwM2VxdWFudHVtKSk7XFxuIDM2NDpcXHRcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIGxlbik7XFxuIDM2NzpcXHRcXHRxZGlzY19xbGVuX2luYyhzY2gpO1xcbiAzNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzY5OlxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpkcnJfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gMzcyOlxcdHtcXG4gMzczOlxcdFxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG4gMzc1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM3NjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuO1xcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cS1cXHUwMDNlYWN0aXZlKSlcXG4gMzc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzODA6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMzgxOlxcdFxcdFxcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2cS1cXHUwMDNlYWN0aXZlLCBzdHJ1Y3QgZHJyX2NsYXNzLCBhbGlzdCk7XFxuIDM4MjpcXHRcXHRcXHRza2IgPSBjbC1cXHUwMDNlcWRpc2MtXFx1MDAzZW9wcy1cXHUwMDNlcGVlayhjbC1cXHUwMDNlcWRpc2MpO1xcbiAzODM6XFx0XFx0XFx0aWYgKHNrYiA9PSBOVUxMKSB7XFxuIDM4NDpcXHRcXHRcXHRcXHRxZGlzY193YXJuX25vbndjKF9fZnVuY19fLCBjbC1cXHUwMDNlcWRpc2MpO1xcbiAzODU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM4NjpcXHRcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdFxcdGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTtcXG4gMzg5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gY2wtXFx1MDAzZWRlZmljaXQpIHtcXG4gMzkwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoY2wtXFx1MDAzZWRlZmljaXQsIGNsLVxcdTAwM2VkZWZpY2l0IC0gbGVuKTtcXG4gMzkxOlxcdFxcdFxcdFxcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDM5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM5NDpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdFxcdGJzdGF0c191cGRhdGUoXFx1MDAyNmNsLVxcdTAwM2Vic3RhdHMsIHNrYik7XFxuIDM5ODpcXHRcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gMzk5OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjQ2LjU1MTc0NTQ0OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyMjAzNzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlIGluIGRycl9kZXF1ZXVlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHJyX2RlcXVldWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoaXMgbGluZTogYGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTtgLiBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyByZXR1cm5pbmcgdGhlIHBhY2tldCBsZW5ndGggdXNpbmcgYHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW5gLiBOb3csIGlmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGlzIGBsZW5gIGNhbiBwb3RlbnRpYWxseSBiZWNvbWUgcXVpdGUgbGFyZ2UuXG5cblRoYXQncyB3aGVuIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWwgYGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KWAgY291bGQgZmFpbCBiZWNhdXNlIGBsZW5gIGlzIHRvbyBsYXJnZSBvciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgbGVuYCBzb21laG93IGJlY2FtZSBuZWdhdGl2ZT8gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBoYXN0eSwgYXMgYGxlbmAgaXMgYW4gYHVuc2lnbmVkIGludGAuXG5cbkhvbGQgb24uIFNpbmNlIGBxZGlzY19wa3RfbGVuKHNrYilgIGlzIGFsc28gcmV0dXJuaW5nIGFuIGB1bnNpZ25lZCBpbnRgIHRoZXJlJ3Mgbm8gd2F5IGZvciBgbGVuYCB0byBhY3R1YWxseSBiZWNvbWUgbmVnYXRpdmUsIGl0IGNvdWxkIGp1c3Qgb3ZlcmZsb3cuIFRoYXQgbWVhbnMgdGhlcmUncyBubyByaXNrIG9mIGEgc3VidHJhY3Rpb24gcmVzdWx0aW5nIGluIGFuIGluY3JlYXNlZCBgZGVmaWNpdGAgdmFsdWUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcyB0aG91Z2gsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgcWRpc2NfcGt0X2xlbmAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjU0LjY1Mzk1MTkyMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwOTE3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmg9Mjk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BlZWtfbGVuKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgtMzA2LVxcdH1cXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDozMDc6XFx0bGVuID0gcWRpc2NfcGt0X2xlbihza2IpO1xcbmluY2x1ZGUvbmV0L3BrdF9zY2hlZC5oLTMwOC1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9ODkyPXN0YXRpYyBpbmxpbmUgYm9vbCBxZGlzY190eF9pc19ub29wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkwMy1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjkwNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3RfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MDUte1xcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05NjU9c3RhdGljIGlubGluZSB2b2lkIGJzdGF0c191cGRhdGUoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyAqYnN0YXRzLFxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05Njcte1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTY4OlxcdF9ic3RhdHNfdXBkYXRlKGJzdGF0cywgcWRpc2NfcGt0X2xlbihza2IpLCBxZGlzY19wa3Rfc2Vncyhza2IpKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk2OS19XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTk4OD1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfcXN0YXRzX2JhY2tsb2dfZGVjKHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTAte1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTkxOlxcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTItfVxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05OTQ9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19jcHVfYmFja2xvZ19kZWMoc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5Ni17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5OTc6XFx0dGhpc19jcHVfc3ViKHNjaC1cXHUwMDNlY3B1X3FzdGF0cy1cXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5OC19XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEwMDU9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAwNy17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDA4OlxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMDA5LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9MTAxMT1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfcXN0YXRzX2NwdV9iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxMy17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDE0OlxcdHRoaXNfY3B1X2FkZChzY2gtXFx1MDAzZWNwdV9xc3RhdHMtXFx1MDAzZWJhY2tsb2csIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMDE1LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9MTI2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3My1cXHRpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkge1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6MTI3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDM6NTQuNzA2MDQ4NDM3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTEwODM0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgcWRpc2NfcGt0X2xlbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcGFja2V0IGxlbmd0aHMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBxdWV1aW5nIGRpc2NpcGxpbmUgY29udGV4dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBjb3JlIGRlZmluaXRpb25zLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nLCBcIldoZXJlIHdvdWxkIHRoZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9uIG9mIGBxZGlzY19wa3RfbGVuYCByZXNpZGU/IEFoLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIHNjaGVkdWxpbmcgaGVhZGVycywgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIHNvdW5kcyBsaWtlIHRoZSByaWdodCBzcG90LiBMZXQgbWUgcHVsbCB0aGF0IHVwIGFuZCBjb25maXJtIG15IGludHVpdGlvbi5cIiBUaW1lIHRvIGdldCB0byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaGFzIHRvIHNheS4gSSdtIGhvcGluZyBpdCdzIHdlbGwtZG9jdW1lbnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDowMi40OTcxMzQ5ODRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdFxcdH1cXG4gOTAxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA5MDI6XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3RfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDkwNTpcXHR7XFxuIDkwNjpcXHRcXHRyZXR1cm4gcWRpc2Nfc2tiX2NiKHNrYiktXFx1MDAzZXBrdF9sZW47XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9zZWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDkxMDpcXHR7XFxuIDkxMTpcXHRcXHR1MzIgcGt0X3NlZ3MgPSBxZGlzY19za2JfY2Ioc2tiKS1cXHUwMDNlcGt0X3NlZ3M7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocGt0X3NlZ3MgIT1cXG4gOTE0OlxcdFxcdFxcdFxcdChza2JfaXNfZ3NvKHNrYikgPyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzIDogMSkpO1xcbiA5MTU6XFx0XFx0cmV0dXJuIHBrdF9zZWdzO1xcbiA5MTY6XFx0fVxcbiA5MTc6XFx0XFxuIDkxODpcXHQvKiBhZGRpdGlvbmFsIHFkaXNjIHhtaXQgZmxhZ3MgKE5FVF9YTUlUX01BU0sgaW4gbGludXgvbmV0ZGV2aWNlLmgpICovXFxuIDkxOTpcXHRlbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDowMi40OTcyNzM2NTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0ODk4MTUxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIERSUiBRdWV1ZWluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHFkaXNjX3BrdF9sZW5gIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIERSUiAoRGVmaWNpdCBSb3VuZCBSb2JpbikgcXVldWVpbmcgZGlzY2lwbGluZS4gYHFkaXNjX3BrdF9sZW5gIHVsdGltYXRlbHkgcmV0dXJucyBhbiBgdW5zaWduZWQgaW50YCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gVGhlIGNydXggb2YgbXkgY29uY2VybiBpcyBob3cgcGFja2V0IGxlbmd0aCBpcyBjYWxjdWxhdGVkIGFuZCB1c2VkIGluIGBkcnJfZGVxdWV1ZWAuXG5cbkknbSBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYWRkcyB0aGUgYHNrYi1cdTAwM2VsZW5gIChsaWtlbHkgYXJvdW5kIDE1MDAgYnl0ZXMpIHRvIGBzdGFiLVx1MDAzZXN6b3B0cy5vdmVyaGVhZGAuIExldCdzIHNheSBgb3ZlcmhlYWRgIGlzIGEgbGFyZ2UgbnVtYmVyLCBzcGVjaWZpY2FsbHkgYDIxNDc0ODMwMDBgICh3aGljaCBpcyBgMHg3RkZGRkQ3OGApLiAgSW4gdGhpcyBzY2VuYXJpbywgYHBrdF9sZW5gIChhbiBgaW50YCkgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGAyMTQ3NDg0NTAwYCwgYSAqcG9zaXRpdmUqIG51bWJlciwgYW5kIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcGFydC5cblxuVGhlIGNhbGN1bGF0aW9uIHByb2NlZWRzIHdpdGggYHNsb3QgPSBwa3RfbGVuICsgc3RhYi1cdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtgLiAgV2l0aCBgY2VsbF9hbGlnbmAgYXQgMCwgYHNsb3RgIGlzIGFsc28gYDIxNDc0ODQ1MDBgLiBUaGVuLCBgc2xvdGAgaXMgcmlnaHQtc2hpZnRlZCBieSBgY2VsbF9sb2dgLiAgSWYgYGNlbGxfbG9nYCBpcyAwLCBgc2xvdGAgcmVtYWlucyB1bmNoYW5nZWQuICBJZiBgdHNpemVgIGlzIDAsIHRoZSBjb2RlIGp1bXBzIHRvIGBvdXQ6YC5cblxuQXQgYG91dDpgLCBpZiBgcGt0X2xlbmAgaXMgbGVzcyB0aGFuIDEsIGl0J3Mgc2V0IHRvIDEuIEhvd2V2ZXIsIGluIG91ciBleGFtcGxlLCAgYHBrdF9sZW5gIGlzIGAyMTQ3NDg0NTAwYCwgc28gdGhpcyBjaGVjayBkb2Vzbid0IHRyaWdnZXIuIFRoZSBjcml0aWNhbCBsaW5lIGlzIHRoZW4gYHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO2AuICBUaGlzIHNldHMgdGhlIHBhY2tldCBsZW5ndGggaW4gdGhlIFNLQiBjb250cm9sIGJsb2NrIHRvIG91ciBsYXJnZSBwb3NpdGl2ZSBudW1iZXIsIGAyMTQ3NDg0NTAwYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBpbiBgZHJyX2RlcXVldWVgLCBpdCBmZXRjaGVzIHRoZSBwYWNrZXQgbGVuZ3RoIHVzaW5nIGBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7YC4gU28sIGBsZW5gIHdpbGwgYmUgYDIxNDc0ODQ1MDBgLiBUaGlzIHZhbHVlIGlzIHRoZW4gY29tcGFyZWQgdG8gYGNsLVx1MDAzZWRlZmljaXRgLiBOb3csIGBjbC1cdTAwM2VkZWZpY2l0YCBpcyBhIGB1MzJgLCBhbmQgaXMgdXN1YWxseSBhcm91bmQgYSBxdWFudHVtLCBsaWtlIDE1MDAgYnl0ZXMuIFRoaXMgbWVhbnMgb3VyIGNhbGN1bGF0ZWQgYGxlbmAgd2lsbCAqYWxtb3N0IGFsd2F5cyogYmUgbGFyZ2VyIHRoYW4gYGNsLVx1MDAzZWRlZmljaXRgLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnRseSBzby4gVGhlIGV4cHJlc3Npb24gYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgaW4gYWxtb3N0IGV2ZXJ5IGNhc2UuIFNvLCB0aGUgcGFja2V0IHdvbid0IGJlIGRlcXVldWVkLlxuXG5UaGlzIGlzIHdoZXJlIHRoaW5ncyBhcmUgdHJpY2t5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgaWYgaXQgbGVhZHMgdG8gdGhlIHF1ZXVlIGJlaW5nIGJsb2NrZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGxhcmdlIG92ZXJoZWFkIG1heSBiZSBjYXVzaW5nIHRoZSBxdWV1ZSB0byBzdGFydmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MTQuOTg3MDkxNDU1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoY2wtXFx1MDAzZWRlZmljaXQsIGNsLVxcdTAwM2VkZWZpY2l0IC0gbGVuKTtcXG4gMzkxOlxcdFxcdFxcdFxcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDM5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM5NDpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdFxcdGJzdGF0c191cGRhdGUoXFx1MDAyNmNsLVxcdTAwM2Vic3RhdHMsIHNrYik7XFxuIDM5ODpcXHRcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gMzk5OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuIDQwMDpcXHRcXHRcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDAyOlxcdFxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlZGVmaWNpdCwgY2wtXFx1MDAzZWRlZmljaXQgKyBSRUFEX09OQ0UoY2wtXFx1MDAzZXF1YW50dW0pKTtcXG4gNDA1OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZjbC1cXHUwMDNlYWxpc3QsIFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUpO1xcbiA0MDY6XFx0XFx0fVxcbiA0MDc6XFx0b3V0OlxcbiA0MDg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQwOTpcXHR9XFxuIDQxMDpcXHRcXG4gNDExOlxcdHN0YXRpYyBpbnQgZHJyX2luaXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gNDEyOlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gNDE1OlxcdFxcdGludCBlcnI7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdGVyciA9IHRjZl9ibG9ja19nZXQoXFx1MDAyNnEtXFx1MDAzZWJsb2NrLCBcXHUwMDI2cS1cXHUwMDNlZmlsdGVyX2xpc3QsIHNjaCwgZXh0YWNrKTtcXG4gNDE4OlxcdFxcdGlmIChlcnIpXFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjA6XFx0XFx0ZXJyID0gcWRpc2NfY2xhc3NfaGFzaF9pbml0KFxcdTAwMjZxLVxcdTAwM2VjbGhhc2gpO1xcbiA0MjE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDQyMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSk7XFxuIDQyNDpcXHRcXHRyZXR1cm4gMDtcXG4gNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0c3RhdGljIHZvaWQgZHJyX3Jlc2V0X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiA0Mjg6XFx0e1xcbiA0Mjk6XFx0XFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MTQuOTg3MTc3NzU1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTcxODIzNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRSUiBTY2hlZHVsaW5nIEJ1ZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRFJSIHNjaGVkdWxlciBjb2RlLCBhbmQgSSBzZWUgdGhpcyBsb29wIGNvbmRpdGlvbjogYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiBgbGVuYCAodGhlIHBhY2tldCBsZW5ndGgpIGlzIHNpZ25pZmljYW50bHkgbGFyZ2VyIHRoYW4gdGhlIGluaXRpYWwgYGNsLVx1MDAzZWRlZmljaXRgLCB0aGUgY29kZSBhZGRzIGBjbC1cdTAwM2VxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBtb3ZlcyB0aGUgY2xhc3MgdG8gdGhlIHRhaWwgb2YgdGhlIGFjdGl2ZSBxdWV1ZS4gU2VlbXMgcmVhc29uYWJsZSwgYnV0IGlmIHRoZXJlJ3Mgb25seSBvbmUgYWN0aXZlIGNsYXNzLCB0aGlzIGNvdWxkIGxvb3AgaW5kZWZpbml0ZWx5LlxuXG5UaGVuIHRoZSBhbGFybSBiZWxscyBzdGFydGVkIHJpbmdpbmchIEkgcmVhbGl6ZWQgYGNsLVx1MDAzZWRlZmljaXRgIGlzIGEgYHUzMmAuIE9rYXksIHNvIGl0IHdpbGwgb3ZlcmZsb3cuIEJ1dCB3aWxsIHRoYXQgKnNvbHZlKiB0aGUgcHJvYmxlbT8gSWYgYGxlbmAgaXMgYSBsYXJnZSBudW1iZXIsIGxpa2UgYDIxNDc0ODQ1MDBgLCB0aGUgbG9vcCB3aWxsIGl0ZXJhdGUgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgdGltZXMsIGxpa2UgMS40IG1pbGxpb24uIFRoYXQncyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBidXQgbm90IGFuICppbmZpbml0ZSogbG9vcCwgYmVjYXVzZSB0aGUgb3ZlcmZsb3cgd2lsbCBldmVudHVhbGx5IG1ha2UgdGhlIGBkZWZpY2l0YCBzbWFsbGVyIHRoYW4gYGxlbmAgYWdhaW4uICBUaGVuIEkgcmVtZW1iZXJlZCwgdGhpcyB3aG9sZSB0aGluZyBpcyBwcm90ZWN0ZWQgYnkgYSBzcGlubG9jayEgVGhlIGxvb3Agd291bGQgY29uc3VtZSBzaWduaWZpY2FudCBDUFUgdGltZSB3aGlsZSBpdCBpcyBydW5uaW5nLlxuXG5Pa2F5LCBsZXQncyBidW1wIGl0IHVwLiBXaGF0IGhhcHBlbnMgaWYgYGxlbmAgaXMgKnJlYWxseSogbGFyZ2UsIGxpa2UgY2xvc2UgdG8gdGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYDB4RkZGRkZGRkZgKT8gVGhlIGBkZWZpY2l0YCB3aWxsIHN0aWxsIG92ZXJmbG93LCBidXQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHdvdWxkIGJlIGV2ZW4gaGlnaGVyLCBwZXJoYXBzIGluIHRoZSBtaWxsaW9ucywgYnV0IHN0aWxsIG5vdCBpbmZpbml0ZS4gQnV0IHRoZW4gSSBzYXcgaXQhIElmIGBsZW5gIGlzIHZlcnkgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIGFuZCBgZGVmaWNpdGAgaW5jcmVhc2VzIGJ5IGBxdWFudHVtYCBlYWNoIHRpbWUsIGBkZWZpY2l0YCB3aWxsIE5FVkVSIHJlYWNoIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gIGJlZm9yZSBvdmVyZmxvd2luZy4gTW9yZSBwcmVjaXNlbHksIGZvciBgbGVuYCB0byBldmVudHVhbGx5IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYGRlZmljaXRgLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2R1bHVzIHdoZW4gZGl2aWRlZCBieSBgcXVhbnR1bWAhXG5cbklmIGBsZW5gIGlzIGAweEZGRkZGRkZGYCwgdGhlIGBkZWZpY2l0YCB3aWxsIHdyYXAgYXJvdW5kIGJlZm9yZSBpdCByZWFjaGVzIGAweEZGRkZGRkZGYCB1bmxlc3MgYGRlZmljaXRgIGlzIGV4YWN0bHkgYDB4RkZGRkZGRkZgISBJZiB0aGUgYHF1YW50dW1gIGlzLCBzYXksIDE1MDAsIGAweEZGRkZGRkZGICUgMTUwMCAhPSAwYCBzbyB0aGUgd3JhcCBhcm91bmQgaGFwcGVucy4gVGhhdCBtZWFucyB0aGlzIGxvb3AgKndpbGwqIHJ1biBmb3JldmVyISBUaGUgYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGJlIHRydWUsIGFuZCB0aGUgY29kZSB3aWxsIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiBgZHJyX2RlcXVldWVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjbC1cdTAwM2VkZWZpY2l0YCBpcywgaW4gZmFjdCwgYSBgdTMyYCwgYnV0IGlmIHRoYXQncyB0aGUgY2FzZSwgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc0OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDoyOS4xNTkwMDQ0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODA4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRycl9jbGFzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmMtMTctXFxubmV0L3NjaGVkL3NjaF9kcnIuYzoxODpzdHJ1Y3QgZHJyX2NsYXNzIHtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5LVxcdHN0cnVjdCBRZGlzY19jbGFzc19jb21tb25cXHRjb21tb247XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTMxPXN0cnVjdCBkcnJfc2NoZWQge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNy1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM4OnN0YXRpYyBib29sIGNsX2lzX2FjdGl2ZShzdHJ1Y3QgZHJyX2NsYXNzICpjbClcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDItXFxubmV0L3NjaGVkL3NjaF9kcnIuYzo0MzpzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2ZpbmRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy01MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjUxOlxcdHJldHVybiBjb250YWluZXJfb2YoY2xjLCBzdHJ1Y3QgZHJyX2NsYXNzLCBjb21tb24pO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTItfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz01OD1zdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTYyLVxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9kcnIuYzo2MzpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopKmFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTY0LVxcdHN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTEwNS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjEwNjpcXHRjbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkcnJfY2xhc3MpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTA3LVxcdGlmIChjbCA9PSBOVUxMKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNDItXFxubmV0L3NjaGVkL3NjaF9kcnIuYzoxNDM6c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBkcnJfY2xhc3MgKmNsKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MTUwPXN0YXRpYyBpbnQgZHJyX2RlbGV0ZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1My1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTU0OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNTUtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkcnJfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xOTIte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTkzOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gZHJyX2ZpbmRfY2xhc3Moc2NoLCBjbGFzc2lkKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjAxPXN0YXRpYyB2b2lkIGRycl91bmJpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIwMi17XFxubmV0L3NjaGVkL3NjaF9kcnIuYzoyMDM6XFx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIwNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjA4PXN0YXRpYyBpbnQgZHJyX2dyYWZ0X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjExLXtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIxMjpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjEzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMjU9c3RhdGljIHN0cnVjdCBRZGlzYyAqZHJyX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI2LXtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIyNzpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMzI9c3RhdGljIHZvaWQgZHJyX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqY3NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzMy17XFxubmV0L3NjaGVkL3NjaF9kcnIuYzoyMzQ6XFx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzNS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjM5PXN0YXRpYyBpbnQgZHJyX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNDEte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjQyOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNDMtXFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjYxPXN0YXRpYyBpbnQgZHJyX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjMte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjY0OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjUtXFx0X191MzIgcWxlbiA9IHFkaXNjX3FsZW5fc3VtKGNsLVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTI4MT1zdGF0aWMgdm9pZCBkcnJfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yODMtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI4NDpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI4NS1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjk3LVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mjk4OnN0YXRpYyBzdHJ1Y3QgZHJyX2NsYXNzICpkcnJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTktXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zMDEtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjMwMjpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMwMy1cXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMyNy0jZW5kaWZcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjMyODpcXHRcXHRjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopcmVzLmNsYXNzO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzI5LVxcdFxcdGlmIChjbCA9PSBOVUxMKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0zMzY9c3RhdGljIGludCBkcnJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzQwLVxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9kcnIuYzozNDE6XFx0c3RydWN0IGRycl9jbGFzcyAqY2w7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNDItXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTM3MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNzMtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM3NDpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM3NS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zODAtXFx0d2hpbGUgKDEpIHtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM4MTpcXHRcXHRjbCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzgyLVxcdFxcdHNrYiA9IGNsLVxcdTAwM2VxZGlzYy1cXHUwMDNlb3BzLVxcdTAwM2VwZWVrKGNsLVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTQyNz1zdGF0aWMgdm9pZCBkcnJfcmVzZXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTQyOS1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDMwOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDMxLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz00NDI9c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTQ0NC1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDQ1OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQ2LVxcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDoyOS4yMDQ4ODc2NzRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NDM4NzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGRycl9jbGFzc2AgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHN0cnVjdCBkcnJfY2xhc3NgIGRlZmluaXRpb24uIEknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaXRzIG1lbWJlcnMuIEknbSBnb2luZyB0byB3YW50IHRvIGtub3cgdGhlIGZpZWxkcyB0aGF0IGNvbnRyb2wgdGhlIERSUiAoRGVmaWNpdCBSb3VuZCBSb2Jpbikgc2NoZWR1bGluZyBhbmQgd2hhdCBvdGhlciBkYXRhIGl0IG1pZ2h0IGNvbnRhaW4uIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LCBjcmVkaXQgYWxsb2NhdGlvbiwgYW55IHBlci1jbGFzcyBzdGF0ZSwgcGVyaGFwcyBzb21lIHRpbWVzdGFtcC1yZWxhdGVkIGVsZW1lbnRzLCBvciBhbnl0aGluZyB0aGF0J3MgaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBzY2hlZHVsaW5nIGRlY2lzaW9uLW1ha2luZy4gSSB3aWxsIGRlZmluaXRlbHkgbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbTsgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBxdWV1ZXMgb3IgZmxvdyBkZXNjcmlwdG9ycyB3aXRoaW4gdGhpcyBgZHJyX2NsYXNzYC4gSXQgaXMgdml0YWwgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBoYW5kbGUgdGhlIGRlZmljaXQgYW5kIGNyZWRpdC4gSSBhbHNvIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMsIGxpa2UgY2FjaGUtbGluZSBhbGlnbm1lbnQgb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDozNS42ODkyNzY4N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2Ryci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0c3RydWN0IGRycl9jbGFzcyB7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uXFx0Y29tbW9uO1xcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHRzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19zeW5jXFx0XFx0YnN0YXRzO1xcbiAgMjI6XFx0XFx0c3RydWN0IGduZXRfc3RhdHNfcXVldWVcXHRcXHRxc3RhdHM7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgbmV0X3JhdGVfZXN0aW1hdG9yIF9fcmN1ICpyYXRlX2VzdDtcXG4gIDI0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRhbGlzdDtcXG4gIDI1OlxcdFxcdHN0cnVjdCBRZGlzY1xcdFxcdFxcdCpxZGlzYztcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0dTMyXFx0XFx0XFx0XFx0cXVhbnR1bTtcXG4gIDI4OlxcdFxcdHUzMlxcdFxcdFxcdFxcdGRlZmljaXQ7XFxuICAyOTpcXHR9O1xcbiAgMzA6XFx0XFxuICAzMTpcXHRzdHJ1Y3QgZHJyX3NjaGVkIHtcXG4gIDMyOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRhY3RpdmU7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvIF9fcmN1XFx0XFx0KmZpbHRlcl9saXN0O1xcbiAgMzQ6XFx0XFx0c3RydWN0IHRjZl9ibG9ja1xcdFxcdCpibG9jaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MzUuNjg5MzU1NjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2OTcxNDMzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNvZnQgTG9ja3VwIGluIERSUiBRdWV1ZWluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlZmljaXRgIHZhcmlhYmxlLCBhbmQgaXQncyBhIGB1MzJgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdyBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHF1ZXVlaW5nIGxvZ2ljLiBJZiBgbGVuYCAod2hpY2ggaXMgYWxzbyBhIGB1MzJgKSBpcyBhIGxhcmdlIHZhbHVlLCBsaWtlLCBzYXksIGAyMTQ3NDg0NTAwYCwgdGhlIGBkZWZpY2l0YCBpbmNyZW1lbnRzIGJ5IGBxdWFudHVtYCAobGV0J3Mgc2F5IDE1MDApIGVhY2ggdGltZS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCAqd2hlbiogd2lsbCBgZGVmaWNpdGAgYmVjb21lIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbGVuYD9cblxuSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGlzIHdvdWxkIGxlYWQgdG8gYW4gZXZlbnR1YWwgY29tcGFyaXNvbiB3aGVyZSBpdCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgbGVuYC4gSSBmaWd1cmVkIGl0IHdvdWxkIHJlYWNoIGAyMTQ3NDg0NTAwYCBvciBtb3JlLiBTaW5jZSBgbGVuYCBpcyBgMjE0NzQ4NDUwMGAsIGFuZCBgZGVmaWNpdGAgc3RhcnRzIGF0IGAxNTAwYCwgYWRkaW5nIGAxNTAwYCBpdCB3b3VsZCBldmVudHVhbGx5IGdldCB0aGVyZS4gYGRlZmljaXRgIHdvdWxkIHJlYWNoIGAyMTQ3NDg1NTAwYCwgd2hpY2ggKmlzKiBncmVhdGVyIHRoYW4gYGxlbmAsIHdoaWNoIGlzIGAyMTQ3NDg0NTAwYC4gU28gaXQgd2lsbCB0YWtlIGxpa2UgMS40IG1pbGxpb24gaXRlcmF0aW9ucy5cblxuU28sIGluIHRoYXQgY2FzZSwgdGhlIGNvbmRpdGlvbiBgbGVuIFx1MDAzYz0gY2wtXHUwMDNlZGVmaWNpdGAgKndvdWxkKiBldmVudHVhbGx5IGJlY29tZSB0cnVlLCB0aGUgZGVmaWNpdCB3b3VsZCBiZSB1cGRhdGVkLCBhbmQgdGhlIHBhY2tldCBkZXF1ZXVlZC4gTm90IGFuIGluZmluaXRlIGxvb3AsIGp1c3QgYSAqdmVyeSogbG9uZyBzdGFsbC5cblxuQnV0IHRoZW4gSSB0aG91Z2h0LCB3aGF0IGlmIGBsZW5gIGlzICpyZWFsbHkqIGJpZywgbGlrZSBgMHhGRkZGRkZGRmA/IFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJZiBgZGVmaWNpdGAgaXMsIHNheSwgYDB4RkZGRkZGMDBgIGFuZCB3ZSBhZGQgYDE1MDBgLCBpdCB3cmFwcyBhcm91bmQhIEl0IGJlY29tZXMgYDB4MDAwMDA0RENgLiBJdCB3aWxsICpuZXZlciogYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAweEZGRkZGRkZGYCwgdW5sZXNzIGl0IGhpdHMgaXQgKmV4YWN0bHkqLiBJZiBpdCBtaXNzZXMgYDB4RkZGRkZGRkZgLCBpdCB3cmFwcyBhcm91bmQsIGFuZCB3ZSBnZXQgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCdzIGJhZC5cblxuSG93ZXZlciwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBgbGVuYCAqYWN0dWFsbHkqIGlzLiBJdCdzIGBza2ItXHUwMDNlbGVuICsgb3ZlcmhlYWRgLiBgc2tiLVx1MDAzZWxlbmAgaXMgdHlwaWNhbGx5IGFyb3VuZCAxNTAwLCBhbmQgYG92ZXJoZWFkYCBjYW4gYmUgdXAgdG8gYElOVF9NQVhgLiBTbyB0aGUgbWF4aW11bSBgbGVuYCBjb3VsZCBiZSBgMHg3RkZGRkZGRiArIDE1MDAgPSAweDgwMDAwNURDYC4gSG1tLCBzbyBpdCBjYW4ndCByZWFjaCBgMHhGRkZGRkZGRmA/IFdlbGwsIHRoZSBzaXplIG9mIGBza2ItXHUwMDNlbGVuYCBpcyBsaW1pdGVkIGJ5IE1UVSAoZS5nLiA2NEspLiBTbyBldmVuIHdpdGggdGhlIG1heCBvZiBgaW50YCwgYGxlbmAgaXMgYXQgbW9zdCBgMHg3RkZGRkZGRiArIDY1NTM1ID0gMHg4MDAwRkZGRmAuIFNvIHdlIGFyZSBsb29raW5nIGF0IHJvdWdobHkgMiAqIDEwXjkuIFRoaXMgbWVhbnMgaXQgd2lsbCB0YWtlIDEuNCAqIDEwXjYgaXRlcmF0aW9ucy4gVGhhdCdzIHN0aWxsIGEgc3RhbGwsIGJ1dCBub3QgYW4gaW5maW5pdGUgb25lLlxuXG5UaGVuIEkgaGFkIGFub3RoZXIgdGhvdWdodDogd2hhdCBpZiBgb3ZlcmhlYWRgIGlzIG5lZ2F0aXZlPyBgYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWGAgY2hlY2tzIHRoYXQuIFRoaXMgbWVhbnMgYG92ZXJoZWFkYCBjYW4gYmUgYC0yMTQ3NDgzNjQ4YC4gSWYgd2UgYWRkIGAtMjE0NzQ4MzY0OGAgdG8gYHNrYi1cdTAwM2VsZW5gIHdoaWNoIGlzIDE1MDAsIHdlIGdldCBhIG5lZ2F0aXZlIHZhbHVlIVxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgcGt0X2xlbmAgaXMgY2FsY3VsYXRlZCwgYW5kIHRoZW4gaWYgaXQgaXMgdW5saWtlbHkgdG8gYmUgbGVzcyB0aGFuIDEsIGBwa3RfbGVuID0gMWAuICpBaCEqIElmIGBsZW5gIGVuZHMgdXAgbmVnYXRpdmUsIGl0IGdldHMgY2xhbXBlZCB0byAxLiBXaGljaCBzaG91bGQgcHJldmVudCBhbiBpbmZpbml0ZSBsb29wISBPa2F5LCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0gaW4gYGRycl9kZXF1ZXVlYC5cblxuTm93LCBJIHNob3VsZCBjaGVjayB0aGUgYGV0c2AgcWRpc2MuLi4gbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZSBpbiBgbmV0L3NjaGVkL3NjaF9ldHMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6NTUuMzg2NTAxOTc4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2V0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHRjbC1cXHUwMDNlZGVmaWNpdCArPSBSRUFEX09OQ0UoY2wtXFx1MDAzZXF1YW50dW0pO1xcbiA1MDE6XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCwgXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSk7XFxuIDUwMjpcXHRcXHR9XFxuIDUwMzpcXHRvdXQ6XFxuIDUwNDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTA1OlxcdH1cXG4gNTA2OlxcdFxcbiA1MDc6XFx0c3RhdGljIGludCBldHNfcWRpc2NfcHJpb21hcF9wYXJzZShzdHJ1Y3QgbmxhdHRyICpwcmlvbWFwX2F0dHIsXFxuIDUwODpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbmJhbmRzLCB1OCAqcHJpb21hcCxcXG4gNTA5OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTEwOlxcdHtcXG4gNTExOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuIDUxMjpcXHRcXHRpbnQgcHJpbyA9IDA7XFxuIDUxMzpcXHRcXHR1OCBiYW5kO1xcbiA1MTQ6XFx0XFx0aW50IHJlbTtcXG4gNTE1OlxcdFxcdGludCBlcnI7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGVyciA9IF9fbmxhX3ZhbGlkYXRlX25lc3RlZChwcmlvbWFwX2F0dHIsIFRDQV9FVFNfTUFYLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0ICAgIGV0c19wcmlvbWFwX3BvbGljeSwgTkxfVkFMSURBVEVfU1RSSUNULFxcbiA1MTk6XFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuIDUyMDpcXHRcXHRpZiAoZXJyKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBwcmlvbWFwX2F0dHIsIHJlbSkge1xcbiA1MjQ6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xcbiA1MjU6XFx0XFx0XFx0Y2FzZSBUQ0FfRVRTX1BSSU9NQVBfQkFORDpcXG4gNTI2OlxcdFxcdFxcdFxcdGlmIChwcmlvIFxcdTAwM2UgVENfUFJJT19NQVgpIHtcXG4gNTI3OlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJUb28gbWFueSBwcmlvcml0aWVzIGluIEVUUyBwcmlvbWFwXFxcIik7XFxuIDUyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI5OlxcdFxcdFxcdFxcdH1cXG4gNTMwOlxcdFxcdFxcdFxcdGJhbmQgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA1MzE6XFx0XFx0XFx0XFx0aWYgKGJhbmQgXFx1MDAzZT0gbmJhbmRzKSB7XFxuIDUzMjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW52YWxpZCBiYW5kIG51bWJlciBpbiBFVFMgcHJpb21hcFxcXCIpO1xcbiA1MzM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNDpcXHRcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXHRcXHRcXHRwcmlvbWFwW3ByaW8rK10gPSBiYW5kO1xcbiA1MzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUzNzpcXHRcXHRcXHRkZWZhdWx0OlxcbiA1Mzg6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpOyAvKiBWYWxpZGF0ZSBzaG91bGQgaGF2ZSBjYXVnaHQgdGhpcy4gKi9cXG4gNTM5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NDA6XFx0XFx0XFx0fVxcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRyZXR1cm4gMDtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCBldHNfcWRpc2NfcXVhbnRhX3BhcnNlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpxdWFudGFfYXR0cixcXG4gNTQ3OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG5iYW5kcywgdW5zaWduZWQgaW50IG5zdHJpY3QsXFxuIDU0ODpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCAqcXVhbnRhLFxcbiA1NDk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQ0OjU1LjM4NjYwNjMyOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU5OTA3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSoqXG5cbk9rYXksIHNvIEknbSBoaXR0aW5nIGEgc25hZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIHNoYXBpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQuIFRoZSBpc3N1ZSBsaWtlbHkgbGllcyBzb21ld2hlcmUgd2l0aGluIHRoZSBkZXF1ZXVlIHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwdWxsaW5nIHBhY2tldHMgb2ZmIHRoZSBFVFMgKEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uKSBxdWV1ZS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgSSBzaG91bGQgc3RhcnQgYnkgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBgZXRzX3FkaXNjX2RlcXVldWVgLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgaWYgdGhlIG5hbWluZyBjb252ZW50aW9ucyBoYXZlIGV2b2x2ZWQgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGp1bmN0dXJlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJvb3QgY2F1c2UsIG9yIGF0IGxlYXN0IGEgcGF0aHdheSB0byBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQ0OjU5LjE0NjUxNzEzMVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9ldHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0cWRpc2NfcWxlbl9pbmMoc2NoKTtcXG4gNDUxOlxcdFxcdHJldHVybiBlcnI7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIDQ1NTpcXHRldHNfcWRpc2NfZGVxdWV1ZV9za2Ioc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQ1NjpcXHR7XFxuIDQ1NzpcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gNDU4OlxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuIDQ1OTpcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbiA0NjA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDYxOlxcdH1cXG4gNDYyOlxcdFxcbiA0NjM6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpldHNfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gNDY0OlxcdHtcXG4gNDY1OlxcdFxcdHN0cnVjdCBldHNfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDQ2NjpcXHRcXHRzdHJ1Y3QgZXRzX2NsYXNzICpjbDtcXG4gNDY3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ2ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmFuZDtcXG4gNDY5OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDQ3MjpcXHRcXHRcXHRmb3IgKGJhbmQgPSAwOyBiYW5kIFxcdTAwM2MgcS1cXHUwMDNlbnN0cmljdDsgYmFuZCsrKSB7XFxuIDQ3MzpcXHRcXHRcXHRcXHRjbCA9IFxcdTAwMjZxLVxcdTAwM2VjbGFzc2VzW2JhbmRdO1xcbiA0NzQ6XFx0XFx0XFx0XFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXFx1MDAzZXFkaXNjKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmIChza2IpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXRzX3FkaXNjX2RlcXVldWVfc2tiKHNjaCwgc2tiKTtcXG4gNDc3OlxcdFxcdFxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSkpXFxuIDQ4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0XFx0XFx0Y2wgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUsIHN0cnVjdCBldHNfY2xhc3MsIGFsaXN0KTtcXG4gNDgzOlxcdFxcdFxcdHNrYiA9IGNsLVxcdTAwM2VxZGlzYy1cXHUwMDNlb3BzLVxcdTAwM2VwZWVrKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDQ4NDpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiA0ODU6XFx0XFx0XFx0XFx0cWRpc2Nfd2Fybl9ub253YyhfX2Z1bmNfXywgY2wtXFx1MDAzZXFkaXNjKTtcXG4gNDg2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0ODc6XFx0XFx0XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRcXHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuIDQ5MDpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2M9IGNsLVxcdTAwM2VkZWZpY2l0KSB7XFxuIDQ5MTpcXHRcXHRcXHRcXHRjbC1cXHUwMDNlZGVmaWNpdCAtPSBsZW47XFxuIDQ5MjpcXHRcXHRcXHRcXHRza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC1cXHUwMDNlcWRpc2MpO1xcbiA0OTM6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA0OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5NTpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gNDk2OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDQ5NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXRzX3FkaXNjX2RlcXVldWVfc2tiKHNjaCwgc2tiKTtcXG4gNDk4OlxcdFxcdFxcdH1cXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDo1OS4xNDY2Njc5OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5MjY0NTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRFJSL0VUUyBRZGlzYyBTb2Z0IExvY2t1cCBCdWcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0J3MgY2xlYXIgdGhlIHJvb3QgY2F1c2UgaXMgcmlnaHQgaGVyZTogYGV0c19xZGlzY19kZXF1ZXVlYCAoYW5kIGBkcnJfZGVxdWV1ZWAsIHNpbmNlIGl0IHNoYXJlcyB0aGUgbG9naWMpIHVzZXMgdGhlIHNhbWUgcGF0dGVybi4gVGhlIGNydWNpYWwgY29kZSBzbmlwcGV0IHdpdGggYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGFuIG92ZXJseSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlIGluZmxhdGluZyBgbGVuYC4gVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgbGVuIFx1MDAzYz0gY2wtXHUwMDNlZGVmaWNpdGAgaXMgYWx3YXlzIGZhbHNlLCBjYXVzaW5nIHRoZSB3aGlsZSBsb29wIHRvIHNwaW4gaW5kZWZpbml0ZWx5LiBUaGUgbGFyZ2UgYG92ZXJoZWFkYCBjYXVzZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBwa3RfbGVuYC4gVGhpcyBtZWFucyB0aGUgY2xhc3MncyBkZWZpY2l0IG11c3QgZ3JvdyBpbW1lbnNlbHksIGFkZGluZyB0aGUgcXVhbnR1bSBlYWNoIHRpbWUsIGxlYWRpbmcgdG8gYSBsb25nIGxvb3AuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGUgbGFyZ2UgYHBrdF9sZW5gIHN0ZW1zIGZyb20gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIExvb2tpbmcgYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB0aGUgYG92ZXJoZWFkYCB2YWx1ZSBpcyBhZGRlZCB0byBgc2tiLVx1MDAzZWxlbmAuIEZ1cnRoZXIgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCBpcyBkb25lIGFuZCBpdCBzZWVtcyB0byBpbmRleCB0aGUgYHN0YWItXHUwMDNlZGF0YWAuIEhvd2V2ZXIsIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYHNsb3RgIHVzaW5nIGEgbW9kdWxvIG9wZXJhdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGBzdGFiLVx1MDAzZWRhdGFgIGFycmF5IGFjY2VzcyBpcyBhbHdheXMgd2l0aGluIGJvdW5kcy4gVGhlIGBzdGFiLVx1MDAzZWRhdGFgIGFycmF5IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBzdGFiYCBjcmVhdGlvbiB3aXRoIHVzZXIgc3BhY2UgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhlcmUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGBzdGFiLVx1MDAzZWRhdGFgIHVzaW5nIHVzZXIgc3BhY2UgYHRhYmAsIHNvIG5vIGNvbmNlcm4gdGhlcmUuXG5cbkxldCdzIHF1aWNrbHkgc2NhbiBvdGhlciB1c2VzIG9mIGBvdmVyaGVhZGAuIGBzY2hfY2FrZS5jYCBhbmQgYHNjaF90YmYuY2AganVzdCBhZGp1c3QgdGhlIHBhY2tldCBsZW5ndGgsIHNvIHRoZXkgZG9uJ3Qgc2VlbSBsaWtlIHJlbGV2YW50IGFyZWFzLlxuXG5JbiBzdW1tYXJ5LCB0aGUgYnVnIGlzIGEgQ1BVIHN0YWxsIG9yIHNvZnQgbG9ja3VwIGluIGBkcnJgIGFuZCBgZXRzYCBxZGlzY3MuIFRoaXMgaXMgZHVlIHRvIGEgdmVyeSBsYXJnZSBgcGt0X2xlbmAsIHJlc3VsdGluZyBmcm9tIGEgYmlnIGBvdmVyaGVhZGAgdmFsdWUsIHdoaWNoIG1ha2VzIHRoZSBkZWZpY2l0IHJvdW5kLXJvYmluIGxvZ2ljIGxvb3AgZXhjZXNzaXZlbHkuIFRoaXMgaXMgZWFzaWx5IGNhdWdodCBieSBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uLCBhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIHNlbGZ0ZXN0cyBhbmQgc3l6a2FsbGVyJ3MgZmluZGluZ3MuIFRoZSB2dWxuZXJhYmlsaXR5IGRvZXNuJ3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluZm8tbGVha3MsIGJ1dCBhIGxvZ2ljIGVycm9yLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhIHB1cmVseSBsb2dpYy1iYXNlZCBEb1MgdnVsbmVyYWJpbGl0eSB0aGF0IGNhbiBiZSBjYXVnaHQgdGhyb3VnaCBleGlzdGluZyBmdXp6aW5nIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBzeXprYWxsZXIpLCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgaGVyZS4gVGhlIGFkZGVkIHBhdGNoLCB0aGF0IGxpbWl0cyBgb3ZlcmhlYWRgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAsIGlzIGEgZ29vZCBtaXRpZ2F0aW9uIHRvIHRoZSBEb1MuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRpbmcgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTQ1LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NToxNy42MzkzMTgyNjZaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcXG5cXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJ3MgYGRlZmljaXRgLiBJZiBpdCBpcyBub3QsIHRoZSBjb2RlIGFkZHMgYSBgcXVhbnR1bWAgdG8gdGhlIGBkZWZpY2l0YCBhbmQgbG9vcHMuIFdpdGggYSBodWdlIGBwa3RfbGVuYCwgdGhpcyBgd2hpbGUgKDEpYCBsb29wIGV4ZWN1dGVzIG1pbGxpb25zIG9mIHRpbWVzIGJlZm9yZSB0aGUgYGRlZmljaXRgIGdyb3dzIGxhcmdlIGVub3VnaCwgcmVzdWx0aW5nIGluIGEgQ1BVIHN0YWxsIC8gc29mdCBsb2NrdXAgKERlbmlhbCBvZiBTZXJ2aWNlKS5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZWApLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBpc3N1ZSwgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxcblxcbkluIHFkaXNjcyB0aGF0IHVzZSBkZWZpY2l0IHJvdW5kLXJvYmluIHNjaGVkdWxpbmcsIHN1Y2ggYXMgRFJSIChgZHJyX2RlcXVldWVgKSBhbmQgRVRTIChgZXRzX3FkaXNjX2RlcXVldWVgKSwgdGhlIGRlcXVldWUgbG9naWMgY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY2xhc3MncyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 11:56:27 +0000 UTC FinishedAt: 2026-08-18 12:45:19 +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": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "9890a91d-273a-487b-8a48-879ba5410f64" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_modify_qdisc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcblxuSW4gcWRpc2NzIHRoYXQgdXNlIGRlZmljaXQgcm91bmQtcm9iaW4gc2NoZWR1bGluZywgc3VjaCBhcyBEUlIgKGBkcnJfZGVxdWV1ZWApIGFuZCBFVFMgKGBldHNfcWRpc2NfZGVxdWV1ZWApLCB0aGUgZGVxdWV1ZSBsb2dpYyBjaGVja3MgaWYgdGhlIHBhY2tldCBsZW5ndGggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjbGFzcyYjMzk7cyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYCB0byBwcmV2ZW50IGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgaXMgYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIGV4cGxpY2l0bHkgdXNlIHRoZSBEUlIgYW5kIEVUUyBxZGlzY3MsIHNvIGVuYWJsaW5nIHRoZW0gYWxvbmcgd2l0aCB0aGUgY29yZSBORVRfU0NIRUQgY29uZmlnIGlzIHJlY29tbWVuZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbmluZGV4IDE4YTQxOWNkOWQ5NDkuLmE0YzFiN2IwMjYzZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cdDEwMDBcbiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXHQzMFxuJiM0MzsjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuIFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xuIFx0aW50XHRzdG9wO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5jZGNmODYxYzg1ZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTU0NCw2ICYjNDM7NTQ0LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTtcbiBcdGlmICghc3RhYilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuQEAgLTg2LDUgJiM0Mzs4NiwyNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZDFlMlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtkcnJcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRyclwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBkcnJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgIF1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5pbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5AQCAtMTAwNyw1ICYjNDM7MTAwNywyNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDtlY2hvIFxcXCYjMzQ7MVxcXCYjMzQ7IFx1MDAzZSAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZjNhNFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtldHNcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGV0cyBiYW5kcyAxIHN0cmljdCAwIHF1YW50YSAxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDsyXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGV0c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgXVxuICAgICB9XG4gXVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYCB0byBwcmV2ZW50IGludmFsaWQgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgaXMgYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIGV4cGxpY2l0bHkgdXNlIHRoZSBEUlIgYW5kIEVUUyBxZGlzY3MsIHNvIGVuYWJsaW5nIHRoZW0gYWxvbmcgd2l0aCB0aGUgY29yZSBORVRfU0NIRUQgY29uZmlnIGlzIHJlY29tbWVuZGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCAxOGE0MTljZDlkOTQ5Li5hNGMxYjdiMDI2M2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKIAogI2RlZmluZSBERUZBVUxUX1RYX1FVRVVFX0xFTgkxMDAwCiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYCTMwCiYjNDM7I2RlZmluZSBTVEFCX09WRVJIRUFEX01BWAk2NTUzNQogCiBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyIHsKIAlpbnQJc3RvcDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNTQ0LDYgJiM0Mzs1NDQsMTEgQEAgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAomIzQzOwlpZiAoYWJzKHMtJmd0O292ZXJoZWFkKSAmZ3Q7IFNUQUJfT1ZFUkhFQURfTUFYKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkJiMzNDspOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKIAlzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7CiAJaWYgKCFzdGFiKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24KQEAgLTg2LDUgJiM0Mzs4NiwyNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIHJvb3QmIzM0OwogICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkMWUyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtkcnImIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGRyciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICBdCiAgICAgfQogXQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgppbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbgpAQCAtMTAwNyw1ICYjNDM7MTAwNywyNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7ZWNobyBcJiMzNDsxXCYjMzQ7ICZndDsgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2UmIzM0OwogICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtmM2E0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtldHMmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZXRzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgdG91Y2hpbmcgYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFuZCBgaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjayB3aXRoaW4gYHFkaXNjX2dldF9zdGFiYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB2YWxpZGF0aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy0mZ3Q7b3ZlcmhlYWRgIGFnYWluc3QgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgZGVmaW5lZCBhcyA2NTUzNS4gSWYgdGhpcyBjaGVjayBmYWlscyDigJMgbWVhbmluZyB0aGUgb3ZlcmhlYWQgaXMgZXhjZXNzaXZlbHkgbGFyZ2Ug4oCTIGl0IG5vdyByZXR1cm5zIGAtRUlOVkFMYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBJdCYjMzk7cyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbSDigJMgd2hpY2ggSSYjMzk7bSB2ZXJ5IGZhbWlsaWFyIHdpdGguIFRoaXMgYHFkaXNjX2dldF9zdGFiYCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcXVldWVpbmcgZGlzY2lwbGluZSAocWRpc2MpIHdoZW4gdXNpbmcgYSBzaXplIHRhYmxlIChzdGFiKS4gVGhpcyBjaGFuZ2UgYWRkcyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCByZWFjaGFibGUgaW4gdGhlIGtlcm5lbC4KCk5vdywgYmVjYXVzZSBJ4oCZbSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaGUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2Agc2F5cyBgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBJIHNlZSBpdCYjMzk7cyAqc3RhdGljKiwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gRmluZGluZyB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIG5leHQgaW1wb3J0YW50IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZ2V0X3N0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTUtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ5NjpzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk3LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3Nj1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNDEtXHRpZiAodGNhW1RDQV9TVEFCXSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzQyOlx0XHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM0My1cdFx0aWYgKElTX0VSUihzdGFiKSkge1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTM5OD1zdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE0MTgtXHRpZiAodGNhW1RDQV9TVEFCXSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxNDE5Olx0XHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQyMC1cdFx0aWYgKElTX0VSUihzdGFiKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBBbmFseXNpcyBvZiBxZGlzYyBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljYWxseSBkZWZpbmVkPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCBxdWVzdGlvbiBJIHdhbnQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vdC4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgcmVzdCBvZiB0aGUgYW5hbHlzaXMsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTIzNj1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3NjpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Ny1cdFx0XHRcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3NS1cdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc2Olx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc3LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4MS1cdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzgyOlx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzgzLVx0ICovXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNjEzPXN0YXRpYyBpbnQgX190Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Ny1cdFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2ODpcdFx0XHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2OS1cdFx0XHRcdFx0IHRjbS1cdTAwM2V0Y21fcGFyZW50LCB0Y20tXHUwMDNldGNtX3BhcmVudCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODU6XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfcXVldWUsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODYtXHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21faGFuZGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUWRpc2MgQ29kZSoqCgpPa2F5LCBzbyBgcWRpc2NfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbGltaXRpbmcgaXRzIHNjb3BlLiBOb3csIHRoZSBjb250ZXh0IEkgaGF2ZSBpcyB0aGF0IGBfX3RjX21vZGlmeV9xZGlzY2AgY2FsbHMgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgX190Y19tb2RpZnlfcWRpc2NgIGlzIGFsc28gc3RhdGljLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y19tb2RpZnlfcWRpc2NgIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgd2F5IHRoZSBxZGlzYyBpcyBjcmVhdGVkIGFuZCBtb2RpZmllZCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoYXQgcGFydCBgX190Y19tb2RpZnlfcWRpc2NgIHBsYXlzIGluIHRoZSBvdmVyYWxsIHF1ZXVlaW5nIGRpc2NpcGxpbmUgbWFuaXB1bGF0aW9uIHByb2Nlc3MuIElzIHRoaXMgbWVhbnQgdG8gYmUgYSBsb3ctbGV2ZWwgcm91dGluZSB0aGF0JiMzOTtzIG9ubHkgY2FsbGVkIGludGVybmFsbHksIG9yIGlzIGl0IGEgaGVscGVyIHVzZWQgYnkgb3RoZXJzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE2MTItXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE2MTQtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODI2LSAqL1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTgyOC1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4NDk6XHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NTAtXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjUyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcHNjaGVkX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1Mjk6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjUzMC1cdHsubXNndHlwZSA9IFJUTV9ERUxRRElTQywgLmRvaXQgPSB0Y19nZXRfcWRpc2N9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sICh0YykgU3Vic3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBuZXcgcWRpc2NzIGdldCBjcmVhdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlaW5nIGEgbmV0bGluayBoYW5kbGVyLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgSSBrbm93IHRoZSBmdW5kYW1lbnRhbCBjb25maWcgb3B0aW9uIGZvciB0cmFmZmljIHNoYXBpbmcgaXMgYENPTkZJR19ORVRfU0NIRURgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZmlsZSAoYG5ldC9zY2hlZC9LY29uZmlnYCkgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCYjMzk7cyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gU29tZXRpbWVzIHRob3NlIGRlcGVuZGVuY2llcyBjYW4gYmUgYSBsaXR0bGUgdGFuZ2xlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgYEtjb25maWdgIGhhcyB0byBvZmZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgTkVUX1NDSEVEYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gc3BlY2lmaWMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSB0aGUgcGF0Y2ggYWZmZWN0cyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBpcyBhIGNvcmUgcGllY2UuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBjaGFuZ2UgcmVxdWlyZSBvciBhc3N1bWUgYSBwYXJ0aWN1bGFyIHF1ZXVpbmcgZGlzY2lwbGluZSAocWRpc2MpPyBUaGUgdGVzdCBjYXNlcywgYGRycmAgYW5kIGBldHNgLCBhcmUgYSBjbHVlLiBSaWdodCwgYGRycmAgaXMgbGlua2VkIHRvIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgZXRzYCB0byBgQ09ORklHX05FVF9TQ0hfRVRTYC4gQnV0IHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAsIHdoaWNoIGxpdmVzIGluIGBzY2hfYXBpLmNgLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBhIGdlbmVyaWMgY2hhbmdlLCBhcHBseWluZyB0byAqYW55KiBxZGlzYyB0aGF0IGxldmVyYWdlcyBzaXplIHRhYmxlcy4gU2l6ZSB0YWJsZXMgYXJlIGhhbmRsZWQgZ2VuZXJpY2FsbHkgd2l0aGluIGBzY2hfYXBpLmNgLCBzbyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGFmZmVjdHMgdGhlIGJyb2FkZXIgcWRpc2MgbGlmZWN5Y2xlLiBJJiMzOTtsbCBjaGVjayBgdGNfbW9kaWZ5X3FkaXNjYCwgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgcWRpc2NfY2hhbmdlYCB0byBzZWUgaG93IHRob3NlIGFyZSBhZmZlY3RlZC4gSG1tLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbTsgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0IGFzIGEgc3ltYm9sIGZvciB0aGlzIGFuYWx5c2lzLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIHN0YXRpYyEgQXJlIGFueSBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zICpub3QqIHN0YXRpYz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgcnRuZXRsaW5rX3JjdmAg4oCTIG5ldGxpbmsgaGFuZGxlcnMgYXJlIG9mdGVuIHN0YXRpYywgYnV0IGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IGBzdGF0aWMgaW50IHRjX21vZGlmeV9xZGlzYyguLi4pYC4gV2hhdCBhYm91dCBgcWRpc2NfY3JlYXRlYD8gVGhhdCYjMzk7cyBhbHNvIHN0YXRpYy4gSG93IGFib3V0IGBxZGlzY19nZXRfc3RhYmA/IEFsc28gc3RhdGljLiBEYW1uLiBJcyB0aGVyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIGluIGBzY2hfYXBpLmNgIHRoYXQgcHJvdmlkZXMgYSBob29rIHBvaW50IGhlcmU/IEkgbmVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIGNoYW5nZSBpbiByZWxhdGlvbiB0byBvdGhlciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyOT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyAqcWRpc2NfYmFzZTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzMi1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTMzOmludCByZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjA1PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzICpxZGlzY19sb29rdXBfZGVmYXVsdChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjIwLS8qIFNldCBuZXcgZGVmYXVsdCBxZGlzYyB0byB1c2UgKi9cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjIxOmludCBxZGlzY19zZXRfZGVmYXVsdChjb25zdCBjaGFyICpuYW1lKVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMjIte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzMzPUVYUE9SVF9TWU1CT0wocWRpc2NfY2xhc3NfaGFzaF9ncm93KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzM0LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3MzU6aW50IHFkaXNjX2NsYXNzX2hhc2hfaW5pdChzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqY2xoYXNoKVxubmV0L3NjaGVkL3NjaF9hcGkuYy03MzYte1xuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODMzPUVYUE9SVF9TWU1CT0wocWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTgzNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODM1OmludCBxZGlzY19vZmZsb2FkX2R1bXBfaGVscGVyKHN0cnVjdCBRZGlzYyAqc2NoLCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM2LVx0XHRcdCAgICAgIHZvaWQgKnR5cGVfZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTmV0d29yayBQbHVtYmluZyoqCgpIbW0sIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXR3b3JraW5nIGlzc3VlPyBBaCwgcmlnaHQsIGBydG5ldGxpbmtfcmN2X21zZ2AuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3Igcm91dGluZyBhbmQgaW50ZXJmYWNlIGNoYW5nZXMsIGFuZCBpdCYjMzk7cyBvdmVyIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoYXQgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMuICpDaGVja3MgbWVtb3J5Li4uIEkgcmVjYWxsIGl0IGhhbmRsZXMgaW5jb21pbmcgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgaW5mb3JtYXRpb24sIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50Ki4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIHNlZSBob3cgc2NoZWR1bGluZyBpcyBpbnZvbHZlZCwgSSBzaG91bGQgc2VhcmNoIGZvciBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGV4dGVybmFsbHkgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGF0IHRoZSBzY2hlZHVsZXIgZXhwb3Nlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdG8gdmlzdWFsaXplIHRoZSBzY2hlZHVsaW5nIGhvb2tzIGludG8gdGhlIG92ZXJhbGwgY29udHJvbCBwbGFuZS4gKlllcywgSSBrbm93IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbi4qIFJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgcG9wcyB1cCB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEzMz1pbnQgcmVnaXN0ZXJfcWRpc2Moc3RydWN0IFFkaXNjX29wcyAqcW9wcylcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NC19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3NTpFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3FkaXNjKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2LVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNzc9dm9pZCB1bnJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTU6RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3FkaXNjKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTk2LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjgyPXZvaWQgcWRpc2NfaGFzaF9hZGQoc3RydWN0IFFkaXNjICpxLCBib29sIGludmlzaWJsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5MC19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI5MTpFWFBPUlRfU1lNQk9MKHFkaXNjX2hhc2hfYWRkKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjkyLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yOTM9dm9pZCBxZGlzY19oYXNoX2RlbChzdHJ1Y3QgUWRpc2MgKnEpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yOTktfVxubmV0L3NjaGVkL3NjaF9hcGkuYzozMDA6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2RlbCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTMwMS1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQyMD1zdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcWRpc2NfZ2V0X3J0YWIoc3RydWN0IHRjX3JhdGVzcGVjICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDYwLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDYxOkVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy00NjItXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ2Mz12b2lkIHFkaXNjX3B1dF9ydGFiKHN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICp0YWIpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy00ODYtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo0ODc6RVhQT1JUX1NZTUJPTChxZGlzY19wdXRfcnRhYik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ4OC1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTU2Nj12b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01NzUtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1NzY6RVhQT1JUX1NZTUJPTChxZGlzY19wdXRfc3RhYik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU3Ny1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTYzNT12b2lkIHFkaXNjX3dhdGNoZG9nX2luaXRfY2xvY2tpZChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCBzdHJ1Y3QgUWRpc2MgKnFkaXNjLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQwLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjQxOkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQyLVxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDM9dm9pZCBxZGlzY193YXRjaGRvZ19pbml0KHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDYtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo2NDc6RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQ4LVxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDk9dm9pZCBxZGlzY193YXRjaGRvZ19zY2hlZHVsZV9yYW5nZV9ucyhzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCB1NjQgZXhwaXJlcyxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY3Ni19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY3NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlX3JhbmdlX25zKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjc4LVxubmV0L3NjaGVkL3NjaF9hcGkuYz02Nzk9dm9pZCBxZGlzY193YXRjaGRvZ19jYW5jZWwoc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4Mi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY4MzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX2NhbmNlbCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4NC1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTY5OT12b2lkIHFkaXNjX2NsYXNzX2hhc2hfZ3JvdyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczMi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjczMzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfZ3Jvdyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzM1PWludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0Ni19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc0NzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfaW5pdCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0OC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzQ5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy03NTItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NTM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3kpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy03NTQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc1NT12b2lkIHFkaXNjX2NsYXNzX2hhc2hfaW5zZXJ0KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy03NjQtfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NjU6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luc2VydCk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc2Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzY3PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc3Mi19XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc3MzpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzc0LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9Nzk1PXZvaWQgcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50IG4sIGludCBsZW4pXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo4MzM6RVhQT1JUX1NZTUJPTChxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM0LVxubmV0L3NjaGVkL3NjaF9hcGkuYz04MzU9aW50IHFkaXNjX29mZmxvYWRfZHVtcF9oZWxwZXIoc3RydWN0IFFkaXNjICpzY2gsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtODUzLX1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODU0OkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9kdW1wX2hlbHBlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg1NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODU2PXZvaWQgcWRpc2Nfb2ZmbG9hZF9ncmFmdF9oZWxwZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04ODItfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo4ODM6RVhQT1JUX1NZTUJPTChxZGlzY19vZmZsb2FkX2dyYWZ0X2hlbHBlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg4NC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9ODg1PXZvaWQgcWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy04OTktfVxubmV0L3NjaGVkL3NjaF9hcGkuYzo5MDA6RVhQT1JUX1NZTUJPTChxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy05MDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBRZGlzYyBNb2RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIYW5nIG9uLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc2AuJiMzNDsgVGhhdCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24sIGdpdmVuIHRoYXQgdGhlIHBhdGNoIGRlYWxzIHdpdGggYFRDQV9TVEFCYC4gSXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0JiMzOTtzIGludm9sdmVkIGhlcmU/IFBlcmhhcHMgYHFkaXNjX2NyZWF0ZWA/CgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgdGhpbmsuICpJZiogYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLCB0aGF0IHdvdWxkIG1lYW4gaXQmIzM5O3MgaW5saW5lZC4uLiBCdXQgd2FpdCwgbm8sIGl0JiMzOTtzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGB7IC5tc2d0eXBlID0gUlRNX05FV1FESVNDLCAuZG9pdCA9IHRjX21vZGlmeV9xZGlzYyB9YC4gVGhhdCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUgdG8gdGFyZ2V0LgoKTm93LCB3aGF0IGFib3V0IGBydG5ldGxpbmtfcmN2X21zZ2A/IFRoYXQmIzM5O3MgdG9vIGdlbmVyaWMsIHRvbyBoaWdoLWxldmVsLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBpbiBgc2NoX2FwaS5jYCB0aGF0JiMzOTtzICpyZWxhdGVkKiBhbmQsIGNydWNpYWxseSwgbm9uLXN0YXRpYz8gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgbmV0bGluayBoYW5kbGVycyBhcmUgYWN0dWFsbHkgc3RhdGljLCB0aG91Z2ggdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIGBxZGlzY19jcmVhdGVgIGlzIGFsc28gbm90IGlubGluZWQuIEl0JiMzOTtzIGEgcHJldHR5IGxhcmdlIGZ1bmN0aW9uLiBCdXQsIEkgc2hvdWxkIHN0aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIGJldHRlciBub24tc3RhdGljIG9wdGlvbi4gTWF5YmUgc29tZXRoaW5nIGxpa2UgYHJlZ2lzdGVyX3FkaXNjYD8gTm9wZSwgdGhhdCYjMzk7cyBmb3IgcmVnaXN0cmF0aW9uLiBJIHNlZSB0aGF0IGBxZGlzY19nZXRfc3RhYmAgaXMgc3RhdGljLCBidXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtb2RpZmllZCEKClVsdGltYXRlbHksIGB0Y19tb2RpZnlfcWRpc2NgICppcyogdGhlIG5ldGxpbmsgZW50cnkgcG9pbnQgYW5kIGlzIG5vdCBpbmxpbmVkLCB0aGVyZWZvcmUsIGl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gdGFyZ2V0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpdCBhZ2FpbiBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYz0xNjA2PXN0YXRpYyBib29sIHJlcV9jaGFuZ2Uoc3RydWN0IG5sbXNnaGRyICpuKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTYxMzpzdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxNC1cdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE4MDM9c3RhdGljIHZvaWQgcmVxdWVzdF9xZGlzY19tb2R1bGUoc3RydWN0IG5sYXR0ciAqa2luZClcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE4Mjc6c3RhdGljIGludCB0Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODI4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4NDgtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcdGVyciA9IF9fdGNfbW9kaWZ5X3FkaXNjKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTg1MC1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ORVdRRElTQywgLmRvaXQgPSB0Y19tb2RpZnlfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTMwLVx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHRjX21vZGlmeV9xZGlzY2AgQ2FsbGJhY2sqKgoKT2theSwgc28gdGhpcyBgdGNfbW9kaWZ5X3FkaXNjYCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IGlzbiYjMzk7dCBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIGNsZWFuIGVudHJ5IHBvaW50LCBhIGRpc3RpbmN0IGJvdW5kYXJ5IHRoYXQgd2UgY2FuIHByb2JlLgoKTm93LCBiZWZvcmUgSSBkaXZlIGludG8gZnV6emluZyBkaXJlY3RseSwgSSB3YW50IHRvIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBhcmVhcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBzZWUgdGhlIHRlc3QgY2FzZXMgYXJlIHVzaW5nIGBkcnJgIGFuZCBgZXRzYC4gVGhhdCBnaXZlcyBtZSBhIGRpcmVjdGlvbi4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbnMuIFRoYXQgd2lsbCBwcm92aWRlIGNvbnRleHQsIGFuZCBhbGxvdyBtZSB0byBkZXZlbG9wIHN0cm9uZ2VyIGZ1enppbmcgaGFybmVzc2VzLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gdGhlIGZ1enppbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9EUlImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xOTU9Y29uZmlnIE5FVF9TQ0hfTkVURU1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9TQ0hfRFJSXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtEZWZpY2l0IFJvdW5kIFJvYmluIHNjaGVkdWxlciAoRFJSKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgTmV0d29yayBTY2hlZHVsZXIgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG1lbnRpb24gb2YgYE5FVF9TQ0hfRVRTYCBpbW1lZGlhdGVseSB0aHJvd3MgbWUgaW50byBhIHNwZWNpZmljIHN1YnNldCBvZiBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gQmFzZWQgb24gdGhlIG5hbWUsIEkmIzM5O20gdGhpbmtpbmcgKkVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24qIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIHBvaW50cyB0b3dhcmRzIGFuIEV2ZW50IFRyaWdnZXJlZCBTY2hlZHVsaW5nIHByb3RvY29sLCBwb3NzaWJseSB3aXRoaW4gYSBkZXRlcm1pbmlzdGljIG5ldHdvcmsgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGVyZm9ybWFuY2UgbW9kZWxpbmcgYW5kIHNpbXVsYXRpb24gb2YgYSBkZXRlcm1pbmlzdGljIG5ldHdvcmsgYmFzZWQgb24gdGhlc2UgcHJvdG9jb2xzLgoKTXkgbWluZCBpbW1lZGlhdGVseSByYWNlcyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IHRoZSByZWFsLXRpbWUgY29uc3RyYWludHMsIGhvdyB0aGUgZXZlbnQgdHJpZ2dlcnMgd2lsbCBpbmZsdWVuY2UgcGFja2V0IHNjaGVkdWxpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGppdHRlciwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgY2hhbGxlbmdlIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgcHJvYmxlbXMgLSBwYWNrZXQgcHJpb3JpdGllcywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb24gZW5kLXRvLWVuZCBsYXRlbmN5LiBBcmUgd2UgdGFsa2luZyBhYm91dCBwcmlvcml0aXppbmcgdHJhZmZpYyBvbiBhIHBlci1mbG93IG9yIGEgbW9yZSBhZ2dyZWdhdGVkIGFwcHJvYWNoPyBJcyB0aGVyZSB0cmFmZmljIHNoYXBpbmcgb3IgcG9saWNpbmcgYXQgdGhlIHNvdXJjZSBvciB0aGUgaW5ncmVzcyByb3V0ZXI/CgpJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29udGV4dC4gSXMgdGhpcyBhIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciBhbiBleGlzdGluZyBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGVkIG9uIGNvbW1lcmNpYWwgaGFyZHdhcmU/IFRoYXQgZHJhc3RpY2FsbHkgYWZmZWN0cyB0aGUgYW5hbHl0aWNhbCBhbmQgZGVzaWduIG9wdGlvbnMuIFRoZW4sIEkgYW0gbG9va2luZyBhdCBob3cgdG8gaW1wcm92ZSB0aGUgY3VycmVudCBkZXNpZ24uCkVzc2VudGlhbGx5LCBJIGFtIGltbWVkaWF0ZWx5IHdhbnRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgb3BlcmF0aW9uYWwgY29udGV4dCBhbmQgcGVyZm9ybWFuY2Ugb2JqZWN0aXZlcyBvZiBhIHN5c3RlbSB1c2luZyBgTkVUX1NDSF9FVFNgIGJlY2F1c2UgdGhlcmUgaXMgYSB3aWRlIHZhcmlldHkgb2Ygc2NlbmFyaW9zIHRoaXMgbmFtZSByZWZlcnMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBpbiBgcWRpc2NfZ2V0X3N0YWJgIGZvciBleGNlc3NpdmUgb3ZlcmhlYWQgdXNpbmcgYGFicyhzLSZndDtvdmVyaGVhZCkgJmd0OyBTVEFCX09WRVJIRUFEX01BWGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGEgc2FmZXR5IGNoZWNrIHJlYWxseSwgYW5kIGl0JiMzOTtzIGFwcGxpY2FibGUgYWNyb3NzIHRoZSBib2FyZCBmb3IgYW55IHFkaXNjIHdpdGggc2l6ZSB0YWJsZSBzdXBwb3J0LiBOb3csIHdoZXJlIHRvIHB1dCB0aGlzIGluIHRoZSBjb25maWc/IEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBgTkVUX1NDSF9EUlJgIG9yIGBORVRfU0NIX0VUU2Agc3BlY2lmaWNhbGx5LCBidXQgaW5jbHVkaW5nIHRoZW0gd291bGRuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZS4uLiBzaW5jZSB0aGlzIGlzIGdlbmVyaWMsIEkgcHJvYmFibHkgb25seSBuZWVkIHRoZSBtYWluIGNvbmZpZywgYE5FVF9TQ0hFRGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQuIEFoLCB5ZXMsIGBORVRfU0NIRURgIGVuYWJsZXMgdGhlIFFvUyBhbmQgZmFpciBxdWV1ZWluZyBzdWJzeXN0ZW0sIHdoaWNoIGluY2x1ZGVzIGBzY2hfYXBpLmNgLiBUaGF0IGhhbmRsZXMgYWxsIG9mIHRoaXMuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCBmaWxlIHRvIG1ha2UgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2FwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IHNjaF9mcmFnLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfU0NIRUQpXHRcdCYjNDM7PSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9DTFMpXHRcdCYjNDM7PSBjbHNfYXBpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU2l6ZSBUYWJsZSBPdmVyaGVhZCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGBDT05GSUdfTkVUX1NDSEVEYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50LCB3aGljaCBpcyBleHBlY3RlZCBmb3IgYW55IG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHJldmlldyB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGVkIHZhbGlkYXRpb24gY2hlY2suCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgU1RBQl9PVkVSSEVBRF9NQVhgIHdpdGhpbiBgcWRpc2NfZ2V0X3N0YWJgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwsIGFzIGl0IGhhbmRsZXMgc2l6ZSB0YWJsZSByZXRyaWV2YWwsIGFuZCBub3csIGVuc3VyZXMgdGhlIG92ZXJoZWFkIHZhbHVlLCBgcy0mZ3Q7b3ZlcmhlYWRgLCBzdGF5cyB3aXRoaW4gdGhlIGRlZmluZWQgYm91bmRhcmllcy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBleGNlc3NpdmVseSBsYXJnZSBvdmVyaGVhZCB2YWx1ZXMsIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgUlRNX05FV1FESVNDYCBuZXRsaW5rIG1lc3NhZ2UuCgpOb3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgd2lsbCBiZSBjYWxsZWQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIGVudHJ5IHBvaW50IGlzIGB0Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgY2FsbGJhY2sgZm9yIGBSVE1fTkVXUURJU0NgLiBPa2F5LCB0aGF0JiMzOTtzIGNsZWFuLgoKQnV0IGxldCBtZSB0aGluayBmdXJ0aGVyOiBpcyB0aGlzIHRoZSBvbmx5IGVudHJ5IHBvaW50PyBXaGF0IGFib3V0IG90aGVyIHBvdGVudGlhbCBjYWxsZXJzIG9mIGBxZGlzY19nZXRfc3RhYmA/IFdlbGwsIHRoZSBjb2RlIHNob3dzIHRoYXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBgcWRpc2NfY2hhbmdlYCwgaG93ZXZlciwgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHRjX21vZGlmeV9xZGlzY2AsIHNvIHdlJiMzOTtyZSBzdGlsbCBlZmZlY3RpdmVseSBjb3ZlcmVkLiBUaGlzIG1lYW5zIHRoYXQgYHRjX21vZGlmeV9xZGlzY2AgaGFuZGxlcyBib3RoIHRoZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBxdWV1ZSBkaXNjaXBsaW5lLCB3aGljaCBpcyBnb29kLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgYmVzdCBzeW1ib2wgZm9yIHRoaXMuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0IGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjaywgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIEkgYW0gbG9va2luZyBmb3IgdGhlICYjMzQ7YmVzdCYjMzQ7IHN5bWJvbCwgYXMgdGhlIGd1aWRlbGluZXMgc3RhdGU6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgbW9zdCBzcGVjaWZpYy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjYWxsIGNoYWluLCBgcnRuZXRsaW5rX3Jjdl9tc2dgIGNhbGxzIHRoZSBjYWxsYmFjay4uLiB3aGljaCBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gYHJ0bmV0bGlua19yY3ZfbXNnYCBpcyB0b28gZ2VuZXJpYywgYW5kIHRoZXJlIGFyZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAoYHFkaXNjX2NyZWF0ZWAsIGBfX3RjX21vZGlmeV9xZGlzY2ApIGluIHRoZSBjYWxsIGNoYWluLiBTbywgYHRjX21vZGlmeV9xZGlzY2AgaXMgdGhlIGJlc3QgaGVyZS4KCkFscmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCBmb2N1c2luZyBvbiBgdGNfbW9kaWZ5X3FkaXNjYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTm93IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX1NDSEVEYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBSZWZpbmVtZW50KioKCk9rYXksIHNvIHRoaXMgaGFzIGEgcHJldHR5IGNsZWFuIHByb2ZpbGUgLSBqdXN0IGEgYE5FVGAgZGVwZW5kZW5jeSwgd2hpY2ggaXMgZ29vZC4gQnV0IGJlZm9yZSBJIGRlY2xhcmUgdmljdG9yeSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJIHNlZSB0aGUgdGVzdCBjYXNlcyBhcmUgdXNpbmcgYGRycmAgYW5kIGBldHNgLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSB0aG9zZSBxZGlzY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGVzdGluZywgSSYjMzk7bGwgYWRkIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24uCgpBaCwgcmlnaHQsIHRoZSBkZWZhdWx0IHFkaXNjLi4uIGl0JiMzOTtzIGVpdGhlciBgcGZpZm9fZmFzdGAgb3IgYGZxX2NvZGVsYCwgZGVwZW5kaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWx0LWluIHFkaXNjcy4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIG9yIGEgc2ltaWxhciBmaWxlIHRoYXQgaGFuZGxlcyB0aGUgc2NoZWR1bGluZyBhc3BlY3RzLiBUaW1lIHRvIGdvIGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BmaWZvX2Zhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0zNi0vKiBRZGlzYyB0byB1c2UgYnkgZGVmYXVsdCAqL1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6Mzc6Y29uc3Qgc3RydWN0IFFkaXNjX29wcyAqZGVmYXVsdF9xZGlzY19vcHMgPSBcdTAwMjZwZmlmb19mYXN0X29wcztcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTM4LUVYUE9SVF9TWU1CT0woZGVmYXVsdF9xZGlzY19vcHMpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTc1Nz1FWFBPUlRfU1lNQk9MKHNjaF9kZWZhdWx0X3ByaW8yYmFuZCk7XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzY1LS8qXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3NjY6ICogUHJpdmF0ZSBkYXRhIGZvciBhIHBmaWZvX2Zhc3Qgc2NoZWR1bGVyIGNvbnRhaW5pbmc6XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjctICpcdC0gcmluZ3MgZm9yIHByaW9yaXR5IGJhbmRzXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjgtICovXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Njk6c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzAtXHRzdHJ1Y3Qgc2tiX2FycmF5IHFbUEZJRk9fRkFTVF9CQU5EU107XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzcyLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzczOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9hcnJheSAqYmFuZDJsaXN0KHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzQtXHRcdFx0XHRcdCAgaW50IGJhbmQpXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzc4LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6Nzc5OnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODAtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc4Mi1cdGludCBiYW5kID0gc2NoX2RlZmF1bHRfcHJpbzJiYW5kW3NrYi1cdTAwM2Vwcmlvcml0eSBcdTAwMjYgVENfUFJJT19NQVhdO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzgzOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzg0LVx0c3RydWN0IHNrYl9hcnJheSAqcSA9IGJhbmQybGlzdChwcml2LCBiYW5kKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDItXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDM6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgwNC17XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDU6XHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDMtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NDQ6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X3BlZWsoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg0NS17XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NDY6XHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDctXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NTgtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NTk6c3RhdGljIHZvaWQgcGZpZm9fZmFzdF9yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODYwLXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2MS1cdGludCBpLCBiYW5kO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODYyOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODYzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2OC1cdFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg2OTpcdFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODcwLVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04ODgtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4ODk6c3RhdGljIGludCBwZmlmb19mYXN0X2R1bXAoc3RydWN0IFFkaXNjICpxZGlzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg5MC17XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTAxLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTAyOnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9pbml0KHN0cnVjdCBRZGlzYyAqcWRpc2MsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkwMy1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA1LVx0dW5zaWduZWQgaW50IHFsZW4gPSBxZGlzY19kZXYocWRpc2MpLVx1MDAzZXR4X3F1ZXVlX2xlbjtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkwNjpcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkwNy1cdGludCBwcmlvO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkyNi1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkyNzpzdGF0aWMgdm9pZCBwZmlmb19mYXN0X2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05Mjgte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTI5Olx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzMC1cdGludCBwcmlvO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzNS1cdFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkzNjpcdFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTM3LVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDAtXHRcdC8qIERlc3Ryb3kgcmluZyBidXQgbm8gbmVlZCB0byBrZnJlZV9za2IgYmVjYXVzZSBhIGNhbGwgdG9cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk0MTpcdFx0ICogcGZpZm9fZmFzdF9yZXNldCgpIGhhcyBhbHJlYWR5IGRvbmUgdGhhdCB3b3JrLlxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTQyLVx0XHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDYtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NDc6c3RhdGljIGludCBwZmlmb19mYXN0X2NoYW5nZV90eF9xdWV1ZV9sZW4oc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDgtXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5ld19sZW4pXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDkte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTUwOlx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk1MS1cdHN0cnVjdCBza2JfYXJyYXkgKmJhbmRzW1BGSUZPX0ZBU1RfQkFORFNdO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk2My1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NDpzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NjU6XHQuaWRcdFx0PVx0XCYjMzQ7cGZpZm9fZmFzdFwmIzM0Oyxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NjpcdC5wcml2X3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2KSxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NzpcdC5lbnF1ZXVlXHQ9XHRwZmlmb19mYXN0X2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Njg6XHQuZGVxdWV1ZVx0PVx0cGZpZm9fZmFzdF9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY5Olx0LnBlZWtcdFx0PVx0cGZpZm9fZmFzdF9wZWVrLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcwOlx0LmluaXRcdFx0PVx0cGZpZm9fZmFzdF9pbml0LFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcxOlx0LmRlc3Ryb3lcdD1cdHBmaWZvX2Zhc3RfZGVzdHJveSxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk3MjpcdC5yZXNldFx0XHQ9XHRwZmlmb19mYXN0X3Jlc2V0LFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTczOlx0LmR1bXBcdFx0PVx0cGZpZm9fZmFzdF9kdW1wLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTc0Olx0LmNoYW5nZV90eF9xdWV1ZV9sZW4gPSAgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuLFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc1LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk3Ny19O1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTc4OkVYUE9SVF9TWU1CT0wocGZpZm9fZmFzdF9vcHMpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc5LVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEyMDc9c3RhdGljIHZvaWQgYXR0YWNoX29uZV9kZWZhdWx0X3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTIxNi1cdGVsc2UgaWYoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTilcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEyMTc6XHRcdG9wcyA9IFx1MDAyNnBmaWZvX2Zhc3Rfb3BzO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTIxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMDUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgcGZpZm9fZmFzdGAsIHNpbmNlIHRoYXQmIzM5O3MgYSBidWlsdC1pbiBxZGlzYy4gQnV0IHRoZW4gSSBzYXcgdGhlIG1lbnRpb24gb2YgYHFkaXNjX2dldF9zdGFiYCBpbiB0aGUgcGF0Y2ggYW5kIHJlYWxpemVkIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzaXplIHRhYmxlcy4gVGhvc2UgdGFibGVzIGFyZSBoYW5kbGVkIGdlbmVyaWNhbGx5IGluIGBzY2hfYXBpLmNgIHZpYSBgcWRpc2NfY3JlYXRlYCBhbmQgYHFkaXNjX2NoYW5nZWAsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY29yZSB0cmFmZmljIGNvbnRyb2wgZmVhdHVyZS4gYE5FVF9TQ0hFRGAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4KCk15IGluaXRpYWwgc3RyYXRlZ3kgbG9va3MgbGlrZSB0aGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBvYnZpb3VzbHkhCiogICAqKkZvY3VzU3ltYm9sczoqKiBgdGNfbW9kaWZ5X3FkaXNjYAoqICAgKipFbmFibGVDb25maWdzOioqIGBORVRfU0NIRURgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtJmd0O292ZXJoZWFkYCkgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYnkgZW5zdXJpbmcgb3ZlcmhlYWQgaXMgd2l0aGluIGV4cGVjdGVkIGxpbWl0cywgYW5kIGlzIHJlYWNoZWQgdGhyb3VnaCBuZXRsaW5rLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGZ1enppbmcgaXQgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gcGlja2luZyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuIFRoZSBpbnN0cnVjdGlvbnMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBub3RpY2VkIGB0Y19tb2RpZnlfcWRpc2NgIGlzIHN0YXRpYy4gSG1tLi4uIHdoaWxlIGl0JiMzOTtzIGEgY2FsbGJhY2ssIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IGlubGluZWQsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGNoZWNrZWQgYHJ0bmV0bGlua19yY3ZfbXNnYCwgYnV0IHRoYXQmIzM5O3MgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggZmVlbHMgbGVzcyB0YXJnZXRlZC4gYHJlZ2lzdGVyX3FkaXNjYCBpcyBmb3IgbW9kdWxlIGluaXQsIHNvIHRoYXQmIzM5O3Mgb3V0LiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggYHRjX21vZGlmeV9xZGlzY2AsIGJlY2F1c2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIHRoaXMgZmVhdHVyZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgY2FzZXMuIFRoZSB0ZXN0IGNhc2VzIHVzZSBgZHJyYCBhbmQgYGV0c2AuIEkgd2lsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHNhZmUsIHNpbmNlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgdGVzdGVkLiBZZXAsIHRoZSBwYXRjaCBhY3R1YWxseSBtb2RpZmllcyBgZHJyLmpzb25gIGFuZCBgZXRzLmpzb25gLCBzbyB0aGF0IHNlYWxzIHRoZSBkZWFsLgoKU28sIGxldCYjMzk7cyByZXZpZXc6CgoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYE5FVF9TQ0hFRGAKICAgICogICBgTkVUX1NDSF9EUlJgCiAgICAqICAgYE5FVF9TQ0hfRVRTYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYHRjX21vZGlmeV9xZGlzY2AKCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtJmd0O292ZXJoZWFkYCkgaW4gYHFkaXNjX2dldF9zdGFiYC4gVGhpcyBzYWZlZ3VhcmQgcHJldmVudHMgaW52YWxpZCBjb25maWd1cmF0aW9ucyBhbmQgaXMgdHJpZ2dlcmVkIHdoZW4gY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSAoVENBX1NUQUIpIHZpYSBuZXRsaW5rLiBUaGUgYWNjZXNzIGlzIHRocm91Z2ggYHRjX21vZGlmeV9xZGlzY2AuIFRoZSB0ZXN0IGNhc2VzIG1ha2Ugc3BlY2lmaWMgdXNlIG9mIERSUiBhbmQgRVRTIHFkaXNjcywgbWFraW5nIHRoZXNlIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgc2l6ZSB0YWJsZSBvdmVyaGVhZCAoYHMtXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjRlMzRjNmQ4ODMxMDExOWZhNGJjYzZkOGU3ZWM1YTc3OTJmYjJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTI6NDA6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDE4YTQxOWNkOWQ5NDkuLmE0YzFiN2IwMjYzZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjZGVmaW5lIERFRkFVTFRfVFhfUVVFVUVfTEVOCTEwMDAKICNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVgJMzAKJiM0MzsjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYCTY1NTM1CiAKIHN0cnVjdCBxZGlzY193YWxrZXIgewogCWludAlzdG9wOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggNjViMzU1MjhkMTI1Zi4uY2RjZjg2MWM4NWY1YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC01NDQsNiAmIzQzOzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCiYjNDM7CWlmIChhYnMocy0mZ3Q7b3ZlcmhlYWQpICZndDsgU1RBQl9PVkVSSEVBRF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQomIzQzOwogCXN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTsKIAlpZiAoIXN0YWIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgppbmRleCAyYjYxZDhkNzliZGU4Li43NzEzZWIzNWFhZWJjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbgpAQCAtODYsNSAmIzQzOzg2LDI1IEBACiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwogICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdCYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2QxZTImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlamVjdCBEUlIgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2RyciYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBkcnImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZHJyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCmluZGV4IGVlMDllNmQ2ZmRmM2MuLmRhN2FlNjI2ZjdlMWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uCkBAIC0xMDA3LDUgJiM0MzsxMDA3LDI1IEBACiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwogICAgICAgICAgICAgJiMzNDtlY2hvIFwmIzM0OzFcJiMzNDsgJmd0OyAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZSYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2YzYTQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlamVjdCBFVFMgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2V0cyYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBldHMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgXQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY2hlZHVsZXIgT3ZlcmhlYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2sgZm9yIHRoZSBgcy0mZ3Q7b3ZlcmhlYWRgIHZhbHVlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGFuIGVycm9yIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy0mZ3Q7b3ZlcmhlYWRgIGV4Y2VlZHMgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgZGVmaW5lZCBhcyA2NTUzNS4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBjb21tb24gcHJhY3RpY2UgdG8gaW5jbHVkZSBzYW5pdHkgY2hlY2tzIGxpa2UgdGhpcyB3aGVuIGhhbmRsaW5nIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgaXNzdWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLgoKSSYjMzk7bSBtYWtpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCBgc2AgaW4gdGhlIGNvZGUgaXMgbW9zdCBsaWtlbHkgYSBwb2ludGVyIHRvIHNvbWUgc3RydWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGluY2x1ZGVzIGBvdmVyaGVhZGAgYXMgYSBtZW1iZXIuIFRoZSBjaGVjayBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgYHFkaXNjX2dldF9zdGFiYCBmdW5jdGlvbiwgbG9jYXRlZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgYXJvdW5kIGxpbmUgNTQ0LiBUbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiA1MjE6XHRcdFx0fVxuIDUyMjpcdFx0XHR0YWIgPSBubGFfZGF0YSh0YltUQ0FfU1RBQl9EQVRBXSk7XG4gNTIzOlx0XHRcdHRzaXplID0gbmxhX2xlbih0YltUQ0FfU1RBQl9EQVRBXSkgLyBzaXplb2YodTE2KTtcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdGlmICh0c2l6ZSAhPSBzLVx1MDAzZXRzaXplIHx8ICghdGFiIFx1MDAyNlx1MDAyNiB0c2l6ZSBcdTAwM2UgMCkpIHtcbiA1Mjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgb2Ygc2l6ZSB0YWJsZVwmIzM0Oyk7XG4gNTI4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDUyOTpcdFx0fVxuIDUzMDpcdFxuIDUzMTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzdGFiLCBcdTAwMjZxZGlzY19zdGFiX2xpc3QsIGxpc3QpIHtcbiA1MzI6XHRcdFx0aWYgKG1lbWNtcChcdTAwMjZzdGFiLVx1MDAzZXN6b3B0cywgcywgc2l6ZW9mKCpzKSkpXG4gNTMzOlx0XHRcdFx0Y29udGludWU7XG4gNTM0Olx0XHRcdGlmICh0c2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiA1MzU6XHRcdFx0ICAgIG1lbWNtcChzdGFiLVx1MDAzZWRhdGEsIHRhYiwgZmxleF9hcnJheV9zaXplKHN0YWIsIGRhdGEsIHRzaXplKSkpXG4gNTM2Olx0XHRcdFx0Y29udGludWU7XG4gNTM3Olx0XHRcdHN0YWItXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiA1Mzg6XHRcdFx0cmV0dXJuIHN0YWI7XG4gNTM5Olx0XHR9XG4gNTQwOlx0XG4gNTQxOlx0XHRpZiAocy1cdTAwM2VzaXplX2xvZyBcdTAwM2UgU1RBQl9TSVpFX0xPR19NQVggfHxcbiA1NDI6XHRcdCAgICBzLVx1MDAzZWNlbGxfbG9nIFx1MDAzZSBTVEFCX1NJWkVfTE9HX01BWCkge1xuIDU0MzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgbG9nYXJpdGhtaWMgc2l6ZSBvZiBzaXplIHRhYmxlXCYjMzQ7KTtcbiA1NDQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XG4gNTQ3Olx0XHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuIDU0ODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwmIzM0Oyk7XG4gNTQ5Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDU1MDpcdFx0fVxuIDU1MTpcdFxuIDU1MjpcdFx0c3RhYiA9IGttYWxsb2NfZmxleCgqc3RhYiwgZGF0YSwgdHNpemUpO1xuIDU1MzpcdFx0aWYgKCFzdGFiKVxuIDU1NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA1NTU6XHRcbiA1NTY6XHRcdHN0YWItXHUwMDNlcmVmY250ID0gMTtcbiA1NTc6XHRcdHN0YWItXHUwMDNlc3pvcHRzID0gKnM7XG4gNTU4Olx0XHRpZiAodHNpemUgXHUwMDNlIDApXG4gNTU5Olx0XHRcdG1lbWNweShzdGFiLVx1MDAzZWRhdGEsIHRhYiwgZmxleF9hcnJheV9zaXplKHN0YWIsIGRhdGEsIHRzaXplKSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN0YWItXHUwMDNlbGlzdCwgXHUwMDI2cWRpc2Nfc3RhYl9saXN0KTtcbiA1NjI6XHRcbiA1NjM6XHRcdHJldHVybiBzdGFiO1xuIDU2NDpcdH1cbiA1NjU6XHRcbiA1NjY6XHR2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXG4gNTY3Olx0e1xuIDU2ODpcdFx0aWYgKCF0YWIpXG4gNTY5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgT3ZlcmhlYWQgaW4gYHRjX3NpemVzcGVjYCBmb3IgU2FuaXR5KioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGNoZWNrIG9uIGBzLSZndDtvdmVyaGVhZGAsIGxpa2VseSB3aXRoaW4gc29tZSB0cmFmZmljIGNvbnRyb2wgKFRDKSBjb250ZXh0LiBUaGUgcHJpbWFyeSBjb25jZXJuIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhpcyBgb3ZlcmhlYWRgIHZhbHVlIGZyb20gZ29pbmcgaGF5d2lyZSDigJMgZWl0aGVyIGJlY29taW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIG9yLCB1c2luZyBgYWJzKClgLCBleGNlc3NpdmVseSBzbWFsbCAob3IgbmVnYXRpdmUsIHdoaWNoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGNvdWxkIGJlIGVxdWFsbHkgcHJvYmxlbWF0aWMpLiBUaGUgdXNlIG9mIGBhYnMoKWAgaXMgYSBrZXkgaW5kaWNhdG9yIHRoYXQgd2UgYXJlIHByb2JhYmx5IGNvbmNlcm5lZCB3aXRoIGFic29sdXRlIHZhbHVlcywgbm90IHJhdyBzaWduZWQgaW50ZWdlcnMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdoYXQgYHN0cnVjdCB0Y19zaXplc3BlY2AgYWN0dWFsbHkgKmlzKi4gS25vd2luZyB0aGF0IHN0cnVjdCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCB0byBhc3Nlc3MgKndoeSogdGhpcyBvdmVyaGVhZCB2YWx1ZSBtYXR0ZXJzLCB3aGF0IGl0IHJlcHJlc2VudHMgKGJ5dGVzLCBwYWNrZXRzLCBzb21lIG90aGVyIG1ldHJpYz8pLCBhbmQgd2hhdCByZWFzb25hYmxlIGJvdW5kcyBhcmUgZm9yIGl0IHdpdGhpbiB0aGlzIFRDIHN1YnN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoZWFkZXIgc2l6ZXMsIHBhZGRpbmcsIGZyYW1lIG92ZXJoZWFkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBzYCB2YXJpYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QsIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBjb21wcmlzZXMgdGhhdCBzdHJ1Y3R1cmUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjX3NpemVzcGVjYCBhbmQgc2VlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgVEMgcGljdHVyZS4gT25jZSBJIGtub3cgdGhhdCwgSSBjYW4gZXZhbHVhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgaW1wb3NlZCBjb25zdHJhaW50cyBhbmQgaXRzIGltcGxpY2F0aW9ucyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y19zaXplc3BlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTUzPXN0cnVjdCBxZGlzY19zaXplX3RhYmxlIHtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTU1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6NTY6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWNcdHN6b3B0cztcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNTctXHRpbnRcdFx0XHRyZWZjbnQ7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkxPXN0cnVjdCB0Y19yYXRlc3BlYyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oLTEwMS1cbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDI6c3RydWN0IHRjX3NpemVzcGVjIHtcbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDMtXHR1bnNpZ25lZCBjaGFyXHRjZWxsX2xvZztcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc3RhYl9wb2xpY3lbVENBX1NUQUJfTUFYICYjNDM7IDFdID0ge1xubmV0L3NjaGVkL3NjaF9hcGkuYzo0OTI6XHRbVENBX1NUQUJfQkFTRV1cdD0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19zaXplc3BlYykgfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDkzLVx0W1RDQV9TVEFCX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTUwMC1cdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiO1xubmV0L3NjaGVkL3NjaF9hcGkuYzo1MDE6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWMgKnM7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTUwMi1cdHVuc2lnbmVkIGludCB0c2l6ZSA9IDA7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkwPXN0cnVjdCB0Y19yYXRlc3BlYyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oLTEwMC1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDE6c3RydWN0IHRjX3NpemVzcGVjIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDItXHR1bnNpZ25lZCBjaGFyXHRjZWxsX2xvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgYHN0cnVjdCB0Y19zaXplc3BlY2AgZGVmaW5pdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0IGlzIGl0IHNpemluZz8gSXMgaXQgaW52b2x2ZWQgaW4gcmF0ZSBsaW1pdGluZywgc2hhcGluZywgY2xhc3NpZmljYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBiYW5kd2lkdGggbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgbWVtYmVycyBhbmQgd2hhdCB0aGV5IHJlcHJlc2VudCBpbiB0ZXJtcyBvZiBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZmllbGRzIGFyZSBpbiB0aGlzPyBJcyBpdCBkZWZpbmluZyBwYWNrZXQgc2l6ZXMsIHF1ZXVlIGRlcHRocywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGVyZSBtdWx0aXBsZSBtZW1iZXJzPyBBcmUgdGhleSBpbnRlZ2VycywgYml0ZmllbGRzLCBvciBvdGhlciBzdHJ1Y3RzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBhYmxlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlIGRlc2lnbiB3aWxsIHJldmVhbCB0aGUgaW50ZW50IG9mIHRoaXMgc3RydWN0dXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0I2RlZmluZSBUQ19SVEFCX1NJWkVcdDEwMjRcbiAxMDE6XHRcbiAxMDI6XHRzdHJ1Y3QgdGNfc2l6ZXNwZWMge1xuIDEwMzpcdFx0dW5zaWduZWQgY2hhclx0Y2VsbF9sb2c7XG4gMTA0Olx0XHR1bnNpZ25lZCBjaGFyXHRzaXplX2xvZztcbiAxMDU6XHRcdHNob3J0XHRcdGNlbGxfYWxpZ247XG4gMTA2Olx0XHRpbnRcdFx0b3ZlcmhlYWQ7XG4gMTA3Olx0XHR1bnNpZ25lZCBpbnRcdGxpbmtsYXllcjtcbiAxMDg6XHRcdHVuc2lnbmVkIGludFx0bXB1O1xuIDEwOTpcdFx0dW5zaWduZWQgaW50XHRtdHU7XG4gMTEwOlx0XHR1bnNpZ25lZCBpbnRcdHRzaXplO1xuIDExMTpcdH07XG4gMTEyOlx0XG4gMTEzOlx0ZW51bSB7XG4gMTE0Olx0XHRUQ0FfU1RBQl9VTlNQRUMsXG4gMTE1Olx0XHRUQ0FfU1RBQl9CQVNFLFxuIDExNjpcdFx0VENBX1NUQUJfREFUQSxcbiAxMTc6XHRcdF9fVENBX1NUQUJfTUFYXG4gMTE4Olx0fTtcbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3ZlcmhlYWQgTGltaXQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBvc2luZyBhIGhhcmQgbGltaXQgb24gdGhlIGBvdmVyaGVhZGAgdmFsdWUsIHNwZWNpZmljYWxseSBjYXBwaW5nIGl0IGF0IGBTVEFCX09WRVJIRUFEX01BWGAsIHdoaWNoIGlzIDY1NTM1LiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3aHkgdGhpcyByZXN0cmljdGlvbj8gV2hhdCYjMzk7cyB0aGUgcHJvYmxlbSBpdCYjMzk7cyBhZGRyZXNzaW5nPyBDbGVhcmx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lLiBXZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIG9yIHBvc3NpYmx5IGV2ZW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMg4oCTIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG92ZXJoZWFkYCB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FwLiBJIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgYXMgYW4gaW5kZXgsIGEgY291bnRlciwgb3IgaW4gYW55IG90aGVyIGNyaXRpY2FsIGFyaXRobWV0aWMgb3BlcmF0aW9uIHRoYXQgY291bGQgYmUgdnVsbmVyYWJsZSB0byB0aGVzZSBraW5kcyBvZiBlcnJvcnMuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdmVyaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ2MC1cdFx0ZW50cnktXHUwMDNlcG9saWNlLmF2cmF0ZSA9IHRjZl9wb2xpY2VfdGNmcF9ld21hX3JhdGUoYWN0KTtcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDYxOlx0XHRlbnRyeS1cdTAwM2Vwb2xpY2Uub3ZlcmhlYWQgPSB0Y2ZfcG9saWNlX3JhdGVfb3ZlcmhlYWQoYWN0KTtcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDYyLVx0XHRlbnRyeS1cdTAwM2Vwb2xpY2UuYnVyc3RfcGt0ID0gdGNmX3BvbGljZV9idXJzdF9wa3QoYWN0KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0Ni1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ3Olx0aWYgKGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ4Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz01OTU9dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTktXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjYwMDpcdHBrdF9sZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IHN0YWItXHUwMDNlc3pvcHRzLm92ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF9hcGkuYy02MDEtXHRpZiAodW5saWtlbHkoIXN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSlcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yMDE9c3RydWN0IGNha2Vfc2NoZWRfY29uZmlnIHtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yMDgtXHR1MTZcdFx0ZndtYXJrX3NoZnQ7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyMDk6XHRzMTZcdFx0cmF0ZV9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTIxMC1cdHUxNlx0XHRyYXRlX21wdTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xMzcyPXN0YXRpYyB1NjQgY2FrZV9ld21hKHU2NCBhdmcsIHU2NCBzYW1wbGUsIHUzMiBzaGlmdClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMzc4LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTM3OTpzdGF0aWMgdTMyIGNha2VfY2FsY19vdmVyaGVhZChzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxZCwgdTMyIGxlbiwgdTMyIG9mZilcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzODAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTAtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzkxOlx0bGVuID0gbWF4KChzMzIpbGVuICYjNDM7IHEtXHUwMDNlcmF0ZV9vdmVyaGVhZCwgKHMzMilxLVx1MDAzZXJhdGVfbXB1KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTItXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQxMi1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MTM6c3RhdGljIHUzMiBjYWtlX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDE0LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDIzLVx0aWYgKHNlZ3MgPT0gMSlcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MjQ6XHRcdHJldHVybiBjYWtlX2NhbGNfb3ZlcmhlYWQocSwgbGVuLCBvZmYpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQyNS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDUyLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTQ1MzpcdHJldHVybiAoY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKSAqIChzZWdzIC0gMSkgJiM0Mztcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0NTQ6XHRcdGNha2VfY2FsY19vdmVyaGVhZChxLCBsYXN0X2xlbiwgb2ZmKSk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDU1LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU1PXN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4MTYtXHRcdFx0Y29iYWx0X3NldF9lbnF1ZXVlX3RpbWUoc2Vncywgbm93KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE4MTc6XHRcdFx0Z2V0X2NvYmFsdF9jYihzZWdzKS1cdTAwM2VhZGp1c3RlZF9sZW4gPSBjYWtlX292ZXJoZWFkKHEsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODE4LVx0XHRcdFx0XHRcdFx0XHRcdCAgc2Vncyk7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg0MS1cdFx0Y29iYWx0X3NldF9lbnF1ZXVlX3RpbWUoc2tiLCBub3cpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTg0MjpcdFx0Z2V0X2NvYmFsdF9jYihza2IpLVx1MDAzZWFkanVzdGVkX2xlbiA9IGNha2Vfb3ZlcmhlYWQocSwgc2tiKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NDMtXHRcdGZsb3dfcXVldWVfYWRkKGZsb3csIHNrYik7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjY0OT1zdGF0aWMgaW50IGNha2VfY29uZmlnX2NoYW5nZShzdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcgKnEsIHN0cnVjdCBubGF0dHIgKm9wdCxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI2NTA6XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLCBib29sICpvdmVyaGVhZF9jaGFuZ2VkKVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjY1MS17XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMS1cdGlmICh0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MTI6XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VyYXRlX292ZXJoZWFkLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMy1cdFx0XHQgICBubGFfZ2V0X3MzMih0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MTQtXHRcdHJhdGVfZmxhZ3MgfD0gQ0FLRV9GTEFHX09WRVJIRUFEO1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcxNTpcdFx0Km92ZXJoZWFkX2NoYW5nZWQgPSB0cnVlO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxNi1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzE5LVx0XHRyYXRlX2ZsYWdzIFx1MDAyNj0gfkNBS0VfRkxBR19PVkVSSEVBRDtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MjA6XHRcdCpvdmVyaGVhZF9jaGFuZ2VkID0gdHJ1ZTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MjEtXHR9XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9Mjc3Mz1zdGF0aWMgaW50IGNha2VfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjc3Ny1cdHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSA9IHFkLVx1MDAzZWNvbmZpZztcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3Nzg6XHRib29sIG92ZXJoZWFkX2NoYW5nZWQgPSBmYWxzZTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzktXHRpbnQgcmV0O1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODUtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzg2Olx0cmV0ID0gY2FrZV9jb25maWdfY2hhbmdlKHEsIG9wdCwgZXh0YWNrLCBcdTAwMjZvdmVyaGVhZF9jaGFuZ2VkKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODctXHRpZiAocmV0KVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODktXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzkwOlx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3OTEtXHRcdFdSSVRFX09OQ0UocWQtXHUwMDNlbWF4X25ldGxlbiwgMCk7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjkwOD1zdGF0aWMgaW50IGNha2VfY29uZmlnX2R1bXAoc3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NTgtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyOTU5Olx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX0NBS0VfT1ZFUkhFQUQsIFJFQURfT05DRShxLVx1MDAzZXJhdGVfb3ZlcmhlYWQpKSlcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NjAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTMzMDE9c3RhdGljIGludCBjYWtlX21xX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMDUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzA2Olx0Ym9vbCBvdmVyaGVhZF9jaGFuZ2VkID0gZmFsc2U7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzA3LVx0dW5zaWduZWQgaW50IG50eDtcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzA5LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzMxMDpcdHJldCA9IGNha2VfY29uZmlnX2NoYW5nZShcdTAwMjZwcml2LVx1MDAzZWNha2VfY29uZmlnLCBvcHQsIGV4dGFjaywgXHUwMDI2b3ZlcmhlYWRfY2hhbmdlZCk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzExLVx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0zMzE3LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzMxODpcdFx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMTktXHRcdFx0V1JJVEVfT05DRShxZC1cdTAwM2VtYXhfbmV0bGVuLCAwKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYz03MTA9c3RhdGljIHUzMiBnZXRfbWVtb3J5X2xpbWl0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgbGltaXQpXG4tLVxubmV0L3NjaGVkL3NjaF9kdWFscGkyLmMtNzEyLVx0LyogQXBwbHkgcnVsZSBvZiB0aHVtYiwgaS5lLiwgZG91YmxpbmcgdGhlIHBhY2tldCBsZW5ndGgsXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3MTM6XHQgKiB0byBmdXJ0aGVyIGluY2x1ZGUgcGVyIHBhY2tldCBvdmVyaGVhZCBpbiBtZW1vcnlfbGltaXQuXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYy03MTQtXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz04MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MjMtXHRcdC8qIERlbGF5IGNsZWFyaW5nIHRoZSBTVEFURV9NSVNTRUQgaGVyZSB0byByZWR1Y2Vcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjgyNDpcdFx0ICogdGhlIG92ZXJoZWFkIG9mIHRoZSBzZWNvbmQgc3Bpbl90cnlsb2NrKCkgaW5cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgyNS1cdFx0ICogcWRpc2NfcnVuX2JlZ2luKCkgYW5kIF9fbmV0aWZfc2NoZWR1bGUoKSBjYWxsaW5nXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTU2Mz12b2lkIHBzY2hlZF9yYXRlY2ZnX3ByZWNvbXB1dGUoc3RydWN0IHBzY2hlZF9yYXRlY2ZnICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE1NjctXHRtZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxNTY4Olx0ci1cdTAwM2VvdmVyaGVhZCA9IGNvbmYtXHUwMDNlb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNTY5LVx0ci1cdTAwM2VtcHUgPSBjb25mLVx1MDAzZW1wdTtcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjI9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3OTgtXHRcdC8qIE9wdGlvbnMgbm90IHN1cHBvcnRlZCBieSB0aGUgb2ZmbG9hZC4gKi9cbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc5OTpcdFx0aWYgKGhvcHQtXHUwMDNlcmF0ZS5vdmVyaGVhZCB8fCBob3B0LVx1MDAzZWNlaWwub3ZlcmhlYWQpIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTgwMDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0hUQiBvZmZsb2FkIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIG92ZXJoZWFkIHBhcmFtZXRlclwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE4MDEtXHRcdFx0Z290byBmYWlsdXJlO1xuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYz05Mz1zdHJ1Y3QgbmV0ZW1fc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzNS1cdCAqL1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzNjpcdHMzMlx0XHRcdHBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzctXHR1MzJcdFx0XHRjZWxsX3NpemU7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTM4LVx0c3RydWN0IHJlY2lwcm9jYWxfdmFsdWVcdGNlbGxfc2l6ZV9yZWNpcHJvY2FsO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzOTpcdHMzMlx0XHRcdGNlbGxfb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTQwLVx0dTMyXHRcdFx0bGltaXQ7XG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTM2Nz1zdGF0aWMgdTY0IHBhY2tldF90aW1lX25zKHU2NCBsZW4sIGNvbnN0IHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxKVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM2OC17XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MzY5Olx0bGVuICYjNDM7PSBxLVx1MDAzZXBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0zNzAtXG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3NS1cdFx0XHRjZWxscyYjNDM7JiM0Mzs7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6Mzc2Olx0XHRsZW4gPSBjZWxscyAqIChxLVx1MDAzZWNlbGxfc2l6ZSAmIzQzOyBxLVx1MDAzZWNlbGxfb3ZlcmhlYWQpO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3Ny1cdH1cbi0tXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM9OTM2PXN0YXRpYyB2b2lkIGdldF9yYXRlKHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDAtXHRxLVx1MDAzZXJhdGUgPSByLVx1MDAzZXJhdGU7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQxOlx0cS1cdTAwM2VwYWNrZXRfb3ZlcmhlYWQgPSByLVx1MDAzZXBhY2tldF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDItXHRxLVx1MDAzZWNlbGxfc2l6ZSA9IHItXHUwMDNlY2VsbF9zaXplO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjk0MzpcdHEtXHUwMDNlY2VsbF9vdmVyaGVhZCA9IHItXHUwMDNlY2VsbF9vdmVyaGVhZDtcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDQtXHRpZiAocS1cdTAwM2VjZWxsX3NpemUpXG4tLVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTEyNTA9c3RhdGljIGludCBuZXRlbV9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzAxLVx0fVxubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzMDI6XHRyYXRlLnBhY2tldF9vdmVyaGVhZCA9IHEtXHUwMDNlcGFja2V0X292ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzMDMtXHRyYXRlLmNlbGxfc2l6ZSA9IHEtXHUwMDNlY2VsbF9zaXplO1xubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzMDQ6XHRyYXRlLmNlbGxfb3ZlcmhlYWQgPSBxLVx1MDAzZWNlbGxfb3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTMwNS1cdGlmIChubGFfcHV0KHNrYiwgVENBX05FVEVNX1JBVEUsIHNpemVvZihyYXRlKSwgXHUwMDI2cmF0ZSkpXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYz0zODM9c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODgtXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjM4OTpcdC8qICYjMzk7bG1heCYjMzk7IGNhbiByYW5nZSBmcm9tIFtRRlFfTUlOX0xNQVgsIHBrdGxlbiAmIzQzOyBzdGFiIG92ZXJoZWFkXSAqL1xubmV0L3NjaGVkL3NjaF9xZnEuYy0zOTAtXHRpZiAobG1heCBcdTAwM2UgUUZRX01BWF9MTUFYKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjcxPXN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjkzLVx0XHRcdG1heF9mcm1fbGVuID0gZHVyYXRpb25fdG9fbGVuZ3RoKHEsIHNjaGVkLVx1MDAzZW1heF9vcGVuX2dhdGVfZHVyYXRpb25bdGNdKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjk0Olx0XHRcdC8qIENvbXBlbnNhdGUgZm9yIEwxIG92ZXJoZWFkIGZyb20gc2l6ZSB0YWJsZSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjk1LVx0XHRcdCAqIGJ1dCBkb24mIzM5O3QgbGV0IHRoZSBmcmFtZSBzaXplIGdvIG5lZ2F0aXZlXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTctXHRcdFx0aWYgKHN0YWIpIHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjk4Olx0XHRcdFx0bWF4X2ZybV9sZW4gLT0gc3RhYi1cdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI5OS1cdFx0XHRcdG1heF9mcm1fbGVuID0gbWF4X3QoaW50LCBtYXhfZnJtX2xlbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RiZi5jPTExOT1zdGF0aWMgdTY0IHBzY2hlZF9uc190MmwoY29uc3Qgc3RydWN0IHBzY2hlZF9yYXRlY2ZnICpyLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGJmLmMtMTMzLVxubmV0L3NjaGVkL3NjaF90YmYuYzoxMzQ6XHRpZiAobGVuIFx1MDAzZSByLVx1MDAzZW92ZXJoZWFkKVxubmV0L3NjaGVkL3NjaF90YmYuYzoxMzU6XHRcdGxlbiAtPSByLVx1MDAzZW92ZXJoZWFkO1xubmV0L3NjaGVkL3NjaF90YmYuYy0xMzYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgc28gYG92ZXJoZWFkYCBpcyBkZWZpbmVkIGFzIGFuIGludGVnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBiZWNvbWVzIGV4Y2Vzc2l2ZWx5IGxhcmdlLCB0aGVyZSYjMzk7cyBhIHJlYWwgcmlzayBvZiBhbiBpbnRlZ2VyIG92ZXJmbG93IGhhcHBlbmluZyByaWdodCBoZXJlOiBgcGt0X2xlbiA9IHNrYi0mZ3Q7bGVuICYjNDM7IHN0YWItJmd0O3N6b3B0cy5vdmVyaGVhZDtgIGluc2lkZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0IGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjb25zdHJhaW50cyBhbmQgY2FsY3VsYXRpb25zIGludm9sdmVkLiBJIG5lZWQgdG8gc2VlIGhvdyBgcGt0X2xlbmAgaXMgdXNlZCBkb3duc3RyZWFtIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBpZiB0aGlzIG92ZXJmbG93IG9jY3Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdGlmIChubGFfcHV0KHNrYiwgVENBX1NUQUJfQkFTRSwgc2l6ZW9mKHN0YWItXHUwMDNlc3pvcHRzKSwgXHUwMDI2c3RhYi1cdTAwM2Vzem9wdHMpKVxuIDU4NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1ODc6XHRcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xuIDU4ODpcdFxuIDU4OTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNTkwOlx0XG4gNTkxOlx0bmxhX3B1dF9mYWlsdXJlOlxuIDU5MjpcdFx0cmV0dXJuIC0xO1xuIDU5MzpcdH1cbiA1OTQ6XHRcbiA1OTU6XHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1OTY6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4gNTk3Olx0e1xuIDU5ODpcdFx0aW50IHBrdF9sZW4sIHNsb3Q7XG4gNTk5Olx0XG4gNjAwOlx0XHRwa3RfbGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBzdGFiLVx1MDAzZXN6b3B0cy5vdmVyaGVhZDtcbiA2MDE6XHRcdGlmICh1bmxpa2VseSghc3RhYi1cdTAwM2Vzem9wdHMudHNpemUpKVxuIDYwMjpcdFx0XHRnb3RvIG91dDtcbiA2MDM6XHRcbiA2MDQ6XHRcdHNsb3QgPSBwa3RfbGVuICYjNDM7IHN0YWItXHUwMDNlc3pvcHRzLmNlbGxfYWxpZ247XG4gNjA1Olx0XHRpZiAodW5saWtlbHkoc2xvdCBcdTAwM2MgMCkpXG4gNjA2Olx0XHRcdHNsb3QgPSAwO1xuIDYwNzpcdFxuIDYwODpcdFx0c2xvdCBcdTAwM2VcdTAwM2U9IHN0YWItXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xuIDYwOTpcdFx0aWYgKGxpa2VseShzbG90IFx1MDAzYyBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZSkpXG4gNjEwOlx0XHRcdHBrdF9sZW4gPSBzdGFiLVx1MDAzZWRhdGFbc2xvdF07XG4gNjExOlx0XHRlbHNlXG4gNjEyOlx0XHRcdHBrdF9sZW4gPSBzdGFiLVx1MDAzZWRhdGFbc3RhYi1cdTAwM2Vzem9wdHMudHNpemUgLSAxXSAqXG4gNjEzOlx0XHRcdFx0XHQoc2xvdCAvIHN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSAmIzQzO1xuIDYxNDpcdFx0XHRcdFx0c3RhYi1cdTAwM2VkYXRhW3Nsb3QgJSBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZV07XG4gNjE1Olx0XG4gNjE2Olx0XHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gNjE3Olx0b3V0OlxuIDYxODpcdFx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuIDYxOTpcdFx0XHRwa3RfbGVuID0gMTtcbiA2MjA6XHRcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIDYyMTpcdH1cbiA2MjI6XHRcbiA2MjM6XHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcWRpc2Nfd2F0Y2hkb2coc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIDYyNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIFBhY2tldCBMZW5ndGggQ2FsY3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJZiB0aGUgYG92ZXJoZWFkYCB2YWx1ZSBpcyBzdWJzdGFudGlhbCwgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gb2YgYHBrdF9sZW5gIGNhbiBiZWNvbWUgZW5vcm1vdXMsIG9yIGV2ZW4gbmVnYXRpdmUuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBUaGUgY29kZSB0aGVuIGNhbGN1bGF0ZXMgYHNsb3RgIGJhc2VkIG9uIGBwa3RfbGVuYCBhbmQgY2VsbCBhbGlnbm1lbnQuIEEgdmVyeSBsYXJnZSBgcGt0X2xlbmAgbGVhZHMgdG8gYSBsYXJnZSBgc2xvdGAsIHdoaWNoIGlzIHRoZW4gcmlnaHQtc2hpZnRlZC4KCkkgc2VlIGEgY2hlY2sgdG8gZW5zdXJlIGBzbG90YCBkb2VzbiYjMzk7dCBleGNlZWQgYHN0YWItJmd0O3N6b3B0cy50c2l6ZWAsIGFuZCBpZiBpdCBkb2VzLCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGNhbGN1bGF0aW9uIGZvciBgcGt0X2xlbmAgd2l0aGluIHRoYXQgY29uZGl0aW9uIHVzaW5nIHRoZSBtb2R1bG8gb3BlcmF0b3IuIE15IGZpcnN0IGluc3RpbmN0IGlzLCB0aGF0IG1vZHVsbyBvcGVyYXRpb24gbG9va3Mgc2FmZSBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzLiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgYHNsb3RgIGJlaW5nIG5lZ2F0aXZlLiBUaGUgY29kZSBpbmNsdWRlcyBhIGNoZWNrIGFuZCBjbGFtcHMgYHNsb3RgIHRvIDAgaWYgaXQmIzM5O3MgbmVnYXRpdmUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoYXQgb2NjdXJzLgoKVGhlIGtleSBpbnNpZ2h0IGlzIHRoZSBpbnRlZ2VyIG92ZXJmbG93LiBJZiBgcGt0X2xlbmAgaXMgbGFyZ2UgZW5vdWdoIGFmdGVyIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIGFzIGFuIGBpbnRgLCB3aGVuIHdlIGFkZCBgY2VsbF9hbGlnbmAgdG8gaXQsIHRoZSB2YWx1ZSBjb3VsZCB3cmFwIGFyb3VuZCwgcmVzdWx0aW5nIGluIGEgbmVnYXRpdmUgYHNsb3RgLiBUaGUgY29kZSBoYW5kbGVzIG5lZ2F0aXZlIGBzbG90YCB0aHJvdWdoIGNsYW1waW5nLgoKTXkgbWluZCBpbW1lZGlhdGVseSBjb25zaWRlcnMgYSBzY2VuYXJpby4gSWYgYG92ZXJoZWFkYCBpcyBlZmZlY3RpdmVseSBgSU5UX01BWGAsIGFuZCBgc2tiLSZndDtsZW5gIGlzIGFyb3VuZCAxNTAwLCBgcGt0X2xlbmAgd2lsbCB3cmFwIGFyb3VuZCB0byBuZWdhdGl2ZS4gQW5kIHRoZXJlZm9yZSBgc2xvdGAgY2FuIGJlIG5lZ2F0aXZlIGFuZCBiZSBjbGFtcGVkIHRvIDAuCgpIb3dldmVyLCBhIGRpZmZlcmVudCBzY2VuYXJpbyBhbHNvIGVtZXJnZXM6IHdoYXQgaWYgYG92ZXJoZWFkYCBpcyBqdXN0IHNsaWdodGx5IGxlc3MgdGhhbiBgSU5UX01BWGAsIHNvIHRoYXQgdGhlIG92ZXJmbG93IGRvZXNuJiMzOTt0IG9jY3VyIGluaXRpYWxseSwgYW5kIGBwa3RfbGVuYCBpcyBzdGlsbCBhIHBvc2l0aXZlIGJ1dCB2ZXJ5IGxhcmdlIGludGVnZXI/IFRoZW4gYHNsb3RgIHdvdWxkIGFsc28gYmUgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFdlIGNvdWxkIHN0aWxsIHJ1biBpbnRvIHByb2JsZW1zIGxhdGVyLgoKV2hlbiBgc2xvdCAvIHRzaXplYCBpcyBsYXJnZSwgaXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93IHdoZW4gYHBrdF9sZW5gIGlzIGNhbGN1bGF0ZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYHBrdF9sZW5gIGNhbiBiZSBsYXJnZSBlbm91Z2ggdG8gb3ZlcmZsb3cgZHVyaW5nIHRoZSBgcGt0X2xlbiAmbHQ7Jmx0Oz0gc3RhYi0mZ3Q7c3pvcHRzLnNpemVfbG9nO2Agb3BlcmF0aW9uLiBXaGljaCBjb3VsZCByZXN1bHQgaW4gc3RvcmluZyBhbiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBpbiBgcWRpc2Nfc2tiX2NiKHNrYiktJmd0O3BrdF9sZW5gLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgdHJpY2t5IG9uZSB0byBleHBsb2l0LCBidXQgdGhlIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhhdCBvcmlnaW5hbCBjb21taXQgb3IgcGF0Y2ggZGVzY3JpcHRpb24uIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbnRleHQgdG8gY2xlYXIgdGhpcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UmVqZWN0IERSUiBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvbi05MS0gICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkMWUyXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb246OTI6ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24tOTMtICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrKioKCk9rYXksIHNvIEkmIzM5O20gc3VzcGVjdGluZyBzb21lIGtpbmQgb2Ygb3ZlcmhlYWQgaXNzdWUuIFRoZSBuYW1lIGBTVEFCX09WRVJIRUFEX01BWGAga2VlcHMgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgaGVhZCBhcyBhIHBvdGVudGlhbCBjdWxwcml0LiBJdCBzdWdnZXN0cyBhIG1heGltdW0gYWxsb3dlZCB2YWx1ZSByZWxhdGVkIHRvIHNvbWV0aGluZyDigJMgc3RhYiwgd2hhdGV2ZXIgdGhhdCByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGNvbnN0YW50IHdhcyBpbnRyb2R1Y2VkLCBhbnkgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBhbnkgYXNzb2NpYXRlZCBjb21taXQgbWVzc2FnZXMuIFRob3NlIGNvbW1pdHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmNvdmVyaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2UuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdpdCBsb2dgIHNlYXJjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBTVEFCX09WRVJIRUFEX01BWGAuIEhvcGVmdWxseSwgdGhlIGhpc3Rvcnkgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBpdCB3YXMgZGVzaWduZWQgdG8gYWRkcmVzcywgYW5kIHVsdGltYXRlbHkgaGVscCBtZSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgY29udHJpYnV0aW5nIHRvIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlLiBJJiMzOTttIGhvcGluZyBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBldmVuIGxpbmtlZCB0byBzb21lIHBlcmZvcm1hbmNlIGJlbmNobWFya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NUQUJfT1ZFUkhFQURfTUFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oLTE0LSNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVhcdDMwXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDoxNTojZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgtMTYtXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz00OTY9c3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01NDYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU0NzpcdGlmIChhYnMocy1cdTAwM2VvdmVyaGVhZCkgXHUwMDNlIFNUQUJfT1ZFUkhFQURfTUFYKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OC1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUQUIgT3ZlcmhlYWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTVEFCX09WRVJIRUFEX01BWGAgYW5kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHMtJmd0O292ZXJoZWFkYCBleGNlZWRzIHRoaXMgbGltaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlIHJlc3RyaWN0aW9uPyBXaGF0JiMzOTtzIHRoZSBwcmFjdGljYWwgaW1wYWN0IG9mIGEgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgY2xlYXJseSBhbGxvd3MgZm9yIGl0IHRvIGJlIHF1aXRlIGxhcmdlIHVwIHRvIHRoaXMgcG9pbnQsIHNvIGl0IGlzIHByb2JhYmx5IG5vdCBhIHBlcmZvcm1hbmNlIGlzc3VlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBleGlzdGluZyBxZGlzY3MgdGhhdCBtaWdodCBiZSBhZmZlY3RlZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZHJyYCBhbmQgYGV0c2AsIHNpbmNlIHRoZXkgYXJlIG1lbnRpb25lZC4gSSBzZWUgaW4gYGRyci5qc29uYCB0aGV5IGFyZSB0ZXN0aW5nIHdpdGggYSByYXRoZXIgZXh0cmVtZSBvdmVyaGVhZCB2YWx1ZTogYCRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyYC4gVGhhdCB2YWx1ZSwgYDIxNDc0ODMwMDBgLCBpcyBoZXggYDB4N0ZGRkZENzhgLiBUaGUgc2FtZSBleHRyZW1lIHZhbHVlIGlzIGFsc28gYmVpbmcgdXNlZCBpbiB0aGUgYGV0c2AgdGVzdCBpbiBgZXRzLmpzb25gOiBgJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMWAuCgpTbyBjbGVhcmx5LCB0aGVzZSBleHRyZW1lIHZhbHVlcyBhcmUgYmVpbmcgKnRlc3RlZCouIFdoeSB3b3VsZCB0aGV5IHRlc3Qgc3VjaCBsYXJnZSB2YWx1ZXM/IElzIGl0IGludGVuZGVkIG9yIGFjY2lkZW50YWw/IEFuZCBpZiBpbnRlbmRlZCwgd2hhdCYjMzk7cyB0aGUgdXNlIGNhc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc2VlbWluZ2x5IGFyYml0cmFyeSBsaW1pdCBpcyBiZWluZyBpbXBvc2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBuZXQvc2NoZWQvc2NoX2Ryci5jYCBjb2RlIHRvIHNlZSBob3cgYG92ZXJoZWFkYCBpcyB1c2VkIGluIHRoYXQgcWRpc2Mgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0fVxuIDM1MTpcdFxuIDM1MjpcdFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVx1MDAzZXFkaXNjLCB0b19mcmVlKTtcbiAzNTM6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHtcbiAzNTQ6XHRcdFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xuIDM1NTpcdFx0XHRcdGNsLVx1MDAzZXFzdGF0cy5kcm9wcyYjNDM7JiM0Mzs7XG4gMzU2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbiAzNTc6XHRcdFx0fVxuIDM1ODpcdFx0XHRyZXR1cm4gZXJyO1xuIDM1OTpcdFx0fVxuIDM2MDpcdFxuIDM2MTpcdFx0aWYgKCFjbF9pc19hY3RpdmUoY2wpKSB7XG4gMzYyOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2wtXHUwMDNlYWxpc3QsIFx1MDAyNnEtXHUwMDNlYWN0aXZlKTtcbiAzNjM6XHRcdFx0V1JJVEVfT05DRShjbC1cdTAwM2VkZWZpY2l0LCBSRUFEX09OQ0UoY2wtXHUwMDNlcXVhbnR1bSkpO1xuIDM2NDpcdFx0fVxuIDM2NTpcdFxuIDM2NjpcdFx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgbGVuKTtcbiAzNjc6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4gMzY4Olx0XHRyZXR1cm4gZXJyO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM3MjpcdHtcbiAzNzM6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gMzc0Olx0XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbiAzNzU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMzc2Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDM3NzpcdFxuIDM3ODpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cS1cdTAwM2VhY3RpdmUpKVxuIDM3OTpcdFx0XHRnb3RvIG91dDtcbiAzODA6XHRcdHdoaWxlICgxKSB7XG4gMzgxOlx0XHRcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxLVx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xuIDM4MjpcdFx0XHRza2IgPSBjbC1cdTAwM2VxZGlzYy1cdTAwM2VvcHMtXHUwMDNlcGVlayhjbC1cdTAwM2VxZGlzYyk7XG4gMzgzOlx0XHRcdGlmIChza2IgPT0gTlVMTCkge1xuIDM4NDpcdFx0XHRcdHFkaXNjX3dhcm5fbm9ud2MoX19mdW5jX18sIGNsLVx1MDAzZXFkaXNjKTtcbiAzODU6XHRcdFx0XHRnb3RvIG91dDtcbiAzODY6XHRcdFx0fVxuIDM4NzpcdFxuIDM4ODpcdFx0XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gMzg5Olx0XHRcdGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KSB7XG4gMzkwOlx0XHRcdFx0V1JJVEVfT05DRShjbC1cdTAwM2VkZWZpY2l0LCBjbC1cdTAwM2VkZWZpY2l0IC0gbGVuKTtcbiAzOTE6XHRcdFx0XHRza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC1cdTAwM2VxZGlzYyk7XG4gMzkyOlx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSlcbiAzOTM6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDM5NDpcdFx0XHRcdGlmIChjbC1cdTAwM2VxZGlzYy1cdTAwM2VxLnFsZW4gPT0gMClcbiAzOTU6XHRcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Y2wtXHUwMDNlYWxpc3QpO1xuIDM5NjpcdFxuIDM5NzpcdFx0XHRcdGJzdGF0c191cGRhdGUoXHUwMDI2Y2wtXHUwMDNlYnN0YXRzLCBza2IpO1xuIDM5ODpcdFx0XHRcdHFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpO1xuIDM5OTpcdFx0XHRcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlIGluIGRycl9kZXF1ZXVlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcnJfZGVxdWV1ZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBsaW5lOiBgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpO2AuIGBxZGlzY19wa3RfbGVuKHNrYilgIGlzIHJldHVybmluZyB0aGUgcGFja2V0IGxlbmd0aCB1c2luZyBgcWRpc2Nfc2tiX2NiKHNrYiktJmd0O3BrdF9sZW5gLiBOb3csIGlmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGlzIGBsZW5gIGNhbiBwb3RlbnRpYWxseSBiZWNvbWUgcXVpdGUgbGFyZ2UuCgpUaGF0JiMzOTtzIHdoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb25hbCBgaWYgKGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdClgIGNvdWxkIGZhaWwgYmVjYXVzZSBgbGVuYCBpcyB0b28gbGFyZ2Ugb3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgYGxlbmAgc29tZWhvdyBiZWNhbWUgbmVnYXRpdmU/IEl0IGxvb2tzIGxpa2UgSSB3YXMgYSBsaXR0bGUgaGFzdHksIGFzIGBsZW5gIGlzIGFuIGB1bnNpZ25lZCBpbnRgLgoKSG9sZCBvbi4gU2luY2UgYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgYWxzbyByZXR1cm5pbmcgYW4gYHVuc2lnbmVkIGludGAgdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciBgbGVuYCB0byBhY3R1YWxseSBiZWNvbWUgbmVnYXRpdmUsIGl0IGNvdWxkIGp1c3Qgb3ZlcmZsb3cuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhIHN1YnRyYWN0aW9uIHJlc3VsdGluZyBpbiBhbiBpbmNyZWFzZWQgYGRlZmljaXRgIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHRob3VnaCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgcWRpc2NfcGt0X2xlbmAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oPTI5Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wZWVrX2xlbihzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0zMDYtXHR9XG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDozMDc6XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0zMDgtXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD04OTI9c3RhdGljIGlubGluZSBib29sIHFkaXNjX3R4X2lzX25vb3AoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkwMy1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTA1LXtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTk2NT1zdGF0aWMgaW5saW5lIHZvaWQgYnN0YXRzX3VwZGF0ZShzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19zeW5jICpic3RhdHMsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05Njcte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5Njg6XHRfYnN0YXRzX3VwZGF0ZShic3RhdHMsIHFkaXNjX3BrdF9sZW4oc2tiKSwgcWRpc2NfcGt0X3NlZ3Moc2tiKSk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk2OS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05ODg9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5MC17XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjk5MTpcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5Mi19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05OTQ9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19jcHVfYmFja2xvZ19kZWMoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTYte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5OTc6XHR0aGlzX2NwdV9zdWIoc2NoLVx1MDAzZWNwdV9xc3RhdHMtXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTk4LX1cbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEwMDU9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEwMDcte1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDA4Olx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAwOS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD0xMDExPXN0YXRpYyBpbmxpbmUgdm9pZCBxZGlzY19xc3RhdHNfY3B1X2JhY2tsb2dfaW5jKHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxMy17XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEwMTQ6XHR0aGlzX2NwdV9hZGQoc2NoLVx1MDAzZWNwdV9xc3RhdHMtXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxNS19XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD0xMjY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3My1cdGlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEyNzQ6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEyNzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBxZGlzY19wa3RfbGVuYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcGFja2V0IGxlbmd0aHMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBxdWV1aW5nIGRpc2NpcGxpbmUgY29udGV4dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBjb3JlIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb24gb2YgYHFkaXNjX3BrdF9sZW5gIHJlc2lkZT8gQWgsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgc2NoZWR1bGluZyBoZWFkZXJzLCBgaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaGAgc291bmRzIGxpa2UgdGhlIHJpZ2h0IHNwb3QuIExldCBtZSBwdWxsIHRoYXQgdXAgYW5kIGNvbmZpcm0gbXkgaW50dWl0aW9uLiYjMzQ7IFRpbWUgdG8gZ2V0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBoYXMgdG8gc2F5LiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHR9XG4gOTAxOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcWRpc2NfcGt0X2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkwNTpcdHtcbiA5MDY6XHRcdHJldHVybiBxZGlzY19za2JfY2Ioc2tiKS1cdTAwM2Vwa3RfbGVuO1xuIDkwNzpcdH1cbiA5MDg6XHRcbiA5MDk6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3Rfc2Vncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkxMDpcdHtcbiA5MTE6XHRcdHUzMiBwa3Rfc2VncyA9IHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9zZWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShwa3Rfc2VncyAhPVxuIDkxNDpcdFx0XHRcdChza2JfaXNfZ3NvKHNrYikgPyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3MgOiAxKSk7XG4gOTE1Olx0XHRyZXR1cm4gcGt0X3NlZ3M7XG4gOTE2Olx0fVxuIDkxNzpcdFxuIDkxODpcdC8qIGFkZGl0aW9uYWwgcWRpc2MgeG1pdCBmbGFncyAoTkVUX1hNSVRfTUFTSyBpbiBsaW51eC9uZXRkZXZpY2UuaCkgKi9cbiA5MTk6XHRlbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gRFJSIFF1ZXVlaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxZGlzY19wa3RfbGVuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBEUlIgKERlZmljaXQgUm91bmQgUm9iaW4pIHF1ZXVlaW5nIGRpc2NpcGxpbmUuIGBxZGlzY19wa3RfbGVuYCB1bHRpbWF0ZWx5IHJldHVybnMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFRoZSBjcnV4IG9mIG15IGNvbmNlcm4gaXMgaG93IHBhY2tldCBsZW5ndGggaXMgY2FsY3VsYXRlZCBhbmQgdXNlZCBpbiBgZHJyX2RlcXVldWVgLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYWRkcyB0aGUgYHNrYi0mZ3Q7bGVuYCAobGlrZWx5IGFyb3VuZCAxNTAwIGJ5dGVzKSB0byBgc3RhYi0mZ3Q7c3pvcHRzLm92ZXJoZWFkYC4gTGV0JiMzOTtzIHNheSBgb3ZlcmhlYWRgIGlzIGEgbGFyZ2UgbnVtYmVyLCBzcGVjaWZpY2FsbHkgYDIxNDc0ODMwMDBgICh3aGljaCBpcyBgMHg3RkZGRkQ3OGApLiAgSW4gdGhpcyBzY2VuYXJpbywgYHBrdF9sZW5gIChhbiBgaW50YCkgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGAyMTQ3NDg0NTAwYCwgYSAqcG9zaXRpdmUqIG51bWJlciwgYW5kIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQuCgpUaGUgY2FsY3VsYXRpb24gcHJvY2VlZHMgd2l0aCBgc2xvdCA9IHBrdF9sZW4gJiM0Mzsgc3RhYi0mZ3Q7c3pvcHRzLmNlbGxfYWxpZ247YC4gIFdpdGggYGNlbGxfYWxpZ25gIGF0IDAsIGBzbG90YCBpcyBhbHNvIGAyMTQ3NDg0NTAwYC4gVGhlbiwgYHNsb3RgIGlzIHJpZ2h0LXNoaWZ0ZWQgYnkgYGNlbGxfbG9nYC4gIElmIGBjZWxsX2xvZ2AgaXMgMCwgYHNsb3RgIHJlbWFpbnMgdW5jaGFuZ2VkLiAgSWYgYHRzaXplYCBpcyAwLCB0aGUgY29kZSBqdW1wcyB0byBgb3V0OmAuCgpBdCBgb3V0OmAsIGlmIGBwa3RfbGVuYCBpcyBsZXNzIHRoYW4gMSwgaXQmIzM5O3Mgc2V0IHRvIDEuIEhvd2V2ZXIsIGluIG91ciBleGFtcGxlLCAgYHBrdF9sZW5gIGlzIGAyMTQ3NDg0NTAwYCwgc28gdGhpcyBjaGVjayBkb2VzbiYjMzk7dCB0cmlnZ2VyLiBUaGUgY3JpdGljYWwgbGluZSBpcyB0aGVuIGBxZGlzY19za2JfY2Ioc2tiKS0mZ3Q7cGt0X2xlbiA9IHBrdF9sZW47YC4gIFRoaXMgc2V0cyB0aGUgcGFja2V0IGxlbmd0aCBpbiB0aGUgU0tCIGNvbnRyb2wgYmxvY2sgdG8gb3VyIGxhcmdlIHBvc2l0aXZlIG51bWJlciwgYDIxNDc0ODQ1MDBgLgoKTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBpbiBgZHJyX2RlcXVldWVgLCBpdCBmZXRjaGVzIHRoZSBwYWNrZXQgbGVuZ3RoIHVzaW5nIGBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7YC4gU28sIGBsZW5gIHdpbGwgYmUgYDIxNDc0ODQ1MDBgLiBUaGlzIHZhbHVlIGlzIHRoZW4gY29tcGFyZWQgdG8gYGNsLSZndDtkZWZpY2l0YC4gTm93LCBgY2wtJmd0O2RlZmljaXRgIGlzIGEgYHUzMmAsIGFuZCBpcyB1c3VhbGx5IGFyb3VuZCBhIHF1YW50dW0sIGxpa2UgMTUwMCBieXRlcy4gVGhpcyBtZWFucyBvdXIgY2FsY3VsYXRlZCBgbGVuYCB3aWxsICphbG1vc3QgYWx3YXlzKiBiZSBsYXJnZXIgdGhhbiBgY2wtJmd0O2RlZmljaXRgLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnRseSBzby4gVGhlIGV4cHJlc3Npb24gYGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdGAgd2lsbCBldmFsdWF0ZSB0byBmYWxzZSBpbiBhbG1vc3QgZXZlcnkgY2FzZS4gU28sIHRoZSBwYWNrZXQgd29uJiMzOTt0IGJlIGRlcXVldWVkLgoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgYXJlIHRyaWNreSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIGlmIGl0IGxlYWRzIHRvIHRoZSBxdWV1ZSBiZWluZyBibG9ja2VkLiBJdCBzZWVtcyBsaWtlIHRoZSBsYXJnZSBvdmVyaGVhZCBtYXkgYmUgY2F1c2luZyB0aGUgcXVldWUgdG8gc3RhcnZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZHJyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHRcdFdSSVRFX09OQ0UoY2wtXHUwMDNlZGVmaWNpdCwgY2wtXHUwMDNlZGVmaWNpdCAtIGxlbik7XG4gMzkxOlx0XHRcdFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXHUwMDNlcWRpc2MpO1xuIDM5MjpcdFx0XHRcdGlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpXG4gMzkzOlx0XHRcdFx0XHRnb3RvIG91dDtcbiAzOTQ6XHRcdFx0XHRpZiAoY2wtXHUwMDNlcWRpc2MtXHUwMDNlcS5xbGVuID09IDApXG4gMzk1Olx0XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNsLVx1MDAzZWFsaXN0KTtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0XHRic3RhdHNfdXBkYXRlKFx1MDAyNmNsLVx1MDAzZWJzdGF0cywgc2tiKTtcbiAzOTg6XHRcdFx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiAzOTk6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19kZWMoc2NoLCBza2IpO1xuIDQwMDpcdFx0XHRcdHFkaXNjX3FsZW5fZGVjKHNjaCk7XG4gNDAxOlx0XHRcdFx0cmV0dXJuIHNrYjtcbiA0MDI6XHRcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0XHRXUklURV9PTkNFKGNsLVx1MDAzZWRlZmljaXQsIGNsLVx1MDAzZWRlZmljaXQgJiM0MzsgUkVBRF9PTkNFKGNsLVx1MDAzZXF1YW50dW0pKTtcbiA0MDU6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Y2wtXHUwMDNlYWxpc3QsIFx1MDAyNnEtXHUwMDNlYWN0aXZlKTtcbiA0MDY6XHRcdH1cbiA0MDc6XHRvdXQ6XG4gNDA4Olx0XHRyZXR1cm4gTlVMTDtcbiA0MDk6XHR9XG4gNDEwOlx0XG4gNDExOlx0c3RhdGljIGludCBkcnJfaW5pdF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIDQxMjpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gNDE1Olx0XHRpbnQgZXJyO1xuIDQxNjpcdFxuIDQxNzpcdFx0ZXJyID0gdGNmX2Jsb2NrX2dldChcdTAwMjZxLVx1MDAzZWJsb2NrLCBcdTAwMjZxLVx1MDAzZWZpbHRlcl9saXN0LCBzY2gsIGV4dGFjayk7XG4gNDE4Olx0XHRpZiAoZXJyKVxuIDQxOTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQyMDpcdFx0ZXJyID0gcWRpc2NfY2xhc3NfaGFzaF9pbml0KFx1MDAyNnEtXHUwMDNlY2xoYXNoKTtcbiA0MjE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDIyOlx0XHRcdHJldHVybiBlcnI7XG4gNDIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxLVx1MDAzZWFjdGl2ZSk7XG4gNDI0Olx0XHRyZXR1cm4gMDtcbiA0MjU6XHR9XG4gNDI2Olx0XG4gNDI3Olx0c3RhdGljIHZvaWQgZHJyX3Jlc2V0X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDQyODpcdHtcbiA0Mjk6XHRcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRSUiBTY2hlZHVsaW5nIEJ1ZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUlIgc2NoZWR1bGVyIGNvZGUsIGFuZCBJIHNlZSB0aGlzIGxvb3AgY29uZGl0aW9uOiBgbGVuICZsdDs9IGNsLSZndDtkZWZpY2l0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaWYgYGxlbmAgKHRoZSBwYWNrZXQgbGVuZ3RoKSBpcyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIHRoZSBpbml0aWFsIGBjbC0mZ3Q7ZGVmaWNpdGAsIHRoZSBjb2RlIGFkZHMgYGNsLSZndDtxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBtb3ZlcyB0aGUgY2xhc3MgdG8gdGhlIHRhaWwgb2YgdGhlIGFjdGl2ZSBxdWV1ZS4gU2VlbXMgcmVhc29uYWJsZSwgYnV0IGlmIHRoZXJlJiMzOTtzIG9ubHkgb25lIGFjdGl2ZSBjbGFzcywgdGhpcyBjb3VsZCBsb29wIGluZGVmaW5pdGVseS4KClRoZW4gdGhlIGFsYXJtIGJlbGxzIHN0YXJ0ZWQgcmluZ2luZyEgSSByZWFsaXplZCBgY2wtJmd0O2RlZmljaXRgIGlzIGEgYHUzMmAuIE9rYXksIHNvIGl0IHdpbGwgb3ZlcmZsb3cuIEJ1dCB3aWxsIHRoYXQgKnNvbHZlKiB0aGUgcHJvYmxlbT8gSWYgYGxlbmAgaXMgYSBsYXJnZSBudW1iZXIsIGxpa2UgYDIxNDc0ODQ1MDBgLCB0aGUgbG9vcCB3aWxsIGl0ZXJhdGUgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgdGltZXMsIGxpa2UgMS40IG1pbGxpb24uIFRoYXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYnV0IG5vdCBhbiAqaW5maW5pdGUqIGxvb3AsIGJlY2F1c2UgdGhlIG92ZXJmbG93IHdpbGwgZXZlbnR1YWxseSBtYWtlIHRoZSBgZGVmaWNpdGAgc21hbGxlciB0aGFuIGBsZW5gIGFnYWluLiAgVGhlbiBJIHJlbWVtYmVyZWQsIHRoaXMgd2hvbGUgdGhpbmcgaXMgcHJvdGVjdGVkIGJ5IGEgc3BpbmxvY2shIFRoZSBsb29wIHdvdWxkIGNvbnN1bWUgc2lnbmlmaWNhbnQgQ1BVIHRpbWUgd2hpbGUgaXQgaXMgcnVubmluZy4KCk9rYXksIGxldCYjMzk7cyBidW1wIGl0IHVwLiBXaGF0IGhhcHBlbnMgaWYgYGxlbmAgaXMgKnJlYWxseSogbGFyZ2UsIGxpa2UgY2xvc2UgdG8gdGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYDB4RkZGRkZGRkZgKT8gVGhlIGBkZWZpY2l0YCB3aWxsIHN0aWxsIG92ZXJmbG93LCBidXQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHdvdWxkIGJlIGV2ZW4gaGlnaGVyLCBwZXJoYXBzIGluIHRoZSBtaWxsaW9ucywgYnV0IHN0aWxsIG5vdCBpbmZpbml0ZS4gQnV0IHRoZW4gSSBzYXcgaXQhIElmIGBsZW5gIGlzIHZlcnkgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIGFuZCBgZGVmaWNpdGAgaW5jcmVhc2VzIGJ5IGBxdWFudHVtYCBlYWNoIHRpbWUsIGBkZWZpY2l0YCB3aWxsIE5FVkVSIHJlYWNoIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gIGJlZm9yZSBvdmVyZmxvd2luZy4gTW9yZSBwcmVjaXNlbHksIGZvciBgbGVuYCB0byBldmVudHVhbGx5IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYGRlZmljaXRgLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2R1bHVzIHdoZW4gZGl2aWRlZCBieSBgcXVhbnR1bWAhCgpJZiBgbGVuYCBpcyBgMHhGRkZGRkZGRmAsIHRoZSBgZGVmaWNpdGAgd2lsbCB3cmFwIGFyb3VuZCBiZWZvcmUgaXQgcmVhY2hlcyBgMHhGRkZGRkZGRmAgdW5sZXNzIGBkZWZpY2l0YCBpcyBleGFjdGx5IGAweEZGRkZGRkZGYCEgSWYgdGhlIGBxdWFudHVtYCBpcywgc2F5LCAxNTAwLCBgMHhGRkZGRkZGRiAlIDE1MDAgIT0gMGAgc28gdGhlIHdyYXAgYXJvdW5kIGhhcHBlbnMuIFRoYXQgbWVhbnMgdGhpcyBsb29wICp3aWxsKiBydW4gZm9yZXZlciEgVGhlIGBsZW4gJmx0Oz0gY2wtJmd0O2RlZmljaXRgIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGJlIHRydWUsIGFuZCB0aGUgY29kZSB3aWxsIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiBgZHJyX2RlcXVldWVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgY2wtJmd0O2RlZmljaXRgIGlzLCBpbiBmYWN0LCBhIGB1MzJgLCBidXQgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGRycl9jbGFzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9kcnIuYy0xNy1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTg6c3RydWN0IGRycl9jbGFzcyB7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5LVx0c3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vblx0Y29tbW9uO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MzE9c3RydWN0IGRycl9zY2hlZCB7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNy1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mzg6c3RhdGljIGJvb2wgY2xfaXNfYWN0aXZlKHN0cnVjdCBkcnJfY2xhc3MgKmNsKVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zOS17XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00Mi1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDM6c3RhdGljIHN0cnVjdCBkcnJfY2xhc3MgKmRycl9maW5kX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQte1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTAtXHRcdHJldHVybiBOVUxMO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo1MTpcdHJldHVybiBjb250YWluZXJfb2YoY2xjLCBzdHJ1Y3QgZHJyX2NsYXNzLCBjb21tb24pO1xubmV0L3NjaGVkL3NjaF9kcnIuYy01Mi19XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz01OD1zdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy02Mi1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjYzOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKSphcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTY0LVx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTEwNS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTA2Olx0Y2wgPSBremFsbG9jX29iaihzdHJ1Y3QgZHJyX2NsYXNzKTtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTA3LVx0aWYgKGNsID09IE5VTEwpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNDItXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjE0MzpzdGF0aWMgdm9pZCBkcnJfZGVzdHJveV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGRycl9jbGFzcyAqY2wpXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE0NC17XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0xNTA9c3RhdGljIGludCBkcnJfZGVsZXRlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1My1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjE1NDpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1NS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkcnJfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTkyLXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTkzOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSBkcnJfZmluZF9jbGFzcyhzY2gsIGNsYXNzaWQpO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0xOTQtXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMDE9c3RhdGljIHZvaWQgZHJyX3VuYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yMDIte1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyMDM6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0yMDQtXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMDg9c3RhdGljIGludCBkcnJfZ3JhZnRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjExLXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjEyOlx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjEzLVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjI1PXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmRycl9jbGFzc19sZWFmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI2LXtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjI3Olx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI4LVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjMyPXN0YXRpYyB2b2lkIGRycl9xbGVuX25vdGlmeShzdHJ1Y3QgUWRpc2MgKmNzaCwgdW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzMy17XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIzNDpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzNS1cbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTIzOT1zdGF0aWMgaW50IGRycl9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI0MS17XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI0MjpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI0My1cdHN0cnVjdCBubGF0dHIgKm5lc3Q7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0yNjE9c3RhdGljIGludCBkcnJfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjMte1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyNjQ6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjUtXHRfX3UzMiBxbGVuID0gcWRpc2NfcWxlbl9zdW0oY2wtXHUwMDNlcWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjgxPXN0YXRpYyB2b2lkIGRycl93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yODMtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzoyODQ6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjg1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTctXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI5ODpzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTktXHRcdFx0XHQgICAgICBpbnQgKnFlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zMDEtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzozMDI6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzAzLVx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzI3LSNlbmRpZlxubmV0L3NjaGVkL3NjaF9kcnIuYzozMjg6XHRcdGNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilyZXMuY2xhc3M7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMyOS1cdFx0aWYgKGNsID09IE5VTEwpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz0zMzY9c3RhdGljIGludCBkcnJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM0MC1cdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM0MTpcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0zNDItXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTM3MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzczLVx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mzc0Olx0c3RydWN0IGRycl9jbGFzcyAqY2w7XG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM3NS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy0zODAtXHR3aGlsZSAoMSkge1xubmV0L3NjaGVkL3NjaF9kcnIuYzozODE6XHRcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxLVx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xubmV0L3NjaGVkL3NjaF9kcnIuYy0zODItXHRcdHNrYiA9IGNsLVx1MDAzZXFkaXNjLVx1MDAzZW9wcy1cdTAwM2VwZWVrKGNsLVx1MDAzZXFkaXNjKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTQyNz1zdGF0aWMgdm9pZCBkcnJfcmVzZXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00MjktXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo0MzA6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDMxLVx0dW5zaWduZWQgaW50IGk7XG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYz00NDI9c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9kcnIuYy00NDQtXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xubmV0L3NjaGVkL3NjaF9kcnIuYzo0NDU6XHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQ2LVx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYGRycl9jbGFzc2AgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGRycl9jbGFzc2AgZGVmaW5pdGlvbi4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaXRzIG1lbWJlcnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBrbm93IHRoZSBmaWVsZHMgdGhhdCBjb250cm9sIHRoZSBEUlIgKERlZmljaXQgUm91bmQgUm9iaW4pIHNjaGVkdWxpbmcgYW5kIHdoYXQgb3RoZXIgZGF0YSBpdCBtaWdodCBjb250YWluLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQsIGNyZWRpdCBhbGxvY2F0aW9uLCBhbnkgcGVyLWNsYXNzIHN0YXRlLCBwZXJoYXBzIHNvbWUgdGltZXN0YW1wLXJlbGF0ZWQgZWxlbWVudHMsIG9yIGFueXRoaW5nIHRoYXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBzY2hlZHVsaW5nIGRlY2lzaW9uLW1ha2luZy4gSSB3aWxsIGRlZmluaXRlbHkgbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbTsgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBxdWV1ZXMgb3IgZmxvdyBkZXNjcmlwdG9ycyB3aXRoaW4gdGhpcyBgZHJyX2NsYXNzYC4gSXQgaXMgdml0YWwgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBoYW5kbGUgdGhlIGRlZmljaXQgYW5kIGNyZWRpdC4gSSBhbHNvIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMsIGxpa2UgY2FjaGUtbGluZSBhbGlnbm1lbnQgb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2Ryci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHRzdHJ1Y3QgZHJyX2NsYXNzIHtcbiAgMTk6XHRcdHN0cnVjdCBRZGlzY19jbGFzc19jb21tb25cdGNvbW1vbjtcbiAgMjA6XHRcbiAgMjE6XHRcdHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX3N5bmNcdFx0YnN0YXRzO1xuICAyMjpcdFx0c3RydWN0IGduZXRfc3RhdHNfcXVldWVcdFx0cXN0YXRzO1xuICAyMzpcdFx0c3RydWN0IG5ldF9yYXRlX2VzdGltYXRvciBfX3JjdSAqcmF0ZV9lc3Q7XG4gIDI0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFsaXN0O1xuICAyNTpcdFx0c3RydWN0IFFkaXNjXHRcdFx0KnFkaXNjO1xuICAyNjpcdFxuICAyNzpcdFx0dTMyXHRcdFx0XHRxdWFudHVtO1xuICAyODpcdFx0dTMyXHRcdFx0XHRkZWZpY2l0O1xuICAyOTpcdH07XG4gIDMwOlx0XG4gIDMxOlx0c3RydWN0IGRycl9zY2hlZCB7XG4gIDMyOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFjdGl2ZTtcbiAgMzM6XHRcdHN0cnVjdCB0Y2ZfcHJvdG8gX19yY3VcdFx0KmZpbHRlcl9saXN0O1xuICAzNDpcdFx0c3RydWN0IHRjZl9ibG9ja1x0XHQqYmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTb2Z0IExvY2t1cCBpbiBEUlIgUXVldWVpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRlZmljaXRgIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgYSBgdTMyYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBxdWV1ZWluZyBsb2dpYy4gSWYgYGxlbmAgKHdoaWNoIGlzIGFsc28gYSBgdTMyYCkgaXMgYSBsYXJnZSB2YWx1ZSwgbGlrZSwgc2F5LCBgMjE0NzQ4NDUwMGAsIHRoZSBgZGVmaWNpdGAgaW5jcmVtZW50cyBieSBgcXVhbnR1bWAgKGxldCYjMzk7cyBzYXkgMTUwMCkgZWFjaCB0aW1lLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMsICp3aGVuKiB3aWxsIGBkZWZpY2l0YCBiZWNvbWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gPwoKSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGlzIHdvdWxkIGxlYWQgdG8gYW4gZXZlbnR1YWwgY29tcGFyaXNvbiB3aGVyZSBpdCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgbGVuYC4gSSBmaWd1cmVkIGl0IHdvdWxkIHJlYWNoIGAyMTQ3NDg0NTAwYCBvciBtb3JlLiBTaW5jZSBgbGVuYCBpcyBgMjE0NzQ4NDUwMGAsIGFuZCBgZGVmaWNpdGAgc3RhcnRzIGF0IGAxNTAwYCwgYWRkaW5nIGAxNTAwYCBpdCB3b3VsZCBldmVudHVhbGx5IGdldCB0aGVyZS4gYGRlZmljaXRgIHdvdWxkIHJlYWNoIGAyMTQ3NDg1NTAwYCwgd2hpY2ggKmlzKiBncmVhdGVyIHRoYW4gYGxlbmAsIHdoaWNoIGlzIGAyMTQ3NDg0NTAwYC4gU28gaXQgd2lsbCB0YWtlIGxpa2UgMS40IG1pbGxpb24gaXRlcmF0aW9ucy4KClNvLCBpbiB0aGF0IGNhc2UsIHRoZSBjb25kaXRpb24gYGxlbiAmbHQ7PSBjbC0mZ3Q7ZGVmaWNpdGAgKndvdWxkKiBldmVudHVhbGx5IGJlY29tZSB0cnVlLCB0aGUgZGVmaWNpdCB3b3VsZCBiZSB1cGRhdGVkLCBhbmQgdGhlIHBhY2tldCBkZXF1ZXVlZC4gTm90IGFuIGluZmluaXRlIGxvb3AsIGp1c3QgYSAqdmVyeSogbG9uZyBzdGFsbC4KCkJ1dCB0aGVuIEkgdGhvdWdodCwgd2hhdCBpZiBgbGVuYCBpcyAqcmVhbGx5KiBiaWcsIGxpa2UgYDB4RkZGRkZGRkZgPyBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIElmIGBkZWZpY2l0YCBpcywgc2F5LCBgMHhGRkZGRkYwMGAgYW5kIHdlIGFkZCBgMTUwMGAsIGl0IHdyYXBzIGFyb3VuZCEgSXQgYmVjb21lcyBgMHgwMDAwMDREQ2AuIEl0IHdpbGwgKm5ldmVyKiBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYDB4RkZGRkZGRkZgLCB1bmxlc3MgaXQgaGl0cyBpdCAqZXhhY3RseSouIElmIGl0IG1pc3NlcyBgMHhGRkZGRkZGRmAsIGl0IHdyYXBzIGFyb3VuZCwgYW5kIHdlIGdldCBhbiBpbmZpbml0ZSBsb29wISBUaGF0JiMzOTtzIGJhZC4KCkhvd2V2ZXIsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgYGxlbmAgKmFjdHVhbGx5KiBpcy4gSXQmIzM5O3MgYHNrYi0mZ3Q7bGVuICYjNDM7IG92ZXJoZWFkYC4gYHNrYi0mZ3Q7bGVuYCBpcyB0eXBpY2FsbHkgYXJvdW5kIDE1MDAsIGFuZCBgb3ZlcmhlYWRgIGNhbiBiZSB1cCB0byBgSU5UX01BWGAuIFNvIHRoZSBtYXhpbXVtIGBsZW5gIGNvdWxkIGJlIGAweDdGRkZGRkZGICYjNDM7IDE1MDAgPSAweDgwMDAwNURDYC4gSG1tLCBzbyBpdCBjYW4mIzM5O3QgcmVhY2ggYDB4RkZGRkZGRkZgPyBXZWxsLCB0aGUgc2l6ZSBvZiBgc2tiLSZndDtsZW5gIGlzIGxpbWl0ZWQgYnkgTVRVIChlLmcuIDY0SykuIFNvIGV2ZW4gd2l0aCB0aGUgbWF4IG9mIGBpbnRgLCBgbGVuYCBpcyBhdCBtb3N0IGAweDdGRkZGRkZGICYjNDM7IDY1NTM1ID0gMHg4MDAwRkZGRmAuIFNvIHdlIGFyZSBsb29raW5nIGF0IHJvdWdobHkgMiAqIDEwXjkuIFRoaXMgbWVhbnMgaXQgd2lsbCB0YWtlIDEuNCAqIDEwXjYgaXRlcmF0aW9ucy4gVGhhdCYjMzk7cyBzdGlsbCBhIHN0YWxsLCBidXQgbm90IGFuIGluZmluaXRlIG9uZS4KClRoZW4gSSBoYWQgYW5vdGhlciB0aG91Z2h0OiB3aGF0IGlmIGBvdmVyaGVhZGAgaXMgbmVnYXRpdmU/IGBhYnMocy0mZ3Q7b3ZlcmhlYWQpICZndDsgU1RBQl9PVkVSSEVBRF9NQVhgIGNoZWNrcyB0aGF0LiBUaGlzIG1lYW5zIGBvdmVyaGVhZGAgY2FuIGJlIGAtMjE0NzQ4MzY0OGAuIElmIHdlIGFkZCBgLTIxNDc0ODM2NDhgIHRvIGBza2ItJmd0O2xlbmAgd2hpY2ggaXMgMTUwMCwgd2UgZ2V0IGEgbmVnYXRpdmUgdmFsdWUhCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgcGt0X2xlbmAgaXMgY2FsY3VsYXRlZCwgYW5kIHRoZW4gaWYgaXQgaXMgdW5saWtlbHkgdG8gYmUgbGVzcyB0aGFuIDEsIGBwa3RfbGVuID0gMWAuICpBaCEqIElmIGBsZW5gIGVuZHMgdXAgbmVnYXRpdmUsIGl0IGdldHMgY2xhbXBlZCB0byAxLiBXaGljaCBzaG91bGQgcHJldmVudCBhbiBpbmZpbml0ZSBsb29wISBPa2F5LCBzbyB0aGlzIHNob3VsZG4mIzM5O3QgYmUgYSBwcm9ibGVtIGluIGBkcnJfZGVxdWV1ZWAuCgpOb3csIEkgc2hvdWxkIGNoZWNrIHRoZSBgZXRzYCBxZGlzYy4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUgaW4gYG5ldC9zY2hlZC9zY2hfZXRzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZXRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0XHRjbC1cdTAwM2VkZWZpY2l0ICYjNDM7PSBSRUFEX09OQ0UoY2wtXHUwMDNlcXVhbnR1bSk7XG4gNTAxOlx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmNsLVx1MDAzZWFsaXN0LCBcdTAwMjZxLVx1MDAzZWFjdGl2ZSk7XG4gNTAyOlx0XHR9XG4gNTAzOlx0b3V0OlxuIDUwNDpcdFx0cmV0dXJuIE5VTEw7XG4gNTA1Olx0fVxuIDUwNjpcdFxuIDUwNzpcdHN0YXRpYyBpbnQgZXRzX3FkaXNjX3ByaW9tYXBfcGFyc2Uoc3RydWN0IG5sYXR0ciAqcHJpb21hcF9hdHRyLFxuIDUwODpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5iYW5kcywgdTggKnByaW9tYXAsXG4gNTA5Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTEwOlx0e1xuIDUxMTpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cjtcbiA1MTI6XHRcdGludCBwcmlvID0gMDtcbiA1MTM6XHRcdHU4IGJhbmQ7XG4gNTE0Olx0XHRpbnQgcmVtO1xuIDUxNTpcdFx0aW50IGVycjtcbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IF9fbmxhX3ZhbGlkYXRlX25lc3RlZChwcmlvbWFwX2F0dHIsIFRDQV9FVFNfTUFYLFxuIDUxODpcdFx0XHRcdFx0ICAgIGV0c19wcmlvbWFwX3BvbGljeSwgTkxfVkFMSURBVEVfU1RSSUNULFxuIDUxOTpcdFx0XHRcdFx0ICAgIGV4dGFjayk7XG4gNTIwOlx0XHRpZiAoZXJyKVxuIDUyMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMjpcdFxuIDUyMzpcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBwcmlvbWFwX2F0dHIsIHJlbSkge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG5sYV90eXBlKGF0dHIpKSB7XG4gNTI1Olx0XHRcdGNhc2UgVENBX0VUU19QUklPTUFQX0JBTkQ6XG4gNTI2Olx0XHRcdFx0aWYgKHByaW8gXHUwMDNlIFRDX1BSSU9fTUFYKSB7XG4gNTI3Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtUb28gbWFueSBwcmlvcml0aWVzIGluIEVUUyBwcmlvbWFwXCYjMzQ7KTtcbiA1Mjg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyOTpcdFx0XHRcdH1cbiA1MzA6XHRcdFx0XHRiYW5kID0gbmxhX2dldF91OChhdHRyKTtcbiA1MzE6XHRcdFx0XHRpZiAoYmFuZCBcdTAwM2U9IG5iYW5kcykge1xuIDUzMjpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBiYW5kIG51bWJlciBpbiBFVFMgcHJpb21hcFwmIzM0Oyk7XG4gNTMzOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzQ6XHRcdFx0XHR9XG4gNTM1Olx0XHRcdFx0cHJpb21hcFtwcmlvJiM0MzsmIzQzO10gPSBiYW5kO1xuIDUzNjpcdFx0XHRcdGJyZWFrO1xuIDUzNzpcdFx0XHRkZWZhdWx0OlxuIDUzODpcdFx0XHRcdFdBUk5fT05fT05DRSgxKTsgLyogVmFsaWRhdGUgc2hvdWxkIGhhdmUgY2F1Z2h0IHRoaXMuICovXG4gNTM5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQwOlx0XHRcdH1cbiA1NDE6XHRcdH1cbiA1NDI6XHRcbiA1NDM6XHRcdHJldHVybiAwO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW50IGV0c19xZGlzY19xdWFudGFfcGFyc2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKnF1YW50YV9hdHRyLFxuIDU0NzpcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmJhbmRzLCB1bnNpZ25lZCBpbnQgbnN0cmljdCxcbiA1NDg6XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50ICpxdWFudGEsXG4gNTQ5Olx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYWZmaWMgc2hhcGluZyBhbmQgcXVldWUgbWFuYWdlbWVudC4gVGhlIGlzc3VlIGxpa2VseSBsaWVzIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGRlcXVldWUgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgcGFja2V0cyBvZmYgdGhlIEVUUyAoRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24pIHF1ZXVlLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBJIHNob3VsZCBzdGFydCBieSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGBldHNfcWRpc2NfZGVxdWV1ZWAsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBpZiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGhhdmUgZXZvbHZlZCBzaW5jZSBteSBsYXN0IGRlZXAgZGl2ZS4gVGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSwgb3IgYXQgbGVhc3QgYSBwYXRod2F5IHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2V0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4gNDUxOlx0XHRyZXR1cm4gZXJyO1xuIDQ1MjpcdH1cbiA0NTM6XHRcbiA0NTQ6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIDQ1NTpcdGV0c19xZGlzY19kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NTY6XHR7XG4gNDU3Olx0XHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcbiA0NTg6XHRcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XG4gNDU5Olx0XHRxZGlzY19xbGVuX2RlYyhzY2gpO1xuIDQ2MDpcdFx0cmV0dXJuIHNrYjtcbiA0NjE6XHR9XG4gNDYyOlx0XG4gNDYzOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpldHNfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiA0NjQ6XHR7XG4gNDY1Olx0XHRzdHJ1Y3QgZXRzX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDQ2NjpcdFx0c3RydWN0IGV0c19jbGFzcyAqY2w7XG4gNDY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQ2ODpcdFx0dW5zaWduZWQgaW50IGJhbmQ7XG4gNDY5Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0d2hpbGUgKDEpIHtcbiA0NzI6XHRcdFx0Zm9yIChiYW5kID0gMDsgYmFuZCBcdTAwM2MgcS1cdTAwM2Vuc3RyaWN0OyBiYW5kJiM0MzsmIzQzOykge1xuIDQ3MzpcdFx0XHRcdGNsID0gXHUwMDI2cS1cdTAwM2VjbGFzc2VzW2JhbmRdO1xuIDQ3NDpcdFx0XHRcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVx1MDAzZXFkaXNjKTtcbiA0NzU6XHRcdFx0XHRpZiAoc2tiKVxuIDQ3NjpcdFx0XHRcdFx0cmV0dXJuIGV0c19xZGlzY19kZXF1ZXVlX3NrYihzY2gsIHNrYik7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcbiA0Nzk6XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cS1cdTAwM2VhY3RpdmUpKVxuIDQ4MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDQ4MTpcdFxuIDQ4MjpcdFx0XHRjbCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cS1cdTAwM2VhY3RpdmUsIHN0cnVjdCBldHNfY2xhc3MsIGFsaXN0KTtcbiA0ODM6XHRcdFx0c2tiID0gY2wtXHUwMDNlcWRpc2MtXHUwMDNlb3BzLVx1MDAzZXBlZWsoY2wtXHUwMDNlcWRpc2MpO1xuIDQ4NDpcdFx0XHRpZiAoIXNrYikge1xuIDQ4NTpcdFx0XHRcdHFkaXNjX3dhcm5fbm9ud2MoX19mdW5jX18sIGNsLVx1MDAzZXFkaXNjKTtcbiA0ODY6XHRcdFx0XHRnb3RvIG91dDtcbiA0ODc6XHRcdFx0fVxuIDQ4ODpcdFxuIDQ4OTpcdFx0XHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gNDkwOlx0XHRcdGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KSB7XG4gNDkxOlx0XHRcdFx0Y2wtXHUwMDNlZGVmaWNpdCAtPSBsZW47XG4gNDkyOlx0XHRcdFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXHUwMDNlcWRpc2MpO1xuIDQ5MzpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA0OTQ6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDQ5NTpcdFx0XHRcdGlmIChjbC1cdTAwM2VxZGlzYy1cdTAwM2VxLnFsZW4gPT0gMClcbiA0OTY6XHRcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Y2wtXHUwMDNlYWxpc3QpO1xuIDQ5NzpcdFx0XHRcdHJldHVybiBldHNfcWRpc2NfZGVxdWV1ZV9za2Ioc2NoLCBza2IpO1xuIDQ5ODpcdFx0XHR9XG4gNDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTQ1CgkJCQkJCQlvdXRwdXQ6IDM0NAoJCQkJCQkJdGhvdWdodHM6IDEyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERSUi9FVFMgUWRpc2MgU29mdCBMb2NrdXAgQnVnKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgY2xlYXIgdGhlIHJvb3QgY2F1c2UgaXMgcmlnaHQgaGVyZTogYGV0c19xZGlzY19kZXF1ZXVlYCAoYW5kIGBkcnJfZGVxdWV1ZWAsIHNpbmNlIGl0IHNoYXJlcyB0aGUgbG9naWMpIHVzZXMgdGhlIHNhbWUgcGF0dGVybi4gVGhlIGNydWNpYWwgY29kZSBzbmlwcGV0IHdpdGggYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGFuIG92ZXJseSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlIGluZmxhdGluZyBgbGVuYC4gVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgbGVuICZsdDs9IGNsLSZndDtkZWZpY2l0YCBpcyBhbHdheXMgZmFsc2UsIGNhdXNpbmcgdGhlIHdoaWxlIGxvb3AgdG8gc3BpbiBpbmRlZmluaXRlbHkuIFRoZSBsYXJnZSBgb3ZlcmhlYWRgIGNhdXNlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYHBrdF9sZW5gLiBUaGlzIG1lYW5zIHRoZSBjbGFzcyYjMzk7cyBkZWZpY2l0IG11c3QgZ3JvdyBpbW1lbnNlbHksIGFkZGluZyB0aGUgcXVhbnR1bSBlYWNoIHRpbWUsIGxlYWRpbmcgdG8gYSBsb25nIGxvb3AuCgpUaGUga2V5IGlzIHRoYXQgdGhlIGxhcmdlIGBwa3RfbGVuYCBzdGVtcyBmcm9tIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gTG9va2luZyBhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIGFkZGVkIHRvIGBza2ItJmd0O2xlbmAuIEZ1cnRoZXIgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCBpcyBkb25lIGFuZCBpdCBzZWVtcyB0byBpbmRleCB0aGUgYHN0YWItJmd0O2RhdGFgLiBIb3dldmVyLCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCB1c2luZyBhIG1vZHVsbyBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBgc3RhYi0mZ3Q7ZGF0YWAgYXJyYXkgYWNjZXNzIGlzIGFsd2F5cyB3aXRoaW4gYm91bmRzLiBUaGUgYHN0YWItJmd0O2RhdGFgIGFycmF5IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBzdGFiYCBjcmVhdGlvbiB3aXRoIHVzZXIgc3BhY2UgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhlcmUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGBzdGFiLSZndDtkYXRhYCB1c2luZyB1c2VyIHNwYWNlIGB0YWJgLCBzbyBubyBjb25jZXJuIHRoZXJlLgoKTGV0JiMzOTtzIHF1aWNrbHkgc2NhbiBvdGhlciB1c2VzIG9mIGBvdmVyaGVhZGAuIGBzY2hfY2FrZS5jYCBhbmQgYHNjaF90YmYuY2AganVzdCBhZGp1c3QgdGhlIHBhY2tldCBsZW5ndGgsIHNvIHRoZXkgZG9uJiMzOTt0IHNlZW0gbGlrZSByZWxldmFudCBhcmVhcy4KCkluIHN1bW1hcnksIHRoZSBidWcgaXMgYSBDUFUgc3RhbGwgb3Igc29mdCBsb2NrdXAgaW4gYGRycmAgYW5kIGBldHNgIHFkaXNjcy4gVGhpcyBpcyBkdWUgdG8gYSB2ZXJ5IGxhcmdlIGBwa3RfbGVuYCwgcmVzdWx0aW5nIGZyb20gYSBiaWcgYG92ZXJoZWFkYCB2YWx1ZSwgd2hpY2ggbWFrZXMgdGhlIGRlZmljaXQgcm91bmQtcm9iaW4gbG9naWMgbG9vcCBleGNlc3NpdmVseS4gVGhpcyBpcyBlYXNpbHkgY2F1Z2h0IGJ5IGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24sIGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgc2VsZnRlc3RzIGFuZCBzeXprYWxsZXImIzM5O3MgZmluZGluZ3MuIFRoZSB2dWxuZXJhYmlsaXR5IGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBvciBpbmZvLWxlYWtzLCBidXQgYSBsb2dpYyBlcnJvci4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljLWJhc2VkIERvUyB2dWxuZXJhYmlsaXR5IHRoYXQgY2FuIGJlIGNhdWdodCB0aHJvdWdoIGV4aXN0aW5nIGZ1enppbmcgYW5kIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBtZWNoYW5pc21zIChsaWtlIHN5emthbGxlciksIEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIGFkZGVkIHBhdGNoLCB0aGF0IGxpbWl0cyBgb3ZlcmhlYWRgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAsIGlzIGEgZ29vZCBtaXRpZ2F0aW9uIHRvIHRoZSBEb1MuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGluZyB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxuXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJiMzOTtzIGBkZWZpY2l0YC4gSWYgaXQgaXMgbm90LCB0aGUgY29kZSBhZGRzIGEgYHF1YW50dW1gIHRvIHRoZSBgZGVmaWNpdGAgYW5kIGxvb3BzLiBXaXRoIGEgaHVnZSBgcGt0X2xlbmAsIHRoaXMgYHdoaWxlICgxKWAgbG9vcCBleGVjdXRlcyBtaWxsaW9ucyBvZiB0aW1lcyBiZWZvcmUgdGhlIGBkZWZpY2l0YCBncm93cyBsYXJnZSBlbm91Z2gsIHJlc3VsdGluZyBpbiBhIENQVSBzdGFsbCAvIHNvZnQgbG9ja3VwIChEZW5pYWwgb2YgU2VydmljZSkuXG5cblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVgKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIHNvZnQgbG9ja3VwIGRldGVjdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgaXNzdWUsIGFuZCBLTVNBTiB3b3VsZCBub3QgcHJvdmlkZSBhbnkgYWRkaXRpb25hbCBiZW5lZml0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDozMy4yOTU2NDkyMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQzNDM3MDY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0RSUlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcXG5cXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJ3MgYGRlZmljaXRgLiBJZiBpdCBpcyBub3QsIHRoZSBjb2RlIGFkZHMgYSBgcXVhbnR1bWAgdG8gdGhlIGBkZWZpY2l0YCBhbmQgbG9vcHMuIFdpdGggYSBodWdlIGBwa3RfbGVuYCwgdGhpcyBgd2hpbGUgKDEpYCBsb29wIGV4ZWN1dGVzIG1pbGxpb25zIG9mIHRpbWVzIGJlZm9yZSB0aGUgYGRlZmljaXRgIGdyb3dzIGxhcmdlIGVub3VnaCwgcmVzdWx0aW5nIGluIGEgQ1BVIHN0YWxsIC8gc29mdCBsb2NrdXAgKERlbmlhbCBvZiBTZXJ2aWNlKS5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZWApLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBpc3N1ZSwgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6MzMuMjk1NjU0MDIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5MDg5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMjo0MDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXFxuaW5kZXggMThhNDE5Y2Q5ZDk0OS4uYTRjMWI3YjAyNjNkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cXHQxMDAwXFxuICNkZWZpbmUgU1RBQl9TSVpFX0xPR19NQVhcXHQzMFxcbisjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXFx0NjU1MzVcXG4gXFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xcbiBcXHRpbnRcXHRzdG9wO1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5AQCAtNTQ0LDYgKzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhYnMocy1cXHUwMDNlb3ZlcmhlYWQpIFxcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXFxcIik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbiBcXHRzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7XFxuIFxcdGlmICghc3RhYilcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cXG5pbmRleCAyYjYxZDhkNzliZGU4Li43NzEzZWIzNWFhZWJjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cXG5AQCAtODYsNSArODYsMjUgQEBcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuICAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFxcXCJcXG4gICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkMWUyXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJkcnJcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRyclxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjJcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBkcnJcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICBdXFxuICAgICB9XFxuIF1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxcbmluZGV4IGVlMDllNmQ2ZmRmM2MuLmRhN2FlNjI2ZjdlMWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxcbkBAIC0xMDA3LDUgKzEwMDcsMjUgQEBcXG4gICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuICAgICAgICAgICAgIFxcXCJlY2hvIFxcXFxcXFwiMVxcXFxcXFwiIFxcdTAwM2UgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcXFwiXFxuICAgICAgICAgXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiZjNhNFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiUmVqZWN0IEVUUyBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXRzXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBldHMgYmFuZHMgMSBzdHJpY3QgMCBxdWFudGEgMVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjJcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBldHNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICBdXFxuICAgICB9XFxuIF1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6MzQuNjg1NDM5MTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2NjU5MjE0NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfbW9kaWZ5X3FkaXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWI0ZTM0YzZkODgzMTAxMTlmYTRiY2M2ZDhlN2VjNWE3NzkyZmIyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEyOjQwOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuaW5kZXggMThhNDE5Y2Q5ZDk0OS4uYTRjMWI3YjAyNjNkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiBcbiAjZGVmaW5lIERFRkFVTFRfVFhfUVVFVUVfTEVOXHQxMDAwXG4gI2RlZmluZSBTVEFCX1NJWkVfTE9HX01BWFx0MzBcbisjZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXHQ2NTUzNVxuIFxuIHN0cnVjdCBxZGlzY193YWxrZXIge1xuIFx0aW50XHRzdG9wO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5jZGNmODYxYzg1ZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTU0NCw2ICs1NDQsMTEgQEAgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuK1x0aWYgKGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFwiKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4rXG4gXHRzdGFiID0ga21hbGxvY19mbGV4KCpzdGFiLCBkYXRhLCB0c2l6ZSk7XG4gXHRpZiAoIXN0YWIpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cbmluZGV4IDJiNjFkOGQ3OWJkZTguLjc3MTNlYjM1YWFlYmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb25cbkBAIC04Niw1ICs4NiwyNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgcm9vdFwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkMWUyXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJkcnJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZHJyXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGRyclwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMFwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxuaW5kZXggZWUwOWU2ZDZmZGYzYy4uZGE3YWU2MjZmN2UxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvblxuQEAgLTEwMDcsNSArMTAwNywyNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCJlY2hvIFxcXCIxXFxcIiBcdTAwM2UgL3N5cy9idXMvbmV0ZGV2c2ltL2RlbF9kZXZpY2VcIlxuICAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZjNhNFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVqZWN0IEVUUyBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZXRzXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGV0cyBiYW5kcyAxIHN0cmljdCAwIHF1YW50YSAxXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGV0c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMFwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDozNC42ODU0NDA2MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc4MDk5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU2NoZWR1bGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgYW5kIGBpbmNsdWRlL25ldC9wa3Rfc2NoZWQuaGAuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgY2hlY2sgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFNwZWNpZmljYWxseSwgaXQncyB2YWxpZGF0aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy1cdTAwM2VvdmVyaGVhZGAgYWdhaW5zdCBgU1RBQl9PVkVSSEVBRF9NQVhgLCB3aGljaCBpcyBkZWZpbmVkIGFzIDY1NTM1LiBJZiB0aGlzIGNoZWNrIGZhaWxzIOKAkyBtZWFuaW5nIHRoZSBvdmVyaGVhZCBpcyBleGNlc3NpdmVseSBsYXJnZSDigJMgaXQgbm93IHJldHVybnMgYC1FSU5WQUxgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbSDigJMgd2hpY2ggSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gVGhpcyBgcWRpc2NfZ2V0X3N0YWJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBxdWV1ZWluZyBkaXNjaXBsaW5lIChxZGlzYykgd2hlbiB1c2luZyBhIHNpemUgdGFibGUgKHN0YWIpLiBUaGlzIGNoYW5nZSBhZGRzIGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl0J3MgZGVmaW5pdGVseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlIGluIHRoZSBrZXJuZWwuXG5cbk5vdywgYmVjYXVzZSBJ4oCZbSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLiBUaGUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2Agc2F5cyBgc3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBJIHNlZSBpdCdzICpzdGF0aWMqLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGludm9rZWQuIEZpbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBuZXh0IGltcG9ydGFudCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6NDIuMjYzNTQzMzQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2dldF9zdGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN0YWJfcG9saWN5W1RDQV9TVEFCX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTUtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo0OTY6c3RhdGljIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpxZGlzY19nZXRfc3RhYihzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3Nj1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM0MS1cXHRpZiAodGNhW1RDQV9TVEFCXSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM0MjpcXHRcXHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNDMtXFx0XFx0aWYgKElTX0VSUihzdGFiKSkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMzk4PXN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNDE4LVxcdGlmICh0Y2FbVENBX1NUQUJdKSB7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxNDE5OlxcdFxcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQyMC1cXHRcXHRpZiAoSVNfRVJSKHN0YWIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo0Mi4zMDg2MzY1MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUyMjQ4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqU3RhdGljIEFuYWx5c2lzIG9mIHFkaXNjIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljYWxseSBkZWZpbmVkPyBUaGF0J3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkgd2FudCB0byBhbnN3ZXIuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGV5J3JlIHN0YXRpYyBvciBub3QuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIHJlc3Qgb2YgdGhlIGFuYWx5c2lzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgc2NvcGUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo0NS40NjA4ODY1ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDMxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTIzNj1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMjc1LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3NjpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzUtXFx0cWRpc2NfaGFzaF9hZGQoc2NoLCBmYWxzZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc2OlxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzctXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzODEtXFx0LyogRXZlbiBpZiBvcHMtXFx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVxcdTAwM2VkZXN0cm95KClcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzODI6XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4My1cXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYxMz1zdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Ny1cXHRcXHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2ODpcXHRcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjktXFx0XFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21fcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzg0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4NTpcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X3F1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4Ni1cXHRcXHRcXHRcXHQgdGNtLVxcdTAwM2V0Y21fcGFyZW50LCB0Y20tXFx1MDAzZXRjbV9oYW5kbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjQ1Ljg5MjkyMzg2MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ0MDQ3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRZGlzYyBDb2RlKipcblxuT2theSwgc28gYHFkaXNjX2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbGltaXRpbmcgaXRzIHNjb3BlLiBOb3csIHRoZSBjb250ZXh0IEkgaGF2ZSBpcyB0aGF0IGBfX3RjX21vZGlmeV9xZGlzY2AgY2FsbHMgYHFkaXNjX2NyZWF0ZWAsIGFuZCBgX190Y19tb2RpZnlfcWRpc2NgIGlzIGFsc28gc3RhdGljLiBUaGlzIG1ha2VzIG1lIHdhbnQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y19tb2RpZnlfcWRpc2NgIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgd2F5IHRoZSBxZGlzYyBpcyBjcmVhdGVkIGFuZCBtb2RpZmllZCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoYXQgcGFydCBgX190Y19tb2RpZnlfcWRpc2NgIHBsYXlzIGluIHRoZSBvdmVyYWxsIHF1ZXVlaW5nIGRpc2NpcGxpbmUgbWFuaXB1bGF0aW9uIHByb2Nlc3MuIElzIHRoaXMgbWVhbnQgdG8gYmUgYSBsb3ctbGV2ZWwgcm91dGluZSB0aGF0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSwgb3IgaXMgaXQgYSBoZWxwZXIgdXNlZCBieSBvdGhlcnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDA6NTAuMjA3MzMwOTMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTQwNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX21vZGlmeV9xZGlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNjE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjgtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODUwLVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzAtXFx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjUwLjI1MzI3NDc3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODIzNTU1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBuZXcgcWRpc2NzIGdldCBjcmVhdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWZpbml0ZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlaW5nIGEgbmV0bGluayBoYW5kbGVyLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgSSBrbm93IHRoZSBmdW5kYW1lbnRhbCBjb25maWcgb3B0aW9uIGZvciB0cmFmZmljIHNoYXBpbmcgaXMgYENPTkZJR19ORVRfU0NIRURgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZmlsZSAoYG5ldC9zY2hlZC9LY29uZmlnYCkgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBTb21ldGltZXMgdGhvc2UgZGVwZW5kZW5jaWVzIGNhbiBiZSBhIGxpdHRsZSB0YW5nbGVkLiBMZXQncyBzZWUgd2hhdCBlbHNlIGBLY29uZmlnYCBoYXMgdG8gb2ZmZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MDo1My45MzU2MzI2MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzM1OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQwOjUzLjk4MDM3NzI0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5MDE5OTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBORVRfU0NIRURgIGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBzcGVjaWZpYyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBpbi4gSSBzZWUgdGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBpcyBhIGNvcmUgcGllY2UuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBEb2VzIHRoaXMgY2hhbmdlIHJlcXVpcmUgb3IgYXNzdW1lIGEgcGFydGljdWxhciBxdWV1aW5nIGRpc2NpcGxpbmUgKHFkaXNjKT8gVGhlIHRlc3QgY2FzZXMsIGBkcnJgIGFuZCBgZXRzYCwgYXJlIGEgY2x1ZS4gUmlnaHQsIGBkcnJgIGlzIGxpbmtlZCB0byBgQ09ORklHX05FVF9TQ0hfRFJSYCBhbmQgYGV0c2AgdG8gYENPTkZJR19ORVRfU0NIX0VUU2AuIEJ1dCB0aGUgY2hhbmdlIGlzIHdpdGhpbiBgcWRpc2NfZ2V0X3N0YWJgLCB3aGljaCBsaXZlcyBpbiBgc2NoX2FwaS5jYC4gVGhhdCBpbXBsaWVzIHRoaXMgaXMgYSBnZW5lcmljIGNoYW5nZSwgYXBwbHlpbmcgdG8gKmFueSogcWRpc2MgdGhhdCBsZXZlcmFnZXMgc2l6ZSB0YWJsZXMuIFNpemUgdGFibGVzIGFyZSBoYW5kbGVkIGdlbmVyaWNhbGx5IHdpdGhpbiBgc2NoX2FwaS5jYCwgc28gaXQncyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyB0aGUgYnJvYWRlciBxZGlzYyBsaWZlY3ljbGUuIEknbGwgY2hlY2sgYHRjX21vZGlmeV9xZGlzY2AsIGBxZGlzY19jcmVhdGVgLCBhbmQgYHFkaXNjX2NoYW5nZWAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYWZmZWN0ZWQuIEhtbSwgYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLiBUaGF0J3MgYSBwb3RlbnRpYWwgcHJvYmxlbTsgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQgYXMgYSBzeW1ib2wgZm9yIHRoaXMgYW5hbHlzaXMuIFdhaXQgYSBtaW51dGUuLi4gdGhhdCdzIHJpZ2h0LCBpdCdzIHN0YXRpYyEgQXJlIGFueSBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zICpub3QqIHN0YXRpYz8gSSdsbCBxdWlja2x5IGNoZWNrIGBydG5ldGxpbmtfcmN2YCDigJMgbmV0bGluayBoYW5kbGVycyBhcmUgb2Z0ZW4gc3RhdGljLCBidXQgaXQncyB3b3J0aCBjaGVja2luZy5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMuIGB0Y19tb2RpZnlfcWRpc2NgIGlzIGRlZmluaXRlbHkgYHN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKC4uLilgLiBXaGF0IGFib3V0IGBxZGlzY19jcmVhdGVgPyBUaGF0J3MgYWxzbyBzdGF0aWMuIEhvdyBhYm91dCBgcWRpc2NfZ2V0X3N0YWJgPyBBbHNvIHN0YXRpYy4gRGFtbi4gSXMgdGhlcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbiBpbiBgc2NoX2FwaS5jYCB0aGF0IHByb3ZpZGVzIGEgaG9vayBwb2ludCBoZXJlPyBJIG5lZWQgYSBub24tc3RhdGljIHN5bWJvbCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MDQuMzcwNTc5MDc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQwNTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzICpxZGlzY19iYXNlO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzItXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzM6aW50IHJlZ2lzdGVyX3FkaXNjKHN0cnVjdCBRZGlzY19vcHMgKnFvcHMpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yMDU9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgKnFkaXNjX2xvb2t1cF9kZWZhdWx0KGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIyMC0vKiBTZXQgbmV3IGRlZmF1bHQgcWRpc2MgdG8gdXNlICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMjE6aW50IHFkaXNjX3NldF9kZWZhdWx0KGNvbnN0IGNoYXIgKm5hbWUpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz03MzM9RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2dyb3cpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzM0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NzM1OmludCBxZGlzY19jbGFzc19oYXNoX2luaXQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaClcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNi17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTgzMz1FWFBPUlRfU1lNQk9MKHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2cpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODM0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODM1OmludCBxZGlzY19vZmZsb2FkX2R1bXBfaGVscGVyKHN0cnVjdCBRZGlzYyAqc2NoLCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTgzNi1cXHRcXHRcXHQgICAgICB2b2lkICp0eXBlX2RhdGEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjA0LjQxNDk5MjI3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY3NjY5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgTmV0d29yayBQbHVtYmluZyoqXG5cbkhtbSwgd2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgbmV0d29ya2luZyBpc3N1ZT8gQWgsIHJpZ2h0LCBgcnRuZXRsaW5rX3Jjdl9tc2dgLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3Igcm91dGluZyBhbmQgaW50ZXJmYWNlIGNoYW5nZXMsIGFuZCBpdCdzIG92ZXIgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gKkNoZWNrcyBtZW1vcnkuLi4gSSByZWNhbGwgaXQgaGFuZGxlcyBpbmNvbWluZyBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyBpbmZvcm1hdGlvbiwgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQqLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBob3cgc2NoZWR1bGluZyBpcyBpbnZvbHZlZCwgSSBzaG91bGQgc2VhcmNoIGZvciBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGV4dGVybmFsbHkgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGF0IHRoZSBzY2hlZHVsZXIgZXhwb3Nlcy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGhlbHAgbWUgdG8gdmlzdWFsaXplIHRoZSBzY2hlZHVsaW5nIGhvb2tzIGludG8gdGhlIG92ZXJhbGwgY29udHJvbCBwbGFuZS4gKlllcywgSSBrbm93IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uLiogUmlnaHQsIGxldCdzIHNlZSB3aGF0IHBvcHMgdXAgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjA4LjU4MjY2NDcxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5OTYxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTMzPWludCByZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzQtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc1OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfcWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTc3PXZvaWQgdW5yZWdpc3Rlcl9xZGlzYyhzdHJ1Y3QgUWRpc2Nfb3BzICpxb3BzKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTQtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTk1OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9xZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xOTYtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI4Mj12b2lkIHFkaXNjX2hhc2hfYWRkKHN0cnVjdCBRZGlzYyAqcSwgYm9vbCBpbnZpc2libGUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5MC19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyOTE6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2FkZCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yOTItXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yOTM9dm9pZCBxZGlzY19oYXNoX2RlbChzdHJ1Y3QgUWRpc2MgKnEpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI5OS19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzozMDA6RVhQT1JUX1NZTUJPTChxZGlzY19oYXNoX2RlbCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0zMDEtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQyMD1zdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcWRpc2NfZ2V0X3J0YWIoc3RydWN0IHRjX3JhdGVzcGVjICpyLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00NjAtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDYxOkVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDYyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDYzPXZvaWQgcWRpc2NfcHV0X3J0YWIoc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDg2LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ4NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3B1dF9ydGFiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ4OC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTY2PXZvaWQgcWRpc2NfcHV0X3N0YWIoc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnRhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTc1LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU3NjpFWFBPUlRfU1lNQk9MKHFkaXNjX3B1dF9zdGFiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU3Ny1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NjM1PXZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY0MC19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo2NDE6RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjQyLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NjQzPXZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDYtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjQ3OkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy02NDgtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz02NDk9dm9pZCBxZGlzY193YXRjaGRvZ19zY2hlZHVsZV9yYW5nZV9ucyhzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkLCB1NjQgZXhwaXJlcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjc2LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjY3NzpFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlX3JhbmdlX25zKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY3OC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTY3OT12b2lkIHFkaXNjX3dhdGNoZG9nX2NhbmNlbChzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy02ODItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NjgzOkVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfY2FuY2VsKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTY4NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9Njk5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9ncm93KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCAqY2xoYXNoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy03MzItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NzMzOkVYUE9SVF9TWU1CT0wocWRpc2NfY2xhc3NfaGFzaF9ncm93KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTczNC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTczNT1pbnQgcWRpc2NfY2xhc3NfaGFzaF9pbml0KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc0Ni19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NDc6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2luaXQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzQ4LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzQ5PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc1Mi19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NTM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX2Rlc3Ryb3kpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzU0LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NzU1PXZvaWQgcWRpc2NfY2xhc3NfaGFzaF9pbnNlcnQoc3RydWN0IFFkaXNjX2NsYXNzX2hhc2ggKmNsaGFzaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNzY0LX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjc2NTpFWFBPUlRfU1lNQk9MKHFkaXNjX2NsYXNzX2hhc2hfaW5zZXJ0KTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc2Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc2Nz12b2lkIHFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKHN0cnVjdCBRZGlzY19jbGFzc19oYXNoICpjbGhhc2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTc3Mi19XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo3NzM6RVhQT1JUX1NZTUJPTChxZGlzY19jbGFzc19oYXNoX3JlbW92ZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy03NzQtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTc5NT12b2lkIHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc3RydWN0IFFkaXNjICpzY2gsIGludCBuLCBpbnQgbGVuKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzItfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODMzOkVYUE9SVF9TWU1CT0wocWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy04MzQtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz04MzU9aW50IHFkaXNjX29mZmxvYWRfZHVtcF9oZWxwZXIoc3RydWN0IFFkaXNjICpzY2gsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04NTMtfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6ODU0OkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9kdW1wX2hlbHBlcik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy04NTUtXFxubmV0L3NjaGVkL3NjaF9hcGkuYz04NTY9dm9pZCBxZGlzY19vZmZsb2FkX2dyYWZ0X2hlbHBlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtODgyLX1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjg4MzpFWFBPUlRfU1lNQk9MKHFkaXNjX29mZmxvYWRfZ3JhZnRfaGVscGVyKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTg4NC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTg4NT12b2lkIHFkaXNjX29mZmxvYWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy04OTktfVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6OTAwOkVYUE9SVF9TWU1CT0wocWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MDguNjI2NjY0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2OTI2MTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCAodGMpIFFkaXNjIE1vZGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIYW5nIG9uLCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgYnV0IGl0J3MgcmVnaXN0ZXJlZCBpbiBgcHNjaGVkX3J0bmxfbXNnX2hhbmRsZXJzYC5cIiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBgVENBX1NUQUJgLiBJcyB0aGVyZSBhbm90aGVyIGZ1bmN0aW9uIHRoYXQncyBpbnZvbHZlZCBoZXJlPyBQZXJoYXBzIGBxZGlzY19jcmVhdGVgP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQgbWUgdGhpbmsuICpJZiogYHRjX21vZGlmeV9xZGlzY2AgaXMgc3RhdGljLCB0aGF0IHdvdWxkIG1lYW4gaXQncyBpbmxpbmVkLi4uIEJ1dCB3YWl0LCBubywgaXQncyAqbm90KiBpbmxpbmVkLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGB7IC5tc2d0eXBlID0gUlRNX05FV1FESVNDLCAuZG9pdCA9IHRjX21vZGlmeV9xZGlzYyB9YC4gVGhhdCBtZWFucyBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUgdG8gdGFyZ2V0LlxuXG5Ob3csIHdoYXQgYWJvdXQgYHJ0bmV0bGlua19yY3ZfbXNnYD8gVGhhdCdzIHRvbyBnZW5lcmljLCB0b28gaGlnaC1sZXZlbC4gSXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgaW4gYHNjaF9hcGkuY2AgdGhhdCdzICpyZWxhdGVkKiBhbmQsIGNydWNpYWxseSwgbm9uLXN0YXRpYz8gSSdtIHNlZWluZyB0aGF0IHRoZSBuZXRsaW5rIGhhbmRsZXJzIGFyZSBhY3R1YWxseSBzdGF0aWMsIHRob3VnaCB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIGBxZGlzY19jcmVhdGVgIGlzIGFsc28gbm90IGlubGluZWQuIEl0J3MgYSBwcmV0dHkgbGFyZ2UgZnVuY3Rpb24uIEJ1dCwgSSBzaG91bGQgc3RpbGwgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24uIE1heWJlIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9xZGlzY2A/IE5vcGUsIHRoYXQncyBmb3IgcmVnaXN0cmF0aW9uLiBJIHNlZSB0aGF0IGBxZGlzY19nZXRfc3RhYmAgaXMgc3RhdGljLCBidXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtb2RpZmllZCFcblxuVWx0aW1hdGVseSwgYHRjX21vZGlmeV9xZGlzY2AgKmlzKiB0aGUgbmV0bGluayBlbnRyeSBwb2ludCBhbmQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB0YXJnZXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGl0IGFnYWluIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MToxNS41OTU5Mjg0NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU4ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX21vZGlmeV9xZGlzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwNj1zdGF0aWMgYm9vbCByZXFfY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqbilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTYxMi1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE2MTM6c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNjE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xODAzPXN0YXRpYyB2b2lkIHJlcXVlc3RfcWRpc2NfbW9kdWxlKHN0cnVjdCBubGF0dHIgKmtpbmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjYtICovXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxODI3OnN0YXRpYyBpbnQgdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE4MjgtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODQ4LVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTg0OTpcXHRlcnIgPSBfX3RjX21vZGlmeV9xZGlzYyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xODUwLVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXUURJU0MsIC5kb2l0ID0gdGNfbW9kaWZ5X3FkaXNjfSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzAtXFx0ey5tc2d0eXBlID0gUlRNX0RFTFFESVNDLCAuZG9pdCA9IHRjX2dldF9xZGlzY30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjE1LjY0MzM5MDI1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjYxMDk3MTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgdGNfbW9kaWZ5X3FkaXNjYCBDYWxsYmFjayoqXG5cbk9rYXksIHNvIHRoaXMgYHRjX21vZGlmeV9xZGlzY2AgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdCBpc24ndCBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEgY2xlYW4gZW50cnkgcG9pbnQsIGEgZGlzdGluY3QgYm91bmRhcnkgdGhhdCB3ZSBjYW4gcHJvYmUuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcgZGlyZWN0bHksIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgYXJlYXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkgc2VlIHRoZSB0ZXN0IGNhc2VzIGFyZSB1c2luZyBgZHJyYCBhbmQgYGV0c2AuIFRoYXQgZ2l2ZXMgbWUgYSBkaXJlY3Rpb24uXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEknbGwgc2VhcmNoIGZvciBgTkVUX1NDSF9EUlJgIGFuZCBgTkVUX1NDSF9FVFNgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9ucy4gVGhhdCB3aWxsIHByb3ZpZGUgY29udGV4dCwgYW5kIGFsbG93IG1lIHRvIGRldmVsb3Agc3Ryb25nZXIgZnV6emluZyBoYXJuZXNzZXMuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB0aGUgZnV6emluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6MzguMjU0MzY0OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDU4NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRFJSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MTozOC4zMDEyMTg1OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5NDEzODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIE5ldHdvcmsgU2NoZWR1bGVyIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgbWVudGlvbiBvZiBgTkVUX1NDSF9FVFNgIGltbWVkaWF0ZWx5IHRocm93cyBtZSBpbnRvIGEgc3BlY2lmaWMgc3Vic2V0IG9mIG5ldHdvcmtpbmcgYXJjaGl0ZWN0dXJlLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSdtIHRoaW5raW5nICpFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKiBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhpcyBwb2ludHMgdG93YXJkcyBhbiBFdmVudCBUcmlnZ2VyZWQgU2NoZWR1bGluZyBwcm90b2NvbCwgcG9zc2libHkgd2l0aGluIGEgZGV0ZXJtaW5pc3RpYyBuZXR3b3JrIGVudmlyb25tZW50LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHBlcmZvcm1hbmNlIG1vZGVsaW5nIGFuZCBzaW11bGF0aW9uIG9mIGEgZGV0ZXJtaW5pc3RpYyBuZXR3b3JrIGJhc2VkIG9uIHRoZXNlIHByb3RvY29scy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSByYWNlcyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IHRoZSByZWFsLXRpbWUgY29uc3RyYWludHMsIGhvdyB0aGUgZXZlbnQgdHJpZ2dlcnMgd2lsbCBpbmZsdWVuY2UgcGFja2V0IHNjaGVkdWxpbmcsIHRoZSBwb3RlbnRpYWwgZm9yIGppdHRlciwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgY2hhbGxlbmdlIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBwcm9ibGVtcyAtIHBhY2tldCBwcmlvcml0aWVzLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBlbmQtdG8tZW5kIGxhdGVuY3kuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHByaW9yaXRpemluZyB0cmFmZmljIG9uIGEgcGVyLWZsb3cgb3IgYSBtb3JlIGFnZ3JlZ2F0ZWQgYXBwcm9hY2g/IElzIHRoZXJlIHRyYWZmaWMgc2hhcGluZyBvciBwb2xpY2luZyBhdCB0aGUgc291cmNlIG9yIHRoZSBpbmdyZXNzIHJvdXRlcj9cblxuSSdtIGFsc28gd29uZGVyaW5nIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29udGV4dC4gSXMgdGhpcyBhIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciBhbiBleGlzdGluZyBuZXR3b3JrIHByb3RvY29sIGltcGxlbWVudGVkIG9uIGNvbW1lcmNpYWwgaGFyZHdhcmU/IFRoYXQgZHJhc3RpY2FsbHkgYWZmZWN0cyB0aGUgYW5hbHl0aWNhbCBhbmQgZGVzaWduIG9wdGlvbnMuIFRoZW4sIEkgYW0gbG9va2luZyBhdCBob3cgdG8gaW1wcm92ZSB0aGUgY3VycmVudCBkZXNpZ24uXG5Fc3NlbnRpYWxseSwgSSBhbSBpbW1lZGlhdGVseSB3YW50aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG9wZXJhdGlvbmFsIGNvbnRleHQgYW5kIHBlcmZvcm1hbmNlIG9iamVjdGl2ZXMgb2YgYSBzeXN0ZW0gdXNpbmcgYE5FVF9TQ0hfRVRTYCBiZWNhdXNlIHRoZXJlIGlzIGEgd2lkZSB2YXJpZXR5IG9mIHNjZW5hcmlvcyB0aGlzIG5hbWUgcmVmZXJzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6NDUuNTk1MzU4Njk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYzNjg4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zODgtXFxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xcbm5ldC9zY2hlZC9LY29uZmlnLTM5MC1cXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQxOjQ2LjAyMTczNTUzNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU3MTk0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBpbiBgcWRpc2NfZ2V0X3N0YWJgIGZvciBleGNlc3NpdmUgb3ZlcmhlYWQgdXNpbmcgYGFicyhzLVx1MDAzZW92ZXJoZWFkKSBcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBhIHNhZmV0eSBjaGVjayByZWFsbHksIGFuZCBpdCdzIGFwcGxpY2FibGUgYWNyb3NzIHRoZSBib2FyZCBmb3IgYW55IHFkaXNjIHdpdGggc2l6ZSB0YWJsZSBzdXBwb3J0LiBOb3csIHdoZXJlIHRvIHB1dCB0aGlzIGluIHRoZSBjb25maWc/IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGBORVRfU0NIX0RSUmAgb3IgYE5FVF9TQ0hfRVRTYCBzcGVjaWZpY2FsbHksIGJ1dCBpbmNsdWRpbmcgdGhlbSB3b3VsZG4ndCBicmVhayBhbnl0aGluZy4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUuLi4gc2luY2UgdGhpcyBpcyBnZW5lcmljLCBJIHByb2JhYmx5IG9ubHkgbmVlZCB0aGUgbWFpbiBjb25maWcsIGBORVRfU0NIRURgLiBMZXQncyBjb25maXJtIHRoYXQuIEFoLCB5ZXMsIGBORVRfU0NIRURgIGVuYWJsZXMgdGhlIFFvUyBhbmQgZmFpciBxdWV1ZWluZyBzdWJzeXN0ZW0sIHdoaWNoIGluY2x1ZGVzIGBzY2hfYXBpLmNgLiBUaGF0IGhhbmRsZXMgYWxsIG9mIHRoaXMuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCBmaWxlIHRvIG1ha2UgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDE6NTEuODc4OTMyNzM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MTo1MS45MjM1MTk4OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NjI5MjgyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU2l6ZSBUYWJsZSBPdmVyaGVhZCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgQ09ORklHX05FVF9TQ0hFRGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCwgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGFueSBuZXR3b3JraW5nIHNjaGVkdWxlciBjaGFuZ2UuIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIHJldmlldyB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGVkIHZhbGlkYXRpb24gY2hlY2suXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBTVEFCX09WRVJIRUFEX01BWGAgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCwgYXMgaXQgaGFuZGxlcyBzaXplIHRhYmxlIHJldHJpZXZhbCwgYW5kIG5vdywgZW5zdXJlcyB0aGUgb3ZlcmhlYWQgdmFsdWUsIGBzLVx1MDAzZW92ZXJoZWFkYCwgc3RheXMgd2l0aGluIHRoZSBkZWZpbmVkIGJvdW5kYXJpZXMuIEVzc2VudGlhbGx5LCBpdCdzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBleGNlc3NpdmVseSBsYXJnZSBvdmVyaGVhZCB2YWx1ZXMsIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgUlRNX05FV1FESVNDYCBuZXRsaW5rIG1lc3NhZ2UuXG5cbk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHdpbGwgYmUgY2FsbGVkLiBJJ3ZlIG5vdGVkIHRoYXQgdGhlIGVudHJ5IHBvaW50IGlzIGB0Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgY2FsbGJhY2sgZm9yIGBSVE1fTkVXUURJU0NgLiBPa2F5LCB0aGF0J3MgY2xlYW4uXG5cbkJ1dCBsZXQgbWUgdGhpbmsgZnVydGhlcjogaXMgdGhpcyB0aGUgb25seSBlbnRyeSBwb2ludD8gV2hhdCBhYm91dCBvdGhlciBwb3RlbnRpYWwgY2FsbGVycyBvZiBgcWRpc2NfZ2V0X3N0YWJgPyBXZWxsLCB0aGUgY29kZSBzaG93cyB0aGF0IGl0J3MgYWxzbyBjYWxsZWQgYnkgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLiBgcWRpc2NfY2hhbmdlYCwgaG93ZXZlciwgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHRjX21vZGlmeV9xZGlzY2AsIHNvIHdlJ3JlIHN0aWxsIGVmZmVjdGl2ZWx5IGNvdmVyZWQuIFRoaXMgbWVhbnMgdGhhdCBgdGNfbW9kaWZ5X3FkaXNjYCBoYW5kbGVzIGJvdGggdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIHF1ZXVlIGRpc2NpcGxpbmUsIHdoaWNoIGlzIGdvb2QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHRjX21vZGlmeV9xZGlzY2AgaXMgdGhlIGJlc3Qgc3ltYm9sIGZvciB0aGlzLiBJdCdzIHN0YXRpYywgYnV0IGl0IGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjaywgc28gaXQgY2FuJ3QgYmUgaW5saW5lZC4gSSBhbSBsb29raW5nIGZvciB0aGUgXCJiZXN0XCIgc3ltYm9sLCBhcyB0aGUgZ3VpZGVsaW5lcyBzdGF0ZTogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgYnV0IGB0Y19tb2RpZnlfcWRpc2NgIGlzIHRoZSBtb3N0IHNwZWNpZmljLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbiwgYHJ0bmV0bGlua19yY3ZfbXNnYCBjYWxscyB0aGUgY2FsbGJhY2suLi4gd2hpY2ggaXMgYHRjX21vZGlmeV9xZGlzY2AuIGBydG5ldGxpbmtfcmN2X21zZ2AgaXMgdG9vIGdlbmVyaWMsIGFuZCB0aGVyZSBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKGBxZGlzY19jcmVhdGVgLCBgX190Y19tb2RpZnlfcWRpc2NgKSBpbiB0aGUgY2FsbCBjaGFpbi4gU28sIGB0Y19tb2RpZnlfcWRpc2NgIGlzIHRoZSBiZXN0IGhlcmUuXG5cbkFscmlnaHQsIEknbSBjb21mb3J0YWJsZSB3aXRoIGZvY3VzaW5nIG9uIGB0Y19tb2RpZnlfcWRpc2NgIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBOb3cgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9TQ0hFRGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjAzLjQ4NjQ1MDI4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjg2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MDMuNTMxNzgwOTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTYyNzY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBSZWZpbmVtZW50KipcblxuT2theSwgc28gdGhpcyBoYXMgYSBwcmV0dHkgY2xlYW4gcHJvZmlsZSAtIGp1c3QgYSBgTkVUYCBkZXBlbmRlbmN5LCB3aGljaCBpcyBnb29kLiBCdXQgYmVmb3JlIEkgZGVjbGFyZSB2aWN0b3J5LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBJIHNlZSB0aGUgdGVzdCBjYXNlcyBhcmUgdXNpbmcgYGRycmAgYW5kIGBldHNgLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSB0aG9zZSBxZGlzY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGVzdGluZywgSSdsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgY29uZmlndXJhdGlvbi5cblxuQWgsIHJpZ2h0LCB0aGUgZGVmYXVsdCBxZGlzYy4uLiBpdCdzIGVpdGhlciBgcGZpZm9fZmFzdGAgb3IgYGZxX2NvZGVsYCwgZGVwZW5kaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWx0LWluIHFkaXNjcy4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIG9yIGEgc2ltaWxhciBmaWxlIHRoYXQgaGFuZGxlcyB0aGUgc2NoZWR1bGluZyBhc3BlY3RzLiBUaW1lIHRvIGdvIGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjA3Ljk4ODA1OTgzOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMzQ3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZpZm9fZmFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0zNi0vKiBRZGlzYyB0byB1c2UgYnkgZGVmYXVsdCAqL1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjM3OmNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKmRlZmF1bHRfcWRpc2Nfb3BzID0gXFx1MDAyNnBmaWZvX2Zhc3Rfb3BzO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTM4LUVYUE9SVF9TWU1CT0woZGVmYXVsdF9xZGlzY19vcHMpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9NzU3PUVYUE9SVF9TWU1CT0woc2NoX2RlZmF1bHRfcHJpbzJiYW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc2NS0vKlxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjc2NjogKiBQcml2YXRlIGRhdGEgZm9yIGEgcGZpZm9fZmFzdCBzY2hlZHVsZXIgY29udGFpbmluZzpcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NjctICpcXHQtIHJpbmdzIGZvciBwcmlvcml0eSBiYW5kc1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc2OC0gKi9cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Njk6c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzcwLVxcdHN0cnVjdCBza2JfYXJyYXkgcVtQRklGT19GQVNUX0JBTkRTXTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc3Mi1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3NzM6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX2FycmF5ICpiYW5kMmxpc3Qoc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdixcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03NzQtXFx0XFx0XFx0XFx0XFx0ICBpbnQgYmFuZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTc3OC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo3Nzk6c3RhdGljIGludCBwZmlmb19mYXN0X2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxZGlzYyxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODAtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtNzgyLVxcdGludCBiYW5kID0gc2NoX2RlZmF1bHRfcHJpbzJiYW5kW3NrYi1cXHUwMDNlcHJpb3JpdHkgXFx1MDAyNiBUQ19QUklPX01BWF07XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6NzgzOlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy03ODQtXFx0c3RydWN0IHNrYl9hcnJheSAqcSA9IGJhbmQybGlzdChwcml2LCBiYW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTgwMi1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MDM6c3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MDQte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjgwNTpcXHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODA2LVxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODQzLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg0NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBmaWZvX2Zhc3RfcGVlayhzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg0NS17XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODQ2OlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NDctXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NTgtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6ODU5OnN0YXRpYyB2b2lkIHBmaWZvX2Zhc3RfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04NjAte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2MS1cXHRpbnQgaSwgYmFuZDtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4NjI6XFx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2My1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg2OC1cXHRcXHQvKiBOVUxMIHJpbmcgaXMgcG9zc2libGUgaWYgZGVzdHJveSBwYXRoIGlzIGR1ZSB0byBhIGZhaWxlZFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg2OTpcXHRcXHQgKiBza2JfYXJyYXlfaW5pdCgpIGluIHBmaWZvX2Zhc3RfaW5pdCgpIGNhc2UuXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODcwLVxcdFxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODg4LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjg4OTpzdGF0aWMgaW50IHBmaWZvX2Zhc3RfZHVtcChzdHJ1Y3QgUWRpc2MgKnFkaXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTg5MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MDEtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTAyOnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9pbml0KHN0cnVjdCBRZGlzYyAqcWRpc2MsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MDMtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA1LVxcdHVuc2lnbmVkIGludCBxbGVuID0gcWRpc2NfZGV2KHFkaXNjKS1cXHUwMDNldHhfcXVldWVfbGVuO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkwNjpcXHRzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTA3LVxcdGludCBwcmlvO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTI2LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjkyNzpzdGF0aWMgdm9pZCBwZmlmb19mYXN0X2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTI4LXtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Mjk6XFx0c3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MzAtXFx0aW50IHByaW87XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05MzUtXFx0XFx0LyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWRcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5MzY6XFx0XFx0ICogc2tiX2FycmF5X2luaXQoKSBpbiBwZmlmb19mYXN0X2luaXQoKSBjYXNlLlxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTkzNy1cXHRcXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0MC1cXHRcXHQvKiBEZXN0cm95IHJpbmcgYnV0IG5vIG5lZWQgdG8ga2ZyZWVfc2tiIGJlY2F1c2UgYSBjYWxsIHRvXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTQxOlxcdFxcdCAqIHBmaWZvX2Zhc3RfcmVzZXQoKSBoYXMgYWxyZWFkeSBkb25lIHRoYXQgd29yay5cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDItXFx0XFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NDYtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTQ3OnN0YXRpYyBpbnQgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0OC1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk0OS17XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTUwOlxcdHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTUxLVxcdHN0cnVjdCBza2JfYXJyYXkgKmJhbmRzW1BGSUZPX0ZBU1RfQkFORFNdO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTYzLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NDpzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY1OlxcdC5pZFxcdFxcdD1cXHRcXFwicGZpZm9fZmFzdFxcXCIsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY2OlxcdC5wcml2X3NpemVcXHQ9XFx0c2l6ZW9mKHN0cnVjdCBwZmlmb19mYXN0X3ByaXYpLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk2NzpcXHQuZW5xdWV1ZVxcdD1cXHRwZmlmb19mYXN0X2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTY4OlxcdC5kZXF1ZXVlXFx0PVxcdHBmaWZvX2Zhc3RfZGVxdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Njk6XFx0LnBlZWtcXHRcXHQ9XFx0cGZpZm9fZmFzdF9wZWVrLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjk3MDpcXHQuaW5pdFxcdFxcdD1cXHRwZmlmb19mYXN0X2luaXQsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTcxOlxcdC5kZXN0cm95XFx0PVxcdHBmaWZvX2Zhc3RfZGVzdHJveSxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NzI6XFx0LnJlc2V0XFx0XFx0PVxcdHBmaWZvX2Zhc3RfcmVzZXQsXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6OTczOlxcdC5kdW1wXFx0XFx0PVxcdHBmaWZvX2Zhc3RfZHVtcCxcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5NzQ6XFx0LmNoYW5nZV90eF9xdWV1ZV9sZW4gPSAgcGZpZm9fZmFzdF9jaGFuZ2VfdHhfcXVldWVfbGVuLFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTk3NS1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy05NzctfTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo5Nzg6RVhQT1JUX1NZTUJPTChwZmlmb19mYXN0X29wcyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtOTc5LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTIwNz1zdGF0aWMgdm9pZCBhdHRhY2hfb25lX2RlZmF1bHRfcWRpc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyMTYtXFx0ZWxzZSBpZihkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTilcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMjE3OlxcdFxcdG9wcyA9IFxcdTAwMjZwZmlmb19mYXN0X29wcztcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMjE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjowOC4wMzIxOTg3NzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMjY3MTM4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgcGZpZm9fZmFzdGAsIHNpbmNlIHRoYXQncyBhIGJ1aWx0LWluIHFkaXNjLiBCdXQgdGhlbiBJIHNhdyB0aGUgbWVudGlvbiBvZiBgcWRpc2NfZ2V0X3N0YWJgIGluIHRoZSBwYXRjaCBhbmQgcmVhbGl6ZWQgaXQncyBkZWFsaW5nIHdpdGggc2l6ZSB0YWJsZXMuIFRob3NlIHRhYmxlcyBhcmUgaGFuZGxlZCBnZW5lcmljYWxseSBpbiBgc2NoX2FwaS5jYCB2aWEgYHFkaXNjX2NyZWF0ZWAgYW5kIGBxZGlzY19jaGFuZ2VgLCB3aGljaCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGEgY29yZSB0cmFmZmljIGNvbnRyb2wgZmVhdHVyZS4gYE5FVF9TQ0hFRGAgaXMgdGhlIGtleSBjb25maWcgaGVyZS5cblxuTXkgaW5pdGlhbCBzdHJhdGVneSBsb29rcyBsaWtlIHRoaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gb2J2aW91c2x5IVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0Y19tb2RpZnlfcWRpc2NgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBORVRfU0NIRURgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVx1MDAzZW92ZXJoZWFkYCkgd2l0aGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYnkgZW5zdXJpbmcgb3ZlcmhlYWQgaXMgd2l0aGluIGV4cGVjdGVkIGxpbWl0cywgYW5kIGlzIHJlYWNoZWQgdGhyb3VnaCBuZXRsaW5rLiBgdGNfbW9kaWZ5X3FkaXNjYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGZ1enppbmcgaXQgd2lsbCBleGVyY2lzZSB0aGlzIG5ldyB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHBpY2tpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50LiBUaGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGNfbW9kaWZ5X3FkaXNjYCBpcyBzdGF0aWMuIEhtbS4uLiB3aGlsZSBpdCdzIGEgY2FsbGJhY2ssIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IGlubGluZWQsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGNoZWNrZWQgYHJ0bmV0bGlua19yY3ZfbXNnYCwgYnV0IHRoYXQncyBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCB3aGljaCBmZWVscyBsZXNzIHRhcmdldGVkLiBgcmVnaXN0ZXJfcWRpc2NgIGlzIGZvciBtb2R1bGUgaW5pdCwgc28gdGhhdCdzIG91dC4gSSdtIGdvaW5nIHRvIHN0aWNrIHdpdGggYHRjX21vZGlmeV9xZGlzY2AsIGJlY2F1c2UgaXQncyBhIGNhbGxiYWNrLCBhbmQgaXQncyBiZWluZyB1c2VkIGZvciB0aGlzIGZlYXR1cmUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgY2FzZXMuIFRoZSB0ZXN0IGNhc2VzIHVzZSBgZHJyYCBhbmQgYGV0c2AuIEkgd2lsbCBhZGQgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHNhZmUsIHNpbmNlIHRoZXkncmUgZXhwbGljaXRseSB0ZXN0ZWQuIFllcCwgdGhlIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIGBkcnIuanNvbmAgYW5kIGBldHMuanNvbmAsIHNvIHRoYXQgc2VhbHMgdGhlIGRlYWwuXG5cblNvLCBsZXQncyByZXZpZXc6XG5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYE5FVF9TQ0hFRGBcbiAgICAqICAgYE5FVF9TQ0hfRFJSYFxuICAgICogICBgTkVUX1NDSF9FVFNgXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHRjX21vZGlmeV9xZGlzY2BcblxuKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGltcGxlbWVudHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBzaXplIHRhYmxlIG92ZXJoZWFkIChgcy1cdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAuIFRoaXMgc2FmZWd1YXJkIHByZXZlbnRzIGludmFsaWQgY29uZmlndXJhdGlvbnMgYW5kIGlzIHRyaWdnZXJlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGFjY2VzcyBpcyB0aHJvdWdoIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBtYWtlIHNwZWNpZmljIHVzZSBvZiBEUlIgYW5kIEVUUyBxZGlzY3MsIG1ha2luZyB0aGVzZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucy5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAwNSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjEuMjU4OTE1MTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3MzUxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfbW9kaWZ5X3FkaXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIHNpemUgdGFibGUgb3ZlcmhlYWQgKGBzLVxcdTAwM2VvdmVyaGVhZGApIGluIGBxZGlzY19nZXRfc3RhYmAgdG8gcHJldmVudCBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgKFRDQV9TVEFCKSB2aWEgbmV0bGluay4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGlzIGB0Y19tb2RpZnlfcWRpc2NgLiBUaGUgdGVzdCBjYXNlcyBleHBsaWNpdGx5IHVzZSB0aGUgRFJSIGFuZCBFVFMgcWRpc2NzLCBzbyBlbmFibGluZyB0aGVtIGFsb25nIHdpdGggdGhlIGNvcmUgTkVUX1NDSEVEIGNvbmZpZyBpcyByZWNvbW1lbmRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBzaXplIHRhYmxlIG92ZXJoZWFkIChgcy1cXHUwMDNlb3ZlcmhlYWRgKSBpbiBgcWRpc2NfZ2V0X3N0YWJgIHRvIHByZXZlbnQgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIChUQ0FfU1RBQikgdmlhIG5ldGxpbmsuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyBgdGNfbW9kaWZ5X3FkaXNjYC4gVGhlIHRlc3QgY2FzZXMgZXhwbGljaXRseSB1c2UgdGhlIERSUiBhbmQgRVRTIHFkaXNjcywgc28gZW5hYmxpbmcgdGhlbSBhbG9uZyB3aXRoIHRoZSBjb3JlIE5FVF9TQ0hFRCBjb25maWcgaXMgcmVjb21tZW5kZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjIxLjM0NDY1ODExNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2Mjk0Njg3NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjEuMzQ1MjUyMTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NjI5NDA4OTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxcblxcbkluIHFkaXNjcyB0aGF0IHVzZSBkZWZpY2l0IHJvdW5kLXJvYmluIHNjaGVkdWxpbmcsIHN1Y2ggYXMgRFJSIChgZHJyX2RlcXVldWVgKSBhbmQgRVRTIChgZXRzX3FkaXNjX2RlcXVldWVgKSwgdGhlIGRlcXVldWUgbG9naWMgY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY2xhc3MncyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjRlMzRjNmQ4ODMxMDExOWZhNGJjYzZkOGU3ZWM1YTc3OTJmYjJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NDA6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG5pbmRleCAxOGE0MTljZDlkOTQ5Li5hNGMxYjdiMDI2M2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oXG5AQCAtMTIsNiArMTIsNyBAQFxuIFxuICNkZWZpbmUgREVGQVVMVF9UWF9RVUVVRV9MRU5cdDEwMDBcbiAjZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXHQzMFxuKyNkZWZpbmUgU1RBQl9PVkVSSEVBRF9NQVhcdDY1NTM1XG4gXG4gc3RydWN0IHFkaXNjX3dhbGtlciB7XG4gXHRpbnRcdHN0b3A7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmNkY2Y4NjFjODVmNWIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNTQ0LDYgKzU0NCwxMSBAQCBzdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4rXHRpZiAoYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXCIpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdH1cbitcbiBcdHN0YWIgPSBrbWFsbG9jX2ZsZXgoKnN0YWIsIGRhdGEsIHRzaXplKTtcbiBcdGlmICghc3RhYilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuaW5kZXggMmI2MWQ4ZDc5YmRlOC4uNzcxM2ViMzVhYWViYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9kcnIuanNvblxuQEAgLTg2LDUgKzg2LDI1IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSByb290XCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImQxZTJcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlJlamVjdCBEUlIgcWRpc2Mgd2l0aCBvdmVyc2l6ZWQgVENBX1NUQUIgb3ZlcmhlYWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImRyclwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IHN0YWIgb3ZlcmhlYWQgMjE0NzQ4MzAwMCBkcnJcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZHJyXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIwXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9ldHMuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5pbmRleCBlZTA5ZTZkNmZkZjNjLi5kYTdhZTYyNmY3ZTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZXRzLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2V0cy5qc29uXG5AQCAtMTAwNyw1ICsxMDA3LDI1IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcImVjaG8gXFxcIjFcXFwiIFx1MDAzZSAvc3lzL2J1cy9uZXRkZXZzaW0vZGVsX2RldmljZVwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJmM2E0XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWplY3QgRVRTIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJldHNcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDFcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZXRzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIwXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjIxLjM0NTI1MzQyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI2NDg2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NoZWR1bGVyIE92ZXJoZWFkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBTZWVtcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIGZvciB0aGUgYHMtXHUwMDNlb3ZlcmhlYWRgIHZhbHVlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGFuIGVycm9yIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgcy1cdTAwM2VvdmVyaGVhZGAgZXhjZWVkcyBgU1RBQl9PVkVSSEVBRF9NQVhgLCB3aGljaCBpcyBkZWZpbmVkIGFzIDY1NTM1LiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHByYWN0aWNlIHRvIGluY2x1ZGUgc2FuaXR5IGNoZWNrcyBsaWtlIHRoaXMgd2hlbiBoYW5kbGluZyBwYXJhbWV0ZXJzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS5cblxuSSdtIG1ha2luZyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBzYCBpbiB0aGUgY29kZSBpcyBtb3N0IGxpa2VseSBhIHBvaW50ZXIgdG8gc29tZSBzdHJ1Y3R1cmUuIEknbSBndWVzc2luZyB0aGlzIHN0cnVjdHVyZSBpbmNsdWRlcyBgb3ZlcmhlYWRgIGFzIGEgbWVtYmVyLiBUaGUgY2hlY2sgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFyb3VuZCBsaW5lIDU0NC4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIHVzZSBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBxZGlzY19nZXRfc3RhYmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjI2Ljk3MTc0MzM1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDUyMTpcXHRcXHRcXHR9XFxuIDUyMjpcXHRcXHRcXHR0YWIgPSBubGFfZGF0YSh0YltUQ0FfU1RBQl9EQVRBXSk7XFxuIDUyMzpcXHRcXHRcXHR0c2l6ZSA9IG5sYV9sZW4odGJbVENBX1NUQUJfREFUQV0pIC8gc2l6ZW9mKHUxNik7XFxuIDUyNDpcXHRcXHR9XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGlmICh0c2l6ZSAhPSBzLVxcdTAwM2V0c2l6ZSB8fCAoIXRhYiBcXHUwMDI2XFx1MDAyNiB0c2l6ZSBcXHUwMDNlIDApKSB7XFxuIDUyNzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHNpemUgb2Ygc2l6ZSB0YWJsZVxcXCIpO1xcbiA1Mjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDUyOTpcXHRcXHR9XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3RhYiwgXFx1MDAyNnFkaXNjX3N0YWJfbGlzdCwgbGlzdCkge1xcbiA1MzI6XFx0XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2c3RhYi1cXHUwMDNlc3pvcHRzLCBzLCBzaXplb2YoKnMpKSlcXG4gNTMzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1MzQ6XFx0XFx0XFx0aWYgKHRzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0XFx0ICAgIG1lbWNtcChzdGFiLVxcdTAwM2VkYXRhLCB0YWIsIGZsZXhfYXJyYXlfc2l6ZShzdGFiLCBkYXRhLCB0c2l6ZSkpKVxcbiA1MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDUzNzpcXHRcXHRcXHRzdGFiLVxcdTAwM2VyZWZjbnQrKztcXG4gNTM4OlxcdFxcdFxcdHJldHVybiBzdGFiO1xcbiA1Mzk6XFx0XFx0fVxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRpZiAocy1cXHUwMDNlc2l6ZV9sb2cgXFx1MDAzZSBTVEFCX1NJWkVfTE9HX01BWCB8fFxcbiA1NDI6XFx0XFx0ICAgIHMtXFx1MDAzZWNlbGxfbG9nIFxcdTAwM2UgU1RBQl9TSVpFX0xPR19NQVgpIHtcXG4gNTQzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgbG9nYXJpdGhtaWMgc2l6ZSBvZiBzaXplIHRhYmxlXFxcIik7XFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNTQ1OlxcdFxcdH1cXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0aWYgKGFicyhzLVxcdTAwM2VvdmVyaGVhZCkgXFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xcbiA1NDg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBzaXplIHRhYmxlIG92ZXJoZWFkXFxcIik7XFxuIDU0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNTUwOlxcdFxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0c3RhYiA9IGttYWxsb2NfZmxleCgqc3RhYiwgZGF0YSwgdHNpemUpO1xcbiA1NTM6XFx0XFx0aWYgKCFzdGFiKVxcbiA1NTQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHN0YWItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDU1NzpcXHRcXHRzdGFiLVxcdTAwM2Vzem9wdHMgPSAqcztcXG4gNTU4OlxcdFxcdGlmICh0c2l6ZSBcXHUwMDNlIDApXFxuIDU1OTpcXHRcXHRcXHRtZW1jcHkoc3RhYi1cXHUwMDNlZGF0YSwgdGFiLCBmbGV4X2FycmF5X3NpemUoc3RhYiwgZGF0YSwgdHNpemUpKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3RhYi1cXHUwMDNlbGlzdCwgXFx1MDAyNnFkaXNjX3N0YWJfbGlzdCk7XFxuIDU2MjpcXHRcXG4gNTYzOlxcdFxcdHJldHVybiBzdGFiO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHR2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpXFxuIDU2NzpcXHR7XFxuIDU2ODpcXHRcXHRpZiAoIXRhYilcXG4gNTY5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6MjYuOTcxODk2NzE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDI5MDAxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgT3ZlcmhlYWQgaW4gYHRjX3NpemVzcGVjYCBmb3IgU2FuaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hlY2sgb24gYHMtXHUwMDNlb3ZlcmhlYWRgLCBsaWtlbHkgd2l0aGluIHNvbWUgdHJhZmZpYyBjb250cm9sIChUQykgY29udGV4dC4gVGhlIHByaW1hcnkgY29uY2VybiBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBmcm9tIGdvaW5nIGhheXdpcmUg4oCTIGVpdGhlciBiZWNvbWluZyBleGNlc3NpdmVseSBsYXJnZSBvciwgdXNpbmcgYGFicygpYCwgZXhjZXNzaXZlbHkgc21hbGwgKG9yIG5lZ2F0aXZlLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBjb3VsZCBiZSBlcXVhbGx5IHByb2JsZW1hdGljKS4gVGhlIHVzZSBvZiBgYWJzKClgIGlzIGEga2V5IGluZGljYXRvciB0aGF0IHdlIGFyZSBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCBhYnNvbHV0ZSB2YWx1ZXMsIG5vdCByYXcgc2lnbmVkIGludGVnZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdoYXQgYHN0cnVjdCB0Y19zaXplc3BlY2AgYWN0dWFsbHkgKmlzKi4gS25vd2luZyB0aGF0IHN0cnVjdCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCB0byBhc3Nlc3MgKndoeSogdGhpcyBvdmVyaGVhZCB2YWx1ZSBtYXR0ZXJzLCB3aGF0IGl0IHJlcHJlc2VudHMgKGJ5dGVzLCBwYWNrZXRzLCBzb21lIG90aGVyIG1ldHJpYz8pLCBhbmQgd2hhdCByZWFzb25hYmxlIGJvdW5kcyBhcmUgZm9yIGl0IHdpdGhpbiB0aGlzIFRDIHN1YnN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBoZWFkZXIgc2l6ZXMsIHBhZGRpbmcsIGZyYW1lIG92ZXJoZWFkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBzYCB2YXJpYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QsIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBjb21wcmlzZXMgdGhhdCBzdHJ1Y3R1cmUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjX3NpemVzcGVjYCBhbmQgc2VlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgVEMgcGljdHVyZS4gT25jZSBJIGtub3cgdGhhdCwgSSBjYW4gZXZhbHVhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgaW1wb3NlZCBjb25zdHJhaW50cyBhbmQgaXRzIGltcGxpY2F0aW9ucyBtb3JlIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMDksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjMxLjQ3NDc5OTQyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzM1OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNfc2l6ZXNwZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD01Mz1zdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTU1LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6NTY6XFx0c3RydWN0IHRjX3NpemVzcGVjXFx0c3pvcHRzO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNTctXFx0aW50XFx0XFx0XFx0cmVmY250O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oPTkxPXN0cnVjdCB0Y19yYXRlc3BlYyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmgtMTAxLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaDoxMDI6c3RydWN0IHRjX3NpemVzcGVjIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmgtMTAzLVxcdHVuc2lnbmVkIGNoYXJcXHRjZWxsX2xvZztcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggKyAxXSA9IHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjQ5MjpcXHRbVENBX1NUQUJfQkFTRV1cXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfc2l6ZXNwZWMpIH0sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTMtXFx0W1RDQV9TVEFCX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDk2PXN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01MDAtXFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1MDE6XFx0c3RydWN0IHRjX3NpemVzcGVjICpzO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTAyLVxcdHVuc2lnbmVkIGludCB0c2l6ZSA9IDA7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmg9OTA9c3RydWN0IHRjX3JhdGVzcGVjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDAtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oOjEwMTpzdHJ1Y3QgdGNfc2l6ZXNwZWMge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaC0xMDItXFx0dW5zaWduZWQgY2hhclxcdGNlbGxfbG9nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjozMy4yMTgxNzgxMjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODgyODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBzdHJ1Y3QgdGNfc2l6ZXNwZWNgIGRlZmluaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBpcyBpdCBzaXppbmc/IElzIGl0IGludm9sdmVkIGluIHJhdGUgbGltaXRpbmcsIHNoYXBpbmcsIGNsYXNzaWZpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yaz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gYmFuZHdpZHRoIG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgbWVtYmVycyBhbmQgd2hhdCB0aGV5IHJlcHJlc2VudCBpbiB0ZXJtcyBvZiBkYXRhIHN0cnVjdHVyZXMuIFdoYXQgZmllbGRzIGFyZSBpbiB0aGlzPyBJcyBpdCBkZWZpbmluZyBwYWNrZXQgc2l6ZXMsIHF1ZXVlIGRlcHRocywgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGVyZSBtdWx0aXBsZSBtZW1iZXJzPyBBcmUgdGhleSBpbnRlZ2VycywgYml0ZmllbGRzLCBvciBvdGhlciBzdHJ1Y3RzPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGUgZGVzaWduIHdpbGwgcmV2ZWFsIHRoZSBpbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MjozNi42MzcwMDg5NDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0I2RlZmluZSBUQ19SVEFCX1NJWkVcXHQxMDI0XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0cnVjdCB0Y19zaXplc3BlYyB7XFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0Y2VsbF9sb2c7XFxuIDEwNDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0c2l6ZV9sb2c7XFxuIDEwNTpcXHRcXHRzaG9ydFxcdFxcdGNlbGxfYWxpZ247XFxuIDEwNjpcXHRcXHRpbnRcXHRcXHRvdmVyaGVhZDtcXG4gMTA3OlxcdFxcdHVuc2lnbmVkIGludFxcdGxpbmtsYXllcjtcXG4gMTA4OlxcdFxcdHVuc2lnbmVkIGludFxcdG1wdTtcXG4gMTA5OlxcdFxcdHVuc2lnbmVkIGludFxcdG10dTtcXG4gMTEwOlxcdFxcdHVuc2lnbmVkIGludFxcdHRzaXplO1xcbiAxMTE6XFx0fTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0ZW51bSB7XFxuIDExNDpcXHRcXHRUQ0FfU1RBQl9VTlNQRUMsXFxuIDExNTpcXHRcXHRUQ0FfU1RBQl9CQVNFLFxcbiAxMTY6XFx0XFx0VENBX1NUQUJfREFUQSxcXG4gMTE3OlxcdFxcdF9fVENBX1NUQUJfTUFYXFxuIDExODpcXHR9O1xcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQyOjM2LjYzNzEzNzI1NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3Mzc0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3ZlcmhlYWQgTGltaXQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGltcG9zaW5nIGEgaGFyZCBsaW1pdCBvbiB0aGUgYG92ZXJoZWFkYCB2YWx1ZSwgc3BlY2lmaWNhbGx5IGNhcHBpbmcgaXQgYXQgYFNUQUJfT1ZFUkhFQURfTUFYYCwgd2hpY2ggaXMgNjU1MzUuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsIHdoeSB0aGlzIHJlc3RyaWN0aW9uPyBXaGF0J3MgdGhlIHByb2JsZW0gaXQncyBhZGRyZXNzaW5nPyBDbGVhcmx5LCB0aGUgY29uY2VybiBpcyB0aGF0IGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lLiBXZSdyZSBsaWtlbHkgdGFsa2luZyBhYm91dCBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcywgb3IgcG9zc2libHkgZXZlbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhpcyBgb3ZlcmhlYWRgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQgaW4gdGhlIGNvZGUuIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYXAuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBiZWluZyB1c2VkIGFzIGFuIGluZGV4LCBhIGNvdW50ZXIsIG9yIGluIGFueSBvdGhlciBjcml0aWNhbCBhcml0aG1ldGljIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGJlIHZ1bG5lcmFibGUgdG8gdGhlc2Uga2luZHMgb2YgZXJyb3JzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0Mjo0MC4yNDQ1MTU0NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjA0MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92ZXJoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDYwLVxcdFxcdGVudHJ5LVxcdTAwM2Vwb2xpY2UuYXZyYXRlID0gdGNmX3BvbGljZV90Y2ZwX2V3bWFfcmF0ZShhY3QpO1xcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDYxOlxcdFxcdGVudHJ5LVxcdTAwM2Vwb2xpY2Uub3ZlcmhlYWQgPSB0Y2ZfcG9saWNlX3JhdGVfb3ZlcmhlYWQoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ2Mi1cXHRcXHRlbnRyeS1cXHUwMDNlcG9saWNlLmJ1cnN0X3BrdCA9IHRjZl9wb2xpY2VfYnVyc3RfcGt0KGFjdCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTQ5Nj1zdGF0aWMgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnFkaXNjX2dldF9zdGFiKHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTQ2LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTQ3OlxcdGlmIChhYnMocy1cXHUwMDNlb3ZlcmhlYWQpIFxcdTAwM2UgU1RBQl9PVkVSSEVBRF9NQVgpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU0ODpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHNpemUgdGFibGUgb3ZlcmhlYWRcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU0OS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTk1PXZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo2MDA6XFx0cGt0X2xlbiA9IHNrYi1cXHUwMDNlbGVuICsgc3RhYi1cXHUwMDNlc3pvcHRzLm92ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNjAxLVxcdGlmICh1bmxpa2VseSghc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTIwMT1zdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjA4LVxcdHUxNlxcdFxcdGZ3bWFya19zaGZ0O1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjIwOTpcXHRzMTZcXHRcXHRyYXRlX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTIxMC1cXHR1MTZcXHRcXHRyYXRlX21wdTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTEzNzI9c3RhdGljIHU2NCBjYWtlX2V3bWEodTY0IGF2ZywgdTY0IHNhbXBsZSwgdTMyIHNoaWZ0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTM3OC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzc5OnN0YXRpYyB1MzIgY2FrZV9jYWxjX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnFkLCB1MzIgbGVuLCB1MzIgb2ZmKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzODAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTM5MC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMzkxOlxcdGxlbiA9IG1heCgoczMyKWxlbiArIHEtXFx1MDAzZXJhdGVfb3ZlcmhlYWQsIChzMzIpcS1cXHUwMDNlcmF0ZV9tcHUpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEzOTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDEyLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0MTM6c3RhdGljIHUzMiBjYWtlX292ZXJoZWFkKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQxNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDIzLVxcdGlmIChzZWdzID09IDEpXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTQyNDpcXHRcXHRyZXR1cm4gY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDI1LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTQ1Mi1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNDUzOlxcdHJldHVybiAoY2FrZV9jYWxjX292ZXJoZWFkKHEsIGxlbiwgb2ZmKSAqIChzZWdzIC0gMSkgK1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE0NTQ6XFx0XFx0Y2FrZV9jYWxjX292ZXJoZWFkKHEsIGxhc3RfbGVuLCBvZmYpKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNDU1LX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE3NTU9c3RhdGljIHMzMiBjYWtlX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODE2LVxcdFxcdFxcdGNvYmFsdF9zZXRfZW5xdWV1ZV90aW1lKHNlZ3MsIG5vdyk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTgxNzpcXHRcXHRcXHRnZXRfY29iYWx0X2NiKHNlZ3MpLVxcdTAwM2VhZGp1c3RlZF9sZW4gPSBjYWtlX292ZXJoZWFkKHEsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTgxOC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNlZ3MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg0MS1cXHRcXHRjb2JhbHRfc2V0X2VucXVldWVfdGltZShza2IsIG5vdyk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTg0MjpcXHRcXHRnZXRfY29iYWx0X2NiKHNrYiktXFx1MDAzZWFkanVzdGVkX2xlbiA9IGNha2Vfb3ZlcmhlYWQocSwgc2tiKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODQzLVxcdFxcdGZsb3dfcXVldWVfYWRkKGZsb3csIHNrYik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yNjQ5PXN0YXRpYyBpbnQgY2FrZV9jb25maWdfY2hhbmdlKHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI2NTA6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLCBib29sICpvdmVyaGVhZF9jaGFuZ2VkKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI2NTEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMS1cXHRpZiAodGJbVENBX0NBS0VfT1ZFUkhFQURdKSB7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcxMjpcXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZXJhdGVfb3ZlcmhlYWQsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxMy1cXHRcXHRcXHQgICBubGFfZ2V0X3MzMih0YltUQ0FfQ0FLRV9PVkVSSEVBRF0pKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzE0LVxcdFxcdHJhdGVfZmxhZ3MgfD0gQ0FLRV9GTEFHX09WRVJIRUFEO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3MTU6XFx0XFx0Km92ZXJoZWFkX2NoYW5nZWQgPSB0cnVlO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3MTYtXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcxOS1cXHRcXHRyYXRlX2ZsYWdzIFxcdTAwMjY9IH5DQUtFX0ZMQUdfT1ZFUkhFQUQ7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MjcyMDpcXHRcXHQqb3ZlcmhlYWRfY2hhbmdlZCA9IHRydWU7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjcyMS1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0yNzczPXN0YXRpYyBpbnQgY2FrZV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzctXFx0c3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxID0gcWQtXFx1MDAzZWNvbmZpZztcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyNzc4OlxcdGJvb2wgb3ZlcmhlYWRfY2hhbmdlZCA9IGZhbHNlO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3NzktXFx0aW50IHJldDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI3ODUtXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6Mjc4NjpcXHRyZXQgPSBjYWtlX2NvbmZpZ19jaGFuZ2UocSwgb3B0LCBleHRhY2ssIFxcdTAwMjZvdmVyaGVhZF9jaGFuZ2VkKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzg3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzg5LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI3OTA6XFx0aWYgKG92ZXJoZWFkX2NoYW5nZWQpIHtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yNzkxLVxcdFxcdFdSSVRFX09OQ0UocWQtXFx1MDAzZW1heF9uZXRsZW4sIDApO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MjkwOD1zdGF0aWMgaW50IGNha2VfY29uZmlnX2R1bXAoc3RydWN0IGNha2Vfc2NoZWRfY29uZmlnICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMjk1OC1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyOTU5OlxcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9DQUtFX09WRVJIRUFELCBSRUFEX09OQ0UocS1cXHUwMDNlcmF0ZV9vdmVyaGVhZCkpKVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI5NjAtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0zMzAxPXN0YXRpYyBpbnQgY2FrZV9tcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMzMDUtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjMzMDY6XFx0Ym9vbCBvdmVyaGVhZF9jaGFuZ2VkID0gZmFsc2U7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMwNy1cXHR1bnNpZ25lZCBpbnQgbnR4O1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMwOS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzEwOlxcdHJldCA9IGNha2VfY29uZmlnX2NoYW5nZShcXHUwMDI2cHJpdi1cXHUwMDNlY2FrZV9jb25maWcsIG9wdCwgZXh0YWNrLCBcXHUwMDI2b3ZlcmhlYWRfY2hhbmdlZCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxMS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxNy1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzE4OlxcdFxcdGlmIChvdmVyaGVhZF9jaGFuZ2VkKSB7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzMxOS1cXHRcXHRcXHRXUklURV9PTkNFKHFkLVxcdTAwM2VtYXhfbmV0bGVuLCAwKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jPTcxMD1zdGF0aWMgdTMyIGdldF9tZW1vcnlfbGltaXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBsaW1pdClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTcxMi1cXHQvKiBBcHBseSBydWxlIG9mIHRodW1iLCBpLmUuLCBkb3VibGluZyB0aGUgcGFja2V0IGxlbmd0aCxcXG5uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYzo3MTM6XFx0ICogdG8gZnVydGhlciBpbmNsdWRlIHBlciBwYWNrZXQgb3ZlcmhlYWQgaW4gbWVtb3J5X2xpbWl0Llxcbm5ldC9zY2hlZC9zY2hfZHVhbHBpMi5jLTcxNC1cXHQgKi9cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTgwMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBmaWZvX2Zhc3RfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtODIzLVxcdFxcdC8qIERlbGF5IGNsZWFyaW5nIHRoZSBTVEFURV9NSVNTRUQgaGVyZSB0byByZWR1Y2VcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzo4MjQ6XFx0XFx0ICogdGhlIG92ZXJoZWFkIG9mIHRoZSBzZWNvbmQgc3Bpbl90cnlsb2NrKCkgaW5cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy04MjUtXFx0XFx0ICogcWRpc2NfcnVuX2JlZ2luKCkgYW5kIF9fbmV0aWZfc2NoZWR1bGUoKSBjYWxsaW5nXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xNTYzPXZvaWQgcHNjaGVkX3JhdGVjZmdfcHJlY29tcHV0ZShzdHJ1Y3QgcHNjaGVkX3JhdGVjZmcgKnIsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNTY3LVxcdG1lbXNldChyLCAwLCBzaXplb2YoKnIpKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxNTY4OlxcdHItXFx1MDAzZW92ZXJoZWFkID0gY29uZi1cXHUwMDNlb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTU2OS1cXHRyLVxcdTAwM2VtcHUgPSBjb25mLVxcdTAwM2VtcHU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjI9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5OC1cXHRcXHQvKiBPcHRpb25zIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG9mZmxvYWQuICovXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzk5OlxcdFxcdGlmIChob3B0LVxcdTAwM2VyYXRlLm92ZXJoZWFkIHx8IGhvcHQtXFx1MDAzZWNlaWwub3ZlcmhlYWQpIHtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjE4MDA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSFRCIG9mZmxvYWQgZG9lc24ndCBzdXBwb3J0IHRoZSBvdmVyaGVhZCBwYXJhbWV0ZXJcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE4MDEtXFx0XFx0XFx0Z290byBmYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTkzPXN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzUtXFx0ICovXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jOjEzNjpcXHRzMzJcXHRcXHRcXHRwYWNrZXRfb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzNy1cXHR1MzJcXHRcXHRcXHRjZWxsX3NpemU7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTEzOC1cXHRzdHJ1Y3QgcmVjaXByb2NhbF92YWx1ZVxcdGNlbGxfc2l6ZV9yZWNpcHJvY2FsO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzoxMzk6XFx0czMyXFx0XFx0XFx0Y2VsbF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTQwLVxcdHUzMlxcdFxcdFxcdGxpbWl0O1xcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jPTM2Nz1zdGF0aWMgdTY0IHBhY2tldF90aW1lX25zKHU2NCBsZW4sIGNvbnN0IHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxKVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0zNjgte1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzozNjk6XFx0bGVuICs9IHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMzcwLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3NS1cXHRcXHRcXHRjZWxscysrO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYzozNzY6XFx0XFx0bGVuID0gY2VsbHMgKiAocS1cXHUwMDNlY2VsbF9zaXplICsgcS1cXHUwMDNlY2VsbF9vdmVyaGVhZCk7XFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTM3Ny1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM9OTM2PXN0YXRpYyB2b2lkIGdldF9yYXRlKHN0cnVjdCBuZXRlbV9zY2hlZF9kYXRhICpxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9uZXRlbS5jLTk0MC1cXHRxLVxcdTAwM2VyYXRlID0gci1cXHUwMDNlcmF0ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQxOlxcdHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZCA9IHItXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtOTQyLVxcdHEtXFx1MDAzZWNlbGxfc2l6ZSA9IHItXFx1MDAzZWNlbGxfc2l6ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6OTQzOlxcdHEtXFx1MDAzZWNlbGxfb3ZlcmhlYWQgPSByLVxcdTAwM2VjZWxsX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy05NDQtXFx0aWYgKHEtXFx1MDAzZWNlbGxfc2l6ZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYz0xMjUwPXN0YXRpYyBpbnQgbmV0ZW1fZHVtcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzAxLVxcdH1cXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MTMwMjpcXHRyYXRlLnBhY2tldF9vdmVyaGVhZCA9IHEtXFx1MDAzZXBhY2tldF9vdmVyaGVhZDtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmMtMTMwMy1cXHRyYXRlLmNlbGxfc2l6ZSA9IHEtXFx1MDAzZWNlbGxfc2l6ZTtcXG5uZXQvc2NoZWQvc2NoX25ldGVtLmM6MTMwNDpcXHRyYXRlLmNlbGxfb3ZlcmhlYWQgPSBxLVxcdTAwM2VjZWxsX292ZXJoZWFkO1xcbm5ldC9zY2hlZC9zY2hfbmV0ZW0uYy0xMzA1LVxcdGlmIChubGFfcHV0KHNrYiwgVENBX05FVEVNX1JBVEUsIHNpemVvZihyYXRlKSwgXFx1MDAyNnJhdGUpKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0zODM9c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM4OC1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjM4OTpcXHQvKiAnbG1heCcgY2FuIHJhbmdlIGZyb20gW1FGUV9NSU5fTE1BWCwgcGt0bGVuICsgc3RhYiBvdmVyaGVhZF0gKi9cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM5MC1cXHRpZiAobG1heCBcXHUwMDNlIFFGUV9NQVhfTE1BWClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjcxPXN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTMtXFx0XFx0XFx0bWF4X2ZybV9sZW4gPSBkdXJhdGlvbl90b19sZW5ndGgocSwgc2NoZWQtXFx1MDAzZW1heF9vcGVuX2dhdGVfZHVyYXRpb25bdGNdKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI5NDpcXHRcXHRcXHQvKiBDb21wZW5zYXRlIGZvciBMMSBvdmVyaGVhZCBmcm9tIHNpemUgdGFibGUsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTUtXFx0XFx0XFx0ICogYnV0IGRvbid0IGxldCB0aGUgZnJhbWUgc2l6ZSBnbyBuZWdhdGl2ZVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTctXFx0XFx0XFx0aWYgKHN0YWIpIHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI5ODpcXHRcXHRcXHRcXHRtYXhfZnJtX2xlbiAtPSBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yOTktXFx0XFx0XFx0XFx0bWF4X2ZybV9sZW4gPSBtYXhfdChpbnQsIG1heF9mcm1fbGVuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YmYuYz0xMTk9c3RhdGljIHU2NCBwc2NoZWRfbnNfdDJsKGNvbnN0IHN0cnVjdCBwc2NoZWRfcmF0ZWNmZyAqcixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGJmLmMtMTMzLVxcbm5ldC9zY2hlZC9zY2hfdGJmLmM6MTM0OlxcdGlmIChsZW4gXFx1MDAzZSByLVxcdTAwM2VvdmVyaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RiZi5jOjEzNTpcXHRcXHRsZW4gLT0gci1cXHUwMDNlb3ZlcmhlYWQ7XFxubmV0L3NjaGVkL3NjaF90YmYuYy0xMzYtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0Mjo0MC4zMDQ3MjU0ODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1MjM5NTQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93KipcblxuT2theSwgc28gYG92ZXJoZWFkYCBpcyBkZWZpbmVkIGFzIGFuIGludGVnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgYG92ZXJoZWFkYCB2YWx1ZSBiZWNvbWVzIGV4Y2Vzc2l2ZWx5IGxhcmdlLCB0aGVyZSdzIGEgcmVhbCByaXNrIG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgaGFwcGVuaW5nIHJpZ2h0IGhlcmU6IGBwa3RfbGVuID0gc2tiLVx1MDAzZWxlbiArIHN0YWItXHUwMDNlc3pvcHRzLm92ZXJoZWFkO2AgaW5zaWRlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBsaW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dCBhbmQgd2hhdCdzIGdvaW5nIG9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnN0cmFpbnRzIGFuZCBjYWxjdWxhdGlvbnMgaW52b2x2ZWQuIEkgbmVlZCB0byBzZWUgaG93IGBwa3RfbGVuYCBpcyB1c2VkIGRvd25zdHJlYW0gdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoaXMgb3ZlcmZsb3cgb2NjdXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6NTEuODI4NjgzNTc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHRpZiAobmxhX3B1dChza2IsIFRDQV9TVEFCX0JBU0UsIHNpemVvZihzdGFiLVxcdTAwM2Vzem9wdHMpLCBcXHUwMDI2c3RhYi1cXHUwMDNlc3pvcHRzKSlcXG4gNTg2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1ODc6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gNTkwOlxcdFxcbiA1OTE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA1OTI6XFx0XFx0cmV0dXJuIC0xO1xcbiA1OTM6XFx0fVxcbiA1OTQ6XFx0XFxuIDU5NTpcXHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTk2OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4gNTk3OlxcdHtcXG4gNTk4OlxcdFxcdGludCBwa3RfbGVuLCBzbG90O1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRwa3RfbGVuID0gc2tiLVxcdTAwM2VsZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxuIDYwMTpcXHRcXHRpZiAodW5saWtlbHkoIXN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZSkpXFxuIDYwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0c2xvdCA9IHBrdF9sZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtcXG4gNjA1OlxcdFxcdGlmICh1bmxpa2VseShzbG90IFxcdTAwM2MgMCkpXFxuIDYwNjpcXHRcXHRcXHRzbG90ID0gMDtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0c2xvdCBcXHUwMDNlXFx1MDAzZT0gc3RhYi1cXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xcbiA2MDk6XFx0XFx0aWYgKGxpa2VseShzbG90IFxcdTAwM2Mgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4gNjEwOlxcdFxcdFxcdHBrdF9sZW4gPSBzdGFiLVxcdTAwM2VkYXRhW3Nsb3RdO1xcbiA2MTE6XFx0XFx0ZWxzZVxcbiA2MTI6XFx0XFx0XFx0cGt0X2xlbiA9IHN0YWItXFx1MDAzZWRhdGFbc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxcbiA2MTM6XFx0XFx0XFx0XFx0XFx0KHNsb3QgLyBzdGFiLVxcdTAwM2Vzem9wdHMudHNpemUpICtcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdHN0YWItXFx1MDAzZWRhdGFbc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZV07XFxuIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gNjE3OlxcdG91dDpcXG4gNjE4OlxcdFxcdGlmICh1bmxpa2VseShwa3RfbGVuIFxcdTAwM2MgMSkpXFxuIDYxOTpcXHRcXHRcXHRwa3RfbGVuID0gMTtcXG4gNjIwOlxcdFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gNjI0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDI6NTEuODI4OTAyNjE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzMyODQxMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIElmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGUgaW5pdGlhbCBjYWxjdWxhdGlvbiBvZiBgcGt0X2xlbmAgY2FuIGJlY29tZSBlbm9ybW91cywgb3IgZXZlbiBuZWdhdGl2ZS4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuIFRoZSBjb2RlIHRoZW4gY2FsY3VsYXRlcyBgc2xvdGAgYmFzZWQgb24gYHBrdF9sZW5gIGFuZCBjZWxsIGFsaWdubWVudC4gQSB2ZXJ5IGxhcmdlIGBwa3RfbGVuYCBsZWFkcyB0byBhIGxhcmdlIGBzbG90YCwgd2hpY2ggaXMgdGhlbiByaWdodC1zaGlmdGVkLlxuXG5JIHNlZSBhIGNoZWNrIHRvIGVuc3VyZSBgc2xvdGAgZG9lc24ndCBleGNlZWQgYHN0YWItXHUwMDNlc3pvcHRzLnRzaXplYCwgYW5kIGlmIGl0IGRvZXMsIHRoZXJlJ3MgYSBzcGVjaWZpYyBjYWxjdWxhdGlvbiBmb3IgYHBrdF9sZW5gIHdpdGhpbiB0aGF0IGNvbmRpdGlvbiB1c2luZyB0aGUgbW9kdWxvIG9wZXJhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgdGhhdCBtb2R1bG8gb3BlcmF0aW9uIGxvb2tzIHNhZmUgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gQnV0IHRoZW4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGBzbG90YCBiZWluZyBuZWdhdGl2ZS4gVGhlIGNvZGUgaW5jbHVkZXMgYSBjaGVjayBhbmQgY2xhbXBzIGBzbG90YCB0byAwIGlmIGl0J3MgbmVnYXRpdmUsIHNvIHdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoYXQgb2NjdXJzLlxuXG5UaGUga2V5IGluc2lnaHQgaXMgdGhlIGludGVnZXIgb3ZlcmZsb3cuIElmIGBwa3RfbGVuYCBpcyBsYXJnZSBlbm91Z2ggYWZ0ZXIgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gYXMgYW4gYGludGAsIHdoZW4gd2UgYWRkIGBjZWxsX2FsaWduYCB0byBpdCwgdGhlIHZhbHVlIGNvdWxkIHdyYXAgYXJvdW5kLCByZXN1bHRpbmcgaW4gYSBuZWdhdGl2ZSBgc2xvdGAuIFRoZSBjb2RlIGhhbmRsZXMgbmVnYXRpdmUgYHNsb3RgIHRocm91Z2ggY2xhbXBpbmcuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgY29uc2lkZXJzIGEgc2NlbmFyaW8uIElmIGBvdmVyaGVhZGAgaXMgZWZmZWN0aXZlbHkgYElOVF9NQVhgLCBhbmQgYHNrYi1cdTAwM2VsZW5gIGlzIGFyb3VuZCAxNTAwLCBgcGt0X2xlbmAgd2lsbCB3cmFwIGFyb3VuZCB0byBuZWdhdGl2ZS4gQW5kIHRoZXJlZm9yZSBgc2xvdGAgY2FuIGJlIG5lZ2F0aXZlIGFuZCBiZSBjbGFtcGVkIHRvIDAuXG5cbkhvd2V2ZXIsIGEgZGlmZmVyZW50IHNjZW5hcmlvIGFsc28gZW1lcmdlczogd2hhdCBpZiBgb3ZlcmhlYWRgIGlzIGp1c3Qgc2xpZ2h0bHkgbGVzcyB0aGFuIGBJTlRfTUFYYCwgc28gdGhhdCB0aGUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBpbml0aWFsbHksIGFuZCBgcGt0X2xlbmAgaXMgc3RpbGwgYSBwb3NpdGl2ZSBidXQgdmVyeSBsYXJnZSBpbnRlZ2VyPyBUaGVuIGBzbG90YCB3b3VsZCBhbHNvIGJlIGEgbGFyZ2UgcG9zaXRpdmUgbnVtYmVyLiBXZSBjb3VsZCBzdGlsbCBydW4gaW50byBwcm9ibGVtcyBsYXRlci5cblxuV2hlbiBgc2xvdCAvIHRzaXplYCBpcyBsYXJnZSwgaXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93IHdoZW4gYHBrdF9sZW5gIGlzIGNhbGN1bGF0ZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYHBrdF9sZW5gIGNhbiBiZSBsYXJnZSBlbm91Z2ggdG8gb3ZlcmZsb3cgZHVyaW5nIHRoZSBgcGt0X2xlbiBcdTAwM2NcdTAwM2M9IHN0YWItXHUwMDNlc3pvcHRzLnNpemVfbG9nO2Agb3BlcmF0aW9uLiBXaGljaCBjb3VsZCByZXN1bHQgaW4gc3RvcmluZyBhbiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBpbiBgcWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbmAuXG5cbkknbSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgdHJpY2t5IG9uZSB0byBleHBsb2l0LCBidXQgdGhlIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhhdCBvcmlnaW5hbCBjb21taXQgb3IgcGF0Y2ggZGVzY3JpcHRpb24uIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvbW1pdCBoaXN0b3J5IGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCB0byBjbGVhciB0aGlzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjA0LjE2MTc0Njg2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDU1MDk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSZWplY3QgRFJSIHFkaXNjIHdpdGggb3ZlcnNpemVkIFRDQV9TVEFCIG92ZXJoZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uLTkxLSAgICAgICAgXFxcImlkXFxcIjogXFxcImQxZTJcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2Ryci5qc29uOjkyOiAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiUmVqZWN0IERSUiBxZGlzYyB3aXRoIG92ZXJzaXplZCBUQ0FfU1RBQiBvdmVyaGVhZFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZHJyLmpzb24tOTMtICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjA1Ljc1NjMwMjQzMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDIzMjIzNDI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2sqKlxuXG5Pa2F5LCBzbyBJJ20gc3VzcGVjdGluZyBzb21lIGtpbmQgb2Ygb3ZlcmhlYWQgaXNzdWUuIFRoZSBuYW1lIGBTVEFCX09WRVJIRUFEX01BWGAga2VlcHMgcGluZ2luZyBzb21ldGhpbmcgaW4gbXkgaGVhZCBhcyBhIHBvdGVudGlhbCBjdWxwcml0LiBJdCBzdWdnZXN0cyBhIG1heGltdW0gYWxsb3dlZCB2YWx1ZSByZWxhdGVkIHRvIHNvbWV0aGluZyDigJMgc3RhYiwgd2hhdGV2ZXIgdGhhdCByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGNvbnN0YW50IHdhcyBpbnRyb2R1Y2VkLCBhbnkgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBhbnkgYXNzb2NpYXRlZCBjb21taXQgbWVzc2FnZXMuIFRob3NlIGNvbW1pdHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmNvdmVyaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2UuIEknbSBnb2luZyB0byBydW4gYSBgZ2l0IGxvZ2Agc2VhcmNoIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYFNUQUJfT1ZFUkhFQURfTUFYYC4gSG9wZWZ1bGx5LCB0aGUgaGlzdG9yeSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGl0IHdhcyBkZXNpZ25lZCB0byBhZGRyZXNzLCBhbmQgdWx0aW1hdGVseSBoZWxwIG1lIGRldGVybWluZSBpZiBpdCdzIGNvbnRyaWJ1dGluZyB0byB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIGRpYWdub3NlLiBJJ20gaG9waW5nIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSB0aGUgY29kZSBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCwgb3IgbWF5YmUgZXZlbiBsaW5rZWQgdG8gc29tZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjI5Ljk4ODUzOTEyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODM3NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVEFCX09WRVJIRUFEX01BWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0xNC0jZGVmaW5lIFNUQUJfU0laRV9MT0dfTUFYXFx0MzBcXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDoxNTojZGVmaW5lIFNUQUJfT1ZFUkhFQURfTUFYXFx0NjU1MzVcXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaC0xNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NDk2PXN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01NDYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1NDc6XFx0aWYgKGFicyhzLVxcdTAwM2VvdmVyaGVhZCkgXFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWCkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTQ4LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgc2l6ZSB0YWJsZSBvdmVyaGVhZFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0MzozMS40NTY5MjAzMTRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwOTQ3MzE1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVEFCIE92ZXJoZWFkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBTVEFCX09WRVJIRUFEX01BWGAgYW5kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHMtXHUwMDNlb3ZlcmhlYWRgIGV4Y2VlZHMgdGhpcyBsaW1pdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgcmVzdHJpY3Rpb24/IFdoYXQncyB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiBhIGxhcmdlIGBvdmVyaGVhZGAgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjb2RlIGNsZWFybHkgYWxsb3dzIGZvciBpdCB0byBiZSBxdWl0ZSBsYXJnZSB1cCB0byB0aGlzIHBvaW50LCBzbyBpdCBpcyBwcm9iYWJseSBub3QgYSBwZXJmb3JtYW5jZSBpc3N1ZS5cblxuTGV0J3MgZGlnIGludG8gdGhlIGV4aXN0aW5nIHFkaXNjcyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBJJ2xsIHN0YXJ0IHdpdGggYGRycmAgYW5kIGBldHNgLCBzaW5jZSB0aGV5IGFyZSBtZW50aW9uZWQuIEkgc2VlIGluIGBkcnIuanNvbmAgdGhleSBhcmUgdGVzdGluZyB3aXRoIGEgcmF0aGVyIGV4dHJlbWUgb3ZlcmhlYWQgdmFsdWU6IGAkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3Qgc3RhYiBvdmVyaGVhZCAyMTQ3NDgzMDAwIGRycmAuIFRoYXQgdmFsdWUsIGAyMTQ3NDgzMDAwYCwgaXMgaGV4IGAweDdGRkZGRDc4YC4gVGhlIHNhbWUgZXh0cmVtZSB2YWx1ZSBpcyBhbHNvIGJlaW5nIHVzZWQgaW4gdGhlIGBldHNgIHRlc3QgaW4gYGV0cy5qc29uYDogYCRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBzdGFiIG92ZXJoZWFkIDIxNDc0ODMwMDAgZXRzIGJhbmRzIDEgc3RyaWN0IDAgcXVhbnRhIDFgLlxuXG5TbyBjbGVhcmx5LCB0aGVzZSBleHRyZW1lIHZhbHVlcyBhcmUgYmVpbmcgKnRlc3RlZCouIFdoeSB3b3VsZCB0aGV5IHRlc3Qgc3VjaCBsYXJnZSB2YWx1ZXM/IElzIGl0IGludGVuZGVkIG9yIGFjY2lkZW50YWw/IEFuZCBpZiBpbnRlbmRlZCwgd2hhdCdzIHRoZSB1c2UgY2FzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBzZWVtaW5nbHkgYXJiaXRyYXJ5IGxpbWl0IGlzIGJlaW5nIGltcG9zZWQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBgbmV0L3NjaGVkL3NjaF9kcnIuY2AgY29kZSB0byBzZWUgaG93IGBvdmVyaGVhZGAgaXMgdXNlZCBpbiB0aGF0IHFkaXNjIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDM6NDYuNTUxNjU5NTI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVxcdTAwM2VxZGlzYywgdG9fZnJlZSk7XFxuIDM1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IE5FVF9YTUlUX1NVQ0NFU1MpKSB7XFxuIDM1NDpcXHRcXHRcXHRpZiAobmV0X3htaXRfZHJvcF9jb3VudChlcnIpKSB7XFxuIDM1NTpcXHRcXHRcXHRcXHRjbC1cXHUwMDNlcXN0YXRzLmRyb3BzKys7XFxuIDM1NjpcXHRcXHRcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbiAzNTc6XFx0XFx0XFx0fVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzU5OlxcdFxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0aWYgKCFjbF9pc19hY3RpdmUoY2wpKSB7XFxuIDM2MjpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjbC1cXHUwMDNlYWxpc3QsIFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUpO1xcbiAzNjM6XFx0XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlZGVmaWNpdCwgUkVBRF9PTkNFKGNsLVxcdTAwM2VxdWFudHVtKSk7XFxuIDM2NDpcXHRcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIGxlbik7XFxuIDM2NzpcXHRcXHRxZGlzY19xbGVuX2luYyhzY2gpO1xcbiAzNjg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzY5OlxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpkcnJfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gMzcyOlxcdHtcXG4gMzczOlxcdFxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG4gMzc1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM3NjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuO1xcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cS1cXHUwMDNlYWN0aXZlKSlcXG4gMzc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzODA6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMzgxOlxcdFxcdFxcdGNsID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2cS1cXHUwMDNlYWN0aXZlLCBzdHJ1Y3QgZHJyX2NsYXNzLCBhbGlzdCk7XFxuIDM4MjpcXHRcXHRcXHRza2IgPSBjbC1cXHUwMDNlcWRpc2MtXFx1MDAzZW9wcy1cXHUwMDNlcGVlayhjbC1cXHUwMDNlcWRpc2MpO1xcbiAzODM6XFx0XFx0XFx0aWYgKHNrYiA9PSBOVUxMKSB7XFxuIDM4NDpcXHRcXHRcXHRcXHRxZGlzY193YXJuX25vbndjKF9fZnVuY19fLCBjbC1cXHUwMDNlcWRpc2MpO1xcbiAzODU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM4NjpcXHRcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdFxcdGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTtcXG4gMzg5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gY2wtXFx1MDAzZWRlZmljaXQpIHtcXG4gMzkwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoY2wtXFx1MDAzZWRlZmljaXQsIGNsLVxcdTAwM2VkZWZpY2l0IC0gbGVuKTtcXG4gMzkxOlxcdFxcdFxcdFxcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDM5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM5NDpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdFxcdGJzdGF0c191cGRhdGUoXFx1MDAyNmNsLVxcdTAwM2Vic3RhdHMsIHNrYik7XFxuIDM5ODpcXHRcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gMzk5OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjQ2LjU1MTc0NTQ0OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyMjAzNzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlIGluIGRycl9kZXF1ZXVlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHJyX2RlcXVldWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoaXMgbGluZTogYGxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTtgLiBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyByZXR1cm5pbmcgdGhlIHBhY2tldCBsZW5ndGggdXNpbmcgYHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW5gLiBOb3csIGlmIHRoZSBgb3ZlcmhlYWRgIHZhbHVlIGlzIHN1YnN0YW50aWFsLCB0aGlzIGBsZW5gIGNhbiBwb3RlbnRpYWxseSBiZWNvbWUgcXVpdGUgbGFyZ2UuXG5cblRoYXQncyB3aGVuIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWwgYGlmIChsZW4gXHUwMDNjPSBjbC1cdTAwM2VkZWZpY2l0KWAgY291bGQgZmFpbCBiZWNhdXNlIGBsZW5gIGlzIHRvbyBsYXJnZSBvciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgbGVuYCBzb21laG93IGJlY2FtZSBuZWdhdGl2ZT8gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBoYXN0eSwgYXMgYGxlbmAgaXMgYW4gYHVuc2lnbmVkIGludGAuXG5cbkhvbGQgb24uIFNpbmNlIGBxZGlzY19wa3RfbGVuKHNrYilgIGlzIGFsc28gcmV0dXJuaW5nIGFuIGB1bnNpZ25lZCBpbnRgIHRoZXJlJ3Mgbm8gd2F5IGZvciBgbGVuYCB0byBhY3R1YWxseSBiZWNvbWUgbmVnYXRpdmUsIGl0IGNvdWxkIGp1c3Qgb3ZlcmZsb3cuIFRoYXQgbWVhbnMgdGhlcmUncyBubyByaXNrIG9mIGEgc3VidHJhY3Rpb24gcmVzdWx0aW5nIGluIGFuIGluY3JlYXNlZCBgZGVmaWNpdGAgdmFsdWUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcyB0aG91Z2gsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgcWRpc2NfcGt0X2xlbmAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQzOjU0LjY1Mzk1MTkyMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwOTE3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmg9Mjk3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BlZWtfbGVuKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmgtMzA2LVxcdH1cXG5pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaDozMDc6XFx0bGVuID0gcWRpc2NfcGt0X2xlbihza2IpO1xcbmluY2x1ZGUvbmV0L3BrdF9zY2hlZC5oLTMwOC1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9ODkyPXN0YXRpYyBpbmxpbmUgYm9vbCBxZGlzY190eF9pc19ub29wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkwMy1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjkwNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3RfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MDUte1xcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05NjU9c3RhdGljIGlubGluZSB2b2lkIGJzdGF0c191cGRhdGUoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyAqYnN0YXRzLFxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05Njcte1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTY4OlxcdF9ic3RhdHNfdXBkYXRlKGJzdGF0cywgcWRpc2NfcGt0X2xlbihza2IpLCBxZGlzY19wa3Rfc2Vncyhza2IpKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk2OS19XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTk4OD1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfcXN0YXRzX2JhY2tsb2dfZGVjKHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTAte1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTkxOlxcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05OTItfVxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05OTQ9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19jcHVfYmFja2xvZ19kZWMoc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5Ni17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5OTc6XFx0dGhpc19jcHVfc3ViKHNjaC1cXHUwMDNlY3B1X3FzdGF0cy1cXHUwMDNlYmFja2xvZywgcWRpc2NfcGt0X2xlbihza2IpKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTk5OC19XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEwMDU9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAwNy17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDA4OlxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMDA5LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9MTAxMT1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfcXN0YXRzX2NwdV9iYWNrbG9nX2luYyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTAxMy17XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDoxMDE0OlxcdHRoaXNfY3B1X2FkZChzY2gtXFx1MDAzZWNwdV9xc3RhdHMtXFx1MDAzZWJhY2tsb2csIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMDE1LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9MTI2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3My1cXHRpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkge1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6MTI3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDM6NTQuNzA2MDQ4NDM3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTEwODM0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgcWRpc2NfcGt0X2xlbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcGFja2V0IGxlbmd0aHMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBxdWV1aW5nIGRpc2NpcGxpbmUgY29udGV4dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBjb3JlIGRlZmluaXRpb25zLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nLCBcIldoZXJlIHdvdWxkIHRoZSBmdW5kYW1lbnRhbCBkZWZpbml0aW9uIG9mIGBxZGlzY19wa3RfbGVuYCByZXNpZGU/IEFoLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIHNjaGVkdWxpbmcgaGVhZGVycywgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIHNvdW5kcyBsaWtlIHRoZSByaWdodCBzcG90LiBMZXQgbWUgcHVsbCB0aGF0IHVwIGFuZCBjb25maXJtIG15IGludHVpdGlvbi5cIiBUaW1lIHRvIGdldCB0byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaGFzIHRvIHNheS4gSSdtIGhvcGluZyBpdCdzIHdlbGwtZG9jdW1lbnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDowMi40OTcxMzQ5ODRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdFxcdH1cXG4gOTAxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA5MDI6XFx0fVxcbiA5MDM6XFx0XFxuIDkwNDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19wa3RfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDkwNTpcXHR7XFxuIDkwNjpcXHRcXHRyZXR1cm4gcWRpc2Nfc2tiX2NiKHNrYiktXFx1MDAzZXBrdF9sZW47XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9zZWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDkxMDpcXHR7XFxuIDkxMTpcXHRcXHR1MzIgcGt0X3NlZ3MgPSBxZGlzY19za2JfY2Ioc2tiKS1cXHUwMDNlcGt0X3NlZ3M7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocGt0X3NlZ3MgIT1cXG4gOTE0OlxcdFxcdFxcdFxcdChza2JfaXNfZ3NvKHNrYikgPyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzIDogMSkpO1xcbiA5MTU6XFx0XFx0cmV0dXJuIHBrdF9zZWdzO1xcbiA5MTY6XFx0fVxcbiA5MTc6XFx0XFxuIDkxODpcXHQvKiBhZGRpdGlvbmFsIHFkaXNjIHhtaXQgZmxhZ3MgKE5FVF9YTUlUX01BU0sgaW4gbGludXgvbmV0ZGV2aWNlLmgpICovXFxuIDkxOTpcXHRlbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDowMi40OTcyNzM2NTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0ODk4MTUxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIERSUiBRdWV1ZWluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHFkaXNjX3BrdF9sZW5gIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIERSUiAoRGVmaWNpdCBSb3VuZCBSb2JpbikgcXVldWVpbmcgZGlzY2lwbGluZS4gYHFkaXNjX3BrdF9sZW5gIHVsdGltYXRlbHkgcmV0dXJucyBhbiBgdW5zaWduZWQgaW50YCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gVGhlIGNydXggb2YgbXkgY29uY2VybiBpcyBob3cgcGFja2V0IGxlbmd0aCBpcyBjYWxjdWxhdGVkIGFuZCB1c2VkIGluIGBkcnJfZGVxdWV1ZWAuXG5cbkknbSBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYWRkcyB0aGUgYHNrYi1cdTAwM2VsZW5gIChsaWtlbHkgYXJvdW5kIDE1MDAgYnl0ZXMpIHRvIGBzdGFiLVx1MDAzZXN6b3B0cy5vdmVyaGVhZGAuIExldCdzIHNheSBgb3ZlcmhlYWRgIGlzIGEgbGFyZ2UgbnVtYmVyLCBzcGVjaWZpY2FsbHkgYDIxNDc0ODMwMDBgICh3aGljaCBpcyBgMHg3RkZGRkQ3OGApLiAgSW4gdGhpcyBzY2VuYXJpbywgYHBrdF9sZW5gIChhbiBgaW50YCkgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGAyMTQ3NDg0NTAwYCwgYSAqcG9zaXRpdmUqIG51bWJlciwgYW5kIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgcGFydC5cblxuVGhlIGNhbGN1bGF0aW9uIHByb2NlZWRzIHdpdGggYHNsb3QgPSBwa3RfbGVuICsgc3RhYi1cdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtgLiAgV2l0aCBgY2VsbF9hbGlnbmAgYXQgMCwgYHNsb3RgIGlzIGFsc28gYDIxNDc0ODQ1MDBgLiBUaGVuLCBgc2xvdGAgaXMgcmlnaHQtc2hpZnRlZCBieSBgY2VsbF9sb2dgLiAgSWYgYGNlbGxfbG9nYCBpcyAwLCBgc2xvdGAgcmVtYWlucyB1bmNoYW5nZWQuICBJZiBgdHNpemVgIGlzIDAsIHRoZSBjb2RlIGp1bXBzIHRvIGBvdXQ6YC5cblxuQXQgYG91dDpgLCBpZiBgcGt0X2xlbmAgaXMgbGVzcyB0aGFuIDEsIGl0J3Mgc2V0IHRvIDEuIEhvd2V2ZXIsIGluIG91ciBleGFtcGxlLCAgYHBrdF9sZW5gIGlzIGAyMTQ3NDg0NTAwYCwgc28gdGhpcyBjaGVjayBkb2Vzbid0IHRyaWdnZXIuIFRoZSBjcml0aWNhbCBsaW5lIGlzIHRoZW4gYHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO2AuICBUaGlzIHNldHMgdGhlIHBhY2tldCBsZW5ndGggaW4gdGhlIFNLQiBjb250cm9sIGJsb2NrIHRvIG91ciBsYXJnZSBwb3NpdGl2ZSBudW1iZXIsIGAyMTQ3NDg0NTAwYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBpbiBgZHJyX2RlcXVldWVgLCBpdCBmZXRjaGVzIHRoZSBwYWNrZXQgbGVuZ3RoIHVzaW5nIGBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7YC4gU28sIGBsZW5gIHdpbGwgYmUgYDIxNDc0ODQ1MDBgLiBUaGlzIHZhbHVlIGlzIHRoZW4gY29tcGFyZWQgdG8gYGNsLVx1MDAzZWRlZmljaXRgLiBOb3csIGBjbC1cdTAwM2VkZWZpY2l0YCBpcyBhIGB1MzJgLCBhbmQgaXMgdXN1YWxseSBhcm91bmQgYSBxdWFudHVtLCBsaWtlIDE1MDAgYnl0ZXMuIFRoaXMgbWVhbnMgb3VyIGNhbGN1bGF0ZWQgYGxlbmAgd2lsbCAqYWxtb3N0IGFsd2F5cyogYmUgbGFyZ2VyIHRoYW4gYGNsLVx1MDAzZWRlZmljaXRgLCBhbmQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnRseSBzby4gVGhlIGV4cHJlc3Npb24gYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgaW4gYWxtb3N0IGV2ZXJ5IGNhc2UuIFNvLCB0aGUgcGFja2V0IHdvbid0IGJlIGRlcXVldWVkLlxuXG5UaGlzIGlzIHdoZXJlIHRoaW5ncyBhcmUgdHJpY2t5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgaWYgaXQgbGVhZHMgdG8gdGhlIHF1ZXVlIGJlaW5nIGJsb2NrZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGxhcmdlIG92ZXJoZWFkIG1heSBiZSBjYXVzaW5nIHRoZSBxdWV1ZSB0byBzdGFydmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MTQuOTg3MDkxNDU1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoY2wtXFx1MDAzZWRlZmljaXQsIGNsLVxcdTAwM2VkZWZpY2l0IC0gbGVuKTtcXG4gMzkxOlxcdFxcdFxcdFxcdHNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDM5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM5NDpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdFxcdGJzdGF0c191cGRhdGUoXFx1MDAyNmNsLVxcdTAwM2Vic3RhdHMsIHNrYik7XFxuIDM5ODpcXHRcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gMzk5OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuIDQwMDpcXHRcXHRcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDAyOlxcdFxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlZGVmaWNpdCwgY2wtXFx1MDAzZWRlZmljaXQgKyBSRUFEX09OQ0UoY2wtXFx1MDAzZXF1YW50dW0pKTtcXG4gNDA1OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZjbC1cXHUwMDNlYWxpc3QsIFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUpO1xcbiA0MDY6XFx0XFx0fVxcbiA0MDc6XFx0b3V0OlxcbiA0MDg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQwOTpcXHR9XFxuIDQxMDpcXHRcXG4gNDExOlxcdHN0YXRpYyBpbnQgZHJyX2luaXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gNDEyOlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gNDE1OlxcdFxcdGludCBlcnI7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdGVyciA9IHRjZl9ibG9ja19nZXQoXFx1MDAyNnEtXFx1MDAzZWJsb2NrLCBcXHUwMDI2cS1cXHUwMDNlZmlsdGVyX2xpc3QsIHNjaCwgZXh0YWNrKTtcXG4gNDE4OlxcdFxcdGlmIChlcnIpXFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjA6XFx0XFx0ZXJyID0gcWRpc2NfY2xhc3NfaGFzaF9pbml0KFxcdTAwMjZxLVxcdTAwM2VjbGhhc2gpO1xcbiA0MjE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDQyMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0MjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSk7XFxuIDQyNDpcXHRcXHRyZXR1cm4gMDtcXG4gNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0c3RhdGljIHZvaWQgZHJyX3Jlc2V0X3FkaXNjKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiA0Mjg6XFx0e1xcbiA0Mjk6XFx0XFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MTQuOTg3MTc3NzU1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTcxODIzNTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRSUiBTY2hlZHVsaW5nIEJ1ZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRFJSIHNjaGVkdWxlciBjb2RlLCBhbmQgSSBzZWUgdGhpcyBsb29wIGNvbmRpdGlvbjogYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiBgbGVuYCAodGhlIHBhY2tldCBsZW5ndGgpIGlzIHNpZ25pZmljYW50bHkgbGFyZ2VyIHRoYW4gdGhlIGluaXRpYWwgYGNsLVx1MDAzZWRlZmljaXRgLCB0aGUgY29kZSBhZGRzIGBjbC1cdTAwM2VxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBtb3ZlcyB0aGUgY2xhc3MgdG8gdGhlIHRhaWwgb2YgdGhlIGFjdGl2ZSBxdWV1ZS4gU2VlbXMgcmVhc29uYWJsZSwgYnV0IGlmIHRoZXJlJ3Mgb25seSBvbmUgYWN0aXZlIGNsYXNzLCB0aGlzIGNvdWxkIGxvb3AgaW5kZWZpbml0ZWx5LlxuXG5UaGVuIHRoZSBhbGFybSBiZWxscyBzdGFydGVkIHJpbmdpbmchIEkgcmVhbGl6ZWQgYGNsLVx1MDAzZWRlZmljaXRgIGlzIGEgYHUzMmAuIE9rYXksIHNvIGl0IHdpbGwgb3ZlcmZsb3cuIEJ1dCB3aWxsIHRoYXQgKnNvbHZlKiB0aGUgcHJvYmxlbT8gSWYgYGxlbmAgaXMgYSBsYXJnZSBudW1iZXIsIGxpa2UgYDIxNDc0ODQ1MDBgLCB0aGUgbG9vcCB3aWxsIGl0ZXJhdGUgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgdGltZXMsIGxpa2UgMS40IG1pbGxpb24uIFRoYXQncyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBidXQgbm90IGFuICppbmZpbml0ZSogbG9vcCwgYmVjYXVzZSB0aGUgb3ZlcmZsb3cgd2lsbCBldmVudHVhbGx5IG1ha2UgdGhlIGBkZWZpY2l0YCBzbWFsbGVyIHRoYW4gYGxlbmAgYWdhaW4uICBUaGVuIEkgcmVtZW1iZXJlZCwgdGhpcyB3aG9sZSB0aGluZyBpcyBwcm90ZWN0ZWQgYnkgYSBzcGlubG9jayEgVGhlIGxvb3Agd291bGQgY29uc3VtZSBzaWduaWZpY2FudCBDUFUgdGltZSB3aGlsZSBpdCBpcyBydW5uaW5nLlxuXG5Pa2F5LCBsZXQncyBidW1wIGl0IHVwLiBXaGF0IGhhcHBlbnMgaWYgYGxlbmAgaXMgKnJlYWxseSogbGFyZ2UsIGxpa2UgY2xvc2UgdG8gdGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYDB4RkZGRkZGRkZgKT8gVGhlIGBkZWZpY2l0YCB3aWxsIHN0aWxsIG92ZXJmbG93LCBidXQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHdvdWxkIGJlIGV2ZW4gaGlnaGVyLCBwZXJoYXBzIGluIHRoZSBtaWxsaW9ucywgYnV0IHN0aWxsIG5vdCBpbmZpbml0ZS4gQnV0IHRoZW4gSSBzYXcgaXQhIElmIGBsZW5gIGlzIHZlcnkgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIGFuZCBgZGVmaWNpdGAgaW5jcmVhc2VzIGJ5IGBxdWFudHVtYCBlYWNoIHRpbWUsIGBkZWZpY2l0YCB3aWxsIE5FVkVSIHJlYWNoIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsZW5gIGJlZm9yZSBvdmVyZmxvd2luZy4gTW9yZSBwcmVjaXNlbHksIGZvciBgbGVuYCB0byBldmVudHVhbGx5IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYGRlZmljaXRgLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2R1bHVzIHdoZW4gZGl2aWRlZCBieSBgcXVhbnR1bWAhXG5cbklmIGBsZW5gIGlzIGAweEZGRkZGRkZGYCwgdGhlIGBkZWZpY2l0YCB3aWxsIHdyYXAgYXJvdW5kIGJlZm9yZSBpdCByZWFjaGVzIGAweEZGRkZGRkZGYCB1bmxlc3MgYGRlZmljaXRgIGlzIGV4YWN0bHkgYDB4RkZGRkZGRkZgISBJZiB0aGUgYHF1YW50dW1gIGlzLCBzYXksIDE1MDAsIGAweEZGRkZGRkZGICUgMTUwMCAhPSAwYCBzbyB0aGUgd3JhcCBhcm91bmQgaGFwcGVucy4gVGhhdCBtZWFucyB0aGlzIGxvb3AgKndpbGwqIHJ1biBmb3JldmVyISBUaGUgYGxlbiBcdTAwM2M9IGNsLVx1MDAzZWRlZmljaXRgIGNvbmRpdGlvbiB3aWxsIG5ldmVyIGJlIHRydWUsIGFuZCB0aGUgY29kZSB3aWxsIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiBgZHJyX2RlcXVldWVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjbC1cdTAwM2VkZWZpY2l0YCBpcywgaW4gZmFjdCwgYSBgdTMyYCwgYnV0IGlmIHRoYXQncyB0aGUgY2FzZSwgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc0OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDoyOS4xNTkwMDQ0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODA4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRycl9jbGFzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfZHJyLmMtMTctXFxubmV0L3NjaGVkL3NjaF9kcnIuYzoxODpzdHJ1Y3QgZHJyX2NsYXNzIHtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5LVxcdHN0cnVjdCBRZGlzY19jbGFzc19jb21tb25cXHRjb21tb247XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTMxPXN0cnVjdCBkcnJfc2NoZWQge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNy1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM4OnN0YXRpYyBib29sIGNsX2lzX2FjdGl2ZShzdHJ1Y3QgZHJyX2NsYXNzICpjbClcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDItXFxubmV0L3NjaGVkL3NjaF9kcnIuYzo0MzpzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2ZpbmRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy01MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjUxOlxcdHJldHVybiBjb250YWluZXJfb2YoY2xjLCBzdHJ1Y3QgZHJyX2NsYXNzLCBjb21tb24pO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNTItfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz01OD1zdGF0aWMgaW50IGRycl9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTYyLVxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9kcnIuYzo2MzpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopKmFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTY0LVxcdHN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTEwNS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjEwNjpcXHRjbCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkcnJfY2xhc3MpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTA3LVxcdGlmIChjbCA9PSBOVUxMKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNDItXFxubmV0L3NjaGVkL3NjaF9kcnIuYzoxNDM6c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBkcnJfY2xhc3MgKmNsKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMTQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MTUwPXN0YXRpYyBpbnQgZHJyX2RlbGV0ZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE1My1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTU0OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xNTUtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkcnJfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0xOTIte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MTkzOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gZHJyX2ZpbmRfY2xhc3Moc2NoLCBjbGFzc2lkKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTE5NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjAxPXN0YXRpYyB2b2lkIGRycl91bmJpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIwMi17XFxubmV0L3NjaGVkL3NjaF9kcnIuYzoyMDM6XFx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIwNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjA4PXN0YXRpYyBpbnQgZHJyX2dyYWZ0X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjExLXtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIxMjpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjEzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMjU9c3RhdGljIHN0cnVjdCBRZGlzYyAqZHJyX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI2LXtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjIyNzpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopYXJnO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjI4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0yMzI9c3RhdGljIHZvaWQgZHJyX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqY3NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzMy17XFxubmV0L3NjaGVkL3NjaF9kcnIuYzoyMzQ6XFx0c3RydWN0IGRycl9jbGFzcyAqY2wgPSAoc3RydWN0IGRycl9jbGFzcyAqKWFyZztcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTIzNS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjM5PXN0YXRpYyBpbnQgZHJyX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNDEte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjQyOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNDMtXFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM9MjYxPXN0YXRpYyBpbnQgZHJyX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjMte1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6MjY0OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsID0gKHN0cnVjdCBkcnJfY2xhc3MgKilhcmc7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yNjUtXFx0X191MzIgcWxlbiA9IHFkaXNjX3FsZW5fc3VtKGNsLVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTI4MT1zdGF0aWMgdm9pZCBkcnJfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yODMtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjI4NDpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTI4NS1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMjk3LVxcbm5ldC9zY2hlZC9zY2hfZHJyLmM6Mjk4OnN0YXRpYyBzdHJ1Y3QgZHJyX2NsYXNzICpkcnJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0yOTktXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zMDEtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjMwMjpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMwMy1cXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTMyNy0jZW5kaWZcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjMyODpcXHRcXHRjbCA9IChzdHJ1Y3QgZHJyX2NsYXNzICopcmVzLmNsYXNzO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzI5LVxcdFxcdGlmIChjbCA9PSBOVUxMKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz0zMzY9c3RhdGljIGludCBkcnJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzQwLVxcdHN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9kcnIuYzozNDE6XFx0c3RydWN0IGRycl9jbGFzcyAqY2w7XFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNDItXFx0aW50IGVyciA9IDA7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTM3MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRycl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zNzMtXFx0c3RydWN0IGRycl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM3NDpcXHRzdHJ1Y3QgZHJyX2NsYXNzICpjbDtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTM3NS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYy0zODAtXFx0d2hpbGUgKDEpIHtcXG5uZXQvc2NoZWQvc2NoX2Ryci5jOjM4MTpcXHRcXHRjbCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSwgc3RydWN0IGRycl9jbGFzcywgYWxpc3QpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtMzgyLVxcdFxcdHNrYiA9IGNsLVxcdTAwM2VxZGlzYy1cXHUwMDNlb3BzLVxcdTAwM2VwZWVrKGNsLVxcdTAwM2VxZGlzYyk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jPTQyNz1zdGF0aWMgdm9pZCBkcnJfcmVzZXRfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTQyOS1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDMwOlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDMxLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9kcnIuYz00NDI9c3RhdGljIHZvaWQgZHJyX2Rlc3Ryb3lfcWRpc2Moc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Ryci5jLTQ0NC1cXHRzdHJ1Y3QgZHJyX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmM6NDQ1OlxcdHN0cnVjdCBkcnJfY2xhc3MgKmNsO1xcbm5ldC9zY2hlZC9zY2hfZHJyLmMtNDQ2LVxcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDoyOS4yMDQ4ODc2NzRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NDM4NzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGRycl9jbGFzc2AgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHN0cnVjdCBkcnJfY2xhc3NgIGRlZmluaXRpb24uIEknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaXRzIG1lbWJlcnMuIEknbSBnb2luZyB0byB3YW50IHRvIGtub3cgdGhlIGZpZWxkcyB0aGF0IGNvbnRyb2wgdGhlIERSUiAoRGVmaWNpdCBSb3VuZCBSb2Jpbikgc2NoZWR1bGluZyBhbmQgd2hhdCBvdGhlciBkYXRhIGl0IG1pZ2h0IGNvbnRhaW4uIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LCBjcmVkaXQgYWxsb2NhdGlvbiwgYW55IHBlci1jbGFzcyBzdGF0ZSwgcGVyaGFwcyBzb21lIHRpbWVzdGFtcC1yZWxhdGVkIGVsZW1lbnRzLCBvciBhbnl0aGluZyB0aGF0J3MgaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBzY2hlZHVsaW5nIGRlY2lzaW9uLW1ha2luZy4gSSB3aWxsIGRlZmluaXRlbHkgbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbTsgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBxdWV1ZXMgb3IgZmxvdyBkZXNjcmlwdG9ycyB3aXRoaW4gdGhpcyBgZHJyX2NsYXNzYC4gSXQgaXMgdml0YWwgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBoYW5kbGUgdGhlIGRlZmljaXQgYW5kIGNyZWRpdC4gSSBhbHNvIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMsIGxpa2UgY2FjaGUtbGluZSBhbGlnbm1lbnQgb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDozNS42ODkyNzY4N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2Ryci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0c3RydWN0IGRycl9jbGFzcyB7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uXFx0Y29tbW9uO1xcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHRzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19zeW5jXFx0XFx0YnN0YXRzO1xcbiAgMjI6XFx0XFx0c3RydWN0IGduZXRfc3RhdHNfcXVldWVcXHRcXHRxc3RhdHM7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgbmV0X3JhdGVfZXN0aW1hdG9yIF9fcmN1ICpyYXRlX2VzdDtcXG4gIDI0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRhbGlzdDtcXG4gIDI1OlxcdFxcdHN0cnVjdCBRZGlzY1xcdFxcdFxcdCpxZGlzYztcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0dTMyXFx0XFx0XFx0XFx0cXVhbnR1bTtcXG4gIDI4OlxcdFxcdHUzMlxcdFxcdFxcdFxcdGRlZmljaXQ7XFxuICAyOTpcXHR9O1xcbiAgMzA6XFx0XFxuICAzMTpcXHRzdHJ1Y3QgZHJyX3NjaGVkIHtcXG4gIDMyOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRhY3RpdmU7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvIF9fcmN1XFx0XFx0KmZpbHRlcl9saXN0O1xcbiAgMzQ6XFx0XFx0c3RydWN0IHRjZl9ibG9ja1xcdFxcdCpibG9jaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6MzUuNjg5MzU1NjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2OTcxNDMzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNvZnQgTG9ja3VwIGluIERSUiBRdWV1ZWluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlZmljaXRgIHZhcmlhYmxlLCBhbmQgaXQncyBhIGB1MzJgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdyBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHF1ZXVlaW5nIGxvZ2ljLiBJZiBgbGVuYCAod2hpY2ggaXMgYWxzbyBhIGB1MzJgKSBpcyBhIGxhcmdlIHZhbHVlLCBsaWtlLCBzYXksIGAyMTQ3NDg0NTAwYCwgdGhlIGBkZWZpY2l0YCBpbmNyZW1lbnRzIGJ5IGBxdWFudHVtYCAobGV0J3Mgc2F5IDE1MDApIGVhY2ggdGltZS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCAqd2hlbiogd2lsbCBgZGVmaWNpdGAgYmVjb21lIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbGVuYD9cblxuSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGlzIHdvdWxkIGxlYWQgdG8gYW4gZXZlbnR1YWwgY29tcGFyaXNvbiB3aGVyZSBpdCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgbGVuYC4gSSBmaWd1cmVkIGl0IHdvdWxkIHJlYWNoIGAyMTQ3NDg0NTAwYCBvciBtb3JlLiBTaW5jZSBgbGVuYCBpcyBgMjE0NzQ4NDUwMGAsIGFuZCBgZGVmaWNpdGAgc3RhcnRzIGF0IGAxNTAwYCwgYWRkaW5nIGAxNTAwYCBpdCB3b3VsZCBldmVudHVhbGx5IGdldCB0aGVyZS4gYGRlZmljaXRgIHdvdWxkIHJlYWNoIGAyMTQ3NDg1NTAwYCwgd2hpY2ggKmlzKiBncmVhdGVyIHRoYW4gYGxlbmAsIHdoaWNoIGlzIGAyMTQ3NDg0NTAwYC4gU28gaXQgd2lsbCB0YWtlIGxpa2UgMS40IG1pbGxpb24gaXRlcmF0aW9ucy5cblxuU28sIGluIHRoYXQgY2FzZSwgdGhlIGNvbmRpdGlvbiBgbGVuIFx1MDAzYz0gY2wtXHUwMDNlZGVmaWNpdGAgKndvdWxkKiBldmVudHVhbGx5IGJlY29tZSB0cnVlLCB0aGUgZGVmaWNpdCB3b3VsZCBiZSB1cGRhdGVkLCBhbmQgdGhlIHBhY2tldCBkZXF1ZXVlZC4gTm90IGFuIGluZmluaXRlIGxvb3AsIGp1c3QgYSAqdmVyeSogbG9uZyBzdGFsbC5cblxuQnV0IHRoZW4gSSB0aG91Z2h0LCB3aGF0IGlmIGBsZW5gIGlzICpyZWFsbHkqIGJpZywgbGlrZSBgMHhGRkZGRkZGRmA/IFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJZiBgZGVmaWNpdGAgaXMsIHNheSwgYDB4RkZGRkZGMDBgIGFuZCB3ZSBhZGQgYDE1MDBgLCBpdCB3cmFwcyBhcm91bmQhIEl0IGJlY29tZXMgYDB4MDAwMDA0RENgLiBJdCB3aWxsICpuZXZlciogYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAweEZGRkZGRkZGYCwgdW5sZXNzIGl0IGhpdHMgaXQgKmV4YWN0bHkqLiBJZiBpdCBtaXNzZXMgYDB4RkZGRkZGRkZgLCBpdCB3cmFwcyBhcm91bmQsIGFuZCB3ZSBnZXQgYW4gaW5maW5pdGUgbG9vcCEgVGhhdCdzIGJhZC5cblxuSG93ZXZlciwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBgbGVuYCAqYWN0dWFsbHkqIGlzLiBJdCdzIGBza2ItXHUwMDNlbGVuICsgb3ZlcmhlYWRgLiBgc2tiLVx1MDAzZWxlbmAgaXMgdHlwaWNhbGx5IGFyb3VuZCAxNTAwLCBhbmQgYG92ZXJoZWFkYCBjYW4gYmUgdXAgdG8gYElOVF9NQVhgLiBTbyB0aGUgbWF4aW11bSBgbGVuYCBjb3VsZCBiZSBgMHg3RkZGRkZGRiArIDE1MDAgPSAweDgwMDAwNURDYC4gSG1tLCBzbyBpdCBjYW4ndCByZWFjaCBgMHhGRkZGRkZGRmA/IFdlbGwsIHRoZSBzaXplIG9mIGBza2ItXHUwMDNlbGVuYCBpcyBsaW1pdGVkIGJ5IE1UVSAoZS5nLiA2NEspLiBTbyBldmVuIHdpdGggdGhlIG1heCBvZiBgaW50YCwgYGxlbmAgaXMgYXQgbW9zdCBgMHg3RkZGRkZGRiArIDY1NTM1ID0gMHg4MDAwRkZGRmAuIFNvIHdlIGFyZSBsb29raW5nIGF0IHJvdWdobHkgMiAqIDEwXjkuIFRoaXMgbWVhbnMgaXQgd2lsbCB0YWtlIDEuNCAqIDEwXjYgaXRlcmF0aW9ucy4gVGhhdCdzIHN0aWxsIGEgc3RhbGwsIGJ1dCBub3QgYW4gaW5maW5pdGUgb25lLlxuXG5UaGVuIEkgaGFkIGFub3RoZXIgdGhvdWdodDogd2hhdCBpZiBgb3ZlcmhlYWRgIGlzIG5lZ2F0aXZlPyBgYWJzKHMtXHUwMDNlb3ZlcmhlYWQpIFx1MDAzZSBTVEFCX09WRVJIRUFEX01BWGAgY2hlY2tzIHRoYXQuIFRoaXMgbWVhbnMgYG92ZXJoZWFkYCBjYW4gYmUgYC0yMTQ3NDgzNjQ4YC4gSWYgd2UgYWRkIGAtMjE0NzQ4MzY0OGAgdG8gYHNrYi1cdTAwM2VsZW5gIHdoaWNoIGlzIDE1MDAsIHdlIGdldCBhIG5lZ2F0aXZlIHZhbHVlIVxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAsIHRoZSBgcGt0X2xlbmAgaXMgY2FsY3VsYXRlZCwgYW5kIHRoZW4gaWYgaXQgaXMgdW5saWtlbHkgdG8gYmUgbGVzcyB0aGFuIDEsIGBwa3RfbGVuID0gMWAuICpBaCEqIElmIGBsZW5gIGVuZHMgdXAgbmVnYXRpdmUsIGl0IGdldHMgY2xhbXBlZCB0byAxLiBXaGljaCBzaG91bGQgcHJldmVudCBhbiBpbmZpbml0ZSBsb29wISBPa2F5LCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0gaW4gYGRycl9kZXF1ZXVlYC5cblxuTm93LCBJIHNob3VsZCBjaGVjayB0aGUgYGV0c2AgcWRpc2MuLi4gbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZSBpbiBgbmV0L3NjaGVkL3NjaF9ldHMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NDQ6NTUuMzg2NTAxOTc4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2V0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRcXHRjbC1cXHUwMDNlZGVmaWNpdCArPSBSRUFEX09OQ0UoY2wtXFx1MDAzZXF1YW50dW0pO1xcbiA1MDE6XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCwgXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSk7XFxuIDUwMjpcXHRcXHR9XFxuIDUwMzpcXHRvdXQ6XFxuIDUwNDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTA1OlxcdH1cXG4gNTA2OlxcdFxcbiA1MDc6XFx0c3RhdGljIGludCBldHNfcWRpc2NfcHJpb21hcF9wYXJzZShzdHJ1Y3QgbmxhdHRyICpwcmlvbWFwX2F0dHIsXFxuIDUwODpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbmJhbmRzLCB1OCAqcHJpb21hcCxcXG4gNTA5OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTEwOlxcdHtcXG4gNTExOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuIDUxMjpcXHRcXHRpbnQgcHJpbyA9IDA7XFxuIDUxMzpcXHRcXHR1OCBiYW5kO1xcbiA1MTQ6XFx0XFx0aW50IHJlbTtcXG4gNTE1OlxcdFxcdGludCBlcnI7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGVyciA9IF9fbmxhX3ZhbGlkYXRlX25lc3RlZChwcmlvbWFwX2F0dHIsIFRDQV9FVFNfTUFYLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0ICAgIGV0c19wcmlvbWFwX3BvbGljeSwgTkxfVkFMSURBVEVfU1RSSUNULFxcbiA1MTk6XFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuIDUyMDpcXHRcXHRpZiAoZXJyKVxcbiA1MjE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBwcmlvbWFwX2F0dHIsIHJlbSkge1xcbiA1MjQ6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xcbiA1MjU6XFx0XFx0XFx0Y2FzZSBUQ0FfRVRTX1BSSU9NQVBfQkFORDpcXG4gNTI2OlxcdFxcdFxcdFxcdGlmIChwcmlvIFxcdTAwM2UgVENfUFJJT19NQVgpIHtcXG4gNTI3OlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJUb28gbWFueSBwcmlvcml0aWVzIGluIEVUUyBwcmlvbWFwXFxcIik7XFxuIDUyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI5OlxcdFxcdFxcdFxcdH1cXG4gNTMwOlxcdFxcdFxcdFxcdGJhbmQgPSBubGFfZ2V0X3U4KGF0dHIpO1xcbiA1MzE6XFx0XFx0XFx0XFx0aWYgKGJhbmQgXFx1MDAzZT0gbmJhbmRzKSB7XFxuIDUzMjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW52YWxpZCBiYW5kIG51bWJlciBpbiBFVFMgcHJpb21hcFxcXCIpO1xcbiA1MzM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNDpcXHRcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXHRcXHRcXHRwcmlvbWFwW3ByaW8rK10gPSBiYW5kO1xcbiA1MzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUzNzpcXHRcXHRcXHRkZWZhdWx0OlxcbiA1Mzg6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpOyAvKiBWYWxpZGF0ZSBzaG91bGQgaGF2ZSBjYXVnaHQgdGhpcy4gKi9cXG4gNTM5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NDA6XFx0XFx0XFx0fVxcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRyZXR1cm4gMDtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCBldHNfcWRpc2NfcXVhbnRhX3BhcnNlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpxdWFudGFfYXR0cixcXG4gNTQ3OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG5iYW5kcywgdW5zaWduZWQgaW50IG5zdHJpY3QsXFxuIDU0ODpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCAqcXVhbnRhLFxcbiA1NDk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQ0OjU1LjM4NjYwNjMyOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU5OTA3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSoqXG5cbk9rYXksIHNvIEknbSBoaXR0aW5nIGEgc25hZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIHNoYXBpbmcgYW5kIHF1ZXVlIG1hbmFnZW1lbnQuIFRoZSBpc3N1ZSBsaWtlbHkgbGllcyBzb21ld2hlcmUgd2l0aGluIHRoZSBkZXF1ZXVlIHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBwdWxsaW5nIHBhY2tldHMgb2ZmIHRoZSBFVFMgKEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uKSBxdWV1ZS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgSSBzaG91bGQgc3RhcnQgYnkgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBgZXRzX3FkaXNjX2RlcXVldWVgLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgaWYgdGhlIG5hbWluZyBjb252ZW50aW9ucyBoYXZlIGV2b2x2ZWQgc2luY2UgbXkgbGFzdCBkZWVwIGRpdmUuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGp1bmN0dXJlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJvb3QgY2F1c2UsIG9yIGF0IGxlYXN0IGEgcGF0aHdheSB0byBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjQ0OjU5LjE0NjUxNzEzMVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9ldHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0cWRpc2NfcWxlbl9pbmMoc2NoKTtcXG4gNDUxOlxcdFxcdHJldHVybiBlcnI7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIDQ1NTpcXHRldHNfcWRpc2NfZGVxdWV1ZV9za2Ioc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQ1NjpcXHR7XFxuIDQ1NzpcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gNDU4OlxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuIDQ1OTpcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbiA0NjA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDYxOlxcdH1cXG4gNDYyOlxcdFxcbiA0NjM6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpldHNfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gNDY0OlxcdHtcXG4gNDY1OlxcdFxcdHN0cnVjdCBldHNfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDQ2NjpcXHRcXHRzdHJ1Y3QgZXRzX2NsYXNzICpjbDtcXG4gNDY3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ2ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmFuZDtcXG4gNDY5OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDQ3MjpcXHRcXHRcXHRmb3IgKGJhbmQgPSAwOyBiYW5kIFxcdTAwM2MgcS1cXHUwMDNlbnN0cmljdDsgYmFuZCsrKSB7XFxuIDQ3MzpcXHRcXHRcXHRcXHRjbCA9IFxcdTAwMjZxLVxcdTAwM2VjbGFzc2VzW2JhbmRdO1xcbiA0NzQ6XFx0XFx0XFx0XFx0c2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtXFx1MDAzZXFkaXNjKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGlmIChza2IpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXRzX3FkaXNjX2RlcXVldWVfc2tiKHNjaCwgc2tiKTtcXG4gNDc3OlxcdFxcdFxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnEtXFx1MDAzZWFjdGl2ZSkpXFxuIDQ4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0XFx0XFx0Y2wgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZxLVxcdTAwM2VhY3RpdmUsIHN0cnVjdCBldHNfY2xhc3MsIGFsaXN0KTtcXG4gNDgzOlxcdFxcdFxcdHNrYiA9IGNsLVxcdTAwM2VxZGlzYy1cXHUwMDNlb3BzLVxcdTAwM2VwZWVrKGNsLVxcdTAwM2VxZGlzYyk7XFxuIDQ4NDpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiA0ODU6XFx0XFx0XFx0XFx0cWRpc2Nfd2Fybl9ub253YyhfX2Z1bmNfXywgY2wtXFx1MDAzZXFkaXNjKTtcXG4gNDg2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0ODc6XFx0XFx0XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRcXHRsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuIDQ5MDpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2M9IGNsLVxcdTAwM2VkZWZpY2l0KSB7XFxuIDQ5MTpcXHRcXHRcXHRcXHRjbC1cXHUwMDNlZGVmaWNpdCAtPSBsZW47XFxuIDQ5MjpcXHRcXHRcXHRcXHRza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC1cXHUwMDNlcWRpc2MpO1xcbiA0OTM6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA0OTQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5NTpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VxLnFsZW4gPT0gMClcXG4gNDk2OlxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNsLVxcdTAwM2VhbGlzdCk7XFxuIDQ5NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXRzX3FkaXNjX2RlcXVldWVfc2tiKHNjaCwgc2tiKTtcXG4gNDk4OlxcdFxcdFxcdH1cXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NDo1OS4xNDY2Njc5OFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5MjY0NTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRFJSL0VUUyBRZGlzYyBTb2Z0IExvY2t1cCBCdWcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0J3MgY2xlYXIgdGhlIHJvb3QgY2F1c2UgaXMgcmlnaHQgaGVyZTogYGV0c19xZGlzY19kZXF1ZXVlYCAoYW5kIGBkcnJfZGVxdWV1ZWAsIHNpbmNlIGl0IHNoYXJlcyB0aGUgbG9naWMpIHVzZXMgdGhlIHNhbWUgcGF0dGVybi4gVGhlIGNydWNpYWwgY29kZSBzbmlwcGV0IHdpdGggYHFkaXNjX3BrdF9sZW4oc2tiKWAgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGFuIG92ZXJseSBsYXJnZSBgb3ZlcmhlYWRgIHZhbHVlIGluZmxhdGluZyBgbGVuYC4gVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgbGVuIFx1MDAzYz0gY2wtXHUwMDNlZGVmaWNpdGAgaXMgYWx3YXlzIGZhbHNlLCBjYXVzaW5nIHRoZSB3aGlsZSBsb29wIHRvIHNwaW4gaW5kZWZpbml0ZWx5LiBUaGUgbGFyZ2UgYG92ZXJoZWFkYCBjYXVzZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBwa3RfbGVuYC4gVGhpcyBtZWFucyB0aGUgY2xhc3MncyBkZWZpY2l0IG11c3QgZ3JvdyBpbW1lbnNlbHksIGFkZGluZyB0aGUgcXVhbnR1bSBlYWNoIHRpbWUsIGxlYWRpbmcgdG8gYSBsb25nIGxvb3AuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGUgbGFyZ2UgYHBrdF9sZW5gIHN0ZW1zIGZyb20gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIExvb2tpbmcgYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB0aGUgYG92ZXJoZWFkYCB2YWx1ZSBpcyBhZGRlZCB0byBgc2tiLVx1MDAzZWxlbmAuIEZ1cnRoZXIgY2FsY3VsYXRpb24gb2YgdGhlIGBzbG90YCBpcyBkb25lIGFuZCBpdCBzZWVtcyB0byBpbmRleCB0aGUgYHN0YWItXHUwMDNlZGF0YWAuIEhvd2V2ZXIsIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYHNsb3RgIHVzaW5nIGEgbW9kdWxvIG9wZXJhdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGBzdGFiLVx1MDAzZWRhdGFgIGFycmF5IGFjY2VzcyBpcyBhbHdheXMgd2l0aGluIGJvdW5kcy4gVGhlIGBzdGFiLVx1MDAzZWRhdGFgIGFycmF5IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBzdGFiYCBjcmVhdGlvbiB3aXRoIHVzZXIgc3BhY2UgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhlcmUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGBzdGFiLVx1MDAzZWRhdGFgIHVzaW5nIHVzZXIgc3BhY2UgYHRhYmAsIHNvIG5vIGNvbmNlcm4gdGhlcmUuXG5cbkxldCdzIHF1aWNrbHkgc2NhbiBvdGhlciB1c2VzIG9mIGBvdmVyaGVhZGAuIGBzY2hfY2FrZS5jYCBhbmQgYHNjaF90YmYuY2AganVzdCBhZGp1c3QgdGhlIHBhY2tldCBsZW5ndGgsIHNvIHRoZXkgZG9uJ3Qgc2VlbSBsaWtlIHJlbGV2YW50IGFyZWFzLlxuXG5JbiBzdW1tYXJ5LCB0aGUgYnVnIGlzIGEgQ1BVIHN0YWxsIG9yIHNvZnQgbG9ja3VwIGluIGBkcnJgIGFuZCBgZXRzYCBxZGlzY3MuIFRoaXMgaXMgZHVlIHRvIGEgdmVyeSBsYXJnZSBgcGt0X2xlbmAsIHJlc3VsdGluZyBmcm9tIGEgYmlnIGBvdmVyaGVhZGAgdmFsdWUsIHdoaWNoIG1ha2VzIHRoZSBkZWZpY2l0IHJvdW5kLXJvYmluIGxvZ2ljIGxvb3AgZXhjZXNzaXZlbHkuIFRoaXMgaXMgZWFzaWx5IGNhdWdodCBieSBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uLCBhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIHNlbGZ0ZXN0cyBhbmQgc3l6a2FsbGVyJ3MgZmluZGluZ3MuIFRoZSB2dWxuZXJhYmlsaXR5IGRvZXNuJ3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluZm8tbGVha3MsIGJ1dCBhIGxvZ2ljIGVycm9yLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhIHB1cmVseSBsb2dpYy1iYXNlZCBEb1MgdnVsbmVyYWJpbGl0eSB0aGF0IGNhbiBiZSBjYXVnaHQgdGhyb3VnaCBleGlzdGluZyBmdXp6aW5nIGFuZCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBzeXprYWxsZXIpLCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgaGVyZS4gVGhlIGFkZGVkIHBhdGNoLCB0aGF0IGxpbWl0cyBgb3ZlcmhlYWRgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAsIGlzIGEgZ29vZCBtaXRpZ2F0aW9uIHRvIHRoZSBEb1MuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRpbmcgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTQ1LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo0NToxNy42MzkzMTgyNjZaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgYG92ZXJoZWFkYCBwYXJhbWV0ZXIgaW4gYHFkaXNjX2dldF9zdGFiKClgIHRvIGBTVEFCX09WRVJIRUFEX01BWGAgKDY1NTM1KS4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIG1hbGljaW91c2x5IGxhcmdlIGBvdmVyaGVhZGAgdmFsdWUgKGUuZy4sIGAyMTQ3NDgzMDAwYCBhcyBzaG93biBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzKSBjYXVzZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWAgdG8gY29tcHV0ZSBhbiBhcnRpZmljaWFsbHkgaHVnZSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApLiBcXG5cXG5JbiBxZGlzY3MgdGhhdCB1c2UgZGVmaWNpdCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLCBzdWNoIGFzIERSUiAoYGRycl9kZXF1ZXVlYCkgYW5kIEVUUyAoYGV0c19xZGlzY19kZXF1ZXVlYCksIHRoZSBkZXF1ZXVlIGxvZ2ljIGNoZWNrcyBpZiB0aGUgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGNsYXNzJ3MgYGRlZmljaXRgLiBJZiBpdCBpcyBub3QsIHRoZSBjb2RlIGFkZHMgYSBgcXVhbnR1bWAgdG8gdGhlIGBkZWZpY2l0YCBhbmQgbG9vcHMuIFdpdGggYSBodWdlIGBwa3RfbGVuYCwgdGhpcyBgd2hpbGUgKDEpYCBsb29wIGV4ZWN1dGVzIG1pbGxpb25zIG9mIHRpbWVzIGJlZm9yZSB0aGUgYGRlZmljaXRgIGdyb3dzIGxhcmdlIGVub3VnaCwgcmVzdWx0aW5nIGluIGEgQ1BVIHN0YWxsIC8gc29mdCBsb2NrdXAgKERlbmlhbCBvZiBTZXJ2aWNlKS5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgbGVhZGluZyB0byBhbiBpbmZpbml0ZS9wcm9sb25nZWQgbG9vcC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkLiBBbnkgYXJyYXkgaW5kZXhpbmcgYmFzZWQgb24gdGhlIGluZmxhdGVkIGxlbmd0aCAoZS5nLiwgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oKWApIGlzIHNhZmVseSBib3VuZGVkIHVzaW5nIG1vZHVsbyBhcml0aG1ldGljIChgc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZWApLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggc29mdCBsb2NrdXAgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBpc3N1ZSwgYW5kIEtNU0FOIHdvdWxkIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsIGJlbmVmaXQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBgb3ZlcmhlYWRgIHBhcmFtZXRlciBpbiBgcWRpc2NfZ2V0X3N0YWIoKWAgdG8gYFNUQUJfT1ZFUkhFQURfTUFYYCAoNjU1MzUpLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgbWFsaWNpb3VzbHkgbGFyZ2UgYG92ZXJoZWFkYCB2YWx1ZSAoZS5nLiwgYDIxNDc0ODMwMDBgIGFzIHNob3duIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMpIGNhdXNlcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCB0byBjb21wdXRlIGFuIGFydGlmaWNpYWxseSBodWdlIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkuIFxcblxcbkluIHFkaXNjcyB0aGF0IHVzZSBkZWZpY2l0IHJvdW5kLXJvYmluIHNjaGVkdWxpbmcsIHN1Y2ggYXMgRFJSIChgZHJyX2RlcXVldWVgKSBhbmQgRVRTIChgZXRzX3FkaXNjX2RlcXVldWVgKSwgdGhlIGRlcXVldWUgbG9naWMgY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY2xhc3MncyBgZGVmaWNpdGAuIElmIGl0IGlzIG5vdCwgdGhlIGNvZGUgYWRkcyBhIGBxdWFudHVtYCB0byB0aGUgYGRlZmljaXRgIGFuZCBsb29wcy4gV2l0aCBhIGh1Z2UgYHBrdF9sZW5gLCB0aGlzIGB3aGlsZSAoMSlgIGxvb3AgZXhlY3V0ZXMgbWlsbGlvbnMgb2YgdGltZXMgYmVmb3JlIHRoZSBgZGVmaWNpdGAgZ3Jvd3MgbGFyZ2UgZW5vdWdoLCByZXN1bHRpbmcgaW4gYSBDUFUgc3RhbGwgLyBzb2Z0IGxvY2t1cCAoRGVuaWFsIG9mIFNlcnZpY2UpLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyBsZWFkaW5nIHRvIGFuIGluZmluaXRlL3Byb2xvbmdlZCBsb29wLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQuIEFueSBhcnJheSBpbmRleGluZyBiYXNlZCBvbiB0aGUgaW5mbGF0ZWQgbGVuZ3RoIChlLmcuLCBpbiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbigpYCkgaXMgc2FmZWx5IGJvdW5kZWQgdXNpbmcgbW9kdWxvIGFyaXRobWV0aWMgKGBzbG90ICUgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplYCkuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBzb2Z0IGxvY2t1cCBkZXRlY3Rpb24gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGlzIGlzc3VlLCBhbmQgS01TQU4gd291bGQgbm90IHByb3ZpZGUgYW55IGFkZGl0aW9uYWwgYmVuZWZpdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[1] Phase: Succeeded StartedAt: 2026-08-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 12:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 12:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2] Phase: Succeeded StartedAt: 2026-08-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 12:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:28 +0000 UTC FinishedAt: 2026-08-18 12:45:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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-workflowldphp/series-workflowldphp-convert-artifact-880704713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:39 +0000 UTC FinishedAt: 2026-08-18 13:02:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:39 +0000 UTC FinishedAt: 2026-08-18 13:02:14 +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:*ba27b305-f2fa-45c0-af07-b3f8b3bd3de5,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-workflowldphp/series-workflowldphp-convert-artifact-880704713/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": "28b4952f-4530-4afb-8576-2a1177c0ec7b", "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-workflowldphp/series-workflowldphp-build-action-2474638247/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 12:45:39 +0000 UTC FinishedAt: 2026-08-18 13:02:04 +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:*ba27b305-f2fa-45c0-af07-b3f8b3bd3de5,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-workflowldphp/series-workflowldphp-convert-artifact-880704713/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": "28b4952f-4530-4afb-8576-2a1177c0ec7b", "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-workflowldphp/series-workflowldphp-build-action-2474638247/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:14 +0000 UTC FinishedAt: 2026-08-18 13:02:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:14 +0000 UTC FinishedAt: 2026-08-18 13:02:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:14 +0000 UTC FinishedAt: 2026-08-18 13:02:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:14 +0000 UTC FinishedAt: 2026-08-18 13:02:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-workflowldphp/series-workflowldphp-convert-artifact-4112782812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:25 +0000 UTC FinishedAt: 2026-08-18 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:02:25 +0000 UTC FinishedAt: 2026-08-18 13:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28b4952f-4530-4afb-8576-2a1177c0ec7b,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-workflowldphp/series-workflowldphp-build-action-2474638247/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-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:04:20 +0000 UTC FinishedAt: 2026-08-18 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:04:20 +0000 UTC FinishedAt: 2026-08-18 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:04:20 +0000 UTC FinishedAt: 2026-08-18 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:04:20 +0000 UTC FinishedAt: 2026-08-18 13:21:21 +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:*ba27b305-f2fa-45c0-af07-b3f8b3bd3de5,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-workflowldphp/series-workflowldphp-convert-artifact-4112782812/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": "264a10e3-907d-4dd2-b19f-c74f69897cc4", "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-workflowldphp/series-workflowldphp-build-action-130734648/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:04:20 +0000 UTC FinishedAt: 2026-08-18 13:21:11 +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:*ba27b305-f2fa-45c0-af07-b3f8b3bd3de5,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-workflowldphp/series-workflowldphp-convert-artifact-4112782812/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": "264a10e3-907d-4dd2-b19f-c74f69897cc4", "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-workflowldphp/series-workflowldphp-build-action-130734648/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:21:21 +0000 UTC FinishedAt: 2026-08-18 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:21:21 +0000 UTC FinishedAt: 2026-08-18 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:21:21 +0000 UTC FinishedAt: 2026-08-18 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:21:21 +0000 UTC FinishedAt: 2026-08-18 13:23:26 +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:*264a10e3-907d-4dd2-b19f-c74f69897cc4,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-workflowldphp/series-workflowldphp-build-action-130734648/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-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +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":["tc_modify_qdisc"],"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:*28b4952f-4530-4afb-8576-2a1177c0ec7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*264a10e3-907d-4dd2-b19f-c74f69897cc4,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-workflowldphp/series-workflowldphp-build-action-2474638247/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-workflowldphp/series-workflowldphp-build-action-130734648/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 13:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 13:23:40 +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":["tc_modify_qdisc"],"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-workflowldphp/series-workflowldphp-convert-artifact-3295708069/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:35 +0000 UTC FinishedAt: 2026-08-18 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:45 +0000 UTC FinishedAt: 2026-08-18 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldphp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"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":["tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"9890a91d-273a-487b-8a48-879ba5410f64","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-18 13:23:45 +0000 UTC FinishedAt: 2026-08-18 16:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*28b4952f-4530-4afb-8576-2a1177c0ec7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*264a10e3-907d-4dd2-b19f-c74f69897cc4,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-workflowldphp/series-workflowldphp-build-action-2474638247/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-workflowldphp/series-workflowldphp-build-action-130734648/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-workflowldphp/series-workflowldphp-convert-artifact-3295708069/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,}